コンテンツにスキップ

send_request_cgi

send_request_cgi は HttpClient の CGI 互換 HTTP リクエスト API です。実装は lib/msf/core/exploit/remote/http_client.rb、opts の定義は lib/rex/proto/http/client.rb / client_request.rb です。

ページ内容
オプション一覧渡せる opts / datastore の一覧
HTTP メソッドとパラメータGET / POST / PUT / raw query / encode
認証と CookieBasic / フォームログイン / 自己登録 / Cookie jar / CSRF
本文と multipartJSON / 生の本文 / MIME / vars_form_data
リダイレクトと生リクエストsend_request_cgi! / send_request_raw
応答とデバッグ応答処理、パーサ、RCE 成功判定、HttpTrace
res = send_request_cgi(
{
'method' => 'GET',
'uri' => normalize_uri(target_uri.path, 'index.php'),
'vars_get' => { 'q' => '1' }
},
20 # timeout
)
return if res.nil?

メソッドの引数は次のとおりです。

send_request_cgi(opts = {}, timeout = 20, disconnect = true)
引数意味
optsリクエスト内容の Hash
timeout秒。datastore['HttpClientTimeout'] を渡すことも多い
disconnect応答後に切断するか。既定値は true

タイムアウト / 接続失敗時は nil が返ります。必ず確認します。

send_request_cgi と send_request_raw の使い分け

Section titled “send_request_cgi と send_request_raw の使い分け”
API向いていること
send_request_cgivars_get / vars_post / フォーム / Cookie jar
send_request_raw仕様外メソッド、壊した HTTP、非 HTTP 風
send_request_cgi!30x リダイレクトを追う
やりたいこと使うキー / API
query 付き GETvars_get
フォーム POSTvars_post
生 query 文字列query
JSON / 任意本文data + ctype
multipart 手動Rex::MIME::Message + data + ctype
multipart 簡易vars_form_data
Basic 認証authorization / basic_auth
フォームログイン継続keep_cookies
自己登録 → ログイン登録 POST → ログイン POST + keep_cookies
認証後の JSON APIログイン時に keep_cookies、JSON 送信時に data + ctype
Cookie 固定cookie
追加ヘッダheaders
Host 上書きvhost
別ホストへ一時送信rhost / rport / SSL
リダイレクト追従send_request_cgi!
エンコード無効encode_params: false
  • ctype は送信する本文の形式を Content-Type ヘッダで指定します。JSON の場合は 'ctype' => 'application/json' を使います。POST で省略すると application/x-www-form-urlencoded が付きます。
  • Accept は受け取りたい応答の形式を指定します。JSON を要求する場合は 'headers' => { 'Accept' => 'application/json' } を使います。ctype を指定しても Accept は自動で付かないため、コンテンツネゴシエーションが必要な API では両方を指定します。