Faculty - HackTheBox
🤖Máquina Linux donde tocaremos un poco de sqli, una explotación 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🤖.
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
.
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
- Añado el dominio
faculty.htb
al archivo hosts ubicado en la ruta/etc/host
.
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:
El título es School Faculty Scheduling System
Tenemos un login -> http://faculty.htb/login.php
A continuación procedo a enumerar el servidor web.
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:
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, así que 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 exploits, 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.
- Primeramente voy a intentar leer el archivo db_connect.php de igual forma que leí el archivo passwd.
# 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.
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.
gdb🔍
Para encontrar vectores de escalada lanzo linpeas.sh que se puede descargar desde este repositorio de Github.
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.
- Identificamos un proceso que se ejecute como root
- Con gdb asignamos suid a la bash aprovechando el proceso.
- Una vez hemos asigando suid a la bash ejecutamos
bash p
y ya seremos root y podremos leer la flag root.txt
Subscribe to my newsletter
Read articles from elc4br4 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
elc4br4
elc4br4
Cybersecurity Student