バックグラウンド
IIS でホストされている脆弱なサービスに対してパス トラバーサル攻撃を実行しようとしています。
サービスは次のようなものです。
GET /api/download/{file-name}
基になるコードは次のようなものです。
return File.Read("some/directory/" + fileName);
書かれているように、このサービスは明らかに脆弱です。
ケストレルアタック
dotnet run
Kestrel Web サーバーを使用して収集した をローカルで実行すると、パス トラバーサル攻撃を実行できます。私の攻撃ペイロードは..\..\secret.txt
、エンコードされてログに表示されます:
Request starting HTTP/1.1 GET http://localhost/api/download/..%5C..%5Csecret.txt
IIS 攻撃
IIS でホストされている場合、同じアプリでこの攻撃を再現できません。IIS は何らかの形で を解釈して URI を正規化しているよう..\
です。つまり、API にヒットすることはありません。つまり、次のエンドポイントにヒットしようとします。
GET http://localhost/secret.txt
..\
文字シーケンスにさまざまなエンコーディングを試しましたが、うまくいきませんでした。
質問
この IIS の動作を回避して、IIS でホストされているこの脆弱なアプリに対してパス トラバーサル攻撃を実行するにはどうすればよいですか?