コンテンツにスキップ

HttpClient

Msf::Exploit::Remote::HttpClient は HTTP(S) クライアント機能の中心です。実装は lib/msf/core/exploit/remote/http_client.rb です。

include Msf::Exploit::Remote::HttpClient

自動で入る主なオプションです。

オプション意味
RHOST / RPORT接続先
VHOSTHost ヘッダ / 仮想ホスト
SSLTLS の有無
Proxiesプロキシ
UserAgentUser-Agent
HttpUsername / HttpPasswordクライアント認証用
HttpClientTimeoutタイムアウト
HttpTrace生リクエスト/レスポンス表示
DOMAINNTLM / Kerberos 用
HTTP::*evasion 系
メソッド用途
send_request_cgi(opts, timeout=20, disconnect=true)CGI 互換リクエスト
send_request_raw(opts, timeout=20, disconnect=false)生 / 仕様外リクエスト
send_request_cgi!(opts, timeout=20, redirect_depth=1)リダイレクト追従
basic_auth(user, pass)Basic 用 Authorization 値
normalize_uri(*parts)パス結合
target_uriTARGETURI の URI オブジェクト
full_uri絶対 URL 文字列
connect / disconnect接続の明示管理
rhost / rport / peer / vhost / ssl接続情報ヘルパー
http_fingerprintServer / 指紋
def check
res = send_request_cgi(
'method' => 'GET',
'uri' => normalize_uri(target_uri.path, 'index.php')
)
return CheckCode::Unknown('no response') if res.nil?
return CheckCode::Appears if res.body.include?('ExampleApp')
CheckCode::Safe
end
# 接続を再利用したいとき
connect
res1 = send_request_cgi('uri' => '/', 'method' => 'GET')
res2 = send_request_cgi('uri' => '/admin', 'method' => 'GET')
disconnect
# デバッグ
# set HttpTrace true
# set HttpTraceHeadersOnly true
パターンやり方
単発 GETsend_request_cgi('method'=>'GET', 'uri'=>...)
フォームログイン継続keep_cookies: true のあと通常リクエスト
Basic'authorization' => basic_auth(u, p)
JSON API'ctype'=>'application/json', 'data'=>hash.to_json
multipart アップロードvars_form_data または Rex::MIME::Message
リダイレクト追従send_request_cgi!
仕様外 HTTPsend_request_raw
接続再利用connect → 複数リクエスト → disconnect
指紋http_fingerprint / HttpFingerprint 定数

リクエスト opts の全パターンは send_request_cgi を参照してください。URI ヘルパーは URI ヘルパー です。