コンテンツにスキップ

Impacket DumpNTLMInfo.py

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

SMB または RPC で NTLM のネゴシエーションを行い、チャレンジに含まれる情報、SMB の設定、時刻などを表示します。

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

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

引数説明
target
-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/RPC Server(既定値: 445)
-protocolProtocol to use (SMB or RPC). Default is SMB, port 135 uses RPC normally.(選択肢: SMB, RPC)

protocol/port から SMB1、SMB2/3、RPC の実装を選び、negotiate、NTLM challenge 取得、必要に応じて anonymous authenticate の順に進みます。DumpNtlm が challenge と protocol 固有応答を共通表示へ変換します。

このコマンドは完全な authenticated session を作る前の negotiation 情報を 観察します。SMB では dialect negotiation と Session Setup の途中まで進み、 server が返す NTLM challenge を取り出します。RPC では Endpoint Mapper 等へ bind/request を送り、NTLM security provider が生成する challenge を同様に 解析します。

NTLM challenge の target info は AV pair の集合で、NetBIOS/DNS computer 名、 domain 名、timestamp、flags 等が入ります。DumpNtlm は protocol 固有 packet から challenge token を切り出した後、この共通構造へ渡します。SMB ではさらに dialect、signing required/enabled、server time、最大 read/write size などを negotiate response から表示します。

SMB1 と SMB2/3 は packet header、command、capability の表現が違うため、 SMB1 と SMB3 が低水準 request を別実装しています。wildcard negotiate から dialect を確定し、同じ socket 上で次 packet を正しく decode することが 重要です。null session の成功/失敗は policy 情報の一部ですが、認証可能な 一般 user の有無を示すものではありません。

シンボル位置責務を追う入口
RPC65__init__()、GetChallange()
SMB1119__init__()、GetNegotiateResponse()、GetChallange()、Authenticate()、send()、receive()
SMB3277__init__()、GetNegotiateResponse()、GetChallange()、Authenticate()、send()、receive()
SmbConnection398__init__()、IsSmb1Enabled()、NegotiateSession()、GetChallange()、Authenticate()
DumpNtlm483__init__()、DisplayInfo()、DisplayRpcInfo()、DisplaySmbInfo()、DisplaySigning()、DisplayDialect()、DisplayIo()、DisplayTime()、DisplayChallangeInfo()、DisplayNullSession()
モジュール使用する主な名前
impacketnmb, ntlm, version
impacket.exampleslogger
impacket.smbNewSMBPacket, SMB, SMBCommand, SMBExtended_Security_Data, SMBExtended_Security_Parameters, SMBNTLMDialect_Data, SMBNTLMDialect_Parameters, SMBSessionSetupAndXResponse_Parameters, SMBSessionSetupAndX_Extended_Data, SMBSessionSetupAndX_Extended_Parameters, SMBSessionSetupAndX_Extended_Response_Data, SMBSessionSetupAndX_Extended_Response_Parameters, SMB_DIALECT, UnsupportedFeature
impacket.smb3structs*
impacket.spnegoSPNEGO_NegTokenInit, SPNEGO_NegTokenResp, TypesMech
impacket.nt_errorsSTATUS_MORE_PROCESSING_REQUIRED, STATUS_SUCCESS
impacket.uuiduuidtup_to_bin
impacket.dcerpc.v5epm, transport
impacket.dcerpc.v5.rpcrt*
import 名配布パッケージ経路・宣言状態
sixsix直接 import、宣言済み
  • 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。

低水準 smb / smb3structs / ntlm / spnego、dcerpc.v5.rpcrt / transport / epm に依存します。標準 SMBConnection より下位を意図的に扱うため、packet field と dialect ごとの分岐を保ってください。