コンテンツにスキップ

Impacket rpcmap.py

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

指定した DCE/RPC 接続先で、管理インターフェースや探索によって利用可能な UUID、バージョン、opnum を調べます。

項目内容
実装examples/rpcmap.py
カテゴリSMB / MSRPC / NTLM
規模378 行
配布setup.py の scripts=examples/*.py によりスクリプトとしてインストール

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

引数説明
stringbindingR|String binding to connect to MSRPC interface, for example: ncacn_ip_tcp:192.168.0.1[135] ncacn_np:192.168.0.1[\pipe\spoolss] ncacn_http:192.168.0.1[593] ncacn_http:[6001,RpcProxy=exchange.contoso.com:443] ncacn_http:localhost[3388,RpcProxy=rds.contoso:443]
-brute-uuidsBruteforce UUIDs even if MGMT interface is available
-brute-opnumsBruteforce opnums for found UUIDs
-brute-versionsBruteforce major versions of found UUIDs
-opnum-maxBruteforce opnums from 0 to N, default 64
-version-maxBruteforce versions from 0 to N, default 64
-auth-levelMS-RPCE auth level, from 1 to 6, default 6 (RPC_C_AUTHN_LEVEL_PKT_PRIVACY)
-uuidTest only this UUID
-debugTurn DEBUG output ON
-tsAdds timestamp to every logging output
-target-ipIP Address of the target machine. If omitted it will use whatever was specified as target. This is useful when target is the NetBIOS name and you cannot resolve it
-portDestination port to connect to SMB Server(選択肢: 139, 445、既定値: 445)
-auth-rpc[domain/]username[:password]
-auth-transport[domain/]username[:password]
-hashes-rpcNTLM hashes, format is LMHASH:NTHASH
-hashes-transportNTLM hashes, format is LMHASH:NTHASH
-no-passdon’t ask for passwords

transport と RPC 自体の資格情報を別々に設定し、指定 binding へ接続します。MGMT interface の一覧を基本とし、option により UUID、version、opnum の候補を bind/call して応答/fault を分類します。発見 tuple は既知 UUID database と照合して表示します。

rpcmap は既知 endpoint の一覧表示に加え、指定 string binding 上で interface を能動的に調べます。transport への接続後、Management interface が使える場合は server が列挙する interface ID を取得します。使えない場合や明示 option では、 UUID/version/opnum の候補に対して bind/call を行い、返る fault を分類します。

RPC transport authentication と RPC interface authentication は別設定です。 たとえば RPC over SMB では SMB session の credential で named pipe を開き、 その上の DCE/RPC auth trailer には別 credential/auth level を使えます。 set_transport_credentials() と set_rpc_credentials() を分けている理由です。

bind 成功は interface/version の存在を示し、op_rng_error は interface は 存在するが opnum が範囲外であることを示せます。一方 access denied は opnum 存在の可能性を残します。brute force は network 負荷と log を発生させるため、 上限、再接続、timeout を管理し、fault code を単純な成功/失敗に潰さないことが 探索精度を決めます。

シンボル位置責務を追う入口
RPCMap54__init__()、get_rpc_transport()、set_transport_credentials()、set_rpc_credentials()、set_smb_info()、connect()、disconnect()、do()、bruteforce_versions()、bruteforce_opnums()、bruteforce_uuids()、handle_discovered_tup()
モジュール使用する主な名前
impacket.httpAUTH_BASIC
impacket.exampleslogger, rpcdatabase
impacket.examples.utilsparse_identity
impacketuuid, version
impacket.dcerpc.v5.epmKNOWN_UUIDS
impacket.dcerpc.v5epm, mgmt, rpcrt, transport
impacket.dcerpc.v5.rpcrtDCERPCException
impacket.dcerpc.v5.transportDCERPCStringBinding, SMBTransport
impacket.dcerpc.v5.rpchRPC_PROXY_CONN_A1_0X6BA_ERR, RPC_PROXY_CONN_A1_401_ERR, RPC_PROXY_CONN_A1_404_ERR, RPC_PROXY_HTTP_IN_DATA_401_ERR, RPC_PROXY_INVALID_RPC_PORT_ERR, RPC_PROXY_RPC_OUT_DATA_404_ERR
  • 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。
  • 後始末に関係する実装として disconnect() があります。新しい早期 return や例外経路でも到達するか確認します。

dcerpc.v5.transport / rpcrt / epm / mgmt、examples.rpcdatabase に依存します。RPCMap は transport auth と RPC auth を別 state として持つため、統合しないでください。