Publicado: 06 de Mayo de 2025
Autor: José Miguel Romero aka x3m1Sec
Dificultad: ⭐ Fácil
📝 Descripción
Help" es una máquina Linux de dificultad fácil en HackTheBox que presenta una aplicación web vulnerable de mesa de ayuda (HelpDeskZ) y una API GraphQL. La explotación implica múltiples vectores: enumeración web, extracción de credenciales a través de GraphQL, explotación de SQLi en la aplicación web para obtener más credenciales, y finalmente una escalada de privilegios aprovechando una vulnerabilidad en el kernel de Linux.
La máquina es particularmente útil para practicar técnicas de reconocimiento web, manipulación de APIs GraphQL, explotación de SQL Injection y escalada de privilegios mediante vulnerabilidades de kernel.
🚀 Metodología
graph TD
A[Reconocimiento] --> B[Escaneo: Puertos 22, 80, 3000]
B --> C[Puerto 80: HelpDeskZ v1.0.2]
B --> D[Puerto 3000: GraphQL API]
D --> E[Explotación GraphQL]
E --> F[Obtención credenciales: helpme:Welcome1]
C --> G[Enumeración HelpDeskZ]
G --> H[Descubrimiento vulnerabilidad SQLi]
H --> I[Explotación SQLi]
I --> J[Obtención credenciales: help:Welcome1]
J --> K[Acceso SSH como usuario help]
K --> L[Enumeración sistema]
L --> M[Kernel vulnerable: 4.4.0-116]
M --> N[Explotación CVE-2017-16995]
N --> O[Shell como Root]
🔭 Reconocimiento
Ping para verificación en base a TTL
❯ ping -c2 10.10.10.121
PING 10.10.10.121 (10.10.10.121) 56(84) bytes of data.
64 bytes from 10.10.10.121: icmp_seq=1 ttl=63 time=48.7 ms
64 bytes from 10.10.10.121: icmp_seq=2 ttl=63 time=46.7 ms
--- 10.10.10.121 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 46.736/47.707/48.679/0.971 ms
💡 Nota: El TTL cercano a 64 sugiere que probablemente sea una máquina Linux.
❯ nmap -sC -sV -p$ports 10.10.10.121 -oN services.txt
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-05 18:59 CEST
Nmap scan report for 10.10.10.121
Host is up (0.046s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 e5:bb:4d:9c:de:af:6b:bf:ba:8c:22:7a:d8:d7:43:28 (RSA)
| 256 d5:b0:10:50:74:86:a3:9f:c5:53:6f:3b:4a:24:61:19 (ECDSA)
|_ 256 e2:1b:88:d3:76:21:d4:1e:38:15:4a:81:11:b7:99:07 (ED25519)
80/tcp open http Apache httpd 2.4.18
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Did not follow redirect to http://help.htb/
3000/tcp open http Node.js Express framework
|_http-title: Site doesn't have a title (application/json; charset=utf-8).
Service Info: Host: 127.0.1.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel
⚠️ Importante: El servicio HTTP redirige a help.htb. Debemos agregar este dominio a nuestro archivo hosts.
echo "10.10.10.121 help.htb" | sudo tee -a /etc/hosts
Este fichero parece indicar entre cosas la versión. Veamos si podemos enumerar la versión en nuestro caso:
http://help.htb/support/UPGRADING.txt
Verificamos que es la versión 1.0.2 y esta versión es vulnerable a Arbitrary File Upload y a authenticated sql injection:
https://www.exploit-db.com/exploits/40300
https://www.exploit-db.com/exploits/41200
Encontramos una sección que permite enviar tickets rellenando una serie de campos del formulario y además hay un módulo de subida de archivos. Creo que puede valer la pena analizar esté módulo para ver qué extensiones permite. Intentamos subir un archivo .php:
Al acceder al puerto 3000 encontramos que el servicio nos devuelve un JSON indicando el siguiente mensaje:
|message|"Hi Shiv, To get access please find the credentials with given query"|
En la pestaña "Headers" vemos que en la respuesta está especificando que se está empleando Express.
Googleando sobre «Express js query language» nos encontramos con resultados relacionados con GraphQL.
Al navegar al recurso /graphql nos indica que falta por especificar un parámetro de tipo GET en la solicitud:
A continuación intentamos consultar información. Un endpoint graphql toma objetos como entrada. Como necesitamos información relacionada con un usuario vamos a probar con un objeto usuario. Usamos jq para formatear la salida a JSON
Probamos estas credenciales en el panel de login anterior y logramos acceder:
Anteriormente cuando enumeramos la versión de este software vimos que podía ser vulnerable a Arbitrary File Upload y Authenticated SQLi.
searchsploit -m php/webapps/41200.py
El exploit no me funcionó con esta máquina, pero tras revisar el contenido pude entender lo que hacía para intentar realizar la explotación de forma manual.
Lo primero que se requiere es crear un ticket adjuntando un archivo:
A continuación, copiamos la url del adjunto en el navegador e interceptamos la petición con burp:
Probamos añadiendo una inyección muy sencilla y confirmamos la vulnerabilidad:
and 1=1-- -
Enviando esto resulta en una condición verdadera que devuelve la imagen pero cambiándolo a 1=2 no lo hace porque se evalúa a falso. Esto confirma la vulnerabilidad SQLi.
Obtenemos la contraseña de la cuenta Administrator: Welcome1
Estas credenciales no funcionarion en el panel de /support de helpdesz. Tampoco funcionaron de primeras con ssh las combinaciones Administrator, admin, helpme, root, hasta que probé con help como usuario y pude autenticarme vía ssh:
ssh help@10.10.10.121
help@help:/home$ cd help
help@help:~$ ls
help npm-debug.log user.txt
help@help:~$ cat user.txt
172100*********53c987d******938
help@help:~$
Escalando privilegios
Verificamos que el usuario help no puede ejecutar ningún comando como root:
help@help:~$ sudo -l
[sudo] password for help:
Sorry, user help may not run sudo on help.
https://www.exploit-db.com/exploits/44298
Creamos un fichero en el directorio /tmp de la máquina objetivo con el nombre exploit.c y el contenido del exploit