在内网渗透中,当我们获得了WSUS服务器的控制权限后,可以通过推送补丁的方式进行横向移动。这个利用方法最早公开在BlackHat USA 2015。本文将要整理这个利用方法的相关资料,结合思路,得出行为检测的方法。
本文将要介绍以下内容:
环境搭建
利用思路
实现工具
行为检测
本节介绍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"
返回结果示例:
(2)组策略配置服务器地址后会创建注册表HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate
查询命令:REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"
返回结果示例:
3.推送补丁
在WSUS服务器的Windows Server Update Services页面,选择指定补丁,右键点击Approve...,在弹出的对话框中选择计算机组即可
等待客户端到达补丁更新时间,即可完成补丁的推送
如果我们能够生成一个带有Payload的补丁,就能够通过补丁进行横向移动,但是在利用上需要注意补丁文件的签名问题:Windows的补丁文件需要带有微软的签名
通常的利用方法是使用带有微软签名的程序,例如psexec,通过psexec执行命令或者添加一个管理员用户
开源的工具有以下三个:
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在创建补丁时需要注意转义字符,命令示例:
这条命令将会在Updates的Security Updates页面下创建WSUSDemo,如下图
2.补丁部署
将补丁部署到指定计算机组,命令示例:
这条命令会创建计算机组Demo Group,并且把win-iruj9k30gr7移动到该组下面,如下图
接下来需要等待客户端安装这个补丁
3.查看补丁状态
查看补丁是否被安装,命令示例:
补丁未安装的输出如下:
还有一种查看方法是查看计算机的补丁更新时间,示例命令:SharpWSUS.exe inspect
输出示例:
为了便于测试,可以强制客户端更新补丁,看到新的补丁信息,如下图
4.清除补丁信息
命令示例:
这条命令会删除补丁,删除添加的计算机组
在整个补丁更新过程中,WSUS服务器会将psexec.exe保存在WSUS服务器本地C:\wsus\wuagent.exe和C:\wsus\WsusContent\8E\FD7980D3E437F28000FA815574A326E569EB548E.exe,需要手动清除
在测试WSUSpendu时,为了便于分析细节,可以修改以下代码:
命令行执行:powershell -ep bypass -f WSUSpendu.ps1 -Verbose,将会输出完整的信息
客户端的补丁历史更新记录会保存所有的补丁安装信息:
如下图
但是,攻击者如果获得了系统的管理员控制权限,可以通过命令行卸载补丁的方式清除历史更新记录,命令行卸载补丁的命令示例:
查看更新:wmic qfe list brief/format:table
卸载指定更新:wusa /uninstall /kb:976902 /quiet /norestart
本文介绍了通过WSUS进行横向移动的方法和实现工具,结合利用思路,给出行为检测的建议。
参考资料:
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/