La máquina GreenHorn es una máquina fácil de HTB.
Resumen de conceptos trabajados:
• Enumerate ports/services (nmap) • Virtual Host configuration • Credential discovery and hash cracking • Exploitation via RCE in CMS (Pluck) • Privilege Escalation using password from extracted PDF |
Si es tu primera máquina en Hack The Box y no sabes cómo conectarte a la máquina del laboratorio, te recomiendo que visites este post donde te cuento cómo introducirte en esta plataforma.
A continuación, para conectarte a la máquina, tendrás que establecer la conexión con la máquina víctima de HTB conectándote a la VPN desde la carpeta donde la tengas descargada, y desde ahí ejecutarás el comando «sudo openvpn NOMBRE_VPN.ovpn».
Estructura del contenido
ENUMERACIÓN -> ESCANEO DE PUERTOS
Para asegurarme de que la máquina víctima está activa y puedo conectarme a ella, lanzo un PING o directamente un nmap, por ejemplo:
ping -c 1 10.10.10.245 -R

Vemos que el ping nos responde con un ttl de 63, por tanto, maquina Linux, que en realidad serían 64 pero HTB por la conexión con un nodo intermediario, lo reduce en 1 unidad.
Otra forma de ver si la máquina está activa es a través del comando nmap donde muestra el mensaje de «Host is up»:
nmap -sn 10.10.11.25

Una vez comprobado que la máquina está activa, vamos a lanzar un nmap con permisos de root para ver qué puertos están abiertos y exportar el resultado en un fichero llamado «Escaneo»:
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.245 -oG Escaneo

La explicación de cada comando sería:
La idea de este escaneo es detectar puertos abiertos en la dirección IP especificada.
sudo
: comando en Linux con privilegios de administrador.
nmap
: nmap herramienta para escanear redes. Principalmente para descubrir hosts activos.
-p-
: esta opción le indica a nmap que escanee todos los puertos del 1 al 65535.
--open
: nmap solo mostrará los puertos que están abiertos.
-sS
: especifica el tipo de escaneo que se va a realizar. En este caso, es un escaneo SYN, también conocido como «escaneo sigiloso» o TCP SYN scan. Este tipo de escaneo no establece una conexión completa con el puerto, solo envía un paquete SYN y espera una respuesta. Si el puerto está abierto, responde con un SYN-ACK; si está cerrado, responde con un RST.
--min-rate 5000
: establece la velocidad mínima del escaneo en 5000 paquetes por segundo, lo que significa que nmap intentará enviar al menos 5000 solicitudes cada segundo. Esto puede hacer que el escaneo sea más rápido, pero también puede aumentar las posibilidades de que sea detectado por sistemas de seguridad.
-vvv
: Es el nivel de información que muestra nmap mientras escanea.
-n
: esta opción le indica a nmap que no resuelva nombres de dominio (DNS). Es decir, solo utilizará direcciones IP sin intentar convertirlas en nombres de host.
-Pn
: le dice a nmap que no haga un «ping» a la dirección IP antes de escanearla. Con -Pn
, nmap asumirá que el host está activo y procederá directamente al escaneo de puertos, útil si el host bloquea pings.
10.10.11.25 : es la IP de la máquina víctima.
-oG Escaneo
: especifica el formato de salida y el nombre del archivo donde se guardarán los resultados del escaneo. Escaneo
es el nombre del archivo de salida donde se guardarán los resultados.
Después el escaneo me devuelve que los puertos 22 ssh, 80 http y 3000 ppp están abiertos.
*El puerto 3000 ppp (Protocolo Punto a Punto) es un puerto usado para el desarrollo de aplicaciones web.
Sabiendo que estos puertos están abiertos, lo que hacemos a continuación es lanzar una serie de scripts básicos de reconocimiento de nmap para ver qué servicios y versiones corren por esos puertos:
nmap -sCV -p22,80,3000 10.10.11.25

Vemos que hay una versión del puerto 22 que corre con un OpenSSH 8.9.1 . Sabemos por searchsploit que la versión <7.7 es vulnerable (esta máquina de Dockerlabs llamada BreakmySSH sí lo era) . Igualmente lanzamos una prueba para ver si es vulnerable, y vemos que no hay ningún exploit detectado:

Entonces si pasamos a analizar el puerto 80 web, vemos que al incluir la IP en el navegador, este hace un redirect 302 a una página de error. Lo puedes ver también con el comando whatweb:
whatweb http://10.10.11.25

Configuración de Virtual Host
Como la IP resuelve redirigiendo a un dominio, es probable que el servidor esté configurado con Virtual Hosting. En Virtual Hosting, el servidor puede alojar múltiples sitios web en una sola IP, distinguiéndolos por el nombre del dominio solicitado.
Esto significa que, para acceder correctamente al sitio, necesitas especificar el nombre de dominio en tu archivo hosts.
Por lo que modificamos el archivo /etc/hosts con permisos de administrador usando el editor de texto plano nano por ejemplo:
sudo nano /etc/hosts
añades al final del archivo, una línea con la IP de la máquina víctima y el dominio al que apuntar para que resuelva:
10.10.11.25 greenhorn.htb
De tal forma que, ahora, si incluyes el dominio greenhorn.htb en el navegador, este te da una respuesta 200 y te sirve una página:

Si analizamos la web y todos los enlaces internos, verás que aparece un panel de autenticación para el usuario «admin» aparentemente mediante la url:

http://greenhorn.htb/login.php

Por ahora dejamos la contraseña pendiente, y para ello vamos a explorar el puerto 3000 por si por allí pudiéramos encontrarla.
Accediendo al 3000 desde el navegador sabiendo que está abierto: http://10.10.11.25:3000/ , vemos una web con un panel de registro y login:

