連載
» 2007年10月26日 00時00分 公開

もいちどイチから! HTTP基礎訓練中(2):リクエストをいじれば脆弱性の仕組みが見えるのだ! (2/3)

[杉山俊春,株式会社ユービーセキュア]

実際にツールを使ってみよう

クウ 「ツールを立ち上げて、ブラウザのプロキシにlocalhost:8008【注3】を指定して……」

【注3】

ツールによってデフォルトのポート番号は異なる。


 クウはツールのインストールが終わると、早速設定を行いブラウザからテスト環境にアクセスしてみた。

クウ 「おお。ツールになんか表示された!」

 ツールには、メッセンジャーでジュンさんに教えてもらったように、ブラウザのアドレスバーに入力した内容にブラウザが情報を追加したものが表示されていた。

 クウはHTTPリクエストを少し書き換えて送信してみた。すると、書き換えた内容がそのままWebサーバへ送信され、Webサーバからの応答がツールを経由した後にブラウザ上に結果が表示された。

図3 WebScarabを利用してHTTPリクエストを書き換える 図3 WebScarabを利用してHTTPリクエストを書き換える

クウ 「結果がちゃんとブラウザに表示されるのか。便利だなこれ【注4】

【注4】

ただし、Webアプリケーションの作りによっては、脆弱性の兆候がHTTPレスポンスヘッダ内などのブラウザで表示した際には見えない個所に現れることもあるので注意が必要だ


 クウは何度かツールを介した状態でブラウザからテスト環境へアクセスを行った。これらのツールの基本の挙動は、書き換えて転送するという書き換えて転送するというシンプルなものなので、クウにもすぐに使い方を理解することができた。

まずはRefererを書き換えてみる

 使い方を一通り理解することができたので、次にテストWebアプリケーションを作成しHTTPリクエストを書き換えた際の実際の挙動を確認してみることにした。

クウ 「まずは、よく見掛けるRefererでもいじってみるか」

 クウは最初に、HTTPリクエストヘッダの中でも目にすることが多いRefererに注目した。

<%
String referer = "";
if(request.getHeader("Referer")!=null){
      referer = request.getHeader("Referer");
   (略:適切なHTMLエンコード処理)【注5】
}
%>
<html>
(略)
<body>
REFERER = <%=referer%>
</body>
</html>
リスト1 Refererを出力するサンプルjspコード

【注5】

ここでは論点を明確化するために、HTMLエンコード処理の部分は略した。当然、実際のコードではHTMLエンコード処理を入れるべきである。


GET /referer.jsp HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Referer: kuu_referer_test
Accept-Language: ja
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: www.example.com:8080
Cookie: JSESSIONID=5DE1005227509756CB4D5DA059B71939
 

 

図4 書き換えられたHTTPリクエストとブラウザ上の変化 図4 書き換えられたHTTPリクエストとブラウザ上の変化

クウ 「おお。Refererが変わった! こういうふうになってたのかー」

ユウヤ 「……さっきからなに独り言をぶつぶついってるの?」

クウ 「く……。いやー、さっきいってたHTTPリクエストを書き換えるツールを見つけていじってたら意外と面白くってさー」

ユウヤ 「ほー。どんなのなん?」

クウ 「Refererとかが自由に書き換えられるんだよ。面白くない?」

ユウヤ 「……俺はあんまり興味ないな。」

クウ 「むぅー……。まあ、いいや。いろいろほかにも調べとこ」

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。