Writeup: Help
Plataforma: HTB
Dificultad: Fácil
Fecha de resolución: 14/07/2025
Descripción
Help es una maquina que corre una aplicacion (HelpDeskZ), que permite la carga arbitraria de archivos para conseguir ejecución remota y se explota una vulnerabilidad en el kernel para obtener acceso root.
Temas
• Discovery Domain Name
• Arbitrary File Upload (Remote Command Execute)
• Ubuntu Kernel exploitation 16.4.5 (Local privilege escalation)
Reconocimiento
Inciamos comprobando si se tiene conectividad con la maquina
ping -c 1 10.10.10.121
Enumeración
Descubrimiento de puertos (22,80 y 3000)
nmap -p- --open -sS --min-rate 4000 -Pn -n -v 10.10.10.121 -oN SPorts
Revisando el servicio web nos encontramos con una página por default de Apache
Realizando búsqueda de directorios con nmap encontramos un directorio support.
nmap --script http-enum -p80 10.10.10.121
Apuntando a support vemos un sitio con nombre HelpDeskZ
Realizo una búsqueda en internet si es de código abierto y tenemos éxito.
Como es común en todos los sitios que son de código abierto, veamos si tenemos accesible el fichero README.md.
Explotación
Esto permite ver la versión de HekpDeskZ (1.0.2), por cual procedo a realizar búsqueda de exploit con searchsploit.
searchsploit HelpDeskZ
Revisando el exploit podemos deducir:
El software en la configuración predeterminada permite la carga para .php-files (!!). Creo que los desarrolladores pensaron que no era riesgo, porque los nombres de archivo se ofuscan cuando se cargan. Sin embargo, hay una debilidad en la función de cambio de nombre del archivo cargado.
$filename = md5($_FILES['attachment']['name'].time())...$ext;
Tomar el nombre original del archivo subido ($_FILES['attachment']['name']).
Concatenarlo con la marca de tiempo actual (time()).
Aplicar md5() para obtener un hash único y ofuscado.
Suponiendo el tiempo que se cargó el archivo, podemos obtener RCE.
Después de una deducción rápida podemos intentar cargar el archivo generando un ticket y subiendo un archivo PHP-FILE (Tener en cuenta que, aunque la aplicación responda con un mensaje “el fichero no es compatible, aun así lo carga”)
Ahora tenemos que averiguar donde se carga el fichero. Usaremos FFUF para detectar ruta y encontré dos directorios uploads y tickets.
Por el nombre, damos por hecho de haber encontrado el directorio final, ahora solo ejecutaremos el exploit.
(Para este punto ya debimos de haber configurado nuestro PHP-FILE y subido generando un ticket)
python2 exploit.py http://help.htb/support/uploads/tickets/ phpshell.php
Por alguna razón no podía ganar acceso al servidor ya que el tiempo de espera para la ejecución era de 5 minutos (300 segundos), por lo cual, jugamos un poco con el tiempo y al apuntar a 90 segundos, el exploit consigue ser ejecutado satisfactoriamente.
El exploit juega con la marca de tiempo ya que para la explotación es crucial porque el servidor tiene un desface de tiempo del nuestro.
Escalada de Privilegios
Despues de realizar enumeración, se detecta que la versión del kernel esta desactualizada 16.4.5, por lo cual se busca exploit para una posible explotación y se encuentra el siguiente:
Linux Kernel - 4.4.0-116 (Ubuntu 16.04.4) - Local Privilege Escalation
Se copia codigo y se compila de la siguiente manera
gcc exploit.c -o exploit
Ejecuto:
Pwned!