私はこのURLをテストすると次のURLをテストするため、パストラバーサルに対して脆弱であると思われるApacheサーバーを持っています:http://localhost/ATI/../test.txt
これはhttp://localhost/test.txt
に変更され、サーバーはtest.txt
ファイルの内容を表示します。
ただし、このURLをテストすると、http://localhost/ATI/../../../../../../../../../../../../../../../../../../../etc/Apache2/apach2.conf
はhttp://localhost/etc/Apache2/Apache2.conf
に変更されるため、サーバーは404 Not found response
を提供し、Apache2.conf
ファイルのコンテンツを表示しません。
私の最初の質問は、サーバー上のApacheのデフォルト設定を変更していないという事実に関して、パストラバーサル攻撃に対して安全であることを意味しますか?
そして私の2番目の質問は、サーバーがWebサーバーフォルダーのルートを越えてトラバースすることを許可しないのはなぜですか?つまりWebサーバーのlocalhostフォルダー以外の外部ファイルにアクセスできないのはなぜですか?サーバーに脆弱性がある場合、どのようにパストラバーサルを利用できますか?
Apache自体は、構成されたDocumentRoot
の外のファイルを提供するべきではありません。
説明している動作は、ブラウザがURLを変換してからサーバーに送信することが原因であると考えられます。
代行受信プロキシを使用する場合、http://localhost/ATI/../test.txt
、ブラウザは実際にhttp://localhost/test.txt
およびhttp://localhost/ATI/../../../../../../../../../../../etc/Apache2/apach2.conf
、http://localhost/etc/Apache2/Apache2.conf
がサーバーに送信されます。
パストラバーサルの脆弱性を確認する場合は、プロキシを使用する必要があります。
Telnetを使用して、実際に悪意のある要求を送信します。 Dinu Sが指摘したように、ブラウザはリクエストを混乱させており、Apacheはこれらのファイルを提供するべきではありませんAT ALL。チェックするには:
$ telnet 127.0.0.1 <server-port>
次に、手動でリクエストを入力します。
GET /../../../../../../../../../../../../../../../../../../../etc/Apache2/apach2.conf HTTP/1.1
Apache.confファイルで応答する場合は、脆弱です。そうでない場合は、404または503で応答する必要があります。