从pipe理员帐户中模拟SYSTEM(或同等)

这个问题是关于我正在处理的特权问题的跟进和延续。

问题摘要:
我正在一个没有Debug programs (SeDebugPrivilege)权限的域pipe理员帐户下运行程序,但我需要在本地机器上。

Klugey解决scheme:
该程序可以将其自身作为服务安装在本地计算机上,并启动该服务。 所述服务现在在SYSTEM帐户下运行,这使得我们能够使用我们的SeTCBPrivilege特权来创build具有SeDebugPrivilege的新的访问令牌。 然后,我们可以使用新创build的令牌重新启动具有提升权限的初始程序。

我个人不喜欢这个解决scheme。 我觉得应该可以以pipe理员的身份获得必要的权限, 不必像安装服务那样进行系统修改(即使只是临时的)。

我希望有一个解决scheme,最大限度地减less系统修改,可以优先在飞行中(即:不需要重新启动本身)。 我没有成功尝试LogonUser作为SYSTEM并尝试OpenProcessToken在已知的系统进程(如csrss.exe)(这失败了,因为你不能使用PROCESS_QUERY_INFORMATION OpenProcess来获得PROCESS_QUERY_INFORMATION的句柄没有我试图获得的权限)。

我只是在智慧的结尾,试图想出一个解决这个问题的替代scheme。 我希望有一个简单的方法来获取主机上的特权令牌,并为此程序假冒它,但是我还没有find办法。

如果有人知道解决这个问题的方法,或者甚至对可能有用的东西有所build议,请告诉我。 我非常感谢帮助,谢谢!

通过设计,任何进程都不能获得NT AUTHORITY \ SYSTEM权限,除非它是由具有NT AUTHORITY \ SYSTEM权限的另一个进程启动的。 该服务是一种解决方法,因为服务控制管理器本身是在系统启动时由内核启动的。

不幸的是,操作系统的设计是为了防止你正在尝试做什么。 如果您希望能够随后删除您的服务,只需向本地计算机授予SeDebugPrivilege用户权限,然后再自行卸载该服务。

更好的是,要修改其内存的程序将更改DACL以允许管理员在没有SeDebugPrivilege的情况下访问其内存。 那么你根本就不需要特权。

编辑2:甚至更好,只是使用共享内存摆在首位。 这就是它的目的。