私はOWASPの「WebGoat」(バージョン5.4)の脆弱なWebアプリケーションを使用していますが、HTTP応答分割に関する最初のレッスンの1つに行き詰まっています。
私はすべてのヒントと解決策を調べました(そして、interwebsに点在するすべてのチュートリアルでさえ調べました)が、それでも機能させることができません。
Webサーバーの応答も完全に変更しました。
HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
Location: http://localhost/WebGoat/attack?Screen=3&menu=100&fromRedirect=yes&language=en
Content-Length: 0
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 19
<html>Graeme</html>
Content-Type: text/html;charset=ISO-8859-1
Content-length: 0
Date: Sun, 28 Jul 2013 20:26:13 GMT
私はこれが私のブラウザに "Grezzo"を表示させることになっているとかなり確信していますが、代わりに2番目の応答ではなく最初の応答に従います。最初の "Content-Length:0"行も削除してみましたが、違いはありません。
何が起きてる?何か不足していますか?おそらく、最近のWebブラウザーは常に最初の応答に従いますか?
最も頻繁に省略されるHTTP応答分割(HRS)の基本的な部分はプロキシです。
HRSは、Webサーバーとブラウザー、またはブラウザーとWebサーバー間の攻撃ではありません。
攻撃は、準準拠のHTTPデバイス、つまりWebサーバーとWebプロキシの特異性に対するものです。
具体的には、攻撃は、Webサーバーが1つの応答セット(1つの応答)を認識し、プロキシが別のセット(2つの応答)を認識し、proxy splitsという事実を利用します。 1つは被害者への要求、もう1つは攻撃者(またはエーテル)への要求です。
したがって、この攻撃をテストするには、次の設定が必要です。
プロキシの部分を見逃したと思います...
私はハッカーマンではありませんが)、攻撃はサーバーに依存していると思います。したがって、サーバーがリクエストを正しく処理しない(またはレスポンスを正しく処理しない)場合、攻撃は成功します。
Broswerは常に最初の応答を処理します(古いブラウザーも最初の応答を処理します)。
しかし、この攻撃は、サーバーがヘッダー(例:Cookie)の1つに変数を配置したときに常に機能します。サーバーがリクエストを処理するとき、それは変数をTextareaからcookieに入れます(絶対に行わないでください)。したがって、クライアントはtextareaに次の文字列を書き込むことができます。
some data to cookies
Content-Type: text/html
Content-Length: 16
<H1>Hacked</H1>
したがって、サーバーがこの文字列をcookieに書き込むと、サーバーからの応答は次のようになります。
Connection:keep-alive
Content-Type:this server content-type (for example: application/json)
Set-Cookie:qqq="some data to cookies
Content-Length:16 - your length
Content-Type:text/html - your content type
<H1>Hacked</H1>
これはサーバーのバグではなく、Webサイトを作成するプログラマーのバグです。
必ずキャリッジリターンを使用してください。 PHP Charset Encoderは%0A
でのみエンコードしますが、応答で改行を取得するには%0D%0A
である必要があります。これが行われた場合のみ、応答はHTTP 200 OK
(または必要なもの)。