AWS - S3 Unauthenticated Enum
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Treinamento AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Treinamento GCP Red Team Expert (GRTE)
Um bucket é considerado “público” se qualquer usuário pode listar o conteúdo do bucket, e “privado” se o conteúdo do bucket pode ser listado ou escrito apenas por certos usuários.
As empresas podem ter permissões de buckets mal configuradas dando acesso tanto a tudo quanto a todos autenticados na AWS em qualquer conta (ou seja, a qualquer um). Note que, mesmo com tais configurações incorretas, algumas ações podem não ser realizadas, pois os buckets podem ter suas próprias listas de controle de acesso (ACLs).
Saiba mais sobre a má configuração do AWS-S3 aqui: http://flaws.cloud e http://flaws2.cloud/
Métodos diferentes para encontrar quando uma página da web está usando AWS para armazenar alguns recursos:
Usando o plugin de navegador wappalyzer
Usando burp (spidering a web) ou navegando manualmente pela página, todos os recursos carregados serão salvos no Histórico.
Verifique recursos em domínios como:
Verifique por CNAMES como resources.domain.com
que pode ter o CNAME bucket.s3.amazonaws.com
Verifique https://buckets.grayhatwarfare.com, um site com buckets abertos já descobertos.
O nome do bucket e o nome do domínio do bucket precisam ser os mesmos.
flaws.cloud está em IP 52.92.181.107 e se você for lá, ele redireciona você para https://aws.amazon.com/s3/. Além disso, dig -x 52.92.181.107
retorna s3-website-us-west-2.amazonaws.com
.
Para verificar se é um bucket, você também pode visitar https://flaws.cloud.s3.amazonaws.com/.
Você pode encontrar buckets forçando nomes relacionados à empresa que você está testando:
https://github.com/jordanpotti/AWSBucketDump (Contém uma lista com nomes de buckets potenciais)
Dado buckets S3 abertos, BucketLoot pode automaticamente procurar informações interessantes.
Você pode encontrar todas as regiões suportadas pela AWS em https://docs.aws.amazon.com/general/latest/gr/s3.html
Você pode obter a região de um bucket com um dig
e nslookup
fazendo uma solicitação DNS do IP descoberto:
Verifique se o domínio resolvido contém a palavra "website".
Você pode acessar o site estático indo para: flaws.cloud.s3-website-us-west-2.amazonaws.com
ou você pode acessar o bucket visitando: flaws.cloud.s3-us-west-2.amazonaws.com
Se você tentar acessar um bucket, mas no nome do domínio você especificar outra região (por exemplo, o bucket está em bucket.s3.amazonaws.com
, mas você tenta acessar bucket.s3-website-us-west-2.amazonaws.com
), então você será indicado para o local correto:
Para testar a abertura do bucket, um usuário pode simplesmente inserir a URL em seu navegador. Um bucket privado responderá com "Acesso Negado". Um bucket público listará os primeiros 1.000 objetos que foram armazenados.
Aberto para todos:
Privado:
Você também pode verificar isso com o cli:
Se o bucket não tiver um nome de domínio, ao tentar enumerá-lo, coloque apenas o nome do bucket e não o domínio completo do AWSs3. Exemplo: s3://<BUCKETNAME>
É possível determinar uma conta AWS aproveitando a nova S3:ResourceAccount
Chave de Condição de Política. Esta condição restrige o acesso com base no bucket S3 em que uma conta está (outras políticas baseadas em conta restringem com base na conta em que o principal solicitante está).
E como a política pode conter coringas, é possível encontrar o número da conta apenas um número por vez.
Esta ferramenta automatiza o processo:
Esta técnica também funciona com URLs do API Gateway, URLs do Lambda, conjuntos de dados do Data Exchange e até mesmo para obter o valor de tags (se você souber a chave da tag). Você pode encontrar mais informações na pesquisa original e na ferramenta conditional-love para automatizar essa exploração.
Como explicado em este post do blog, se você tiver permissões para listar um bucket é possível confirmar um accountID ao qual o bucket pertence enviando uma solicitação como:
Se o erro for "Acesso Negado", isso significa que o ID da conta estava errado.
Como explicado em este post do blog, é possível verificar se um endereço de email está relacionado a alguma conta AWS tentando conceder permissões a um email sobre um bucket S3 via ACLs. Se isso não gerar um erro, significa que o email é um usuário root de alguma conta AWS:
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)