5

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



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


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


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

我希望有一种解决方案可以最大限度地减少系统修改,并且最好可以即时完成(即:不需要重新启动自身)。我尝试在LogonUser已知的 SYSTEM 进程(例如 csrss.exe)上尝试SYSTEM并尝试失败,但失败了,因为如果没有我试图获取的权限,您无法获得该进程的句柄)。OpenProcessTokenOpenProcessPROCESS_QUERY_INFORMATION

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



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

4

1 回答 1

6

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

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

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

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

于 2010-06-07T18:54:20.597 回答