我正在尝试使用 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命令作为系统执行?
?