Writeup: Help

Plataforma: HTB

Dificultad: Fácil

Fecha de resolución: 14/07/2025

Linux Pentesting Web HelpDeskZ PHP Upload Kernel Exploitation

Descripción

Imagen de la máquina

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
ping

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
nmap

Revisando el servicio web nos encontramos con una página por default de Apache

Apache

Realizando búsqueda de directorios con nmap encontramos un directorio support.

nmap --script http-enum -p80 10.10.10.121
web

Apuntando a support vemos un sitio con nombre HelpDeskZ

helpdeskz

Realizo una búsqueda en internet si es de código abierto y tenemos éxito.

git

Como es común en todos los sitios que son de código abierto, veamos si tenemos accesible el fichero README.md.

panel

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

git

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.

file-upload

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”)

file-upload file-upload

Ahora tenemos que averiguar donde se carga el fichero. Usaremos FFUF para detectar ruta y encontré dos directorios uploads y tickets.

file-upload file-upload

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
file-upload

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.

file-upload file-upload

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

kernel kernel

Se copia codigo y se compila de la siguiente manera

gcc exploit.c -o exploit

Ejecuto:

git-dumper

Pwned!

Relaciones con otras máquinas

Recursos

Referencias