En este post haremos la máquina Curling de HackTheBox.
Es una máquina Linux de nivel fácil en la que nos enfrentaremos a un CMS (Joomla) y veremos como escalar utilizando DirtySock.


Mi nick en HackTheBox es: manulqwerty. Si tenéis alguna proposición o corrección no dudéis en dejar un comentario, así aprendemos todos.

Write-Up

Enumeración

Como siempre, lo primero sera un escaneo de todos los puertos con nmap:

nmap -T5 -p- 10.10.10.150
nmap -T4 -sV -sC -p22,80 10.10.10.150

Únicamente se encuentran los servicios HTTP y SSH, así que vamos a echar un ojo a la web.

Simplemente con ver el icono de la página web detectamos que se trata de un Joomla. Vamos a buscar otros directorios ocultos que puedan servirnos, para ellos vamos a utilizar Dirsearch:

dirsearch -u http://10.10.10.150 -w $WORDLISTS/raft-medium-directories-lowercase.txt -t 20 -e php

Entre los directorios encontrados destaca “administrator” que se trata del panel de administración del CMS. Debemos seguir buscando en la web, miremos el código fuente:

Como veis, se encuentra un comentario en el html: “secret.txt”:

Con ayuda de un decoder de Base64 vemos lo que podría ser una contraseña:

A continuación, debemos buscar un nombre de usuario. Revisemos los “post” del blog:

Como veis, Floris podría ser el nombre de usuario que estamos buscando. Vamos a probar las credenciales que tenemos (Floris:Curling2018!) en http://10.10.10.150/administrator/.

Y efectivamente, las credenciales son correctas y hemos conseguido entrar al panel de administración del sitio.

Explotación

Una vez estamos dentro del panel de administración, nuestro objetivo es ejecutar comandos del sistema, por ejemplo, subiendo una shell reversa php al servidor.
Para hacer esto en Joomla, debemos ir a la sección de plantillas y crear un fichero. Concretamente utilizamos la siguiente shell reversa de php: php-reverse-shell.php

Una vez se ha subido el fichero correctamente, se puede ejecutar accediendo a http://10.10.10.150/templates/protostar/ironhackers.php.
En nuestra máquina debemos establecer la escucha:

nc -lvp 8080

Escalada de privilegios

Como habéis visto en la captura anterior, ya podemos ejecutar comandos como www-data, nuestro siguiente paso es poder ejecutar comandos como un usuario privilegiado.
Tras revisar los usuarios registrados en el sistema, accedemos a la carpeta personal del único usuario: Floris.
En ella encontramos un fichero sospechoso “password_backup” que contiene la salida del comando “xxd”. Podemos ejecutarlo en sentido contrario con la opción “-r” de ese mismo comando:

El fichero resultante resulta ser un comprimido con Bzip2, dentro de este nos encontramos otro comprimido y tras una serie de descompresiones encontramos una contraseña:

Esta contraseña es del usuario floris:5dwdCbdZu)|hChXll. Ahora podemos acceder via SSH al servidor:

Para escalar a root, el creador de la máquina dejó preparado una tarea programada como root que accedia con curl al contenido del fichero “input” y lo guardaba en “report”:

Como veis en la captura anterior, inicialmente la url a la que se accede es la web que vimos antes. Con curl también se puede acceder a ficheros locales del sistema, para ello modificamos el fichero input:

echo 'url = "file:///root/root.txt"' > input

Dirty Sock

Anteriormente hemos conseguido acceder a la flag de root, sin embargo no hemos conseguido shell como dicho usurio. Para ello se vio que el sistema es vulnerble a CVE-2019-7304 y se puede escalar de privilegios a Root de forma sencilla.

Basta con subir dirty_sockv2.py al servidor y ejecutarlo.

¿Me ayudas a compatirlo?