コンテンツにスキップ

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

事前認証を要求しないアカウントを LDAP で探します。必要に応じて AS-REP を取得し、オフライン解析用の形式で保存します。

項目内容
実装examples/GetNPUsers.py
カテゴリKerberos / チケット処理
規模411 行
配布setup.py の scripts=examples/*.py によりスクリプトとしてインストール

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

引数説明
target[[domain/]username[:password]]
-requestRequests TGT for users and output them in JtR/hashcat format (default False)
-outputfileOutput filename to write ciphers in JtR/hashcat format
-formatformat to save the AS_REQ of users without pre-authentication. Default is hashcat(選択肢: hashcat, john)
-usersfileFile with user per line to test
-tsAdds timestamp to every logging output
-debugTurn DEBUG output ON
-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

domain identity から LDAP へ接続し、UF_DONT_REQUIRE_PREAUTH を含む user を抽出します。-request 時は user ごとに AS-REQ を構築して KDC へ送り、AS-REP の暗号部を指定形式へ変換します。-usersfile では LDAP 検索を省き、入力名を順番に試します。

Kerberos pre-authentication が有効な通常 account では、client は user key で 暗号化した timestamp を AS-REQ に含め、KDC はそれを検証してから TGT を返します。 UF_DONT_REQUIRE_PREAUTH の account ではこの証明なしに AS-REP を返せるため、 応答の encrypted part を offline 検証可能な形で取得できます。このコマンドは その directory 検索と KDC request を一続きにしています。

LDAP 経路では UAC flag と account 状態を検索し、候補 user を表にします。 -request がある場合だけ各 principal の AS-REQ を組み立てます。 -usersfile 経路は LDAP read 権限を必要とせず、入力された principal を KDC へ直接問い合わせますが、存在しない user、pre-auth 必須、rate limit の 違いが応答に現れます。

getTGT() は AS-REP/KRB-ERROR を ASN.1 decode し、enctype に応じて cipher text の分割位置と出力書式を変えます。hashcat と John では field 順や区切りが 異なるため、同じ byte 列を単に hex 化するだけではありません。KDC error を 「対象なし」と一括解釈せず、clock skew、principal 不明、pre-auth required を 区別することが正しい結果につながります。

シンボル位置責務を追う入口
GetUserNoPreAuth50__init__()、printTable()、getUnixTime()、getTGT()、outputTGT()、run()、request_users_file_TGTs()、request_multiple_TGTs()
モジュール使用する主な名前
impacketversion
impacket.dcerpc.v5.samrUF_ACCOUNTDISABLE, UF_DONT_REQUIRE_PREAUTH
impacket.exampleslogger
impacket.examples.utilsldap_login, parse_identity
impacket.krb5constants
impacket.krb5.asn1AS_REP, AS_REQ, KERB_PA_PAC_REQUEST, KRB_ERROR, seq_set, seq_set_iter
impacket.krb5.kerberosv5KerberosError, sendReceive
impacket.krb5.typesKerberosTime, Principal
impacket.ldapldap, ldapasn1
import 名配布パッケージ経路・宣言状態
pyasn1pyasn1直接 import、宣言済み
  • 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
  • オプションによりローカルファイルを作成または更新します。既存ファイルの扱いと秘密情報を含む出力の権限を確認してください。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。

krb5.asn1 / constants / kerberosv5 / types、pyasn1、LDAP helper を使用します。getTGT()、outputTGT()、複数 user の request method が検索と KDC I/O の境界です。