telnet コマンドを使用すれば、HTTP リクエストを自分で作成して送信することができるようになります。
HTTP リクエストのメソッドには主に以下のものがあります。
GET | サーバーのリソースを取得する |
POST | クライアントのデータを送信する |
OPTIONS | サポートしているHTTPメソッド等の情報を返す |
TRACE | リクエストした内容をそのままレスポンスで返す |
セキュリティ目的で使用するのは OPTIONS メソッドと TRACE メソッドです。
それは、TRACE メソッドが有効になっているとブラウザの脆弱性やクロスサイト・スクリプティングの脆弱性により、ブラウザのリクエスト内容が攻撃者に取得されてしまうクロスサイト・トレーシングという攻撃が可能になるためです。
最近のブラウザではクロスサイト・トレーシングの脆弱性は解消されつつあり、現在はそれほど気にしなくてもよいレベルになっているようです。しかし、クロスサイト・スクリプティングの脆弱性の保険的な対策としての意味もあり、一般的には TRACE メソッドは無効にします。
では、telnet で HTTP リクエストを送信してみましょう。今回は、CentOS 上の Apache を対象としています。なお、この処理は自分の管理下にあるサーバーにのみ行なってください。
まず、コマンドプロンプトを起動して以下のコマンドを実行します。
telnet サーバー名 ポート番号
今回は HTTP(80) の通信でローカルサーバーが対象になりますので、以下のようになります。
telnet 192.168.11.9 80
すると telnet コマンドが入力待ちになりますので、以下のコマンドを入力して最後に改行を2回行います。コマンドの入力中は画面に文字が表示されませんが、あせらずに入力してください。
OPTIONS / HTTP/1.1
Host: 192.168.11.9
この OPTIONS メソッドのレスポンスは以下のようになりました。
HTTP/1.1 200 OK
Date: Mon, 18 Feb 2013 06:08:03 GMT
Server: Apache
X-Frame-Options: DENY
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Length: 0
Connection: close
Content-Type: httpd/unix-directory
TRACE メソッドが有効になっていることが分かります。
では、今度は TRACE メソッドを実行してみます。
先ほどと同じように telnet コマンドを実行します。
telnet 192.168.11.9 80
そして以下のようにして、TRACE メソッドを実行します。
TRACE / HTTP/1.1
Host: 192.168.11.9
結果は以下のようになりました。TRACE メソッドが問題なく実行され、リクエストの内容も返ってきています。
HTTP/1.1 200 OK
Date: Mon, 18 Feb 2013 06:12:26 GMT
Server: Apache
Connection: close
Transfer-Encoding: chunked
Content-Type: message/http28
TRACE / HTTP/1.1
Host: 192.168.11.90
このようにして telnet コマンドを使用し HTTP リクエストを送信することで、サーバーの状態を調べることができます。自分が管理しているサーバーの状態がどのようになっているか確認してみるとよいかと思います。
コメント