Si nos registramos con un usuario inventado con correo y contraseña (puedes creártelo con mailtemp), entramos en un dashboard específico. Si investigamos las opciones, vemos que, en Explorer-Users podemos acceder al usuario admin:
http://10.10.11.25:3000/explore/users

Y si profundizas, ves los repositorios publicados:

Y al acceder, vemos archivos subidos en php como:
http://10.10.11.25:3000/GreenAdmin/GreenHorn

Exploramos todos y vemos que en data – settings – hay un archivo llamado pass.php que contiene una credencial:

Esta credencial está hasheada y necesitamos crackear.

DESCUBRIMIENTO DE CREDENCIALS Y ATAQUE FUERZA BRUTA
Si vamos a analizar el hash mediante el comando «hashid» vemos que se trata de un hash en SHA-512 .

Para crackear el hash podemos acudir a bases de datos públicas como Crackstation.net y ver si está publicada, y si no, podemos usar herramientas de fuerza bruta como Hashcat o John The Ripper.
Si vamos a la web de https://crackstation.net/ vemos que al introducir el hash, nos devuelve ya el tipo de hash y el resultado o password:

Como comentaba, también podemos extraerla mediante las herramientas de fuerza bruta.
Para ello, guardamos la hash en un txt con nano y aplicamos los siguientes comandos:
usando John The Ripper:
john --format=raw-sha512 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

… y aplicando Hashcat:
hashcat -m 1700 -a 0 hash.txt /usr/share/wordlists/rockyou.txt

Y vemos que el resultado es el mismo.
Ahora que tenemos la contraseña del admin, vamos al panel de login del inicio


Y accedemos a un panel de un CMS llamado «Pluck» con la versión 4.7.18:


Si analizamos la versión del CMS para ver si hay exploits, vemos que efectivamente existe un exploit RCE (Remote Code Execution)

EXPLOTACIÓN VIA RCE EN EL CMS Pluck
Si accedemos a Exploit-Database y buscamos la vulnerabilidad, podemos descargarnos el exploit para ejecutarlo:

También podríamos descargarnos directamente el código en python que muestra searchsploit mediante el comando:
searchsploit -m php/webapps/51592.py

Y si abrimos con cat el fichero 51592.py y analizamos el interior del fichero, vemos al final del código, la referencia a la url RCE:

En este caso vamos dentro del panel y parece ser que se nos permite subir o instalar un módulo en formato ZIP, por lo que vamos a crear un archivo ZIP malicioso que contenga una Reverse Shell en PHP, extraerlos en su servidor, y así poder establecer una conexión con la máquina víctima permitiéndonos interactuar con su línea de comandos de forma remota.

En este punto lo que voy a hacer es crear un fichero php malicioso con una reverse shell.
Para ello, vamos a descargarnos el fichero php reverse shell desde el repositorio de github siguiente: https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php.
Una vez descargado, vamos a editarlo y modificar la IP (de tu host, no de la máquina víctima) y el puerto (por ejemplo el 4444):

El nombre del fichero será reverse-shell.php y contendrá el php descargado anteriormente junto con las modificaciones de IP y puerto de escucha.
Ahora empaquetaremos el fichero reverse-shell.php en un archivo .zip para poder subirlo a su servidor:
zip reverse-shell.zip reverse-shell.php

Una vez empaquetado, lo que vamos a hacer es abrir un servidor local con netcat por el puerto 4444 como hemos configurado antes:
sudo nc -lvnp 4444
Procedemos a subir el .zip que hemos creado con la shell.php y vamos a ver si con el netcat podemos acceder a la máquina víctima:
Vamos a la parte del CMS llamada – Options – Install a Module
http://greenhorn.htb/admin.php?action=installmodule

Y al subirlo efectivamente tenemos conexión con la máquina:

Una vez hemos accedido, vamos a configurar el entorno de la terminal para hacerlo más estable y funcional dentro de la reverse shell de esta forma:
python3 -c 'import pty; pty.spawn("/bin/bash")'

Si nos movemos al directorio home vemos un usuario «junior» y otro archivo git. Intentamos acceder al usuario junior como sudoers y le incluimos la contraseña iloveyou1, y accedemos:

y moviéndonos dentro del usuario junior y yendo al directorio home/junior:

y veríamos la user flag y un archivo .pdf
ESCALADA DE PRIVILEGIOS
El fichero pdf lo movemos a un fichero pdf con un nuevo nombre:

Y ahora lo que queremos es poder llevarnos ese pdf a nuestra máquina atacante desde la máquina víctima para manipularlo, para ello, vamos a levantar un servidor por python3 por el puerto 8080 y así podremos descargarlo…

Abrimos una nueva terminal en nuestra máquina y hacemos una petición GET del fichero:

Si abrimos el pdf vemos lo siguiente:

Primero vamos a extraer la imagen del pdf que será la de la contraseña bluerreada y luego trataremos de usar otra herramienta para ello.
La primera tool que nos permitirá extraer la imagen del pdf se llama PDF24 Tools, y con la opción Extraer Imágenes de PDF, podremos descargarla.
Una vez descargada la imagen (se descargará en .zip, lo único que haremos será unzipearla y verás una imagen .png llamada 0).
Ahora, para poder quitar el pixelado de la foto, vamos a clonarnos un repositorio de github que se encarga de eso, y que se llama https://github.com/spipm/Depix :

Una vez clonado, vamos dentro de la carpeta del repositorio clonado Depix y ejecutamos el siguiente comando modificando las rutas de la imagen de entrada y de salida:

y al ejecutarlo se descarga la imagen:


ahora que tenemos la contraseña, lo que hacemos es conectarnos de nuevo a la máquina víctima como antes:

y una vez dentro, nos logamos como sudo root y con la contraseña, nos movemos a root y extraemos la flag root.
