Hack the Box - Delivery Writeup
- 5 mins[TOC]
Summary
Esta es la 2da maquina de ippsec, para ser easy no se le puede exigir mucho, la parte del usuario es enumeracion basica y sentido comun, lo divertido empieza con root, me llevo un poco de tiempo intentando romper el hash obtenido por el simple hecho de no ser cuidadoso con el hint totalmente regalado en la plataforma de Mattermost.
Info de la maquina
VM column | Detalles |
---|---|
Nombre | Delivery |
Dificultad | Easy |
Release | 09/01/2021 |
OS | Linux |
IP | 10.10.10.222 |
Editamos /etc/hosts y agregamos la IP 10.10.10.222que apunte hacia delivery.htb
Escaneo de Puertos
Escaneamos los puertos con Masscan y Nmap, utilizando Masscan_To_Nmap , esta herramienta escanea puertos TCP y UDP, toma los abiertos y ejecuta Nmap en búsqueda de servicios y scripts por default, mas info y donde conseguir el script:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 9c:40:fa:85:9b:01:ac:ac:0e:bc:0c:19:51:8a:ee:27 (RSA)
| 256 5a:0c:c0:3b:9b:76:55:2e:6e:c4:f4:b9:5d:76:17:09 (ECDSA)
|_ 256 b7:9d:f7:48:9d:a2:f2:76:30:fd:42:d3:35:3a:80:8c (ED25519)
80/tcp open http nginx 1.14.2
|_http-server-header: nginx/1.14.2
|_http-title: Welcome
8065/tcp open unknown
| fingerprint-strings:
| GenericLines, Help, RTSPRequest, SSLSessionReq, TerminalServerCookie:
| HTTP/1.1 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| Connection: close
| Request
| GetRequest:
| HTTP/1.0 200 OK
| Accept-Ranges: bytes
| Cache-Control: no-cache, max-age=31556926, public
| Content-Length: 3108
| Content-Security-Policy: frame-ancestors 'self'; script-src 'self' cdn.rudderlabs.com
| Content-Type: text/html; charset=utf-8
| Last-Modified: Fri, 21 May 2021 20:15:56 GMT
| X-Frame-Options: SAMEORIGIN
| X-Request-Id: kmk7wkwd3fr4xgk35hainyyeha
| X-Version-Id: 5.30.0.5.30.1.57fb31b889bf81d99d8af8176d4bbaaa.false
| Date: Fri, 21 May 2021 20:28:36 GMT
Tanto el puerto 22 y 80 nos son conocidos a excepción del 8065
User Part
WebEnum:Delivery.htb
Visitando la web, vamos al apartado de Contacts y encontramos dos información que nos van a resultar útil
- HelpDesk: Un sistema de ticket que apunta hacia
helpdesk.delivery.htb
- MatterMostServer : Un servicio que corre en el puerto
8065
Agregamos helpdesk.delivery.htb en /etc/hosts
.
A tener a consideración, la info es un hint para lo que sigue mas adelante.
MatterMost
Visitamos MatterMost en el puerto 8065 :
+Info sobre lo que es Mattermost:
-
.[https://github.com/mattermost/mattermost-server].(MatterMost Server)
Si completamos el registro, inmediatamente nos informara que un correo de confirmación fue enviado, así que necesitamos hacernos de un correo legitimo :)
Nota: Recuerde que esto es un ctf, la VM no le enviara nada a su correo personal.
HelpDesk
Ahora verificaremos helpdesk.delivery.htb
A simple vista es una plataforma de tickets, sin ninguna versión aparente. Ahora mismo, la idea es hacernos con un correo @delivery.htb
y tal como leímos en Contacts , podemos tener acceso a Mattermost vía HelpDesk, así que procedemos a crear un ticket.
Y tenemos nuestro correo @delivery.htb
:) :
Nota: Tener pendiente el # de ticket.
Mattermost Parte II
Ahora procederemos a registrarnos en Mattermost con el correo obtenido:
Verificamos nuestro ticket en HelpDesk
Copiamos y pegamos la validación del correo, nos logueamos y tenemos acceso a la plataforma:
En el thread tenemos un comentario de root
y obtenemos las credenciales:
maildeliverer:Youve_G0t_Mail!
Nos logueamos via ssh
Root
Utilizando enum manual y automatizado con linpeas no encontre nada interesante, el usuario que obtuvimos no pertenece a un grupo de interes comun o tiene algun privilegio con sudo, sin embargo hay una DB MySQL que se esta ejecutando en la maquina. El usuario que tenemos no nos sirve.
Las credenciales correctas de MySQL se encuentran en /opt/mattermost/config/config.json
, es decir, en la carpeta de configuracion de MatterMost
User:mmuser
Pass:Crack_The_MM_Admin_PW
DB:mattermost
Nos logueamos a la DB : mysql -u mmuser -D mattermost -p
Verificamos las tablas :
show tables;
Ahora a ver el contenido de dicha tabla:
Select * From Users;
Algo desorganizado, verifiquemos espesificamente el usuario root :
SELECT username, password FROM Users WHERE username = 'root';
User:root
Hash:$2a$10$VM6EeymRxJ29r8Wjkr8Dtev0O.1STWb4.4ScG.anuu7v0EFJwgjjO
Cuyo tipo de hash es segun hashid :
So…esta parte puede ser un poco tediosa si no se presta atencion en los comentarios en Mattermost:
Dos hint :1) PleaseSubscribe!
que podemos utilizarlo en nuestro wordlist; 2) hashcat
.
Necesitamos crear toda las posibles variaciones del hint #1 con una regla de hashcat, en mi caso utilizare Hob0Rules
:
git clone https://github.com/praetorian-inc/Hob0Rules
Podemos hacerlo de dos formas.
1) Creando un wordlist y luego utilizar hashcat o john
hashcat --force dic.txt -r hob064.rule --stdout > wordlist.txt
hashcat -a 0 -m 3200 hash wordlist.txt -r Hob0Rules/hob064.rule -o root.txt
Revisamos el output:
Probamos el pass:
Root :)