コンテンツにスキップ

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

子ドメインからフォレストルートへの権限昇格経路を検証します。DRS で資格情報を取得し、SIDHistory を含むチケットを作ります。

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

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

引数説明
targetdomain/username[:password]
-tsAdds timestamp to every logging output
-debugTurn DEBUG output ON
-wwrites the golden ticket in CCache format into the file
-target-execTarget host you want to PSEXEC against once the main attack finished
-targetRIDTarget user RID you want to dump credentials. Administrator (500) by default.
-hashesNTLM hashes, format is LMHASH:NTHASH
-no-passdon’t ask for password (useful for -k)
-kUse 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
-aesKeyAES key to use for Kerberos Authentication (128 or 256 bits)

child/parent domain、SID、DC を discovery し、NRPC/LSA/DRS で account と krbtgt key を取得します。PAC に parent enterprise admin RID 等を組み込んだ ticket を作成・署名し、root 側 service ticket を取得します。-target-exec 時は PSEXEC 経路へ渡します。

forest 内の child domain と root domain は別の krbtgt key と domain SID を 持ちます。このコマンドは child 側の権限から root 側へ届く trust/replication 経路を調べ、必要な SID と key material を集めて、追加 SID を含む PAC/ticket を構築する end-to-end 実装です。

discovery 段階では NRPC で DC/domain 情報を得て、LSA で SID/name を解決します。 credential 取得段階では DRSUAPI の name crack と replication request を使い、 対象 account record から RC4/AES key を選びます。_get_preferred_aes_key() などの fallback は KDC と account が使える enctype の差を吸収します。

ticket 段階では child identity の validation info に root domain の privileged SID を追加し、PAC checksum と ticket encrypted part を正しい key で署名します。 得た ticket は保存または root 側 host の service execution に渡されます。 domain discovery、DRS secret parsing、PAC 生成、PSEXEC cleanup は独立した 失敗境界なので、一つの generic exception でどこまで進んだかを失わないことが 重要です。

シンボル位置責務を追う入口
RemComMessage113構造体/定数定義
RemComResponse123構造体/定数定義
RetryableGoldenTicketError135構造体/定数定義
PSEXEC138__init__()、run()、openPipe()
Pipes266__init__()、connectPipe()
RemoteStdOutPipe298__init__()、run()
RemoteStdErrPipe325__init__()、run()
RemoteShell343__init__()、connect_transferClient()、do_help()、do_shell()、do_get()、do_put()、do_lcd()、emptyline()、default()、send_data()
RemoteStdInPipe451__init__()、run()
RAISECHILD460__init__()、getChildInfo()、getMachineName()、getDNSMachineName()、getParentSidAndTargetName()、DRSCrackNames()、DRSGetNCChanges()、getCredentials()、makeGolden()、raiseUp()、exploit()
モジュール使用する主な名前
impacketversion
impacket.krb5.typesKerberosTime, Principal
impacket.krb5constants
impacket.krb5.kerberosv5KerberosError, getKerberosTGS, getKerberosTGT
impacket.krb5.asn1AD_IF_RELEVANT, AS_REP, AuthorizationData, EncTicketPart
impacket.krb5.crypto_enctype_table, get_kerberos_key_for_enctype, get_matching_aes_key
impacket.dcerpc.v5.ndrNDRULONG
impacket.dcerpc.v5.samrGROUP_MEMBERSHIP, NULL, SE_GROUP_ENABLED, SE_GROUP_ENABLED_BY_DEFAULT, SE_GROUP_MANDATORY
impacket.exampleslogger, remcomsvc, serviceinstall
impacket.examples.utilsparse_identity
impacket.ntlmLMOWFv1, NTOWFv1
impacket.dcerpc.v5.dtypesMAXIMUM_ALLOWED, RPC_SID
impacket.dcerpc.v5.rpcrtRPC_C_AUTHN_GSS_NEGOTIATE, RPC_C_AUTHN_LEVEL_PKT_PRIVACY
impacket.dcerpc.v5.nrpcMSRPC_UUID_NRPC, hDsrGetDcNameEx
impacket.dcerpc.v5.lsatLSAP_LOOKUP_LEVEL, MSRPC_UUID_LSAT, POLICY_LOOKUP_NAMES, hLsarLookupSids
impacket.dcerpc.v5.lsadPOLICY_INFORMATION_CLASS, hLsarOpenPolicy2, hLsarQueryInformationPolicy2
impacket.krb5.pacKERB_SID_AND_ATTRIBUTES, PACTYPE, PAC_CLIENT_INFO_TYPE, PAC_INFO_BUFFER, PAC_LOGON_INFO, PKERB_SID_AND_ATTRIBUTES_ARRAY, VALIDATION_INFO, sign_pac
impacket.dcerpc.v5drsuapi, epm, samr, transport
impacket.smbconnectionSMBConnection, SessionError, smb
impacket.nt_errorsSTATUS_NO_LOGON_SERVERS
impacket.structureStructure
impacket.krb5.ccacheCCache
import 名配布パッケージ経路・宣言状態
pyasn1pyasn1直接 import、宣言済み
sixsix直接 import、宣言済み
  • 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
  • オプションによりローカルファイルを作成または更新します。既存ファイルの扱いと秘密情報を含む出力の権限を確認してください。
  • remote service、task、file、share、WMI/RPC resource などの一時資源を利用する経路があります。異常終了時の回収も動作契約です。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。
  • 明示的な cleanup 名がなくても finally 相当の経路と protocol handle の close/delete を確認します。

drsuapi / nrpc / lsad / samr、krb5.*、PAC/NDR、SMB/serviceinstall に依存します。RAISECHILD が discovery、credential、ticket を段階別 method に分けています。暗号 key の fallback と retry を変更する場合は RC4/AES の選択根拠を保持してください。