HTTPリクエスト/レスポンスのキャプチャ

| | コメント(8) | トラックバック(0)

Webアプリのテストに使えるHTTPリクエスト/レスポンスを見るツールたち。
他にも色々あると思いますが、とりあえず。

LiveHTTPHeaders

・mozdev.org - livehttpheaders: index
http://livehttpheaders.mozdev.org/

LiveHTTPHeadersは、リクエスト/レスポンスを閲覧できるMozilla/Firebirdの拡張機能。
一度送信したリクエストを編集して再送することもできます。

普通(?)リクエスト/レスポンスの内容を見るには、ローカルマシンに別 Proxy を起動し、そこに流れるデータを見るのが一般的だと思います。
これはブラウザの機能として追加されているのでその手間がかからず楽かも。

Body情報は見えません。
HTTPS対応

今回試したバージョンは、LiveHTTPHeaders 0.7。
Windows版のMozilla Firebird 0.6.1上で使ってみました。

● インストール
Mozilla/Firebirdで以下のサイトにアクセスし、希望のバージョンの「Install version X.X of LiveHTTPHeaders now」リンクをクリックします。

・mozdev.org - livehttpheaders: installation
http://livehttpheaders.mozdev.org/installation.html

後は指示に従ってインストールを行い、Netscape 7/Mozillaを再起動すれば、インストールは完了です。

● 起動方法
「Tools」>「Web Development」>「Live HTTP Headers」(Mozilla)
「ツール」>「Web開発」>「Live HTTP Headers」 (Wazilla)
「ツール」>「Live HTTP Headers」 (Mozilla Firebird)

(2003/12/28 追記)
もう1つ追加される項目がありましたね。
「ページの情報ダイアログ」に「Header」タブが追加されます。
「ページの情報ダイアログ」の表示方法は

  • 右クリック>「ページの情報を表示」
  • 「View」メニュー>「Page Info」 (Mozillaの時)
  • 「ツール」メニュー>「ページの情報」 (Firebirdの時)
  • Ctrl+I (Mozillaの時)
  • Ctrl+J (Firebirdの時)

などです。

● 注意
multipart/form-data なリクエストのボディー部に日本語(EUC-JP/Shift_JIS/ISO-2022-JP/UTF-8)が含まれていると文字化けしてしまうらしい。

● バージョン0.8が出ていました (2003/12/28 追記)
記録するURLを正規表現で指定することができるようになりました。
「Live HTTP header」ダイアログの「Config」タブの「Filter URLs with regexp」で設定できます。

初期値は

/$|.html$

となってました。
「/」で終わるか「.html」で終わるって事ですね。

「.」は任意の文字と解釈されないんですね。

QueryStringを含むものを抽出するには以下のようにします。

\?

以下のようにしたら、画像ファイルを抽出しませんでした。

[^(.gif)(.png)(.jpg)(.jpeg)]$

● 気づいたバグ? (2003/12/28 追記)
Firebird0.7 + Live HTTP header 0.8 and 0.7 で確認しました。
「Live HTTP header」ダイアログの「Header」タブを表示していると、Firebirdのタブを切り替えたり、別のリンクに飛んでもてもURLの表示が変わらないです。
そして、「Live HTTP header」ダイアログを閉じたり、「Live HTTP header」ダイアログの「Config」タブや「About」タブに移動すると、URLが表示される場所がババババーと切り替わって、正しいURLが表示されます。
これってバグなんででしょうか?仕様でしょうか?
それとも私だけ?

tamperdata (2005/09/18 追記)

Firefoxの拡張機能。

mozdev.org - tamperdata: index
http://tamperdata.mozdev.org/index.html

上のパネルに1リクエスト当たり1行でリクエスト情報が表示される。
左下にリクエスト情報、右下のパネルにレスポンス情報が表示される。

レスポンスボディを表示したい時は、上パネルの1行を右クリックして、「Details」を選択する。

URLやCOOKIEを表示して、そのダイアログの「decode」ラジオボタンを選択すると、decodeできるみたいだけど、日本語はうまくデコードできないなぁ。
EUC-JPとUTF-8なものはだめだったぽい。

秀丸エディタの作者が作ったもの

・秀まるおのホームページ−ソフトウェア−横取り丸
http://hide.maruo.co.jp/software/ydm.html

・秀まるおのホームページ−ソフトウェア−InetSpy
http://hide.maruo.co.jp/software/inetspy.html
を併用すると、リクエスト/レスポンスの内容を見ることが出来ます。
編集は不可。HTTPSは非対応だと思う。
Bodyも見えます。

