> For the complete documentation index, see [llms.txt](https://pruiz.gitbook.io/myphp/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://pruiz.gitbook.io/myphp/aws-pentesting/acceso-inicial.md).

# Acceso Inicial

## Configurar AWS CLI

```bash
aws configure
```

Requieres otorgar

* AWS Access KEY ID
* AWS Secret Access Key
* Region (importante especificar la región correcta)
* Formato (json)

### Formato de comandos en aws

{% hint style="info" %}
aws \<Comando | Servicio aws> \<Sub comando> (Opciones y parámetros)
{% endhint %}

```
aws s3 ls s3://important-bucket --recursive
```

## Whoami

El primer comando no requiere de permisos, solo te dara información básica

```
aws sts get-caller-identity
```

Este comando interactua con el servicio de IAM, requiere almenos privilegios de Get\*

```
aws aim get-user
```

### Almacenamiento de credenciales de AWS en archivo plano

Cuando se realiza una autenticación con aws CLI, las credenciales importantes como **Access Key y el Secret Access Key** se almacenan en los directorios:

* (Windows) - C:\Users\Gerh.aws\credentials
* (Linux) - /root/.aws/credentials
* (Linux) - /home/user/.aws/credentials

Donde podrás encontrar los siguientes datos:

* aws\_access\_key\_id = Clave de acceso de AWS – (AWS access key).
* aws\_secret\_access\_key = Clave secreta de AWS. – (AWS secret key).
* aws\_session\_token = Token de sesión de AWS. Solo se requiere un token de sesión si está utilizando credenciales de seguridad temporales. – (AWS session token).

Obtener sesion token

```
aws sts get-session-token --profile some
```

## Metodología básica de Pentesting/Red Teaming

Para auditar un entorno AWS es importante conocer:

* ¿Cuáles servicios se está usando
  * ¿Cuáles <mark style="color:green;">**servicios si**</mark> se desea auditor?
  * ¿Cuáles <mark style="color:green;">**servicios no**</mark> se desea auditar?
* ¿Cuáles servicios/objetos están siendo expuestos?
* ¿<mark style="color:green;">**Quién tiene acceso**</mark> a que cosas?
* ¿Cómo esta organizado internamente los servicios de AWs y como se conectan con <mark style="color:green;">**servicios externos**</mark>?

Desde el punto de vista de una post explotación o un Red Teaming, el <mark style="color:green;">**primer paso para comprometer un entorno de AWS**</mark> es obtener <mark style="color:green;">**credenciales**</mark>. Acontinuación se listan algunas ideas de como obtener estas credenciales:

* <mark style="color:green;">**Leaks**</mark> de github / gitlab / bucket o similares - OSINT
* Ingeniaría Social
* Reutilizar contraseñas, contraseñas por defecto, password leaks
* Vulnerabilidades asociadas a aplicaciones e AWS (AWS-Hosted Apps):
  * Aplicaciones web - SSRF Para acceder a los metadatos
  * LFR - Local File Read para listar los directorios:
    * /home/user/.aws/credentials
* 3rd Parties leaks o breaks
* Por medio de un Internal (empleado interno).
* Credenciales de [<mark style="color:green;">**Cognito**</mark>](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-cognito-enum#cognito)

En auditorias con credenciales con cliente, se requiere solo se requiere un rol con los siguientes permisos:

Política de AWS: arn:aws:iam::aws:policy/ReadOnlyAccess

{% embed url="<https://us-east-1.console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn:aws:iam::aws:policy/ReadOnlyAccess$jsonEditor>" %}

## Referencias

{% embed url="<https://aws.amazon.com/es/compliance/shared-responsibility-model/>" %}

{% embed url="<https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html>" %}

{% embed url="<https://docs.aws.amazon.com/es_es/cli/latest/userguide/cli-chap-welcome.html>" %}
