> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/writes-ups/dockerlabs/easy/upload.md).

# Upload

## Información de la máquina

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FXhbIchIup04cuUKmKDjH%2Fimage.png?alt=media&amp;token=7960604f-250d-4981-a8ab-a69d06b2dc51" alt=""><figcaption></figcaption></figure>

Upload es una máquina de dificultad **fácil**, en la que aprovecharemos una **subida de archivos mal implementada** para ejecutar código de forma remota y posteriormente escalaremos privilegios mediante un binario con permisos **sudo**. El primer paso consistirá en analizar la funcionalidad de carga de archivos, donde descubriremos que es posible subir un archivo malicioso en **PHP** que nos permitirá ejecutar comandos en el sistema. Una vez dentro de la máquina, realizaremos una enumeración de permisos y privilegios para identificar binarios con capacidades elevadas. Encontraremos un binario con privilegios **sudo** que, al ser ejecutado de manera adecuada, nos permitirá escalar privilegios hasta obtener acceso **root** y el control total del sistema.

***

## Reconocimiento

La fase de **reconocimiento** es el primer paso a la hora de resolver una máquina. Su objetivo es recopilar la mayor cantidad de información posible sobre el sistema objetivo, permitiendo entender su estructura, tecnología y posibles vectores de ataque.&#x20;

Empezaremos haciendo un ping a la máquina víctima para ver si está encendida y ante que nos enfrentamos.

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2F2c2O78OCTU7JFmnGuIvj%2Fimage.png?alt=media&amp;token=922351a9-46be-4442-893e-92055c8aff05" alt=""><figcaption></figcaption></figure>

Si recibimos respuesta, significa que la máquina está en línea. Además, observamos que el **TTL** (Time To Live) es **64**, lo que indica que es un sistema **Linux** (normalmente, los sistemas Windows tienen un TTL de 128).&#x20;

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FTm1UFP1FkUNIYrC0EfiZ%2Fimage.png?alt=media&amp;token=9a9bfb08-32b5-4c63-a34f-db68fd9fe1e7" alt=""><figcaption></figcaption></figure>

**1. `-p-` → Escaneo de todos los puertos (1-65535)**

Por defecto, `nmap` solo escanea los **1000 puertos más comunes**.\
Con `-p-`, forzamos a que escanee **los 65,535 puertos** de la máquina objetivo, lo que puede ser útil para encontrar servicios que corren en puertos poco convencionales.

**2. `--open` → Filtrar solo los puertos abiertos**

Cuando escaneamos un sistema, muchos puertos pueden estar cerrados o filtrados por un firewall.\
Este parámetro hace que `nmap` **solo muestre los puertos abiertos**, reduciendo el ruido y facilitando el análisis.

**3. `-sS` → Stealth Scan (Escaneo Sigiloso con SYN)**

Es conocido como **"TCP SYN Scan"**, y funciona de la siguiente manera:

* `nmap` envía un paquete **SYN** (solicitud de conexión).
* &#x20;Si el puerto está abierto, el servidor responde con **SYN-ACK**.
* En lugar de completar la conexión con un **ACK**, `nmap` responde con un **RST (Reset)**, interrumpiendo la comunicación.

**4. `--min-rate 5000` → Velocidad mínima de paquetes (5000 por segundo)**

Por defecto, `nmap` ajusta dinámicamente la velocidad de los paquetes según la respuesta de la red.\
Con `--min-rate 5000`, obligamos a `nmap` a **no enviar menos de 5000 paquetes por segundo**, acelerando el escaneo.

**5. `-n` → Deshabilitar resolución DNS**

Normalmente, `nmap` intenta resolver el nombre de dominio de las IPs escaneadas (DNS lookup).\
Con `-n`, evitamos esta resolución de nombres, lo que **acelera el escaneo** y evita que los servidores DNS registren nuestra actividad.

**6. `-Pn` → Omitir detección de host (Host Discovery Off)**

Por defecto, `nmap` envía paquetes ICMP (ping) para ver si un host está activo antes de escanearlo.\
Si un firewall bloquea los pings, `nmap` puede marcarlo como "host down" y no escanearlo.

**7. `-oG`** **→ Exportar el contenido en formato grepeable**

Todo el resultado del escaneo lo exportaremos en un archivo llamado **`puertos` .**

El escaneo revela que el puerto 80 está abierto. Ahora realizamos un escaneo más detallado:

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2F17FK4LlhohmgLPFyvMg9%2Fimage.png?alt=media&amp;token=6262039f-8b16-4641-bf4a-1165121bb7c0" alt=""><figcaption></figcaption></figure>

**1. `-p80` → Escaneo de puertos específicos**

Con `-p80`, le indicamos que **solo** escanee los puertos **80 (HTTP)**

**2. `-sCV` → Escaneo de versiones y scripts básicos**

Este parámetro en realidad es **dos combinaciones en una**:

* **`-sC`** → Activa los **NSE scripts por defecto** en `nmap` (similar a usar `--script=default`).\
  Ejecuta scripts básicos para enumerar información del servicio detectado, como banners, versiones, etc.
