AWS - S3 Unauthenticated Enum
Last updated
Last updated
Apprenez et pratiquez le hacking AWS : Apprenez et pratiquez le hacking GCP :
Un bucket est considéré comme “public” si tout utilisateur peut lister le contenu du bucket, et “privé” si le contenu du bucket peut être listé ou écrit uniquement par certains utilisateurs.
Les entreprises peuvent avoir des permissions de buckets mal configurées donnant accès soit à tout, soit à tous les utilisateurs authentifiés dans AWS dans n'importe quel compte (donc à n'importe qui). Notez que même avec de telles mauvaises configurations, certaines actions peuvent ne pas être effectuées car les buckets peuvent avoir leurs propres listes de contrôle d'accès (ACL).
Découvrez les mauvaises configurations AWS-S3 ici : et
Différentes méthodes pour trouver quand une page web utilise AWS pour stocker certaines ressources :
Utiliser le plugin de navigateur wappalyzer
Utiliser burp (spidering le web) ou en naviguant manuellement à travers la page, toutes les ressources chargées seront sauvegardées dans l'historique.
Vérifiez les ressources dans des domaines comme :
Vérifiez les CNAMES car resources.domain.com
pourrait avoir le CNAME bucket.s3.amazonaws.com
Le nom du bucket et le nom de domaine du bucket doivent être les mêmes.
Vous pouvez trouver des buckets en brute-forçant des noms liés à l'entreprise que vous testez :
Vous pouvez obtenir la région d'un bucket avec un dig
et nslookup
en effectuant une demande DNS de l'IP découverte :
Vérifiez que le domaine résolu contient le mot "website".
Vous pouvez accéder au site web statique en allant à : flaws.cloud.s3-website-us-west-2.amazonaws.com
ou vous pouvez accéder au bucket en visitant : flaws.cloud.s3-us-west-2.amazonaws.com
Si vous essayez d'accéder à un bucket, mais dans le nom de domaine vous spécifiez une autre région (par exemple, le bucket est dans bucket.s3.amazonaws.com
mais vous essayez d'accéder à bucket.s3-website-us-west-2.amazonaws.com
, alors vous serez indiqué vers l'emplacement correct :
Pour tester l'ouverture du bucket, un utilisateur peut simplement entrer l'URL dans son navigateur web. Un bucket privé répondra par "Accès refusé". Un bucket public listera les 1 000 premiers objets qui ont été stockés.
Ouvert à tous :
Privé :
Vous pouvez également vérifier cela avec le cli :
Si le bucket n'a pas de nom de domaine, lors de la tentative de l'énumérer, mettez uniquement le nom du bucket et non l'ensemble du domaine AWSs3. Exemple : s3://<BUCKETNAME>
Il est possible de déterminer un compte AWS en tirant parti de la nouvelle S3:ResourceAccount
Clé de Condition de Politique. Cette condition restreint l'accès en fonction du bucket S3 dans lequel se trouve un compte (d'autres politiques basées sur le compte restreignent en fonction du compte dans lequel se trouve le principal demandeur).
Et parce que la politique peut contenir des caractères génériques, il est possible de trouver le numéro de compte un chiffre à la fois.
Cet outil automatise le processus :
Si l'erreur est un "Accès refusé", cela signifie que l'ID de compte était incorrect.
Vérifiez , un site avec déjà des buckets ouverts découverts.
flaws.cloud est en IP 52.92.181.107 et si vous y allez, cela vous redirige vers . De plus, dig -x 52.92.181.107
donne s3-website-us-west-2.amazonaws.com
.
Pour vérifier qu'il s'agit d'un bucket, vous pouvez également visiter .
(Contient une liste avec des noms de buckets potentiels)
Étant donné des buckets S3 ouverts, peut automatiquement chercher des informations intéressantes.
Vous pouvez trouver toutes les régions prises en charge par AWS dans
Cette technique fonctionne également avec les URL de l'API Gateway, les URL Lambda, les ensembles de données Data Exchange et même pour obtenir la valeur des tags (si vous connaissez la clé du tag). Vous pouvez trouver plus d'informations dans la et l'outil pour automatiser cette exploitation.
Comme expliqué dans , si vous avez les permissions pour lister un bucket, il est possible de confirmer un accountID auquel appartient le bucket en envoyant une requête comme :
Comme expliqué dans , il est possible de vérifier si une adresse e-mail est liée à un compte AWS en essayant d'accorder des permissions à un e-mail sur un bucket S3 via des ACL. Si cela ne déclenche pas d'erreur, cela signifie que l'e-mail est un utilisateur root de certains comptes AWS :
Apprenez et pratiquez le Hacking AWS : Apprenez et pratiquez le Hacking GCP :
Consultez les !
Rejoignez le 💬 ou le ou suivez nous sur Twitter 🐦 .
Partagez des astuces de hacking en soumettant des PRs aux et dépôts github.