
Python3 による ADRecon の実装。NTLM および Kerberos 認証を使用した LDAP クエリに対応。AD ドメインに関する個別の CSV ファイルと、1 つの XLSX + HTML レポートを生成します。
改良版 ADRecon の Python3 実装。ペネトレーションテスターおよびブルーチーム向け。
ADRecon は、MS Active Directory に関する情報を収集し、XLSX レポートを生成して、対象 AD 環境の現在の状態を全体像として提供するツールです。
[!TIP] レッドチームの方は、代わりに ADRecon-ADWS をご確認ください。
# pypi からの安定版リリース
pipx install pyadrecon
# 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 Reconnaissance Tool
options:
-h, --help show this help message and exit
--version show program's version number and exit
--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-<timestamp>)
--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 チャネルバインディングが有効な場合、ldap3 が対応していないため (詳細はこちら)、このスクリプトは
automatic bind not successful - strongerAuthRequiredで失敗します。代わりに 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 |
このソフトウェアを使用または再配布する際は、これらのライブラリの各ライセンスを参照してください。