応答とデバッグ
応答の見方と、リクエストが期待通りかを確認する方法です。
nil / ステータス / 本文
Section titled “nil / ステータス / 本文”res = send_request_cgi(...)fail_with(Failure::Unreachable, "#{peer} - no response") if res.nil?fail_with(Failure::UnexpectedReply, "HTTP #{res.code}") unless res.code == 200
print_status(res.headers['Server'].to_s)print_line(res.body[0, 200])Cookie / Location / JSON / HTML / XML
Section titled “Cookie / Location / JSON / HTML / XML”cookies = res.get_cookiesloc = res.redirection if res.redirect?json = res.get_json_documenthtml = res.get_html_documentxml = res.get_xml_documentinputs = res.get_hidden_inputs| メソッド | 戻り値 |
|---|---|
get_json_document | JSON をパースした値。構文エラー時は空の Hash |
get_html_document | Nokogiri の HTML ドキュメント |
get_xml_document | Nokogiri の XML ドキュメント |
get_hidden_inputs | フォームごとの hidden フィールドを収めた Array<Hash> |
get_cookies | Set-Cookie から作成した Cookie 文字列 |
redirection | Location ヘッダの URI。取得できない場合は nil |
title = res.get_html_document.at('title')&.texttoken = res.get_html_document.at_xpath("//input[@name='csrf_token']/@value")&.textsession_id = res.get_hidden_inputs.dig(0, 'sessionid')RCE エンドポイントの成功判定
Section titled “RCE エンドポイントの成功判定”execute_command の成否は、その API が実際に返す応答に合わせます。
| 実際の応答 | 扱いの例 |
|---|---|
| コマンド実行中にリクエストがタイムアウトする | 非同期実行を確認できる場合に限り、res.nil? を成功として扱う |
HTTP 200 と JSON({"result": ...} など) | res.code == 200 と get_json_document を確認する |
| HTTP 500 の HTML エラーページ | ステータスコードとタイトル・本文を確認する |
res = send_request_cgi(...)fail_with(Failure::Unreachable, "#{peer} - no response") if res.nil?json = res.get_json_documentfail_with(Failure::UnexpectedReply, "HTTP #{res.code}") unless res.code == 200 && json.is_a?(Hash) && json.key?('result')get_json_document は JSON の構文エラー時に空の Hash を返すため、期待するキーまで確認します。この例では HTTP 200 と result キーを成功条件にしています。
タイムアウト
Section titled “タイムアウト”send_request_cgi({ ... }, datastore['HttpClientTimeout'] || 30)遅い upload やログインではモジュール側の advanced オプション HttpClientTimeout を延ばします。
HttpTrace
Section titled “HttpTrace”set HttpTrace trueset HttpTraceHeadersOnly falseset VERBOSE truerun生の送受信が見えます。資格情報が log / spool に残る点に注意します。
evasion datastore(参考)
Section titled “evasion datastore(参考)”通常の検証環境では不要ですが、HttpClient には次のような evasion オプションがあります。
HTTP::uri_encode_modeHTTP::pad_get_params/HTTP::pad_post_paramsHTTP::shuffle_get_params/HTTP::shuffle_post_paramsHTTP::header_foldingHTTP::method_random_case
show evasion / show advanced で確認します。
- 応答処理と fail_with
- URI ヘルパー
- 同梱 wiki:
docs/metasploit-framework.wiki/How-to-Send-an-HTTP-Request-Using-HttpClient.md - 同梱 wiki:
docs/metasploit-framework.wiki/How-to-parse-an-HTTP-response.md

