Common Bugs found in File Upload Functions から学ぶ

ソース:

medium.com

脆弱性:FileUpload

 

訳:

ファイルのアップロードは、Web アプリによくある機能です。
SNSアプリや求人アプリなどで見かけることがありますが、開発者が見落としがちな分野の一つでもあります。

 

ファイルアップロードIDOR

これは、開発者によって最も一般的であるにもかかわらず見落とされている脆弱性の 1 つです。
たとえば、ファイルをアップロードでき、リクエストを投稿できる場合は次のようになります。

 

POST /uploads/12345/
file=profile.jpg

 

12345 があなたのユーザー ID であると仮定すると、ユーザー ID を被害者の ID (例: 23456) に修正するだけで、昔ながらの IDOR チェックを試すことができます。
jpg ファイルが被害者のアカウントにアップロードされるかどうかを確認できます。

この種のバグは通常、重大なバグとして分類されません。
なぜなら、あなたが生み出すことができる最大の影響は、被害者のプロフィール写真を変更するか、求職ウェブサイトに被害者のとんでもない履歴書をアップロードすることだけだからです。

したがって、このケースが発生した場合は、POST を DELETE に変更してエスカレーションを試みることができます。
被害者のアセットを削除できるかどうかを確認してください。 その場合、バグの重大度レベルが上がります。

 

ファイル名XSS

検索ボックスに XSS ペイロードを実行する以外に、アップロードするファイル名に XSS ペイロードを挿入しようとしたことはありますか?
たとえば、ソーシャル メディア アプリでは、アップロードしたプロフィール写真が次のようにプロフィール ページに表示されていることがわかりました。

 

<img src="youruploadpic.jpg" width="400" height="235">

 

次に、画像の名前を「><script>alert(“XSS”).jpg</script><」に修正してみましょう。
したがって、プロフィール ページを再度参照すると、次のように表示されます。 

 

<img src="“><script>alert(“XSS”).jpg</script><" width="400" height="235">

 

そのため、Web アプリに適切なサニタイズが行われていない場合、誰かがあなたのプロフィール ページにアクセスすると、XSS ポップアップ ボックスがトリガーされる可能性があります。
上記のペイロードは機能しませんか?
ファイル名を XSS ペイロードでファジングして試してみてください。 

 

CSVインジェクション

お気づきかと思いますが、CSV ファイルには計算を行うための数式を入れることができます。
しかし、コードはどうでしょうか? はい!
CSV ファイルにコードを挿入することもできます。
そのため、Web アプリがアップロードされた CSV ファイルのコンテンツを適切にサニタイズしない場合、悪意のあるコードを含む CSV ファイルが Web にアップロードされ、管理者または他のユーザーによってダウンロードされる可能性があります。
そのため、攻撃者は被害者を管理されているサイトにリダイレクトしたり、被害者のマシン上でコードを実行したりする可能性があります。
ペイロードのいくつかの例は、以下の github リポジトリにあります。

 

github.com

実行可能ファイルをアップロードする

これは、ファイルアップロード機能の中で最も重要なものです。
成功すればRCEになる可能性があるからです。
したがって、アイデアは非常に簡単です。
画像をアップロードするように求められた場合は、.php Web シェル、.jspx ファイルなどをアップロードして、正常にアップロードできるかどうかを確認してください。
アップロードしたページにアクセスしてコマンドを実行してみてください。

しかし、もちろん、最近のほとんどの Web アプリには、実行可能ファイルのアップロードに対する一定の保護が備わっています。

したがって、ファイルのアップロードが次のようになったとします。

 

・Line Termination Trick

Content-Disposition: form-data; name="file" filename="webshell.
p
h
p"
Content-Type: image/jpeg

 

 

・Content-Disposition Overflow

Content-Disposition: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA form-data; name="file" filename="webshell.php"
Content-Type: image/jpeg

 

・File Name Overflow

Content-Disposition: form-data; name="file" filename="webshellAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php"
Content-Type: image/jpeg

 

・Duplicated Line

Content-Disposition: form-data; name="file" filename="profile.jpg"
Content-Disposition: form-data; name="file" filename="webshell.php" Content-Type: image/jpeg

 

・Double Extension

Content-Disposition: form-data; name="file" filename="webshell.php.jpg" Content-Type: image/jpeg

 

上記はほんの一例です。
保護メカニズムを回避するには、他にもさまざまな方法を試してみることができます。 最も重要なことはあなたの創造性です。 

 

ほなほな。