Skip to main content

SeImpersonatePrivilege提权

如果一个账户被授予 SeImpersonatePrivilege 特权,那么该账户可以模仿任何我们能获得引用或者句柄的令牌。我们可以通过命令whoami /priv 或者 whoami /all 来查看当前账户是否拥有该特权。通常,本地服务帐号以及域服务帐号开启该特权,例如 IIS 的默认服务账号、SQL Server 的服务账号,以及域中被一些被设置了 SPN 的服务帐号。

我们之前通过上传了 aspx 的 webshell 在 Web02 上以 IIS 服务帐号的身份获得了代码执行,我们可以在 PRIVILEGES INFORMATION 这一块看到 SeImpersonatePrivilege 特权是开启的。

image.png

利用 SeImpersonatePrivilege 提权至 SYSTEM 涉及到了令牌理论,并且利用手法也多种多样,考虑到背后原理具有一定复杂性,我们不在课程的早期进行详细讲解。但简单地解释就是,拥有该特权的账户可以以其他用户的上下文执行代码甚至创建进程

对于该特权的利用,有多种工具,知名的有(土豆家族) JuicyPotato,RottenPotato,SweetPotato 等,以及 PrintSpoofer。土豆家族中各个工具利用的原理,以及适用系统版本有所不同,想深入了解其中区别,可以查阅文章 https://jlajara.gitlab.io/Potatoes_Windows_Privesc 

当前,适用性很好的利用工具有 SweetPotato (https://github.com/CCob/SweetPotato),以及 PrintSpoofer (https://github.com/itm4n/PrintSpoofer)。BadPotato (https://github.com/BeichenDream/BadPotato) 是 PrintSpoofer 利用的 C# 实现,可以配合 execute-assembly 使用。

如果利用 PrintSpoofer 的话,要确保 Print Spooler 服务正在运行,否则我们需要用其他方法利用 SeImpersonatePrivilege。

image.png

我们使用 BadPotato 执行命令,可以发现是以 SYSTEM 权限运行的。

image.png