Impacket getTGT.py
パスワード、NT ハッシュ、AES 鍵、keytab のいずれかで TGT を要求し、ccache に保存します。
| 項目 | 内容 |
|---|---|
| 実装 | examples/getTGT.py |
| カテゴリ | Kerberos / チケット処理 |
| 規模 | 120 行 |
| 配布 | setup.py の scripts=examples/*.py によりスクリプトとしてインストール |
CLI と入力
Section titled “CLI と入力”オプションの最新の定義は python examples/getTGT.py -h で確認できます。
| 引数 | 説明 |
|---|---|
identity | [domain/]username[:password] |
-ts | Adds timestamp to every logging output |
-debug | Turn DEBUG output ON |
-hashes | NTLM hashes, format is LMHASH:NTHASH |
-no-pass | don’t ask for password (useful for -k) |
-k | Use 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 |
-aesKey | AES key to use for Kerberos Authentication (128 or 256 bits) |
-dc-ip | IP Address of the domain controller. If ommited it use the domain part (FQDN) specified in the target parameter |
-service | Request a Service Ticket directly through an AS-REQ |
-principalType | PrincipalType of the token, can be one of NT_UNKNOWN, NT_PRINCIPAL, NT_SRV_INST, NT_SRV_HST, NT_SRV_XHST, NT_UID, NT_SMTP_NAME, NT_ENTERPRISE, NT_WELLKNOWN, NT_SRV_HST_DOMAIN, NT_MS_PRINCIPAL, NT_MS_PRINCIPAL_AND_ID, NT_ENT_PRINCIPAL_AND_ID; default is NT_PRINCIPAL, |
関連技術: Kerberos の AS-REQ/AS-REP、etype 選択、key usage 1/3。
詳細な処理フロー
Section titled “詳細な処理フロー”identity と principal type を解析し、資格情報を binary key へ変換して getKerberosTGT() を呼びます。成功すると KDC 応答、cipher、session key を CCache.fromTGT() 相当の処理へ渡し、<principal>.ccache として保存します。-service で要求 principal を変更できます。
仕組みの詳細
Section titled “仕組みの詳細”TGT は client principal が KDC の Ticket Granting Service を利用するための
ticket です。run() は入力された password、LM/NT hash、AES key のいずれを
使うかを整理し、principal name type と domain を Principal に変換して
getKerberosTGT() へ渡します。password の場合は KDC の pre-auth 応答に
含まれる salt/enctype を使って long-term key が導出されます。
AS exchange が成功すると、戻り値には encoded AS-REP、ticket の cipher profile、
AS-REP を復号して得た client/KDC session key などが含まれます。ticket 本体は
krbtgt key で暗号化されているため client は中身を直接読む必要がなく、以後の
TGS-REQ では ticket と session key の組を使います。saveTicket() はこの組を
ccache の credential として直列化します。
-service を指定すると AS-REQ で通常の krbtgt/domain 以外の service を
要求する経路になります。-principalType は KDC が principal をどう解釈するか
に関わり、単なる表示形式ではありません。失敗時は pre-auth type 不一致、
clock skew、salt/key 不一致、KDC 到達不能を分け、空または壊れた ccache を
成功成果物として残さないようにします。
主要な実装要素
Section titled “主要な実装要素”| シンボル | 位置 | 責務を追う入口 |
|---|---|---|
GETTGT | 35 | __init__()、saveTicket()、run() |
Impacket 内部
Section titled “Impacket 内部”| モジュール | 使用する主な名前 |
|---|---|
impacket | version |
impacket.examples | logger |
impacket.examples.utils | parse_identity |
impacket.krb5.kerberosv5 | getKerberosTGT |
impacket.krb5 | constants |
impacket.krb5.types | Principal |
impacket.krb5.ccache | CCache |
出力・副作用・必要権限
Section titled “出力・副作用・必要権限”- 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
- オプションによりローカルファイルを作成または更新します。既存ファイルの扱いと秘密情報を含む出力の権限を確認してください。
失敗経路と後始末
Section titled “失敗経路と後始末”- 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。
実装を変更するとき
Section titled “実装を変更するとき”krb5.kerberosv5 / types / constants と共通 identity parser を使用します。GETTGT.run() と saveTicket() の小さな構成なので、認証方式を増やす場合は key 選択と保存処理を分離したままにします。
- 構文:
python -m py_compile examples/getTGT.py - CLI:
python examples/getTGT.py -h - 関連テスト:
tests/misc/test_ccache.py - 関連テスト:
tests/misc/test_krb5_crypto.py - 関連テスト:
tests/misc/test_krb5_gssapi.py

