AWS - S3 Unauthenticated Enum
S3 Public Buckets
バケットは、任意のユーザーがバケットの内容をリストできる場合、「パブリック」と見なされ、バケットの内容が特定のユーザーのみがリストまたは書き込みできる場合、**「プライベート」**と見なされます。
企業は、バケットの権限を誤って設定し、すべてのものまたはAWSの任意のアカウントで認証されたすべての人(つまり誰でも)にアクセスを許可することがあります。注意すべきは、そのような誤設定があっても、バケットが独自のアクセス制御リスト(ACL)を持っているため、いくつかのアクションは実行できない場合があることです。
AWS-S3の誤設定についてはこちらを参照してください: http://flaws.cloud および http://flaws2.cloud/
Finding AWS Buckets
ウェブページがAWSを使用してリソースを保存している場合を見つけるためのさまざまな方法:
Enumeration & OSINT:
wappalyzer ブラウザプラグインを使用
burp(ウェブのスパイダー)を使用するか、手動でページをナビゲートして、すべてのロードされたリソースが履歴に保存されます。
リソースを確認するドメイン:
resources.domain.com
のようなCNAMEを確認し、bucket.s3.amazonaws.com
のCNAMEを持っている可能性があります。すでに発見されたオープンバケットがあるウェブ https://buckets.grayhatwarfare.com を確認。
バケット名とバケットドメイン名は同じである必要があります。
flaws.cloudはIP 52.92.181.107にあり、そこに行くと https://aws.amazon.com/s3/ にリダイレクトされます。また、
dig -x 52.92.181.107
はs3-website-us-west-2.amazonaws.com
を返します。バケットであることを確認するために、https://flaws.cloud.s3.amazonaws.com/ を訪問することもできます。
Brute-Force
ペンテストしている会社に関連する名前をブルートフォースすることでバケットを見つけることができます:
https://github.com/jordanpotti/AWSBucketDump (潜在的なバケット名のリストを含む)
Loot S3 Buckets
S3オープンバケットがある場合、BucketLoot は自動的に興味深い情報を検索できます。
Find the Region
AWSがサポートするすべてのリージョンは https://docs.aws.amazon.com/general/latest/gr/s3.html で確認できます。
By DNS
発見されたIPのDNSリクエストを行うことで、**dig
およびnslookup
**を使用してバケットのリージョンを取得できます:
解決されたドメインに「website」という単語が含まれていることを確認します。
静的ウェブサイトにアクセスするには、次のURLに移動します: flaws.cloud.s3-website-us-west-2.amazonaws.com
または、バケットにアクセスするには、次のURLを訪問します: flaws.cloud.s3-us-west-2.amazonaws.com
試してみる
バケットにアクセスしようとする場合、ドメイン名に別のリージョンを指定すると(例えば、バケットが bucket.s3.amazonaws.com
にあるのに bucket.s3-website-us-west-2.amazonaws.com
にアクセスしようとすると)、正しい場所が示されます:
バケットの列挙
バケットの公開状態をテストするには、ユーザーはURLをウェブブラウザに入力するだけです。プライベートバケットは「Access Denied」と応答します。パブリックバケットは保存されている最初の1,000個のオブジェクトを一覧表示します。
全員に公開:
プライベート:
cliでもこれを確認できます:
バケットにドメイン名がない場合、列挙しようとするときにバケット名のみを入力し、AWSs3ドメイン全体を入力しないでください。例: s3://<BUCKETNAME>
Public URL template
公開バケットからアカウントIDを取得
新しい S3:ResourceAccount
ポリシー条件キー を利用することで、AWSアカウントを特定することが可能です。この条件は、アカウントが所属するS3バケットに基づいてアクセスを制限します(他のアカウントベースのポリシーは、リクエスト元のプリンシパルが所属するアカウントに基づいて制限します)。
そして、ポリシーにはワイルドカードを含めることができるため、一度に一つの数字だけでアカウント番号を見つけることが可能です。
このツールはそのプロセスを自動化します:
このテクニックは、API Gateway URLs、Lambda URLs、Data Exchange data sets、さらにはタグの値を取得するためにも機能します(タグキーを知っている場合)。詳細はoriginal researchおよびこのエクスプロイトを自動化するツールconditional-loveで確認できます。
バケットがAWSアカウントに属していることを確認する
このブログ記事で説明されているように、バケットをリストする権限がある場合、次のようなリクエストを送信することで、そのバケットが属するaccountIDを確認することが可能です:
エラーが「Access Denied」の場合、それはアカウントIDが間違っていることを意味します。
ルートアカウント列挙として使用されるメール
このブログ記事で説明されているように、S3バケットにACLを介してメールアドレスに権限を付与しようとすることで、そのメールアドレスがAWSアカウントに関連しているかどうかを確認することが可能です。エラーが発生しない場合、そのメールは何らかのAWSアカウントのルートユーザーであることを意味します:
参考文献
Last updated