Delivery máquina retirada con sistema operativo linux y clasificación fácil. Esta máquina es realmente interesante lo cual contiene un sistema de tickets lo cual con el proceso de enumeración es fundamental para el primer flag y una parte de escalación de privilegios que debemos crackear hash para obtener el password de root.
Metodología:
- Reconocimiento
- Scan de puertos con nmap
- Scan de servicios y versiones con nmap
- Enumeración Web (Sistema de Soporte de Tickets — OsTicket & Mattermost)
- User Flag
- Escalada de privilegios
- Cracking de Password con Hashcat
Antes de empezar como es habitual correr nuestra VPN descargada de la plataforma (examples.ovpn) y comprobar conexión mediante una traza ICMP: ping -c 1 10.10.10.222 a nuestra máquina target.
Una vez confirmamos que tenemos conexión iniciamos con nmap para buscar puertos y servicios abiertos.
RECONOCIMIENTO
- Scan de Puertos: nos permite identificar los puertos que están activos de forma rápida: nmap -p- — max-retries 0 10.10.10.222
Una vez identificamos los puertos activos de nuestra máquina target realizamos un scan mas profundo.
- Scan de servicios y versiones:
Determinar los servicios y sus versiones que están corriendo en la máquina; con la opción -oN para guardar salida en formato txt: nmap -sS -sV — min-rate 5000 — open -vvv -n -Pn -p 22,80,8065 -oN Delivery 10.10.10.222
# Nmap 7.91 scan initiated Tue May 4 23:28:38 2021 as: nmap -sS -sV --min-rate 5000 --open -vvv -n -Pn -p 22,80,8065 -oN Delivery 10.10.10.222
Nmap scan report for 10.10.10.222
Host is up, received user-set (0.18s latency).
Scanned at 2021-05-04 23:28:42 EST for 102sPORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open http syn-ack ttl 63 nginx 1.14.2
8065/tcp open unknown syn-ack ttl 63
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port8065-TCP:V=7.91%I=7%D=5/4%Time=60921F06%P=x86_64-pc-linux-gnu%r(Gen
SF:ericLines,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nContent-Type:\x20te
SF:xt/plain;\x20charset=utf-8\r\nConnection:\x20close\r\n\r\n400\x20Bad\x2
SF:0Request")%r(GetRequest,DF3,"HTTP/1\.0\x20200\x20OK\r\nAccept-Ranges:\x
SF:20bytes\r\nCache-Control:\x20no-cache,\x20max-age=31556926,\x20public\r
SF:\nContent-Length:\x203108\r\nContent-Security-Policy:\x20frame-ancestor
SF:s\x20'self';\x20script-src\x20'self'\x20cdn\.rudderlabs\.com\r\nContent
SF:-Type:\x20text/html;\x20charset=utf-8\r\nLast-Modified:\x20Tue,\x2004\x
SF:20May\x202021\x2004:52:04\x20GMT\r\nX-Frame-Options:\x20SAMEORIGIN\r\nX
SF:-Request-Id:\x205zg6d7i5hp8ztmkkw8if7tr8ow\r\nX-Version-Id:\x205\.30\.0
SF:\.5\.30\.1\.57fb31b889bf81d99d8af8176d4bbaaa\.false\r\nDate:\x20Wed,\x2
SF:005\x20May\x202021\x2004:32:47\x20GMT\r\n\r\n<!doctype\x20html><html\x2
SF:0lang=\"en\"><head><meta\x20charset=\"utf-8\"><meta\x20name=\"viewport\
SF:"\x20content=\"width=device-width,initial-scale=1,maximum-scale=1,user-
SF:scalable=0\"><meta\x20name=\"robots\"\x20content=\"noindex,\x20nofollow
SF:\"><meta\x20name=\"referrer\"\x20content=\"no-referrer\"><title>Matterm
SF:ost</title><meta\x20name=\"mobile-web-app-capable\"\x20content=\"yes\">
SF:<meta\x20name=\"application-name\"\x20content=\"Mattermost\"><meta\x20n
SF:ame=\"format-detection\"\x20content=\"telephone=no\"><link\x20re")%r(HT
SF:TPOptions,5B,"HTTP/1\.0\x20405\x20Method\x20Not\x20Allowed\r\nDate:\x20
SF:Wed,\x2005\x20May\x202021\x2004:32:48\x20GMT\r\nContent-Length:\x200\r\
SF:n\r\n")%r(RTSPRequest,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nContent
SF:-Type:\x20text/plain;\x20charset=utf-8\r\nConnection:\x20close\r\n\r\n4
SF:00\x20Bad\x20Request")%r(Help,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\
SF:nContent-Type:\x20text/plain;\x20charset=utf-8\r\nConnection:\x20close\
SF:r\n\r\n400\x20Bad\x20Request")%r(SSLSessionReq,67,"HTTP/1\.1\x20400\x20
SF:Bad\x20Request\r\nContent-Type:\x20text/plain;\x20charset=utf-8\r\nConn
SF:ection:\x20close\r\n\r\n400\x20Bad\x20Request")%r(TerminalServerCookie,
SF:67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nContent-Type:\x20text/plain;\
SF:x20charset=utf-8\r\nConnection:\x20close\r\n\r\n400\x20Bad\x20Request");
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelRead data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue May 4 23:30:24 2021 -- 1 IP address (1 host up) scanned in 107.36 seconds
Como resultado se obtiene tres servicios en ejecución. En los siguientes puertos:
- 22: SSH; lo marcamos como referencia que pueden existir credenciales para loggearnos por SSH más adelante.
- 80: Servidor web, vector de ataque más grande lo cual necesitamos más enumeración web.
- 8065: Servicio desconocido.
ENUMERACIÓN WEB
Comenzamos con la enumeración del sitio web, primera opción: Puerto 80 mapeo del sitio web donde buscamos información como: (usuarios, fecha, correos, cuentas, código fuente y dato útil) todo lo que nos permita obtener durante un reconocimiento.
Al leer el contenido en el enlace “helpdesk” y en el botón “Contact us” del sitio web, vemos un redireccionamiento a http://helpdesk.delivery.htb y otro enlace en“Mattermost server” con redireccionamiento a http: //delivery.htb: 8065/.
Antes de enumerar estos enlaces los agregamos a nuestro archivo /etc/hosts en nuestro (kali, parrots, etc) con el fin de indicar a nuestro navegador web que estas URL están en la dirección 10.10.10.222 del servidor HTB.
Una vez agregados ya podemos acceder a los enlaces: http://helpdesk.delivery.htb y a http: //delivery.htb: 8065/ donde encontramos dos servicios que se ejecutan en esta máquina sistema de tickets de soporte “osTicket” y MatterMost que es el servicio que muestra nmap como desconocido, seguimos enumerando y comenzamos con mattermost en este caso consultamos a nuestro amigo google sobre este servicio y si conoce algunos exploit o vulnerabilidades.
Mattermost:Es un servicio de chat en línea de código abierto y autohospedable con intercambio de archivos, búsqueda e integraciones
. Está diseñado como un chat interno para organizaciones y empresas, y se comercializa principalmente como una alternativa de código abierto para Slack y Microsoft Teams. https://en.wikipedia.org/wiki/Mattermost
Luego de investigar entre páginas, no logre encontar nada relacionado con MatterMost en ExploitDB algo público para probar; luego de darle un vistazo general intentamos registrar una cuenta con datos básicos para crear cualquier cuenta.
Pero necesitamos verificar nuestra cuenta, es una configuración predeterminada en MatterMost. No podemos hacer mucho. Sin conocer un correo electrónico válido hasta el momento; en este punto vamos a retroceder e investigar sobre el otro servicio sistema de soporte de ticket.
Sistema de tickets de soporte
Funciona con el sistema de tickets de soporte de osTicket. Un sistema de tickets de soporte de código abierto en este caso el sistema nos permite interacción para iniciar sesión,abrir un ticket.
EXPLOTACIÓN
Luego de releer la sección “contact us” del sitio web principal, dice que para acceder al servicio MatterMost, es necesario ponerse en contacto con el servicio de asistencia técnica. Para usuarios no registrados, utilicé nuestro HelpDesk para ponerse en contacto con nuestro equipo. Una vez que tenga una dirección de correo electrónico @ delivery.htb, podrá tener acceso a nuestro servidor MatterMost.
Creamos un nuevo ticket, open new ticket rellenamos con la información solicitada.
Obtenemos una dirección de correo electrónico 5039439@ delivery.htb que podemos utilizar, hoy día es muy común que los los sistemas de venta de entradas permitan que el cliente responda directamente a un correo electrónico y se mostrará en el portal de servicio al cliente. Aprovechemos esta “función” para obtener acceso al servicio MatterMost.
Ahora que tenemos una dirección de correo válido, procedemos a registrarnos como un nuevo usuario utilizando el correo electrónico del ticket de soporte en MatterMost.
Accedemos al ticket de soporte, para poder recibir el correo electrónico de confirmación, en esta ocasión usamos la opción “check ticket status” Tecleamos el ID del ticket y el correo electrónico del cliente (unbroken@gmail.com) para ver los datos que nos envían.
Consulte la página para ver el enlace de confirmación a MatterMost, copiamos esta URL de confirmación en el navegador web y obtenga acceso a la instancia de MatterMost.
Después de leer todo el hilo de la información que nos muestran vemos otro usuario root y algunas credenciales que podemos suponer que son para el servicio SSH “maildeliverer : Youve_G0t_Mail!” y tambien nos dan un consejos que debemos mejorar nuestra contraseñas.
Obteniendo flag de user
OK, hora de probar las credenciales por SSH, abrimos terminal y tipiamos la información encontrada, tambien podiamos usar tools hydra y metasploit para validad si esta credeciales son validas.
Logramos entrar como user maildeliverer, solo queda utilizar el comando cat sobre user.txt para ver y obtener el primer flag.
ESCALADA DE PRIVILEGIOS
El usuario maildeliverer es un usuario básico, para comenzar a enumerar seguimos primero la descripción de la máquina en HTB; De los más básico puedo ser por privilegios de sudo de un archivo o por algún archivo de configuración expuestos lo que es este caso, se ejecuta una base de datos MySQL y el sistema de emisión de tickets necesita una forma de almacenar datos, y MatterMost también usa una base de datos en el back-end.
Luego de buscar durante un buen rato archivos de configuraciones y otros dentro sistema vemos que el archivo de configuración MatterMost se encuentra en /opt/mattermost/config/config.json y contiene credenciales para la base de datos MySQL en SqlSettings nombre de usuario y la contraseña están en texto sin formato y se pueden usar para iniciar sesión en la base de datos.
Tenemos acceso a la base de datos MySQL con la credenciales, buscamos dentro de la base de datos, con “show databases”; para ver la base de datos que contiene y “use mattermost”; para trabajar sobre esta base de datos.
Luego de consultar la tabla, fila y columna que contiene la base datos, se lista una tabla con nombre “ users” seleccionamos: Nombre de usuario y Contraseña de Usuarios de la tabla “users”.
CRACKING DE PASSWORD
Descifrar el hash, Recordando el textos que decía anteriormente sobre tener contraseñas con diferentes iteraciones de “PleaseSubcribe!”; Creamos y guardamos el hash del password en un archivo hash.txt y otro llamado wordlist.txt con la palabra PleaseSubcribe!.
En este caso utilizamos Hashcat para descifrar el hash con la regla Hob0Rules sobre el archivo con el nombre (hash.txt) y wordlist.txt. https://github.com/praetorian-inc/Hob0Rules
Corremos hashcat ahora si, con el siguiente comando # hashcat -a 0 -m 3200 hash.txt wordlist.txt -r Hob0Rules/d3adhob0.rule -o cracked.txt -w 3 -O
y obtenemos el hash crackeado.
Cambiamos de usuario maildeliverer a usuario root con “su — root” y utilizamos esta nueva contraseña, Tenemos la credenciales como root y nos desplazamos hasta flag root.txt.
Finally!!! somos Root