Python3实现的改进版ADRecon,适用于渗透测试人员和蓝队。
ADRecon 是一款收集 Microsoft Active Directory 信息并生成 XSLX 报告的工具,可全面了解目标 AD 环境的当前状态。
[!TIP] 如果你是红队成员,可以改用 ADRecon-ADWS。
# stable release from pypi
pipx install pyadrecon
# latest commit from github
pipx install git+https://github.com/l4rm4nd/PyADRecon
然后验证安装:
pyadrecon --version
[!TIP] 对于 Windows,可阅读此文档。支持 NTLM + Kerberos。
usage: pyadrecon.py [-h] [--version] [--generate-excel-from CSV_DIR] [-dc DOMAIN_CONTROLLER] [-u USERNAME] [-p [PASSWORD]] [-d DOMAIN] [--auth {ntlm,kerberos}] [--tgt-file TGT_FILE] [--tgt-base64 TGT_BASE64]
[--ssl] [--port PORT] [-o OUTPUT] [--page-size PAGE_SIZE] [--threads THREADS] [--dormant-days DORMANT_DAYS] [--password-age PASSWORD_AGE] [--only-enabled] [--collect COLLECT]
[--no-excel] [-v]
PyADRecon - Python Active Directory 侦察工具
选项:
-h, --help 显示此帮助信息并退出
--version 显示程序版本号并退出
--generate-excel-from CSV_DIR
从 CSV 目录生成 Excel 报告(独立模式,无需 AD 连接)
--generate-dashboard-from CSV_DIR
从现有 CSV 文件生成 HTML 仪表板(独立模式)
-dc, --domain-controller DOMAIN_CONTROLLER
域控制器 IP 或主机名
-u, --username USERNAME
用于身份验证的用户名
-p, --password [PASSWORD]
用于身份验证的密码(使用 TGT 时可省略)
-d, --domain DOMAIN 域名(例如 DOMAIN.LOCAL)— Kerberos 认证必需
--auth {ntlm,kerberos}
认证方法(默认:ntlm)
--tgt-file TGT_FILE Kerberos TGT ccache 文件路径(用于 Kerberos 认证)
--tgt-base64 TGT_BASE64
经过 Base64 编码的 Kerberos TGT ccache(用于 Kerberos 认证)
--ssl 强制使用 SSL/TLS(LDAPS)。不允许回落至 LDAP。
--port PORT LDAP 端口(默认:389,LDAPS 使用 636)
-o, --output OUTPUT 输出目录(默认:PyADRecon-Report-<时间戳>)
--page-size PAGE_SIZE LDAP 分页大小(默认:500)
--dormant-days DORMANT_DAYS
休眠帐户阈值天数(默认:90)
--password-age PASSWORD_AGE
密码期限阈值天数(默认:180)
--only-enabled 仅收集已启用的对象
--collect COLLECT 逗号分隔的模块列表(默认:全部)
--workstation WORKSTATION
显式伪造 NTLM 认证的工作站名称(默认:空字符串,绕过 userWorkstations 限制)
--no-excel 跳过 Excel 报告生成
--no-dashboard 跳过交互式 HTML 仪表板生成
-v, --verbose 详细输出
示例:
# 使用 NTLM 认证的基本用法
pyadrecon.py -dc 192.168.1.1 -u admin -p password123 -d DOMAIN.LOCAL
# 使用 Kerberos 认证(绕过通道绑定)
pyadrecon.py -dc dc01.domain.local -u admin -p password123 -d DOMAIN.LOCAL --auth kerberos
# 使用来自文件的 TGT 进行 Kerberos 认证(绕过通道绑定)
pyadrecon.py -dc dc01.domain.local -u admin -d DOMAIN.LOCAL --auth kerberos --tgt-file /tmp/admin.ccache
# 使用来自 base64 字符串的 TGT 进行 Kerberos 认证(绕过通道绑定)
pyadrecon.py -dc dc01.domain.local -u admin -d DOMAIN.LOCAL --auth kerberos --tgt-base64 BQQAAAw...
# 仅收集特定模块
pyadrecon.py -dc 192.168.1.1 -u admin -p pass -d DOMAIN.LOCAL --collect users,groups,computers
# 输出到指定目录
pyadrecon.py -dc 192.168.1.1 -u admin -p pass -d DOMAIN.LOCAL -o /tmp/adrecon_output
# 从现有 CSV 文件生成 Excel 报告(独立模式)
pyadrecon.py --generate-excel-from /path/to/CSV-Files -o report.xlsx
[!TIP] PyADRecon 始终优先尝试 TCP/636 的 LDAPS。
如果未使用
--ssl标志,则可能回退到 TCP/389 的 LDAP。
[!WARNING] 如果启用了 LDAP 通道绑定,此脚本将失败,并提示
automatic bind not successful - strongerAuthRequired,因为 ldap3 不支持通道绑定(参见此处)。必须改用 Kerberos 认证。如果使用 Linux 下的 Kerberos 认证,请创建有效的
/etc/krb5.conf并在/etc/hosts中添加 DC 主机名条目。可阅读此文档。如果使用 Windows,请确保拥有有效的 Kerberos 票证。可阅读此文档。注意,可以通过--tgt-file或--tgt-base64向脚本提供现有的 TGT 票证。例如,通过 Netexec 使用netexec smb <TARGET> <ARGS> --generate-tgt <FILEMAME>获取。
GHCR.IO 上也提供了 Docker 镜像。
docker run --rm -v /etc/krb5.conf:/etc/krb5.conf:ro -v /etc/hosts:/etc/hosts:ro -v ./:/tmp/pyadrecon_output ghcr.io/l4rm4nd/pyadrecon:latest -dc dc01.domain.local -u admin -p password123 -d DOMAIN.LOCAL -o /tmp/pyadrecon_output
默认情况下,PyADRecon 运行所有收集模块。这些模块称为 default 或 all。
不过,你可以自由选择要运行的模块集合:
| 图标 | 含义 |
|---|---|
| 🛑 | 需要域管理权限(例如 Domain Admins) |
| ✅ | 需要普通域权限(例如 Authenticated Users) |
| 💥 | 新的收集模块,处于测试阶段。结果可能不正确。 |
林与域
forest ✅domain ✅trusts ✅sites ✅subnets ✅schema 或 schemahistory ✅域控制器
dcs 或 domaincontrollers ✅用户与组
users ✅userspns ✅groups ✅groupmembers ✅protectedgroups ✅💥krbtgt ✅asreproastable ✅kerberoastable ✅计算机与打印机
computers ✅computerspns ✅printers ✅OU 与组策略
ous ✅gpos ✅gplinks ✅密码与凭据
passwordpolicy ✅fgpp 或 finegrainedpasswordpolicy 🛑laps 🛑bitlocker 🛑💥托管服务帐户
gmsa 或 groupmanagedserviceaccounts ✅💥dmsa 或 delegatedmanagedserviceaccounts ✅💥
证书
adcs 或 certificates ✅💥
DNS
dnszones ✅dnsrecords ✅PyADRecon 执行所有收集模块时,会自动生成包含关键统计信息和安全发现的 HTML 仪表板。
如果需要,可以在初始数据收集期间使用 --no-dashboard 禁用仪表板创建。之后可以使用 --generate-dashboard-from <CSV_DIR> 从现有 CSV 文件生成仪表板。
[!CAUTION] 这是一个测试功能。显示的数据可能被错误解析或报告为问题。请谨慎对待!
感谢以下各位:
PyADRecon 根据 MIT 许可证 发布。
使用了以下第三方库:
| 库 | 许可证 |
|---|---|
| ldap3 | LGPL v3 |
| openpyxl | MIT |
| gssapi | MIT |
| impacket | Apache 2.0 |
| winkerberos | Apache 2.0 |
使用或重新分发本软件时,请参考这些库各自的许可证。