SeImpersonatePrivilege提权
如果一个账户被授予SeImpersonatePrivilege特 SeImpersonatePrivilege 特权,那么该账户可以模仿任何我们能获得引用或者句柄的令牌。我们可以通过命令whoami /priv 或者 whoami /all 来查看当前账户是否拥有该特权。通常,本地服务器帐号一级以及域服务帐号开启该特权,例如IIS的 IIS 的默认服务账号、SQL Server服Server 的服务账号,以及域中被一些被设置了SPN的 SPN 的服务帐号。
我们之前通过上传了 aspx 的 webshell 在 Web02 上以 IIS 服务帐号的身份获得了代码执行,我们可以在 PRIVILEGES INFORMATION 这一块看到 SeImpersonatePrivilege 特权是开启的。
利用 SeImpersonatePrivilege 提权至 SYSTEM 涉及到了令牌理论,并且利用手法也多种多样,考虑到背后原理具有一定复杂性,我们不在课程的早期进行详细讲解。但简单地解释就是,拥有该特权的账户可以以其他用户的上下文执行代码甚至创建进程。
该特权为我们提供了提升至SYSTEM权限的路径。我们可以利用DuplicateTokenEx Api来根据模仿令牌创建一个主令牌并且创建一个被模仿用户上下文的新进程,当然我们甚至可以强制SYSTEM帐号提供给我们一个令牌。更加技术性的原理涉及较为复杂的Win32 Api调用,并且SeImpersonatePrivilege的利用方法有多种,因此在课程前期的该章节不做过多的技术性讲解。对于该特权的利用,目前主流有多种工具,知名的是PrintSpoofer以有(土豆家族) JuicyPotato,RottenPotato,SweetPotato 等,以及Potato系列。但需要注意 PrintSpoofer。土豆家族中各个工具利用的是原理,Potato系列中的一些方法例如 juicy potato 可能已经不在较新的以及适用系统版本有所不同,想深入了解其中适用了区别,而且都需要考虑免疫AV/EDR。可以查阅文章 https://jlajara.gitlab.io/Potatoes_Windows_Privesc
SweetPotato:当前,适用性很好的利用工具有 SweetPotato (https://github.com/uknowsec/SweetPotato/blob/master/README.md
PrintSpoofer:PrintSpoofer (https://github.com/itm4n/PrintSpoofer)。BadPotato (https://github.com/BeichenDream/BadPotato) 是 PrintSpoofer 利用的 C# 实现,可以配合 execute-assembly 使用。
如果利用 PrintSpoofer 的话,要确保 Print Spooler 服务正在运行,否则我们需要用其他方法利用 SeImpersonatePrivilege。
我们使用 BadPotato 执行命令,可以发现是以 SYSTEM 权限运行的。