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

C++ 从管理员帐户模拟系统(或等效系统),c++,windows,impersonation,privileges,C++,Windows,Impersonation,Privileges,这个问题是关于我目前正在处理的特权问题的后续和延续 问题摘要: 我正在域管理员帐户下运行一个程序,该帐户没有调试程序(SeDebugPrivilege)权限,但我需要在本地计算机上运行它 Klugey解决方案: 该程序可以将自身作为服务安装在本地计算机上,然后启动该服务。所述服务现在在系统帐户下运行,这使我们能够使用SeTCBPrivilege特权创建一个新的访问令牌,该令牌具有SeDebugPrivilege。然后,我们可以使用新创建的令牌以提升的权限重新启动初始程序 我个人不喜欢这个解

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



问题摘要:
我正在域管理员帐户下运行一个程序,该帐户没有调试程序(SeDebugPrivilege)权限,但我需要在本地计算机上运行它


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


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

我希望有一个解决方案,最大限度地减少系统修改,最好是在运行中完成(即:不需要重新启动本身)。我尝试以
SYSTEM
身份
LogonUser
并尝试在已知系统进程(如csrss.exe)上
OpenProcessToken
(失败的原因是,您无法使用
process\u QUERY\u INFORMATION
获取进程句柄,而无需我尝试获取的权限)

我正绞尽脑汁试图想出解决这个问题的另一个办法。我希望有一种简单的方法可以在主机上获取特权令牌,并为这个程序模拟它,但我还没有找到一种方法




如果有人知道解决这个问题的方法,或者对可能有效的事情有建议,请让我知道。我真的很感谢你的帮助,谢谢

根据设计,不允许任何进程实现NT AUTHORITY\SYSTEM权限,除非它是由另一个具有NT AUTHORITY\SYSTEM权限的进程启动的。服务是一种变通方法,因为服务控制管理器本身是由内核在系统启动时启动的

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

更好的是,让要修改内存的程序更改DACL,以允许管理员无需SeDebugPrivilege即可访问其内存。那么你根本不需要获得特权


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

我在写这篇文章时预测,默认答案是“如果没有特权,你就不应该这样做”。我想这是有道理的,我只是希望管理员的其他权限中有一个漏洞,允许一个人获得批准的特权令牌。不幸的是,由于该程序的性质,该程序与我需要访问的其他正在运行的进程之间没有相互合作。该计划需要独立且全能:(安全策略的全部要点是设置谁可以执行哪些操作。如果存在漏洞,那么安全策略将一文不值。让他们修改他们的安全策略不是短期解决方案吗?长期而言,你应该将应用程序分为服务和用户模式组件。事实上,我完全没有首先,了解他们的策略为何采用这种结构(默认情况下,管理员会启用调试程序,因此一些天才有意将其删除).不幸的是,策略野兽是我几乎肯定无法杀死的。然而,在这种情况下,应用程序实际上没有服务部分。这只是一种“黑客”类型,我知道可以使用它来允许程序以完全调试权限重新启动自己,尽管它可能很聪明,但我不认为它是一个非常干净的长程序rm解决方案:(不确定此线程是否仍处于活动状态…但我可能有一些相关的参考资料,您可能会发现这些参考资料对您有所帮助。不确定,因为您上面的一些陈述表明您不喜欢基于服务的“黑客”。您可能会在以下链接的文章中找到一些想法:它有点过时,但其中提出的想法和概念值得一看我想给你一些想法或方法来解决你的困境。希望这对你有所帮助。