AWS - S3 Unauthenticated Enum
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
バケットは、「パブリック」と見なされるのは、任意のユーザーがバケットの内容をリストできる場合であり、「プライベート」は、バケットの内容が特定のユーザーによってのみリストまたは書き込まれる場合です。
企業は、バケットの権限が誤って設定されている可能性があり、すべてまたはAWSの任意のアカウントで認証されたすべてのユーザーにアクセスを許可することがあります(つまり、誰にでも)。このような誤設定があっても、バケットには独自のアクセス制御リスト(ACL)があるため、特定のアクションが実行できない場合があります。
AWS-S3の誤設定について学ぶにはこちらを参照してください: http://flaws.cloud および http://flaws2.cloud/
ウェブページがAWSを使用してリソースを保存しているかどうかを見つけるためのさまざまな方法:
wappalyzerブラウザプラグインを使用
burpを使用して(ウェブをスパイダーする)または手動でページをナビゲートすることで、すべてのリソースが履歴に保存されます。
リソースを確認するドメインの例:
CNAMESを確認する。resources.domain.com
は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/を訪問することもできます。
企業に関連する名前をブルートフォースすることでバケットを見つけることができます:
https://github.com/jordanpotti/AWSBucketDump(潜在的なバケット名のリストを含む)
オープンなS3バケットがある場合、BucketLootは自動的に興味深い情報を検索できます。
AWSがサポートするすべてのリージョンは、https://docs.aws.amazon.com/general/latest/gr/s3.htmlで確認できます。
dig
およびnslookup
を使用して、発見されたIPのDNSリクエストを行うことでバケットのリージョンを取得できます:
ドメインが「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をウェブブラウザに入力することができます。プライベートバケットは「アクセス拒否」と応答します。パブリックバケットは、保存された最初の1,000オブジェクトをリストします。
誰でもアクセス可能:
プライベート:
これをCLIで確認することもできます:
バケットにドメイン名がない場合、列挙しようとするときは、バケット名のみを入力し、全体のAWSs3ドメインは入力しないでください。例: s3://<BUCKETNAME>
新しい S3:ResourceAccount
ポリシー条件キーを利用することで、AWSアカウントを特定することが可能です。この条件は、アカウントが存在するS3バケットに基づいてアクセスを制限します(他のアカウントベースのポリシーは、リクエスト元のプリンシパルが存在するアカウントに基づいて制限します)。
ポリシーにはワイルドカードを含めることができるため、1つの数字ずつアカウント番号を見つけることが可能です。
このツールはそのプロセスを自動化します:
この技術は、API Gateway URLs、Lambda URLs、Data Exchange データセット、さらにはタグの値を取得するためにも機能します(タグキーがわかっている場合)。詳細については、元の研究と、この悪用を自動化するためのツールconditional-loveを参照してください。
このブログ記事で説明されているように、バケットをリストする権限がある場合、次のようなリクエストを送信することで、バケットが属するアカウントIDを確認することが可能です:
もしエラーが「アクセス拒否」であれば、それはアカウントIDが間違っていることを意味します。
このブログ記事で説明されているように、S3バケットに対してACLを介してメールに権限を付与しようとすることで、メールアドレスがAWSアカウントに関連しているかどうかを確認することが可能です。これがエラーを引き起こさない場合、そのメールはあるAWSアカウントのルートユーザーであることを意味します。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)