How I Exploited Unrestricted File Upload by bypassing Regex through Path Traversal ($$$ Bounty) ! から学ぶ

ソース:

medium.com

脆弱性: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 のいずれかで終わる

 

深く掘り下げると、

  1. まず、画像リンクは https://cdn.target.com.s3.amazonaws.com または https://s3.amazonaws.com/target-uploads-devで始まる必要があり
  2. 画像リンクの間には .gif または .png または .jpeg または .jpg を含める必要があり

ここで、s3 バケットに関する一般的な知識を学びましょう —

 

s3 バケットのコンテンツには、次のリンクからアクセスできます。

  1. https://bucketName.s3.amazonaws.com
  2. https://s3.amazonaws.com/bucketName

この情報をもとに、私は 2 つの結論を導き出しました。

 

  1. https://cdn.target.com.s3.amazonaws.com で始まる入力では正規表現をバイパスできません
    それは明らかですよね? これで始まる入力を入力し、それでも悪意のあるファイルを側からロードするにはどうすればよいですか
  2.  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 のようになり、正規表現をバイパスできなくなります。

 

ほなほな。