ソース:
脆弱性:FileUpload, Path Traversal
訳:
無制限のファイル アップロードとは実際には何でしょうか?
これを知っておくことは重要です。
無制限のファイル アップロードの脆弱性とは実際には何ですか?
Portswigger の公式ウェブサイトより —
ファイル アップロードの脆弱性とは、名前、タイプ、内容、サイズなどを十分に検証せずに、Web サーバーがユーザーにファイル システムへのファイルのアップロードを許可する場合に発生します。
これらに対する制限を適切に適用できない場合、基本的な画像アップロード機能であっても、代わりに任意の潜在的に危険なファイルをアップロードするために使用される可能性があることを意味します。
これには、リモート コード実行を可能にするサーバー側のスクリプト ファイルも含まれる可能性があります。
簡単に言うと、Web サイトで制限されているファイルの種類、名前、コンテンツ、またはサイズをアップロードする機能で。
ファイルの種類は数多くあり、バックエンド側またはフロントエンド側で開くと致命的な結果を招くため、開発者はそのファイルをアップロードから破棄します。
私の場合、ターゲットは特別で、独自のサーバーに画像をアップロードするのではなく、代わりにs3に画像をアップロードし、次のようにその画像リンクをデータベースに保存します。
「headerImage」 : 「https://cdn.target.com.s3.amazonaws.com/path/to/image.png」
インターネットからランダムな画像リンクを貼り付けてそのリンクを入力しようとしました。
つまり、Web サイトは不明なソースから画像を読み込んでおり、コンテンツ セキュリティ ポリシーに対する直接の脅威であることを意味します。
しかし、この正規表現によって保護されていたため、できませんでした。 この正規表現はエラーで公開されました。
/^(?:https?:\/\/)(cdn\.target\.com|s3\.amazonaws\.com\/target-uploads-dev)\/.+(gif|jpg|jpeg|png)/i
※この正規表現についてまとめると、、、
http://
またはhttps://
で始まる- ドメインが
cdn.target.com
またはs3.amazonaws.com/target-uploads-dev
である - パスが何らかの文字列で続いており
- 最後に
.gif
,.jpg
,.jpeg
,.png
のいずれかで終わる
深く掘り下げると、
- まず、画像リンクは https://cdn.target.com.s3.amazonaws.com または https://s3.amazonaws.com/target-uploads-devで始まる必要があり
- 画像リンクの間には .gif または .png または .jpeg または .jpg を含める必要があり
ここで、s3 バケットに関する一般的な知識を学びましょう —
s3 バケットのコンテンツには、次のリンクからアクセスできます。
この情報をもとに、私は 2 つの結論を導き出しました。
- https://cdn.target.com.s3.amazonaws.com で始まる入力では正規表現をバイパスできません 。
それは明らかですよね? これで始まる入力を入力し、それでも悪意のあるファイルを側からロードするにはどうすればよいですか - https://s3.amazonaws.com/targetBucketNameを使用してバイパスを実行できます。その方法を説明しましょう。
ここでパストラベラルを試してみよう、と思いました。 簡単ですよね?
https://s3.amazonaws.com/targetBucketName が攻撃者のファイルを持っているとしたら、 では、このリンクを入力するとどうなるでしょうか —
https://s3.amazonaws.com/targetBucketName/../AttackerBucket
上記のリンクは次のように解決されます
https://s3.amazonaws.com/AttackerBucket
そこで、同じ直感を使用して、バケットに svg をアップロードし、正規表現をバイパスするためにこの入力を構築しました。
https://s3.amazonaws.com/targetBucketName/../dingusden/xss.jpg.svg
Regex でのファイル拡張子チェックをバイパスするために、ファイルに xss.jpg という名前を付けました。
これでうまくいきました。 このファイルを開いてみると、実際に動作します。
注: 独自のバケットを構築する場合は、常にデフォルトのリージョンである us-east-1 リージョンを選択してください。
そうしないと、エンドポイントが変更され、バケットにアクセスするためのリンクが https://s3.amazonaws..com/ AttackerBucker のようになり、正規表現をバイパスできなくなります。
ほなほな。