* **`-sV`** → Realiza **fingerprinting de versiones**, intentando identificar la versión exacta del software en cada puerto abierto.

**3. `-oN` → Guardar el resultado en formato Normal**

Por defecto, `nmap` muestra los resultados en pantalla, pero con **`-oN targeted`**, guardamos el resultado en un archivo en **formato legible para humanos**.

Visitamos la página web

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FrwcLymqEhg2sWdiN3WsJ%2Fimage.png?alt=media&amp;token=d469ccc8-3bb3-4082-9148-8d496d0587d4" alt=""><figcaption></figcaption></figure>

***

## Enumeración y búsqueda de vulnerabilidades

Enumeramos directorios, y archivo con GoBuster:

{% hint style="success" %}
**Gobuster** es una herramienta de software escrita en el lenguaje de programación **Go** que se utiliza para encontrar directorios y archivos ocultos en sitios web mediante ataques de fuerza bruta.
{% endhint %}

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FzPcd2Ber65Xu9lCeGF7G%2Fimage.png?alt=media&amp;token=9b3d8b34-f64b-459c-b1ff-4d970af3ac91" alt=""><figcaption></figcaption></figure>

Si revisamos el contenido de **upload.php**, observamos lo siguiente:&#x20;

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FdhXY0xv9xrib7nNONR2Y%2Fimage.png?alt=media&amp;token=31df1227-7e96-4975-ac22-54d5edc52bc6" alt=""><figcaption></figcaption></figure>

***

## Explotación de las vulnerabilidades

Intentaremos subir un archivo **PHP** con código que nos permita ejecutar comandos desde la URL utilizando el parámetro `cmd`.

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FacrMj78N5b6Zxt7I9vVM%2Fimage.png?alt=media&amp;token=7f9ce149-779d-4dbd-a8e3-be25f903d887" alt=""><figcaption></figcaption></figure>

Subimos el archivo y verificamos que se carga **correctamente**.

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FS17VOpTjKJyj0xlaO2Lo%2Fimage.png?alt=media&amp;token=cf465d0a-7cc2-411d-bf2a-8aa3e7c7ed69" alt=""><figcaption></figcaption></figure>

Si accedemos al directorio **uploads**, podemos ver nuestro archivo.

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FUfOihgaaIz3XMpC9Y8lA%2Fimage.png?alt=media&amp;token=9c63632c-c67c-4c42-9967-fdc57859b633" alt=""><figcaption></figcaption></figure>

Si abrimos nuestro archivo y probamos a ejecutar un comando:

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FF4D5E5kB04uNrnblmXMP%2Fimage.png?alt=media&amp;token=beea7d99-792e-4467-9213-4020674c53ba" alt=""><figcaption></figcaption></figure>

Ahora que tenemos acceso remoto a la ejecución de comandos, realizamos lo siguiente:

* Nos ponemos en escucha con **netcat** en el puerto **443**.
* Enviamos el comando necesario para establecer una **revershell**.

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FR7QEftMD9zVocL0IKxRp%2Fimage.png?alt=media&amp;token=8e5ba362-ba98-4d15-8f19-7fd15d10b14e" alt=""><figcaption></figcaption></figure>

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FjaGLuSf4CFKOdVKHwGkl%2Fimage.png?alt=media&amp;token=6caeee8a-769e-4af7-a2dc-41e225c1f233" alt=""><figcaption></figcaption></figure>

¡Ya estamos dentro de la máquina!

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2Fp6Xxg2FxKSGEvI0DdzJt%2Fimage.png?alt=media&amp;token=f595b5ed-bac0-4840-a457-0ef83ff65faa" alt=""><figcaption></figcaption></figure>

## Post Explotación y escalada de privilegios

Enumerando el sistema, encontramos que tenemos permisos sobre el binario **env**.

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FPkqxqCLul2diIXvgrNQj%2Fimage.png?alt=media&amp;token=9bf9e3ec-b472-44ee-b4e2-be0d897c3f35" alt=""><figcaption></figcaption></figure>

Si buscamos en **GTFOBins**, encontramos que podemos usar este binario para escalar privilegios.

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2Fvp1n6uQ2ET8AojVlgzhY%2Fimage.png?alt=media&amp;token=dc0fb7e4-4f9a-4f92-82bc-8decd48506ec" alt=""><figcaption></figcaption></figure>

Ejecutamos el comando indicado y nos convertimos en **root**, obteniendo **privilegios máximos** en la máquina.

<figure><img src="https://4080430044-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6CRNQD5pVfTwJsQwKPN1%2Fuploads%2FuRXPNfd4fqumJReVtRPA%2Fimage.png?alt=media&amp;token=5a6de424-9b8a-4f9e-b02d-6538a11285a1" alt=""><figcaption></figcaption></figure>

***

## Conclusión

Upload es una máquina que nos enseña a explotar una subida de archivos mal configurada y a escalar privilegios con un binario con permisos mal configurados.
