// 01
Overview
Upload es una máquina Linux de dificultad Fácil de la plataforma DockerLabs. El objetivo es explotar un panel de subida de archivos sin ninguna restricción, permitiendo subir un webshell PHP malicioso y obtener ejecución remota de comandos en el servidor.
Una vez dentro como www-data, se descubre que el usuario puede ejecutar
/usr/bin/env como root sin contraseña
mediante sudo -l. Aprovechando esta misconfiguration con la técnica de
GTFObins, escalamos privilegios a root con un solo comando.
// RESUMEN DEL ATAQUE
Reconocimiento con Nmap → Puerto 80 con Apache + panel de subida →
Enumeración con Gobuster → directorio /uploads/ accesible →
Explotación: subir revershell.php (PentestMonkey) →
Activar con nc -lvnp 4444 → Shell como www-data →
PrivEsc: sudo env /bin/sh → root
| DATO | VALOR |
|---|---|
| Plataforma | DockerLabs |
| Dificultad | FÁCIL |
| OS | Linux (Ubuntu) |
| Servicios | HTTP (80) — Apache 2.4.52 |
| Técnicas | File Upload → RCE → sudo PrivEsc |
| Vector inicial | Unrestricted File Upload |
| PrivEsc | sudo /usr/bin/env → GTFObins |
// 02
Reconocimiento
Comenzamos con un escaneo completo de puertos usando Nmap con detección de servicios y versiones. El resultado se exporta en formato XML y luego se convierte a HTML visual con xsltproc.
└─$ sudo nmap -p- -sSCV -n -Pn --min-rate=5000 --open 172.17.0.2 -oX upload.xml
// HALLAZGO: PUERTO 80
Solo hay un puerto abierto: el 80 (HTTP). El título de la página es "Upload here your file", lo que ya nos indica directamente que existe un panel de subida de archivos. El servidor es Apache 2.4.52 en Ubuntu.
Esto genera un reporte HTML visual del escaneo, más cómodo de leer en el navegador. Confirmamos: solo el puerto 80 abierto, Apache 2.4.52, Ubuntu.
// 03
Enumeración Web
Con el puerto 80 identificado, procedemos a enumerar directorios y archivos usando Gobuster con la wordlist DirBuster y extensiones clave para aplicaciones web.
// HALLAZGOS CRÍTICOS
upload.php → el script que procesa la subida de archivos.
/uploads/ → directorio donde se almacenan los archivos subidos, accesible públicamente (301 → 200).
Esto confirma la ruta de ataque: si el servidor no valida el tipo de archivo, podemos subir un webshell PHP y ejecutarlo directamente desde el navegador.
Al visitar http://172.17.0.2/ encontramos una página minimalista titulada "Upload File" con un formulario de subida. No hay validación visible ni restricciones de tipo de archivo en el frontend. El directorio /uploads/ tiene directory listing habilitado, lo que nos permitirá ver y acceder al archivo que subamos.
// 04
Explotación — Reverse Shell
El vector de ataque es un Unrestricted File Upload: el servidor acepta cualquier tipo de archivo sin validar la extensión ni el contenido. Subiremos un PHP Reverse Shell usando el payload de PentestMonkey, obtenido desde revshells.com.
// CONFIGURACIÓN DEL PAYLOAD
Fuente: https://www.revshells.com/ → PHP PentestMonkey
Modificar en el archivo: $ip = "192.168.111.128" (tu IP en eth0) y $port = 4444
Una vez editado el archivo con nuestra IP y puerto, lo subimos mediante el panel web en http://172.17.0.2/. El servidor acepta el archivo .php sin restricciones y lo almacena en /uploads/revershell.php.
Antes de ejecutar el webshell, abrimos un listener en el puerto 4444 con Netcat para recibir la conexión entrante de la reverse shell.
En el navegador, accedemos a http://172.17.0.2/uploads/, confirmamos que revershell.php aparece en el directory listing, y hacemos clic en él. Esto provoca que el servidor Apache ejecute el PHP, que abre una conexión TCP hacia nuestra máquina.
// SHELL OBTENIDA
Tenemos ejecución remota de comandos como www-data. Es una shell básica (sin TTY). Desde aquí procedemos a la escalada de privilegios.
// 05
Escalada de Privilegios
Con acceso como www-data, el primer paso es verificar qué comandos
podemos ejecutar con sudo sin contraseña usando sudo -l.
// MISCONFIGURATION CRÍTICA
El usuario www-data puede ejecutar /usr/bin/env como root sin contraseña (NOPASSWD).
El binario env puede usarse para lanzar cualquier proceso — incluyendo una shell — con los privilegios del usuario que lo invoca.
Al ejecutarlo con sudo, ese usuario es root.
Consultamos GTFObins (https://gtfobins.org/gtfobins/env/#shell),
la base de datos de técnicas para abusar de binarios legítimos de Unix.
En la sección Sudo de env encontramos el vector exacto:
// GTFOBINS — ENV → SHELL
env /bin/sh
This function is performed by the privileged user if executed via sudo because the acquired privileges are not dropped.
Con una sola línea aprovechamos la misconfiguration de sudo para escalar de
www-data a root.
El binario env lanza
/bin/sh heredando los
privilegios de root porque lo ejecutamos a través de sudo.
// 06
Referencia de Comandos
- -p- → Todos los 65,535 puertos
- -sS → SYN scan (sigiloso)
- -sC → Scripts de reconocimiento por defecto
- -sV → Detección de versión de servicios
- --min-rate=5000 → Mínimo 5000 paquetes/seg
- -oX → Salida en formato XML
- -u → URL objetivo
- -w → Wordlist a usar
- -x → Extensiones a probar
- -t → Número de hilos (default 10)
- -l → Modo listener (escucha)
- -v → Verbose (muestra info de conexión)
- -n → No resolución DNS
- -p → Puerto a escuchar
- sudo -l → Ver permisos sudo del usuario actual
- env /bin/sh → Lanza shell heredando privilegios
- whoami → Confirmar que somos root
// 07
Glosario
nc -lvnp 4444) y cuando el payload PHP se ejecuta, la víctima establece la conexión TCP. El resultado es una terminal de comandos interactiva en la máquina del atacante.$ip) y el puerto ($port) del atacante. Al ejecutarse en el servidor, abre un socket TCP hacia el atacante y conecta stdin/stdout de sh a través de ese socket, dando acceso completo al shell del sistema. Disponible en revshells.com./var/www/html/) y directorios configurados. Es el punto de entrada habitual cuando se explota una vulnerabilidad web: el atacante obtiene una shell como www-data y desde ahí busca vectores de escalada de privilegios.sudo -l lista los comandos que el usuario actual puede ejecutar como root (u otro usuario) sin necesidad de contraseña, según /etc/sudoers. La misconfiguration más común es permitir NOPASSWD en binarios que pueden lanzar shells, como vim, python, env, find, etc. Si www-data puede ejecutar cualquiera de estos con sudo, un atacante obtiene acceso root trivialmente.env (GNU coreutils) ejecuta un programa en un entorno modificado. Cuando se ejecuta via sudo env /bin/sh, la shell resultante hereda los privilegios de root porque sudo no los descarta. El comando completo es simplemente: sudo env /bin/sh → shell como root.index.html o index.php, el servidor muestra una lista de todos los archivos contenidos. En el caso de esta máquina, /uploads/ tenía directory listing habilitado, permitiendo al atacante ver el archivo revershell.php subido y hacer clic para ejecutarlo. Es una misconfiguration peligrosa que debe deshabilitarse en producción.dir es el más usado: prueba cada entrada de la wordlist como ruta en la URL objetivo y reporta los códigos de respuesta HTTP (200, 301, 403, etc.).