AWS
Chaves
Tamanho e Tipos de Chaves
Access Key = 20 chars
Access Secret Key = 40 chars
Session Token = Chave temporária opicional
Prefixo de Chaves
ABIA
AWS STS Service Bearer Token
ACCA
Context-Specific Credential
AGPA
User Group
AIDA
IAM User
AIPA
Amazon EC2 Instance Profile
AKIA
Access key (Chave de longa duração importante que raramente é modificada)
ANPA
Managed Policy
ANVA
Version in a Managed Policy
APKA
Public key
AROA
Role
ASCA
Certificate
ASIA
Os IDs de chave de acesso temporário (AWS STS) usam esse prefixo, mas são exclusivos apenas em combinação com a Secret Access Key e o Session Token.
S3
O Amazon Web Services (AWS) fornece um serviço chamado S3 (Simple Storage Service), que expõe uma interface de container de armazenamento chamado de "bucket" e os arquivos dentro do bucket são chamados de "objects". O S3 fornece um armazenamento ilimitado para cada bloco e os proprietários podem usá-los para disponibilizar arquivos. Os arquivos podem ser vinculados de forma privada
(via URL com assinatura) ou pública
por meio de uma ACL (Access Control List)
configurada adequadamente ou por meio de uma ACP (Access Control Policy)
.
Todos os Buckets S3, quando configurados para hospedagem na web, recebem um domínio da AWS que você pode usar para navegar até ele sem configurar seu próprio DNS. Por exemplo, a página web http://mysther.com também pode ser visitado em http://mysther.com.s3-website-us-west-2.amazonaws.com/. Sendo assim, podemos nesse caso acessar a URL https://mysther.com.s3.amazonaws.com/ e vermos a lista de arquivos expostos.
Uma outra maneira de vermos é através do utilitário aws cli
, acesso via terminal. Supondo que temos a seguinte URL https://mysther-static-resources.s3-ap-southeast-1.amazonaws.com/,
podemos pegar somente o seu prefixo (mysther-static-resources
) e então executar o seguinte comando (altere a região, caso necessário):
Enumeração (sem autenticação)
Caso tenha sido listado diretório, podemos acessá-la da seguinte forma:
E por fim, fazer download de arquivos
Enumeração (com autenticação)
Listando Buckets
Listando objetos de um determinado Bucket
Fazendo download de arquivos. Note que key
, é o nome do Objeto (no caso, um arquivo)
OBS.: Ao localizar um Bucket, podemos acessá-lo via web, seguindo um dos seguintes padrões: https://<bucket_name>.s3.amazonaws.com/<file> ou http://<bucket_name>.s3-website-us-east-1.amazonaws.com/<file>
AWS CLI
Instalação
Configuração
Antes de começar, vamos configurar nossa chave de acesso. Para isso temos a maneira mais prática, que é executando o comando abaixo e depois inserindo as chaves.
E podemos também, fazer de forma manual, criando um arquivo ~/.aws/credentials
com o conteúdo abaixo. Caso não configure essa chave, provavelmente receberá um erro do tipo: Partial credentials found in shared-credentials-file, missing: aws_secret_access_key
Para pegar as credenciais, vá no painel da AWS, clique no nome do usuário que está no canto superior à direita e depois em My Security Credentials
. Feito isso vá em Access Keys (access key ID and secret access key)
e gere uma chave.
Esse processo obviamente é bem manual, já que estamos criando um arquivo manualmente e inserindo valores nele, então vamos deixar com que o próprio comando aws
faça o "trabalho sujo" por nós.
Note que, editando o arquivo manualmente, podemos inserir o valor do token temporário em aws_session_token
, já utilizando o comando aws configure
, já não é possível definir esse valor.
Feito isso, informe o Key ID
e o Access Key
. Note que o diretório ~/.aws
pode ficar um pouco diferente. O arquivo ~/.aws/credentials
que já existia, agora tem uma configuração a mais e foi criado (caso não tinha) o arquivo ~/.aws/config
, que contém a configuração das regiões.
Comandos Básicos
Pegando o UserID
e o Account Name
. Caso não defina o profile, por padrão será utilizado o profile default
. Em ~/.aws/credentials
, podemos ver o profile, que está entre colchete.
Detalhes do snapshot da EC2
Caso queira pegar um usuário em específico, é necessário adicionar o Owner, exemplo:
Listando as permissões do S3 Bucket
Listando arquivos em AWS Buckets públicos
Caso já possua uma chave válida configurada, podemos listar os arquivos de uma forma mais prática
Baixando conteúdo do Bucket
NOTA: As vezes é preciso informar a região. Podemos fazer isso com o parâmetro --region us-west-2
Fazendo upload de arquivos
Verificando permissões de um determinado arquivo
IAM
O IAM (Identity and Access Management), é um serviço da Web que ajuda no controle de acessos aos recursos da AWS. É através do IAM, que podemos controlar quem é autenticado (que fez login) e autorizado (que tem permissão) a usar os recursos.
Por esse motivo, o IAM é um ponto totalmente visado a ataques, já que está centralizando e gerenciandos acessos a recursos.
Users
Informações sobre o usuário atual
Listando todos os Usuários
Não esqueça de ver as Policies que estão adicionadas aos outros usuários
Criando um usuário. Note que nossa conta AWS precisa possuir tal permissão, então verifique mais abaixo como fazer para verificar as nossas políticas atuais e como fazer para anexar uma política administrativa em nosso usuário
Após enumerar os usuários, crie um perfil de Login e acesse a plataforma via web
Groups
Listando todos os Grupos
Listando grupos de um determinado usuário
Adicionando um usuário em um grupo
Policies
Enumerando Políticas
Políticas associadas em um grupo
Para mais detalhes sobre uma determinada Política, pegue o ARN com o comando acima e depois execute:
Listando detalhes das Política de um determinado Usuário
Com a saída do comando acima, execute o comando abaixo mais detalhes
Com a saída do comando acima, verifique se em Resource
ou em Action
há algo que possa ser interessante para escalar algum tipo de privilégio. Para executar o comando abaixo e verificarmos as Roles de uma Policy, vamos pegar como exemplo a seguinte saída: "Resource": ["arn:aws:iam::658552018120:role/Example"]
e então utilizar somente o Example
no final e executar:
Agora vamos pegar o retorno de PolicyNames
do comando acima e então executar. Verifique o conteúdo em Statement
Procurando por política ARN administrativa
Após isso, nós podemos anexar a política AdministratorAccess
em nossa conta de usuário, bastando apenas pegar a <PolicyArn>
na saída do comando acima
Verificando políticas anexadas a um determinado usuário
Com o resultado do comando acima, utilize o valor de PolicyArn
para executar o comando abaixo, retornando assim mais detalhes sobre uma determinada Policy
Verificando certificado assinado do usuário
Verificando por chave públic SSH do usuário.
Com o resultado do comando acima, utilize o valor de SSHPublicKeyId
para executar o próximo comando
Verificando se um determinado usuário possui login na console
Verificando políticas de um determinado grupo
Roles
Enumerando as Roles
Detalhes de uma determinada Role
Verificando as Policies de uma Role
Assumindo uma role
Execute o próximo comando, de acordo com a saída do comando anterior
Note que fazendo isso, você substituindo seus acessos, então caso queria voltar ao normal, utilize o comando abaixo:
Misconfigured Trust Policy
Defina as variáveis, sendo os valores de acordo com o resultado do comando cima
Verificando se as configurações
Verificando se há alguma política com s3 disponível
Caso possua um s3 disponível, execute o comando abaixo para listar o conteúdo disponível nessa s3
PACU
Instalação
Inicializando
Definindo as chaves
Brute Force em Users
Brute Force em Roles
Bucket
Listando Buckets
Listando objetos/arquivos de um determinado Bucket
Baixando um bucket completo
Fazendo download de arquivo que está armazenado em um determinado Bucket
Fazendo upload de arquivo
Deletando arquivo remoto
Verificando as Policies de um determinado Bucket. Em algumas ocasiões, podemos ver os nomes dos arquivos, o que pode ser útil quando não temos acesso a leitura dos objetos do Bucket. Em outros casos, podemos ver configurações onde é possível ter acesso por exemplo, utilizando somente um determinado User Agent.
Caso possua permissão para atualizar as políticas, salve o resultado do comando acima e substitua o Deny
por Allow
e deixe partes como s3:GetBucketPolicy
como s3:*
. Também altere o Resource
colocando um *
no final, caso esteja apontando para algum arquivo em específico.
Agora faça upload do json modificado.
Alterando ACL do Bucket
Primeiro precisamos baixar a ACL de um determinado bucket e salvar a saída em um arquivo json
Agora basta editar o arquivo, alterando o valor de Permission
para FULL_CONTROL
e depois atualizar a ACL atavés do comando abaixo:
Para verificar se deu certo utilize o segundo comando acima, porém sem jogar a saída para um arquivo json
Alterando ACL do Objeto em um Bucket
Primeiro precisamos baixar a ACL de um determinado objeto (arquivo) do bucket e salvar a saída em um arquivo json
Agora basta editar o arquivo, alterando o valor de Permission
para FULL_CONTROL
e depois atualizar a ACL atavés do comando abaixo:
C2
Analisando instâncias
Pegando o AMI ID
Analisando subnets (aqui podemos encontrar o valor de SubnetId
)
Listando grupos de segurança
Listando perfis de instancias (aqui podemos encontrar o valor de InstanceProfileName
)
Inicializando uma EC2
Com a saída do comando acima, atente-se ao valor de InstanceId
e utilize-o abaixo para executarmos um comando no OS do EC2. No primeiro exemplo, estamos pegando as chaves de acesso e no segundo exemplo, apenas executando o comando id
. Não se esqueça de altera o roleName
, como fizemos com o <Example>
Note que apesar de termos executado o comando, não obtemos a sua saída. Para isso, precisamos realizar mais uma requisição, onde podemos ver ser o output do comando em StandardOutputContent
. Atente-se ao CommandId
que foi retornado no comando anterior
Lambda
Listando Function Lambda
Para criar uma Function Lambda, primeira crie um arquivo chamado aws.py
com o conteúdo abaixo. Isso irá adicionar um determinado usuário a Política de Administradores.
Compacte o arquivo criado:
Crie a Function Lambda através do comando
Agora execute a Function criada
Se ver novamente nas Policies do usuário, terá o AdministratorAccess
Lambda Authorizer
O Lambda Authorizer é um recurso do API Gateway que usa uma função do Lambda para controlar o acesso à API. Com base nas informações fornecidas na solicitação, ou seja, tokens, parâmetros de solicitação etc, a função Lambda retorna uma política que permite ou nega o acesso à API.
Um ponto que podemos fazer para driblar isso é, acessar a URL http://ab.cd-api.us-east-1.amazonaws.com/dev/status com algum token aleatório para que seja validado e após isso,utiizar esse que foi validado em http://ab.cd-api.us-east-1.amazonaws.com/dev/admin. Exemplo:
DynamoDB
Select
Listando tabelas do DynamoDB Server
Verificando a estrutura de uma determinada tabela
Lendo conteúdo de uma determinada tabela
Para pesquisar por um valor específico, crie um arquivo chamado find.json
com o conteúdo abaixo, altere a chave S
com o respectivo index, caso seja necessário:
Agora execute o comando de busca
Outra maneira de pesquisar, é da forma abaixo, porém aqui estamos filtrando por um campo diferente
Caso o json possua mais, valores, podemos organizá-lo da seguinte forma:
Agora em nossa --key-condition-expression, podemos deixa no seguinte padrão:
Insert
Crie um arquivo chamado insert.json
com o seguinte valor (altere o nome das chaves e valores):
Agora execute
Para verificar se realmente deu certo, crie um arquivo chamado search.json
com o seguinte conteúdo (altere o field
e o value
para ser igual o foi inserido anteriormente):
Agora realize a pesquisa com o comando
Update
Podemos também, atualizar um objeto. Para isso vamos criar um arquivo chamado key.json
definindo o index (field) e seu respectivo valor, seguindo o seguinte padrão:
Agora iremos criar um segundo arquivo chamado value.json
, que irá conter o novo valor que iremos atribuir para o registro que der "match" com a condição do arquivo key.json
criado acima
Por fim, execute o comando para atualizar o banco de dados
Para verificar se deu certo, execute
Delete
Deletando registro de uma tabela
Deletando uma tabela
Bucket Finder
Procura por buckets que estão públicos e baixa o seu conteúdo.
Pegando Chaves
Ao acessar um servidor web hospedado na AWS, utilize o 169.254.169.254 no header Host
para pegar dados sensíveis, incluindos as chaves AWS
Secret Managers
Configurando o AWS
Enumerando os Callers Identity
Listando os Secret Managers
Alterr o <name>
abaixo pela retorno de Name
no comando anterior
IMDS
É possível acessar metadados de instância em uma instância em execução utilizando o IMDSv1 (método de solicitação/resposta) ou o IMDSv2 (método orientado a sessões). Os cabeçalhos PUT ou GET são exclusivos do IMDSv2. Se esses cabeçalhos estiverem presentes na solicitação, a solicitação será destinada ao IMDSv2. Se nenhum cabeçalho estiver presente, presume-se que a solicitação seja destinada ao IMDSv1.
Ao acessarmos a URL abaixo, podemos receber um 401 - Unauthorized
Porém podemos contarnar isso com o comando abaixo, onde iremos pegar o token e jogar na variável TOKEN
:
Agora com o token em mãos, vamos pegar todos os serviços
Feito isso, podemos navegar nos diretórios localizados, como no exemplo abaixo, no diretório iam
(caso exista). Dentro do diretório iam
irão existir mais arquivos e diretórios que podem ser acessados, então vá sempre adicionando eles no final da URL
Acessando via Postman com Access Key e Access Secret Key
Depois de ter em mãos o Access Key (chave com o prefixo AKIA
) e o Access Secret Key, abra o Postman e na aba de autenticação, selecione AWS Signature
. Insira então as duas chaves, a região (pro exemplo us-east-1
) e o Service Name, que podemos pegar na URL, onde temos o valor execute-api
, para a URL. https://a2s4f3fcl6.execute-api.us-east-1.amazonaws.com/default/
Sites
Last updated