| name | windows-ad-enumeration |
| description | 用于授权范围内的 Windows、SMB、LDAP、Kerberos、AD CS 和 Active Directory 枚举。适合用户提供域名、域控、账号、Hash、Kerberos 票据、内网主机或已有 AD 线索时使用。会指导 netexec、enum4linux-ng、smbmap、smbclient、ldapsearch、certipy、bloodhound-python、evil-winrm 等工具的组合使用。 |
Windows 与 Active Directory 枚举
这份技能提供 Windows 与 AD 环境中的身份、主机、共享和信任关系分析知识,以及常用枚举命令。不同环境的可用身份和协议差异很大,应按当前证据选择方向,而不是机械执行完整清单。
目标
在授权范围内整理 Windows 和 AD 环境信息:
- 域名和域控。
- 用户、组、计算机。
- SMB 共享和权限。
- 会话和登录线索。
- LDAP 信息。
- AD CS 风险线索。
- BloodHound 图数据。
- WinRM 可达性。
适用输入
- 域名。
- 域控 IP 或主机名。
- 内网主机列表。
- 授权账号和密码。
- NTLM hash。
- Kerberos 票据。
- 已有 Nmap/NetExec/LDAP 结果。
- 用户要求“枚举 AD 环境”。
开始前先判断
确认:
- 授权范围。
- 是否有账号。
- 是否允许认证枚举。
- 是否允许密码喷洒。
- 是否允许远程命令执行。
- 账号锁定策略。
- 是否允许收集 BloodHound 数据。
- 是否允许 AD CS 检查。
在没有明确状态变更授权时,只读枚举通常最适合建立环境认知;状态变更和远程执行属于不同影响层级。
常见枚举路径
无凭据、已认证、目录查询、证书服务和图关系收集代表不同权限与影响层级。下面路径可按已有身份和当前问题组合使用。
准备目标和身份上下文
mkdir -p ad/{input,raw,clean,final,notes}
准备目标:
cat > ad/input/targets.txt <<'EOF'
dc.example.local
EOF
从无凭据暴露面建立线索
适合先探测暴露面:
enum4linux-ng -A target.example.local \
| tee ad/raw/enum4linux-ng_target.txt
smbmap -H target.example.local \
| tee ad/raw/smbmap_anonymous_target.txt
smbclient -L //target.example.local -N \
| tee ad/raw/smbclient_anonymous_target.txt
用已授权身份理解 SMB 和主机关系
netexec smb ad/input/targets.txt \
-u USER -p PASS \
--shares \
--users \
--groups \
--sessions \
--loggedon-users \
| tee ad/raw/netexec_smb_auth.txt
如果使用 hash:
netexec smb ad/input/targets.txt \
-u USER -H NTLM_HASH \
--shares \
| tee ad/raw/netexec_smb_hash.txt
用 LDAP 理解目录对象
基础查询:
ldapsearch -x -H ldap://dc.example.local \
-D 'DOMAIN\user' -w 'PASSWORD' \
-b 'DC=example,DC=local' \
'(objectClass=user)' sAMAccountName
查询计算机:
ldapsearch -x -H ldap://dc.example.local \
-D 'DOMAIN\user' -w 'PASSWORD' \
-b 'DC=example,DC=local' \
'(objectClass=computer)' dNSHostName operatingSystem
理解共享和访问权限
smbmap -H target.example.local \
-u USER -p PASS \
| tee ad/raw/smbmap_auth_target.txt
只在授权允许读取共享时再进一步访问:
smbclient //target.example.local/SHARE -U 'DOMAIN\USER'
分析 AD CS 线索
certipy find \
-u USER@example.local \
-p PASS \
-dc-ip DC_IP \
-enabled \
-vulnerable \
-stdout \
| tee ad/raw/certipy_find.txt
如果 certipy 命令名不同,先确认:
command -v certipy || command -v certipy-ad
收集并分析图关系
确认用户允许后:
bloodhound-python \
-d example.local \
-u USER \
-p PASS \
-ns DC_IP \
-c All \
--zip
把生成的 zip 移到:
mkdir -p ad/final/bloodhound
mv *.zip ad/final/bloodhound/ 2>/dev/null || true
区分 WinRM 可达、认证成功和远程交互
只验证,不直接开 shell:
netexec winrm ad/input/targets.txt \
-u USER -p PASS \
| tee ad/raw/netexec_winrm.txt
只有用户明确要求并授权远程交互时,才使用:
evil-winrm -i target.example.local -u USER -p PASS
工具使用要点
netexec
适合协议枚举、认证验证、SMB/WinRM/LDAP 信息收集。
netexec smb targets.txt -u USER -p PASS --shares
netexec smb targets.txt -u USER -p PASS --users --groups
netexec winrm targets.txt -u USER -p PASS
要点:
- 密码喷洒可能触发账号锁定和审计,使用前需要理解账号策略和授权范围。
- 远程执行命令比认证验证影响更高,应根据验证目标单独判断。
- 注意锁定策略。
enum4linux-ng
适合无凭据或低凭据 SMB 枚举。
enum4linux-ng -A target
smbmap
适合共享目录和权限枚举。
smbmap -H target -u USER -p PASS
smbclient
适合手工列出或访问共享。
smbclient -L //target -U 'DOMAIN\USER'
ldapsearch
适合直接 LDAP 查询。
ldapsearch -x -H ldap://dc -D 'DOMAIN\user' -w 'PASSWORD' -b 'DC=example,DC=local'
certipy
适合 AD CS 枚举和风险判断。
certipy find -u USER@example.local -p PASS -dc-ip DC_IP -enabled -vulnerable -stdout
bloodhound-python
适合收集图数据。
bloodhound-python -d example.local -u USER -p PASS -ns DC_IP -c All --zip
evil-winrm
适合明确授权后的 WinRM 远程交互。
evil-winrm -i target -u USER -p PASS
使用它执行命令或上传文件会从“认证验证”进入“远程交互”,需要单独确认影响和授权。
状态变更与高影响动作
以下动作可能改变目录、主机或账号状态,或者触发显著审计和业务影响。需要根据当前验证目标单独评估,并确认授权:
- 密码喷洒。
- 修改密码。
- 修改 ACL。
- 添加或删除组成员。
- 修改证书模板。
- 创建、删除对象。
- 远程执行命令。
- 上传文件。
- 持久化。
- 中继、欺骗、诱导认证类操作。
值得保留的证据
- 使用的是无凭据、普通域账号、Hash、票据还是其他身份上下文。
- 域、域控、用户、组、计算机、共享、会话和服务之间的关系。
- 共享权限、LDAP 查询、AD CS 和 BloodHound 线索所需的前置权限。
- WinRM 可达、认证成功、远程执行能力之间的区别。
- 因锁定策略、授权边界或影响控制而未验证的路径。
AD 枚举的价值在于理解权限和信任关系如何连接,而不是单纯收集对象数量。
判断与复核要点
- 凭据、hash、票据必须脱敏。
- 明确区分无凭据、已认证、远程执行。
- 对可能造成账号锁定的动作给出提醒。
- BloodHound 数据收集要说明采集范围。
- 不把“可登录”直接写成“已攻陷”,除非真的验证了授权动作。