在使用getsystem的技术1:服务-命名管道模拟

我正在尝试使用 getsystem的技术1:Service - Named Pipe Impersonation (In Memory/Admin)模拟该帐户(NT AUTHORITY \ System)的安全上下文之后,Meterpreter如何将cmd命令作为系统执行。 / p>

为此,我编写了一个小的C#代码,该代码创建了一个命名管道A,生成了一个以系统身份运行的新服务B,然后强制该服务B在A上写入一些数据,这使我可以通过client impersonation funcionality for named pipes

现在,模拟完成后,我要做的是一个过程,该过程的 primary令牌指向本地管理员用户(正在运行c#代码的用户,假设它是用户 Administrator ),并且该过程的一个线程带有指向系统帐户的模拟令牌。由模拟系统的线程执行的活动显然是在模拟帐户的安全性上下文下运行的,但是,如果我想执行cmd命令(例如,像whoami这样的琐碎命令),则需要产生一个新进程以运行cmd.exe。那时,新进程的主要令牌是我初始进程的主要令牌,而不是线程模拟系统中的模拟令牌,因此命令whoami的输出是 Administrator 而不是系统

我猜想Meterpreter没有使用CreateProcessAsUser,因为A)它仅具有模拟令牌,而没有主令牌(有任何方法可以将模拟令牌转换为主令牌),以及B)一些特殊特权是才能使用该功能。尽管我已经能够通过Meterpreter使用此技术来提升我的权限,但我已经检查了计算机的用户均未授予该特权。

所以这引出了我的主要问题:在使用getsystem的技术1之后,Meterpreter如何将cmd命令作为系统执行?

yyfyxzt 回答:在使用getsystem的技术1:服务-命名管道模拟

经过一些(更多)研究之后,我想我得到了这个问题的答案。

尽管您需要 SE_INCREASE_QUOTA_NAME SE_ASSIGNPRIMARYTOKEN_NAME 才能使用CreateProcessAsUser(而且我的用户都没有授予该特权),但是您可以使用功能CreateProcessWithTokenW仅需要 SE_IMPERSONATE_NAME 。我猜想Meterpreter正在使用这一功能,因为实际上这是我的一些用户已授予的特权,并且似乎限制较少。我已经能够通过C#使用此API调用来重现getsystem行为。

另一方面,您可以使用DuplicateToken函数将模拟令牌转换为主要令牌(也可以在另一个方向上使用)。

本文链接:https://www.f2er.com/2857123.html

大家都在问