コンテンツにスキップ

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

S4U2self と U2U の交換を使って対象ユーザーの PAC を取得し、各バッファの内容を表示します。

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

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

引数説明
credentialsdomain/username[:password]. Valid domain credentials to use for grabbing targetUser’s PAC
-targetUserthe target user to retrieve the PAC of(必須)
-debugTurn DEBUG output ON
-tsAdds timestamp to every logging output
-hashesNTLM hashes, format is LMHASH:NTHASH

指定資格情報で TGT を取得し、対象 user の PA-FOR-USER を含む TGS request を構築します。返却 ticket の encrypted part を復号し、authorization data から PACTYPE を取り出して logon info、client info、署名、UPN/DNS info を buffer type ごとに解析します。

PAC は ticket 内の authorization data に格納され、通常は service key で 暗号化された EncTicketPart の中にあります。このコマンドは S4U2self と user-to-user を組み合わせ、呼び出し元が復号できる形の ticket を KDC に 発行させて PAC を観察します。

まず service account の TGT を取得し、PA-FOR-USER checksum を含む S4U2self TGS-REQ を作ります。U2U では追加 ticket を request に含め、KDC が session key で保護した service ticket を返せるようにします。応答を適切な key usage で復号し、EncTicketPart.authorization-data から AD-IF-RELEVANT、 さらに PACTYPE を取り出します。

PAC は buffer directory と可変長 payload の集合です。printPac() は logon info、client info、server/KDC checksum、UPN/DNS info を type ごとに NDR/構造体へ dispatch します。未知 buffer を飛ばせること、offset/size が ticket 内に収まること、署名値を通常データと誤解しないことが parser の重要な 不変条件です。

シンボル位置責務を追う入口
S4U2SELF53__init__()、printPac()、dump()
モジュール使用する主な名前
impacketversion
impacket.dcerpc.v5.rpcrtTypeSerialization1
impacket.exampleslogger
impacket.examples.utilsparse_identity
impacket.krb5constants
impacket.krb5.asn1AD_IF_RELEVANT, AP_REQ, AS_REP, Authenticator, EncTicketPart, PA_FOR_USER_ENC, TGS_REP, TGS_REQ, Ticket, seq_set, seq_set_iter
impacket.krb5.cryptoEnctype, Key, _HMACMD5, _enctype_table
impacket.krb5.kerberosv5getKerberosTGT, sendReceive
impacket.krb5.pacKERB_VALIDATION_INFO, PACTYPE, PAC_CLIENT_INFO, PAC_CLIENT_INFO_TYPE, PAC_INFO_BUFFER, PAC_PRIVSVR_CHECKSUM, PAC_SERVER_CHECKSUM, PAC_SIGNATURE_DATA, PAC_UPN_DNS_INFO, UPN_DNS_INFO
impacket.krb5.typesKerberosTime, Principal, Ticket
impacket.winregistryhexdump
import 名配布パッケージ経路・宣言状態
pyasn1pyasn1直接 import、宣言済み
sixsix直接 import、宣言済み
  • 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。

krb5.asn1 / crypto / pac / types、pyasn1 と NDR serialization に依存します。S4U2SELF.dump() が exchange、printPac() が buffer dispatch を担当します。