コンテンツにスキップ

カテゴリ目次へ戻る / コマンド全体目次へ戻る

LDAP から computer account の OS や最終ログオン時刻などを取得します。必要に応じて DNS で IP アドレスも補います。

項目内容
実装examples/GetADComputers.py
カテゴリActive Directory / LDAP / アカウント管理
規模234 行
配布setup.py の scripts=examples/*.py によりスクリプトとしてインストール

オプションの最新の定義は python examples/GetADComputers.py -h で確認できます。

引数説明
targetdomain[/username[:password]]
-userRequests data for specific user
-tsAdds timestamp to every logging output
-debugTurn DEBUG output ON
-resolveIPTries to resolve the IP address of computer objects, by performing the nslookup on the DC.
-hashesNTLM hashes, format is LMHASH:NTHASH
-no-passdon’t ask for password (useful for -k)
-kUse Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones specified in the command line
-aesKeyAES key to use for Kerberos Authentication (128 or 256 bits)
-dc-ipIP Address of the domain controller. If ommited it use the domain part (FQDN) specified in the target parameter
-dc-hostHostname of the domain controller to use. If ommited, the domain part (FQDN) specified in the account parameter will be used
-ldaps / -use-ldapsUse LDAPS instead of LDAP

identity を解析して LDAP/LDAPS へ bind し、computer object を検索します。processRecord() が LDAP 属性と Windows timestamp を表示用に変換し、-resolveIP 時は DNS を照会します。-user は特定アカウントへの絞り込みです。

検索対象は LDAP の computer object です。run() は domain から base DN を 組み立て、指定 user がある場合は sAMAccountName で絞り込み、そうでなければ computer account をまとめて取得します。返却される属性は常に揃うわけでは ないため、processRecord() は OS 情報、DNS host 名、UAC、時刻属性を独立に 扱い、欠けた値を空欄として表示します。

Active Directory の時刻属性は Unix timestamp ではなく、1601 年起点の Windows FILETIME です。変換処理は 0 や「未設定」を通常の日付として表示しない ようにする役割も持ちます。account disabled の判定は文字列ではなく userAccountControl の bit flag を使います。このため、属性追加時も LDAP から届く byte/string 表現を表示層へ直接渡さず、型と特殊値を正規化します。

-resolveIP は LDAP の dNSHostName を DC 指定の resolver で A record へ 解決する補助処理です。LDAP レコード取得の成功と DNS 解決の成功は別なので、 DNS に登録がない computer を検索結果から落としてはいけません。検索 filter、 属性変換、DNS 補完という三つの段階を分けて保守するのがこのコマンドの要点です。

シンボル位置責務を追う入口
GetADComputers42__init__()、getUnixTime()、processRecord()、run()
モジュール使用する主な名前
impacketversion
impacket.dcerpc.v5.samrUF_ACCOUNTDISABLE
impacket.exampleslogger
impacket.examples.utilsldap_login, parse_identity
impacket.ldapldap, ldapasn1
import 名配布パッケージ経路・宣言状態
dnsdnspython直接 import、直接依存には未宣言
  • 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。

impacket.ldap.ldap / ldapasn1、SAMR の UF_ACCOUNTDISABLE、examples.utils.ldap_login、dns.resolver に依存します。検索 filter や属性を変える場合は run() と processRecord() を同時に更新し、欠落属性を許容してください。