从管理员帐户模拟系统(或等效)

Kev*_*enK 5 c++ windows privileges impersonation

这个问题是关于我目前正在处理的权限问题的这个问题的后续和延续。



问题摘要:
我在没有Debug programs (SeDebugPrivilege)权限的域管理员帐户下运行程序,但我需要在本地计算机上使用它。


Klugey 解决方案:
该程序可以将自己安装为本地机器上的服务,并启动该服务。所述服务现在在该SYSTEM帐户下运行,这使我们能够使用我们的SeTCBPrivilege特权创建一个新的访问令牌,该令牌具有SeDebugPrivilege. 然后我们可以使用新创建的令牌重新启动具有提升权限的初始程序。


我个人不喜欢这个解决方案。我觉得应该可以以管理员身份获得必要的权限,而无需进行系统修改,例如安装服务(即使只是暂时的)。

我希望有一种解决方案可以最大限度地减少系统修改,并且最好可以即时完成(即:不需要自行重新启动)。我曾经失败尝试LogonUser的SYSTEM,并试图OpenProcessToken在已知的系统进程(如CSRSS.EXE)(其失败,因为你不能OpenProcess用PROCESS_QUERY_INFORMATION得到的句柄过程中没有特权,我试图获取)。

我只是在我的智慧尽头试图想出一个替代解决方案来解决这个问题。我希望有一种简单的方法可以在主机上获取特权令牌并为该程序模拟它,但我还没有找到方法。



如果有人知道解决这个问题的方法,或者甚至对可能有效的事情有建议,请告诉我。我非常感谢您的帮助,谢谢!

Bil*_*eal 6

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

不幸的是,操作系统旨在阻止您尝试执行的操作。如果您希望之后能够删除您的服务,只需为本地计算机授予有问题的用户 SeDebugPrivilege,然后让服务自行卸载。

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

EDIT2:更好的是,首先只使用共享内存。这就是它的用途。