Web shell upload via path traversal
wienerでログイン
アバター画像をアップして、My accountに
![](https://blog.esna.tech/wp-content/uploads/2023/02/2-8-1024x783.jpg)
ヒストリーで、
GET /files/avatars/xx.jpg
を確認
*表示されない場合は、フィルターで、imageにチェック
![](https://blog.esna.tech/wp-content/uploads/2023/02/3-8-1024x782.jpg)
このリクエストをリピータに
![](https://blog.esna.tech/wp-content/uploads/2023/02/4-8-1024x783.jpg)
以下のファイルを作ります exploit.php
このファイルをアバターのアップ画面よりアップします。
*一見アップできたようにみえます。
![](https://blog.esna.tech/wp-content/uploads/2023/02/5-8-1024x782.jpg)
GET /files/avatars/exploit.php
リクエストをリピータに
![](https://blog.esna.tech/wp-content/uploads/2023/02/6-8-1024x782.jpg)
sendして、レスポンスをみると、
phpファイルをそのまま出力してます。
![](https://blog.esna.tech/wp-content/uploads/2023/02/7-6-1024x782.jpg)
ヒストリーで、POST /my-account/avatar
を探し、リピータに
Content-Disposition: form-data; name=”avatar”; filename=”exploit.php”
の行を探し、
パストラバーサルのシーケンスを加え、
Content-Disposition: form-data; name=”avatar”; filename=”../exploit.php”
に書き換え、sendします
![](https://blog.esna.tech/wp-content/uploads/2023/02/8-7-1024x782.jpg)
The file avatars/exploit.php has been uploaded
のレスポンスが返ります
![](https://blog.esna.tech/wp-content/uploads/2023/02/9-3-1024x782.jpg)
これは、サーバーで、パストラバーサルのシーケンスを削除しているようです
/ をURLエンコードすると、%2f になります
Content-Disposition: form-data; name=”avatar”; filename=”..%2fexploit.php”
に変えて
sendします
レスポンスに
The file avatars/../exploit.php has been uploaded
がついてます
../部分が削除されず通ったようです
ブラウザで一度、My accountにアクセスし、ヒストリーに戻ります
GET /files/avatars/..%2fexploit.php
をリピータに渡し、sendします
![](https://blog.esna.tech/wp-content/uploads/2023/02/10-3-1024x782.jpg)
404が返ってしまいます。
リクエスト時は、%2fのエンコードが邪魔するようです。
リクエストの %2f を / に変えて、sendします
![](https://blog.esna.tech/wp-content/uploads/2023/02/11-3-1024x782.jpg)
アップしたphpが実行され、
/home/carlos/secretの中身を表示しているようです
submit solutionより入力して、クリア!
![](https://blog.esna.tech/wp-content/uploads/2023/02/12-1-1024x782.jpg)
–)v
コメント