コンテンツにスキップ

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

MS14-068 の検証用に改変した PAC を含むチケットを作ります。得た権限で SMB 経由の実行やチケット保存を行えます。

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

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

引数説明
target[[domain/]username[:password]@]
-tsAdds timestamp to every logging output
-debugTurn DEBUG output ON
commandcommand (or arguments if -c is used) to execute at the target (w/o path). Defaults to cmd.exe. ‘None’ will not execute PSEXEC (handy if you just want to save the ticket)
-cuploads the filename for later execution, arguments are passed in the command option
-wwrites the golden ticket in CCache format into the file
-dc-ipIP Address of the domain controller (needed to get the users SID). If omitted it will use the domain part (FQDN) specified in the target parameter
-target-ipIP Address of the target host you want to attack. If omitted it will use the targetName parameter
-hashesNTLM hashes, format is LMHASH:NTHASH

domain/DC/user SID を RPC と LDAP/Kerberos 情報から集め、TGT/PAC を構築・署名して KDC exchange を行います。得られた service ticket を使い、選択により ccache 保存または PSEXEC 系の service install、named pipe I/O、対話 shell へ進みます。終了時は service と pipe を片付けます。

このコマンドは MS14-068 の脆弱な PAC 検証経路を再現するため、通常の Kerberos client より低い層で ticket と PAC を組み立てます。最初に SAMR/LSA 等から user SID、domain SID、DC/forest 情報を取得し、正規 account の credential で KDC との初期 exchange を成立させます。

脆弱性検証の中心は、権限 group 情報を含む PAC を構築し、KDC が受け入れる request/署名配置へ組み込む部分です。取得した ticket と session key は ccache に保存するか、SMB service ticket の取得へ進みます。後者では同一 ファイルにある PSEXEC 実装へ credential を渡し、service installation と named-pipe shell を開始します。

ticket 生成と remote execution は異なる責務ですが、この例では一つの end-to-end flow として同居しています。修正時は PAC/NDR offset、Kerberos key usage、SMB service cleanup を別々に検証します。patch 済み KDC の拒否を network/authentication failure と混同せず、脆弱性が成立しないことも正常な 検証結果として扱います。

シンボル位置責務を追う入口
RemComMessage69構造体/定数定義
RemComResponse79構造体/定数定義
PSEXEC91__init__()、run()、openPipe()
Pipes220__init__()、connectPipe()
RemoteStdOutPipe253__init__()、run()
RemoteStdErrPipe280__init__()、run()
RemoteShell298__init__()、connect_transferClient()、do_help()、do_shell()、do_get()、do_put()、do_lcd()、emptyline()、default()、send_data()
RemoteStdInPipe407__init__()、run()
MS14_068417__init__()、getGoldenPAC()、getKerberosTGS()、getForestSid()、getDomainControllers()、getUserSID()、exploit()
モジュール使用する主な名前
impacket.dcerpc.v5epm, samr, transport
impacket.dcerpc.v5.drsuapiDRSBind, DRS_EXTENSIONS_INT, DRS_EXT_GETCHGREPLY_V6, DRS_EXT_GETCHGREQ_V6, DRS_EXT_GETCHGREQ_V8, DRS_EXT_STRONG_ENCRYPTION, MSRPC_UUID_DRSUAPI, NTDSAPI_CLIENT_GUID, NULLGUID, hDRSDomainControllerInfo
impacket.dcerpc.v5.dtypesMAXIMUM_ALLOWED, RPC_SID
impacket.dcerpc.v5.lsadPOLICY_INFORMATION_CLASS, hLsarOpenPolicy2, hLsarQueryInformationPolicy2
impacket.dcerpc.v5.lsatMSRPC_UUID_LSAT, POLICY_LOOKUP_NAMES
impacket.dcerpc.v5.nrpcMSRPC_UUID_NRPC, hDsrGetDcNameEx
impacket.dcerpc.v5.rpcrtRPC_C_AUTHN_LEVEL_PKT_INTEGRITY, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, TypeSerialization1
impacket.krb5.pacKERB_SID_AND_ATTRIBUTES, KERB_VALIDATION_INFO, PACTYPE, PAC_CLIENT_INFO, PAC_CLIENT_INFO_TYPE, PAC_INFO_BUFFER, PAC_LOGON_INFO, PAC_PRIVSVR_CHECKSUM, PAC_SERVER_CHECKSUM, PAC_SIGNATURE_DATA, PKERB_VALIDATION_INFO
impacket.exampleslogger, remcomsvc, serviceinstall
impacket.examples.utilsparse_target
impacket.smbconnectionSMBConnection, smb
impacket.structureStructure
impacketversion
impacket.krb5.typesKerberosTime, Principal, Ticket
impacket.krb5constants
impacket.krb5.kerberosv5KerberosError, getKerberosTGS, getKerberosTGT, sendReceive
impacket.krb5.asn1AD_IF_RELEVANT, AP_REQ, AS_REP, Authenticator, AuthorizationData, ETYPE_INFO2_ENTRY, EncASRepPart, EncTGSRepPart, KERB_PA_PAC_REQUEST, TGS_REP, TGS_REQ, seq_set, seq_set_iter
impacket.krb5.cryptoKey
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.krb5.ccacheCCache
impacket.ntlmcompute_lmhash, compute_nthash
import 名配布パッケージ経路・宣言状態
Cryptodomepycryptodomex直接 import、宣言済み
pyasn1pyasn1直接 import、宣言済み
sixsix直接 import、宣言済み
  • 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
  • オプションによりローカルファイルを作成または更新します。既存ファイルの扱いと秘密情報を含む出力の権限を確認してください。
  • remote service、task、file、share、WMI/RPC resource などの一時資源を利用する経路があります。異常終了時の回収も動作契約です。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。
  • 明示的な cleanup 名がなくても finally 相当の経路と protocol handle の close/delete を確認します。

krb5.*、PAC/NDR、SAMR/LSA/RPC、SMB、examples.remcomsvc / serviceinstall に依存します。MS14_068 が ticket 処理、同ファイル内 PSEXEC 群が実行経路を所有します。