コンテンツにスキップ

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

SID、グループ、鍵から Golden/Silver Ticket を作るか、既存のチケットと PAC を加工して ccache に保存します。

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

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

引数説明
targetusername for the newly created ticket
-spnSPN (service/server) of the target service the silver ticket will be generated for. if omitted, golden ticket will be created
-requestRequests ticket to domain and clones it changing only the supplied information. It requires specifying -user
-domainthe fully qualified domain name (e.g. contoso.com)(必須)
-domain-sidDomain SID of the target domain the ticker will be generated for(必須)
-aesKeyAES key used for signing the ticket (128 or 256 bits)
-nthashNT hash used for signing the ticket
-keytabRead keys for SPN from keytab file (silver ticket only)
-groupscomma separated list of groups user will belong to (default = 513, 512, 520, 518, 519)
-user-iduser id for the user the ticket will be created for (default = 500)
-extra-sidComma separated list of ExtraSids to be included inside the ticket’s PAC
-extra-pacPopulate your ticket with extra PAC (UPN_DNS)
-old-pacUse the old PAC structure to create your ticket (exclude PAC_ATTRIBUTES_INFO and PAC_REQUESTOR
-durationAmount of hours till the ticket expires (default = 2436510). Ignored with -request, which preserves the KDC-issued lifetime
-tsAdds timestamp to every logging output
-debugTurn DEBUG output ON
-userdomain/username to be used if -request is chosen (it can be different from domain/username
-passwordpassword for domain/username
-hashesNTLM hashes, format is LMHASH:NTHASH
-dc-ipIP Address of the domain controller. If ommited it use the domain part (FQDN) specified in the target parameter
-impersonateSapphire ticket. target username that will be impersonated (through S4U2Self+U2U) for querying the ST and extracting the PAC, which will be included in the new ticket

keytab/password/hash/AES key と domain 情報を検証し、basic ticket と PAC buffer を作ります。-request 時は KDC 応答を template として取得します。validation info、UPN/DNS、attributes、requestor、追加 SID を反映後、PAC checksum と ticket encrypted part を enctype に応じて署名・暗号化し、saveTicket() へ渡します。

このコマンドは KDC に通常発行を依頼するだけでなく、ticket と PAC を client 側で構築・署名します。createBasicTicket() が AS-REP/TGS-REP の外形と EncTicketPart を作り、createBasicPac() が validation info、client info、 checksum placeholder 等の PAC buffer を配置します。domain SID、user RID、 group RID はここで authorization data へ変換されます。

customizeTicket() は group、extra SID、UPN/DNS、requestor、PAC attributes、 寿命などを反映します。-request では既存 KDC 応答を template として利用し、 条件が合えば KDC が発行した PAC_REQUESTOR と PAC_ATTRIBUTES を保持します。 抽出できないときは生成した値に戻るため、修正済み KDC では検証に失敗する 場合があります。PAC は buffer を追加するたびに offset と alignment が変わるため、内容だけでなく directory の size/offset を再計算する必要があります。

signEncryptTicket() は最初に PAC checksum field を規定値で計算し、server checksum と KDC checksum の依存順を守って署名し、その後 ticket enc-part を service/krbtgt key と key usage で暗号化します。RC4 と AES では key size、 checksum algorithm、cipher profile が違います。最後に session key を含む ccache を保存し、生成 ticket が後続 client で使える形にします。

シンボル位置責務を追う入口
TICKETER90__init__()、getFileTime()、getPadLength()、getBlockLength()、loadKeysFromKeytab()、createBasicValidationInfo()、createBasicPac()、createUpnDnsPac()、createAttributesInfoPac()、createRequestorInfoPac()、createBasicTicket()、getKerberosS4U2SelfU2U() ほか
モジュール使用する主な名前
impacketversion
impacket.dcerpc.v5.dtypesRPC_SID, SID
impacket.dcerpc.v5.ndrNDRULONG
impacket.dcerpc.v5.samrGROUP_MEMBERSHIP, NULL, SE_GROUP_ENABLED, SE_GROUP_ENABLED_BY_DEFAULT, SE_GROUP_MANDATORY, USER_DONT_EXPIRE_PASSWORD, USER_NORMAL_ACCOUNT
impacket.exampleslogger
impacket.krb5.asn1AD_IF_RELEVANT, AP_REQ, AS_REP, Authenticator, AuthorizationData, ETYPE_INFO2, EncASRepPart, EncTGSRepPart, EncTicketPart, PA_FOR_USER_ENC, TGS_REP, TGS_REQ, Ticket, seq_set, seq_set_iter
impacket.krb5.constantsApplicationTagNumbers, AuthorizationDataType, ChecksumTypes, EncryptionTypes, KERB_NON_KERB_CKSUM_SALT, PreAuthenticationDataTypes, PrincipalNameType, ProtocolVersionNumber, TicketFlags, encodeFlags
impacket.krb5.keytabKeytab
impacket.krb5.cryptoEnctype, Key, _AES256CTS, _HMACMD5, _enctype_table, get_kerberos_key_for_enctype, string_to_key
impacket.krb5.pacKERB_SID_AND_ATTRIBUTES, KERB_VALIDATION_INFO, PAC_ATTRIBUTES_INFO, PAC_ATTRIBUTE_INFO, PAC_CLIENT_INFO, PAC_CLIENT_INFO_TYPE, PAC_LOGON_INFO, PAC_PRIVSVR_CHECKSUM, PAC_REQUESTOR, PAC_REQUESTOR_INFO, PAC_SERVER_CHECKSUM, PAC_SIGNATURE_DATA, PAC_UPN_DNS_INFO, PKERB_SID_AND_ATTRIBUTES_ARRAY, UPN_DNS_INFO_FULL, VALIDATION_INFO
impacket.krb5.typesKerberosTime, Principal, Ticket
impacket.krb5.kerberosv5getKerberosTGS, getKerberosTGT, sendReceive
impacket.krb5constants, pac
impacket.winregistryhexdump
impacket.krb5.ccacheCCache
import 名配布パッケージ経路・宣言状態
pyasn1pyasn1直接 import、宣言済み
sixsix直接 import、宣言済み
  • 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
  • オプションによりローカルファイルを作成または更新します。既存ファイルの扱いと秘密情報を含む出力の権限を確認してください。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。

krb5.asn1 / constants / crypto / pac / keytab、NDR/SID、pyasn1 に依存します。TICKETER の create/customize/sign/save 段階が主要な拡張点です。PAC buffer offset と署名順序は wire contract です。