(2004/10/10 追記 ここから)
・横取りソフト開発キット (秀まるおのホームページ−ソフトウェア−横取り丸)
http://hide.maruo.co.jp/software/ydmkit.html
横取り丸用の組み込みソフトである「横取りソフト」を開発するためのキット
サンプルコードとして「InetSpy」のソースコードが入ってます。
修正したい人や、横取り丸対応のソフトを作りたい人にはいいかも。

VC++5.0でコンパイルできます。
VC++6.0用の修正版ヘッダファイルもダウンロードできます。

VC++ 6.0でコンパイルすると、以下のエラーが出るらしい。

c:\横取り丸\src\inetspysrc\setup.cpp(109) : error C2664: 'CallWindowProcA' : 1 番目の引数を 'int (__stdcall *)(void)' から 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' に変換できません。 (新しい機能 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
c:\横取り丸\src\inetspysrc\setup.cpp(126) : error C2664: 'CallWindowProcA' : 1 番目の引数を 'int (__stdcall *)(void)' から 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' に変換できません。 (新しい機能 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
コンパイル時のエラーメッセージ

なので、コンパイルする時は、「プロジェクト」>「設定」>「C/C++」タブで、「/D "NO_STRICT"」オプションを指定してあげればいいらしい。
(2004/10/10 追記 ここまで)

Odysseus

・WT: Home
http://www.wastelands.gen.nz/

HTTPSの通信もOK。
ただし、ブラウザからOdysseusにアクセスする際、Odysseusがもっているサーバ証明書を一度、使用するためホスト名などが不正といわれます。
Body情報は見えないと思います。

Pegasus

・Pegasus
http://www.devnull.jp/tdiary/?date=20030904#p03

proxy サーバとして動作し、ブラウザからの HTTP リクエストを受け取り、書き換えて送信するためのものです。HTTPS の場合でも、復号して書き換えることができます。
だそうです。

すいません。試してないです・・・。

Proxomitron

・Proxomitron.Info ...the Webhiker's Guide to Proxomitron.
http://www.proxomitron.info/

・Proxomitron-J
http://www.pluto.dti.ne.jp/~tengu/proxomitron/

・The Proxomitron - Universal Web Filter
http://www.pluto.dti.ne.jp/~tengu/proxomitron/help/Contents.html
日本語のヘルプ。

Proxyとして動作させるタイプ。
Proxomitron経由して、更に別のProxyを経由することも可能っぽい。
Proxomitronが使用するデフォルトポートは8080です。

  • ポップアップ広告抑止
  • リファラを隠す
  • クッキー無効
  • バナー広告の画像をテキストリンクに書き換え
  • カウンター無効

といったフィルタと呼ばれるルールが用意されている。
ルールを自作することも可能です。

● ルールを作成してみる (2004/06/18 追記)

○ 「Web Page Fileter」のルールを作成する

レスポンスボディを書き換えます。

正規表現は「[インストールフォルダ]\help\Matching Rules.html」を参考に。

「Web Page」ボタン>「New」ボタン>「test」ボタンで正規表現のテストができます。
「Matching Expression」と「Replacement Text」に適切な文字列を入力してから「test」を実行します。

