【发布时间】:2011-02-28 20:03:09
【问题描述】:
这个问题是 this question 关于我目前正在处理的一个特权问题的后续和延续。
问题总结:
我在没有Debug programs (SeDebugPrivilege) 权限的域管理员帐户下运行程序,但我需要在本地计算机上使用它。
Klugey 解决方案:
该程序可以将自己作为服务安装在本地机器上,并启动该服务。所述服务现在在SYSTEM 帐户下运行,这使我们能够使用我们的SeTCBPrivilege 权限来创建一个具有SeDebugPrivilege 的新访问令牌。然后我们可以使用新创建的令牌重新启动具有提升权限的初始程序。
我个人不喜欢这个解决方案。我觉得应该可以作为管理员获得必要的权限而不必进行系统修改,例如安装服务(即使它只是临时的)。
我希望有一种解决方案可以最大限度地减少系统修改,并且最好可以即时完成(即:不需要重新启动自身)。我尝试将LogonUser 设置为SYSTEM 并尝试在已知的系统进程(例如csrss.exe)上使用OpenProcessToken 失败,因为您不能使用OpenProcess 和PROCESS_QUERY_INFORMATION 来处理没有我想要获得的权限的进程)。
我只是想出一个替代解决方案来解决这个问题。我希望有一种简单的方法可以在主机上获取特权令牌并为该程序模拟它,但我还没有找到方法。
如果有人知道解决此问题的方法,或者甚至对可能可行的事情提出建议,请告诉我。非常感谢您的帮助,谢谢!
【问题讨论】:
-
安全策略的重点是设置谁可以执行什么操作。如果存在漏洞,那么安全策略将一文不值。让他们修改安全策略不是短期解决方案吗?从长远来看,您应该将应用程序分成服务和用户模式组件。
-
事实是,我完全不知道为什么他们的政策首先是这样的结构(调试程序默认为管理员启用,所以一些天才故意将其删除)。不幸的是,我几乎可以肯定无法杀死这只政策野兽。但是,在这种情况下,应用程序实际上没有服务部分。这只是我知道的一种“黑客”,可用于允许程序以完全调试权限重新启动自身,尽管它可能很聪明,但我不认为它是一个非常干净的长期解决方案:(
-
不确定这个线程是否仍然有效...但我可能有一些相关的参考资料,您可能会觉得有帮助。不确定,因为您上面的一些陈述表明您不喜欢基于服务的“黑客”。您可能会在以下链接的文章中找到一些想法:alex-ionescu.com/recon2k6.pdf 它有点过时,但其中提出的想法和概念值得一看,也许会给您一些想法或解决困境的方法。希望这会有所帮助。
标签: c++ windows impersonation privileges