> 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/the-hacker-labs/principiante/nodeception.md).

# NodeCeption

## Información de la máquina

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

**Nodeception** es una máquina Linux de nivel facil en *The Hacker Labs* que nos introduce en un escenario realista de compromiso a través de un servicio de automatización mal asegurado: **n8n**. A partir de una enumeración web básica, se identifican pistas útiles como una dirección de correo electrónico expuesta en el HTML y un formulario de login accesible mediante fuerza bruta. Una vez autenticados, se revela el acceso a un panel de n8n en el puerto 5678, que permite la creación de workflows personalizados. Este acceso se convierte rápidamente en una vía para ejecutar comandos arbitrarios en el sistema y obtener una shell inicial como el usuario **thl**. La escalada de privilegios se logra mediante el abuso de permisos sudo y del binario `vi`, demostrando cómo combinaciones simples de configuraciones débiles pueden dar lugar a un compromiso total del sistema.

***

## Reconocimiento

Empezaremos haciendo un primer reconocimiento para ver los puertos abiertos en el sistema.

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

**. `-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 **`allPorts` .**

El escaneo revela muchos puertos abiertos. Ahora haremos un escaneo más detallado.

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

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

**1.`-p<puertos>` → Escaneo de puertos específicos**

Con `-p<puertos>`, le indicamos que **solo** escanee los puertos que queremos

**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**.

Utilizamos la herramienta **WhatWeb** para identificar tecnologías presentes en el sitio. En uno de los campos HTML detectamos un **correo electrónico**, lo cual podría corresponder a un usuario válido del sistema.

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

Al visitar la página principal, no observamos nada fuera de lo común.

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

Utilizamos **Gobuster** para descubrir rutas ocultas. Esto nos revela la existencia de una ruta interesante: `/login.php`.

<figure><img src="/files/6GHKqwl5GL00pLz7MBk9" alt=""><figcaption></figcaption></figure>

Accedemos a la ruta y vemos un formulario de autenticación simple.

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

## Brute force login

Usando el correo encontrado anteriormente como nombre de usuario, realizamos un ataque de fuerza bruta sobre el login. Logramos obtener una contraseña válida.

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

Al iniciar sesión, se nos redirige a un mensaje que indica que podemos acceder a un servicio **n8n** en el puerto **5678** usando las mismas credenciales.

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

Accedemos al panel de login de **n8n**, donde introducimos las credenciales válidas.

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

Accedemos al panel de flujos de trabajo (workflows).

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

Ya dentro, vemos que hay un **workflow ejecutado por otro usuario**, aunque no contiene información crítica. Sin embargo, **n8n permite crear nuevos workflows**, y uno de los nodos disponibles es **"Execute Command"**, que permite ejecutar comandos del sistema.

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

## n8n execute command workflow

Creamos un nuevo workflow con un nodo `Execute Command` que lanza una **reverse shell** hacia nuestra máquina atacante.

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

Ejecutamos el workflow

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

Configuramos el listener con `nc -nvlp 443`&#x20;

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

Al instante recibimos una shell como el usuario `thl`&#x20;

<figure><img src="/files/8hsFnezLedvi5aZ34BKu" alt=""><figcaption></figcaption></figure>

Obtenemos la primera flag.

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

## Privilege escalation -> Sudo permissions

Al enumerar los privilegios, vemos que el usuario puede ejecutar **cualquier comando como root con `sudo.`**

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

Para escalar privilegios de forma segura, buscamos en **GTFOBins** métodos para abusar de `sudo` con el binario `vi`.

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

Como se necesita la contraseña del usuario `thl`, realizamos un ataque de fuerza bruta local para obtenerla. Finalmente la encontramos.

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

Con esta contraseña y el binario `vi`, logramos elevarnos a root y acceder a la **flag final** del sistema.

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

***

## Conclusión

La máquina **Nodeception** pone en evidencia los riesgos de exponer servicios web sin una adecuada protección y el impacto de permitir ejecuciones arbitrarias sin controles de acceso sólidos. Desde una simple fuerza bruta en un login hasta la explotación de funcionalidades legítimas dentro del panel de **n8n**, esta máquina muestra cómo una mala implementación de automatización puede ser utilizada como vector de ataque. La fase final de escalada de privilegios, mediante `sudo` y el binario `vi`, resalta la importancia de limitar los permisos innecesarios y aplicar principios de mínimo privilegio. En conjunto, **Nodeception** ofrece un laboratorio práctico y educativo sobre reconocimiento web, explotación de servicios expuestos y técnicas clásicas de post-explotación en entornos Linux.
