コンテンツにスキップ

Impacket describeTicket.py

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

ccache または kirbi 形式のチケットを読み取り、鍵があれば暗号化部分と PAC も復号して表示します。

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

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

引数説明
ticketPath to ticket.ccache
-debugTurn DEBUG output ON
-tsAdds timestamp to every logging output
-p / --passwordCleartext password of the service account
-hp / --hex-passwordHex password of the service account
-u / --userName of the service account
-d / --domainFQDN Domain
-s / --saltSalt for keys calculation (DOMAIN.LOCALSomeuser for users, DOMAIN.LOCALhostsomemachine.domain.local for machines)
--rc4RC4 KEY (i.e. NT hash)
--aesAES128 or AES256 key
--asrep-keyAS reply key for PAC Credentials decryption

入力形式を判定して ticket と metadata を読み、password、hex password、RC4/AES key、AS-REP key から候補 key を生成します。ticket encrypted part を復号後、PAC buffer を type ごとに解析し、SID、group、flags、checksum、時刻を表示します。ccache から Kerberoast 形式を出す経路もあります。

ticket file は「暗号化された ticket」と、その利用に必要な session key や principal metadata を含みます。ccache の場合は credential entry から ticket、 client/server principal、session key を読みます。kirbi/KRB-CRED では enc-part の形式を解き、同等の情報へ正規化します。まず container format を判定する ことが解析の第一段階です。

ticket の enc-part を読むには service principal の long-term key が必要です。 password と domain/user から salt を使って key を生成する経路、RC4/AES key を 直接与える経路、AS-REP key を使う経路があり、ticket の enctype と key usage に合う候補だけを試します。checksum failure は「parse failure」ではなく、 鍵・salt・principal 情報の不一致を示します。

復号後は EncTicketPart の flags、時刻、authorization data を表示し、 PAC があれば buffer directory を辿って group membership、SID、UPN/DNS、 client/device claims、device info、checksum 等を展開します。claims は 非圧縮のものを解析し、未対応の圧縮形式は復号できないことを表示します。 PAC 内の FILETIME、NDR pointer、flag は表示用に 変換しますが、raw 値も追跡可能に保つと未知拡張の調査に役立ちます。

シンボル位置責務を追う入口
User_Flags46構造体/定数定義
SE_GROUP_Attributes51構造体/定数定義
USER_ACCOUNT_Codes57構造体/定数定義
UF_FLAG_Codes82構造体/定数定義
Upn_Dns_Flags109構造体/定数定義
Attributes_Flags114構造体/定数定義
parse_ccache()220モジュール関数
parse_pac()355モジュール関数
kerberoast_from_ccache()670モジュール関数
parse_args()713モジュール関数
main()758モジュール関数
モジュール使用する主な名前
impacketversion
impacket.dcerpc.v5.dtypesFILETIME, PRPC_SID
impacket.dcerpc.v5.rpcrtTypeSerialization1
impacket.exampleslogger
impacket.krb5constants, pac
impacket.krb5.asn1AD_IF_RELEVANT, EncTicketPart, TGS_REP
impacket.krb5.ccacheCCache
impacket.krb5.constantsChecksumTypes
impacket.krb5.cryptoInvalidChecksum, Key, _enctype_table, generate_kerberos_keys
impacket.ldap.ldaptypesLDAP_SID
import 名配布パッケージ経路・宣言状態
Cryptodomepycryptodomex直接 import、宣言済み
pyasn1pyasn1直接 import、宣言済み
  • 主処理はローカルファイルの解析です。入力を信頼せず、offset、length、形式識別子を検証してからデータを参照してください。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。

krb5.ccache / asn1 / crypto / pac、pyasn1、Cryptodome.Hash.MD4、LDAP SID helper に依存します。parse_ccache() と parse_pac() が形式境界です。