某掲示板の「ttp://www/example.jp/path/to/」形式を「http://ime.nu/」経由のリンクに変更するルール。
もっと簡単に書けそうだけど、とりあえず。
変な動作をさせる事ができるかもしれないので、とりあえず、リンク先と表示は同じ(「http://ime.nu/」を含む)にしてみました。

Fileter Name     = Auto Link in a some message board
URL Match        = *.2ch.net/*
Match Expression = ([^hH]&&\1)ttp://([a-z-A-Z0-9./?&%#_\-~\\]+&&\2)
Replacement Text = \1<a href="http://ime.nu/\2" target="_blank">http://ime.nu/\2</a>

Proxomitronの「Web Page Fileter」の例

「Allow for multiple matches」を付けておくと、このルールを実行後に再びバッファに戻し、再度別のルールのチェックを行います。必要に応じてお好きな方を。

「OK」ボタン>「Apply」ボタン>ルールにチェック>「OK」ボタンを押してウィンドウを閉じます。
「The Proxomitron」ウィンドウ>「Web Page Fileter」にチェックを付けます。

○ 「Outgoing Header Filters」のルールを作成する

「Web Page Fileter」よりこっちのほうが簡単。
HTTPヘッダの出力を変更します。
考え方は「Incoming Header Filters」もまったく一緒です。
既にあるサンプルを見てるとある程度分かりそう。

実行する時は

  1. 「HTTP Header Filters」ウィンドウ>有効にしたいルールのOutをチェック>「Apply」ボタン>「OK」ボタン
  2. 「The Proxomitron」ウィンドウ>「Outgoing Header Filters」にチェック

ルールを作成します。
「The Proxomitron」ウィンドウ>「Headers」ボタン>「New」ボタンを押します。

「HTTP Header」の書式は以下の様になっているみたい。
「:(コロン)」以下は見てどんなルールか分かれば良いと思います。

編集したいヘッダ名: 説明文 ([Out|In|In+Out])

まず、デフォルトで準備されているルール。

HTTP Header        = Referer: Hide where we've been (Out)
URL Match          =
Header Value Match = *
Replacement text   = \u

「\u」は、現在のWebサイトのフルURLを意味します。
Refererは表示するURLと同じにります。

リンクや画像のリファラチェックをすり抜けちゃう可能性あり。
「Header Value Match」を空文字にすると(常にTRUEになるので)、リファラチェックをすり抜けちゃう可能性が上がりそう。

以下は、「http://www.google.co.jp/」に直接アクセスしたところ。
Refererも「http://www.google.co.jp/」になっています。

Proxomitronの「Outgoing Header Filters」の例

以下の様に入力すると、リファラがあったら、リファラを空文字に書き換えます。

HTTP Header        = Referer: The Referer is 0 length. (Out)
URL Match          =
Header Value Match = *
Replacement text   = \0

また、以下の様に入力すると、リファラヘッダのフィールド自体が削除されます。

HTTP Header        = Referer: Delete a Referer Header. (Out)
URL Match          =
Header Value Match = *
Replacement text   =

常にヘッダを付けるのはこうかな?
まず気付かれないだろうし、迷惑なだけという噂も。。。

HTTP Header        = X-My-Favorite-Girls-are: I LOVE... (Out)
URL Match          =
Header Value Match =
Replacement text   = Yamato Nadeshiko

指定ヘッダがなかった時だけ、ヘッダを追加する方法が分かりませんでした。

●「Log Window」ボタン

「HTTP Message Log」ウィンドウが表示され、ログが表示されます。
「HTTP Message Log」で、右クリックして出力する内容を設定できます。
○「View Posted data」をチェックすると、ポストしたバイト数、内容が表示されます。
- 灰色
○「HTML Debug Info」をチェックすると、HTMLのコードがブラウザに表示されます。
○「HTML filters」をチェックすると、フィルタした内容が表示されます。
- 紫
○「HTTP Headers」をチェックすると、HTTPヘッダーが表示されます。
リクエスト:黄色
レスポンス:緑
○「Local file requests」のチェックは不明
○「Misc. Infomation」をチェックすると、Connection、closeなどの情報が表示されます。
- 灰色

●「Proxy」ボタン

Proxomitron経由して、更に別の外部Proxyを経由することもできます。

Proximodo (2005/06/24 追記)

・Proximodo
http://proximodo.sourceforge.net/

Proxomitronのクローン。
未使用です。

(2004/02/17 追記 ここから)
Burp proxy

・Burp proxy (PortSwigger.net - web application hack tools)
http://portswigger.net/proxy/

2004/02/17 現在のバージョンは1.1です。

  • Javaで書かれています。(JavaVMが必要)
  • PROXYとして動作します。
    デフォルトのポート番号は5000。(バージョン1.1)
    デフォルトのポート番号は8080。(バージョン1.2)
  • HTTPSの通信もOKです。(クライアント認証は不可)
  • リクエストとレスポンスのデータを編集できます。
    テキストまたは、16進数でデータを表示/編集する事ができます。
  • ベーシック認証、NTLM認証、ダイジェスト認証でも使用できます。
  • リクエスト/レスポンスヘッダーを正規表現で自動的に置換できます。

● インストール
「burpproxy_v1.1.zip」をダウンロードし、適当なフォルダに解凍します。

● 起動
「proxy.bat」を実行すると、「Burp proxy」がGUIで起動します。

● 設定
「options」タブで設定を行います。

● 面白いと思った機能

○ キャッシュ機能
この機能を使うには「options」タブ>「general」>「cache requests (access at http://burp)」にチェックがついている必要があります。

  1. ブラウザでhttp://burp/にアクセスすると、今までアクセスした履歴が表示される。
  2. 履歴のURLをクリックすると、その時のリクエスト内容が表示される。
  3. 「repeat」ボタンをクリックすると、再送する。
  4. 「intercept」タブで捕まえるので、必要なら編集をして、「forward」ボタンを押す。「options」タブ>「client requests」>「intercept」にチェックがついている時)

○ 認証機能
「options」タブ>「handle www authentication in proxy」にWEBサーバーで行う認証を設定しておくと、認証をやってくれる。
でも、設定画面でパスワードは伏せ字にして欲しかったな・・・。

○ ヘッダーの置換機能
正規表現を使って、ヘッダーを書き換えることができます。
初期状態で「ユーザエージェントの偽装」「新しいデータの要求」「リファラーの削除」「COOKIEの発行キャンセル」に必要な正規表現が書かれていました。

「intercept」タブに表示されるデータは、置換後のデータのようです。

● 気になったこと
「HTTP/1.1 302 Moved Temporarily」のレスポンスを受け取った時、動かなくなりませんか?
「HTTP/1.1 302 Object moved」は大丈夫みたい。
何が違うんだろう?
あるいは、レスポンスのボディが空の時かもしれない。
(2004/02/17 追記 ここまで)

IE限定

別のエントリの書いたのでそちらを参照してください。
PROXYとして動作するのではなくて、IEに組み込まれてしまうので、PROXY設定の必要がないのが良いです。

SEE:
WEB情報を取得できるIEのプラグイン (このblogより)

Fiddler (2004/12/30 追記)

・Fiddler HTTP Debugger - Fiddler
http://www.fiddlertool.com/fiddler/

2004/12/30現在のバージョンは、v0.9.8.3。

PROXYとして動作します。
ポートは8888を使用します。

転送のスピードや、リクエスト、レスポンスの情報を見ることが出来ます。
表示形式は幾つか種類があります。
HTTPボディも表示できます。
また、リクエストを作成して送ることも出来ます(Request Builder)。

Fiddlerを起動すると、IEのPROXYの設定を自動で変更します。
終了すると、元の状態に戻します。

既にIEのPROXYが設定してあると、「IE」-「Fiddler」-「既に設定してあったPROXY」の順番で送られるようになります。
終了すると、元のPROXYの設定に戻ります。

IE以外のブラウザを使う時は手動で変更する必要があるようです。

色々出来そうだけど、ほとんど触ってないので分からないです。

トラックバック(0)

このブログ記事を参照しているブログ一覧: HTTPリクエスト/レスポンスのキャプチャ

このブログ記事に対するトラックバックURL: http://kinshachi.ddo.jp/mt/mt-tb.cgi/29

コメント(8)

taka :

はじめまして。takaと申します。

Burp proxy について教えていただきたいことがあるのですが・・・

今 web アプリを構築しているのですが、
その際、脆弱性をチェックするための検査ツールとしてBurp proxy を使用しようと思っています。

そこでBurp proxyをインストールしたのですが、Burp proxy を起動しても、ブラウザ上の動きがリクエスト・レスポンスとして表示されないのです。というか何も表示されません。

こちらのサイトに書かれていることも参考にしながらいろいろとチェックしたのですが、どうにもわからないのです。

ちなみにBurp proxyを起動する際には、Executable Jar File(burpproxy_v1.22) というファイルをダブルクリックして起動させています。

そもそも起動の方法が違うのでしょうかねー・・・
それとも、Java のソフトをインストールしただけではだめで、他に Java の設定が必要なのでしょうか?
それとも、Burp proxyを使用するための環境整備として Java 以外に何かあるのでしょうか?

悩んでます・・・
私は Java はまったくの素人なので知識がぜんぜんなく、どうしたらBurp proxyが正しく作動してくれるのか行き詰ってしまいました・・・。

どうやったら使えるようになるのか・・・どうか教えていただけますでしょうか?

ちなみに、Java はJava 2 Runtime Environment (J2RE), Standard Edition, v1.4.2をインストールしました。
PC の環境ですが、
Windows XP Professional Version 2002 Service Pack 2、
Intel(R) Celeron(TM) CPU 1133MHz 1.13 GHz、248 MB RAM
です。
使用しているブラウザは IEでVersion:6.0.2900.2180.xpsp_sp2
です。

もし、おわかりになるようでしたら教えていただけるとたいへんうれしいです♪

ike :

takaさん。

burp proxyのウィンドウは開いているようですね?
起動は「Executable Jar File」をダブルクリックで起動できるならそれでもいいですし、「proxy.bat」をダブルクリックでも良いです。

Proxyのポート設定がうまくできてないように思います。
2004/10/10現在のburp proxyのバージョンは1.22です。
1.22で使用しているデフォルトのポート番号は8080です。
このエントリを書いた時のバージョン1.1では5000だったと思います。(確か・・・。多分・・・。)

IEのProxyのポート設定を8080にします。
「インターネットオプション」>「接続」タブ>「Lanの設定」ボタン>「プロキシサーバー」>「LANにプロキシサーバーを使用する」にチェック>アドレス=localhost/ポート=8080 とします。
もっと細かく決めたいのであれば、「詳細設定」ボタンを押して設定してください。

どうでしょうか?

taka :

ikeさん、

Burp Proxy 作動するようになりました。

本当にありがとうございました。

どうやら「LANの設定」でプロキシの設定をして
いなかったのが原因のようです。普通の「設定」
の箇所でプロキシの設定はしたのですが・・・
意味なかったようです。

助かりました。感謝感謝です。

コンピュータ系blog万歳!

ike :

takaさん。
解決したようで、良かったですー。

私は脆弱性じゃないですが、調査中のWEBアプリ(orサーバー?)があります。
「暫くアクセスしてるとWEBサーバーが落ちてしまう」のだとか。
「特定のページにアクセスしつづけても落ちない」らしい。

暫く使っても再現が出来ないし、そればっかやってる時間もないので、自動アクセスしようかなと。
あちこちのページを巡回する必要があるんだけど、プルダウンで選択してPOSTする部分もあるので、どうやって自動化しようかなぁと考えてました。
横取り丸+InetSpyでキャプチャして、手動巡回した時のリクエストデータをファイルに落としておいて、それをnetcat (@Cygwin) で流してみようと思ってます。

リクエストヘッダのセッションCOOKIE部分は適当な文字(「___SESSION_COOKIE___」とか)に置き換えてファイルに保存しておきます。
「___SESSION_COOKIE___」をsed (@Cygwin) で現在のセッションCOOKIEに置換して、netcatでリクエストを送ってみようかと・・・。
実際はログとか吐き出すけど、こんな感じ?

**********
SET HTTP_SERVER="www.example.jp"
SET HTTP_PORT=80
SET SESSION_COOKIE=this_is_value_of_session_cookie
FOR %%R IN (*.req) DO type %%R | sed.exe -e s/___SESSION_COOKIE___/%SESSION_COOKIE%/g | nc.exe -v %HTTP_SERVER% %HTTP_PORT%
**********

ちなみに、InetSpyはソースが公開されているので(本文参照)、ちょっといじってレスポンスのみをファイルを書き出すように作り変えるとよさ気。

でも、この方法、なんかスマートじゃないので、別のいい方法があったら、教えてくださいー。

1ページだけじゃなくて、実際の運用時に近い状態で(?)色々なページにアクセスした時の耐久試験ってどうやれば良いのかしら?
複数リクエストを登録できる負荷ツールはあるけど、URL調べたり、QueryString調べたり、POSTデータ調べたりするのはページが多いと辛いなぁって。
TEXTボックスがあったら適当なデータを入れて、チェックボックスがあったらチェック入れて、ラジオボタンがあったら・・・、してくれるツールはないかしらん?(贅沢)
Winにこだわってませんー。

#なんか、作業日記風。

taka :

ikeさん、

レスできずにスミマセンでした。ちょっくら PC 扱えない状況だったので遅くなってしまいました。

私も耐久試験や実際の運用に近い状態で一通りのテストが自動的にできるものがないか調べたのですが、やはりまだそのようなモノはないようですね。。。
(ぜんぜんアドバイスになってなくてスミマセン。というかもうだいぶ日にちがたってしまったので、
すでに解決されていることを願うばかりです・・・)

もし、何か役立ちそうな情報を入手しましたらご連絡しますね。

ike :

takaさん。
大丈夫ですよー。
やっぱりそういうのはないですよねー。
何かの時はよろしくお願いしますー。

Anonymous :

httpunitとかは?

ike :

>httpunitとかは?
なるほどなるほど。
みてみますー。
いろんなリクエストの作成は簡単かしらー?

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、ikeが2003年10月10日 00:05に書いたブログ記事です。

ひとつ前のブログ記事は「Windowsをなるべく軽くする」です。

次のブログ記事は「Spybot S&D」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近のコメント

On HTTPリクエスト/レスポンスのキャプチャ
  • ike: >httpunitとかは? なるほどなる
  • 匿名: httpunitとかは?
  • ike: takaさん。 大丈夫ですよー。 やっぱ
  • taka: ikeさん、 レスできずにスミマセンで
  • ike: takaさん。 解決したようで、良かった
  • taka: ikeさん、 Burp Proxy 作
  • ike: takaさん。 burp proxyの
  • taka: はじめまして。takaと申します。 B
Powered by Movable Type 4.261