【问题标题】:Impersonate SYSTEM (or equivalent) from Administrator Account从管理员帐户模拟 SYSTEM(或等效)
【发布时间】:2011-02-28 20:03:09
【问题描述】:

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



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


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


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

我希望有一种解决方案可以最大限度地减少系统修改,并且最好可以即时完成(即:不需要重新启动自身)。我尝试将LogonUser 设置为SYSTEM 并尝试在已知的系统进程(例如csrss.exe)上使用OpenProcessToken 失败,因为您不能使用OpenProcessPROCESS_QUERY_INFORMATION 来处理没有我想要获得的权限的进程)。

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



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

【问题讨论】:

  • 安全策略的重点是设置谁可以执行什么操作。如果存在漏洞,那么安全策略将一文不值。让他们修改安全策略不是短期解决方案吗?从长远来看,您应该将应用程序分成服务和用户模式组件。
  • 事实是,我完全不知道为什么他们的政策首先是这样的结构(调试程序默认为管理员启用,所以一些天才故意将其删除)。不幸的是,我几乎可以肯定无法杀死这只政策野兽。但是,在这种情况下,应用程序实际上没有服务部分。这只是我知道的一种“黑客”,可用于允许程序以完全调试权限重新启动自身,尽管它可能很聪明,但我不认为它是一个非常干净的长期解决方案:(
  • 不确定这个线程是否仍然有效...但我可能有一些相关的参考资料,您可能会觉得有帮助。不确定,因为您上面的一些陈述表明您不喜欢基于服务的“黑客”。您可能会在以下链接的文章中找到一些想法:alex-ionescu.com/recon2k6.pdf 它有点过时,但其中提出的想法和概念值得一看,也许会给您一些想法或解决困境的方法。希望这会有所帮助。

标签: c++ windows impersonation privileges


【解决方案1】:

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

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

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

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

【讨论】:

  • 我在编写 OP 时曾预测,默认答案是“如果没有特权,你就不应该这样做”。我想这是有道理的,我只是希望管理员的其他权限之一存在漏洞,可以让人们获得批准的特权令牌。不幸的是,由于该程序的性质,该程序与我需要访问的其他正在运行的进程之间没有相互合作。这个程序需要独立和全能:(
猜你喜欢
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多