HackTheBox - Mentor Write up
HackTheBox baru-baru ini merilis mesin baru bernama “Mentor” yang menghadirkan tantangan menarik. Dalam penyelesaiannya, langkah pertama adalah mengidentifikasi vhost baru yang menyediakan dokumentasi API. Dokumentasi ini berisi daftar semua titik akhir yang dapat diakses.
Selanjutnya, dengan memanfaatkan kerentanan injeksi perintah, kita dapat memperoleh akses shell terbalik (rev shell). Setelah itu, kredensial database dapat diperoleh, dan hash database dapat di-dump.
Informasi tambahan yang berguna bisa ditemukan di file konfigurasi SNMP, yang berisi kata sandi pengguna. Akhirnya, untuk mendapatkan hak akses root, kita dapat menjalankan biner “sh” yang tersedia.
Information Gathering
Hasil dari perintah curl 10.10.11.193 yang dilakukan dari terminal. Output menunjukkan bahwa server mengembalikan respons HTTP 302 yang menunjukkan bahwa dokumen telah dipindahkan ke URL baru: http://mentorquotes.htb/
. Ini adalah respons standar ketika sebuah halaman web telah dipindahkan sementara ke lokasi yang berbeda. Informasi tambahan dari output ini meliputi server yang digunakan (Apache/2.4.52 di Ubuntu) dan alamat IP server (10.10.11.193
)
Scan Nmap: hasil dari perintah nmap -sC -sV mentorquotes.htb
yang dilakukan dari terminal. Output ini merinci informasi yang ditemukan oleh Nmap saat memindai domain mentorquotes.htb (dengan IP 10.10.11.193
)
Fuzzing Directory: hasil dari perintah wfuzz yang digunakan untuk melakukan fuzzing terhadap domain mentorquotes.htb
.
Salah satu hasil menunjukkan respons 404 (Not Found) dengan payload api
.
Jika API subdomain kami Fuzzing lagi akan mendapatkan seperti berikut:
Pada direktori /admin
menunjukkan pesan kesalahan dalam format JSON. Ada dua bagian utama yang terlihat: satu berlabel Raw Data
dan yang lain berlabel Pretty
. Bagian Pretty
diperluas untuk menampilkan detail pesan kesalahan, yang mencakup dua kesalahan yang menyatakan bahwa header
hilang dengan pesan field required
dan tipe value.error.missing
. Ini menunjukkan bahwa ada upaya untuk mengakses endpoint API (seperti yang disiratkan oleh URL api.mentorquotes.htb/admin
) tetapi gagal karena informasi header yang hilang yang biasanya diperlukan untuk otentikasi atau menentukan tipe konten dalam permintaan HTTP.
Pada /docs menampilkan Dokumen API seperti digambar Dan kita juga melihat bahwa pemilik situs web tersebut jamesdan emailnya adalah james@mentorquotes.htb
Exploitation
Mari kita coba mendaftar dengan bantuan dokumentasi. Namun, saya lebih suka bekerja dengan Burp Suite, jadi saya akan menangkap permintaan menggunakan Burp.
Akun dibuat menggunakan kredensial acak.
Sekarang, mari kita juga menangkap permintaan ke endpoint login di Burp.
Dan kami berhasil mendapatkan token JWT-nya.
Kami juga menangkap permintaan ke endpoint /users
di Burp, yang akan memberikan daftar semua pengguna.
Namun, kali ini kami mendapatkan kesalahan 403
Forbidden, yang memberi tahu kami bahwa hanya admin yang dapat mengakses sumber daya ini.
Post Exploitation
Kami menggunakan snmpwalk untuk mendapatkan kredensial
Kami mencari kredensial login dan mendapatkan password dari user James
Saat ini kami mencoba masuk dengan kredensial yang sama dan berhasil mendapatkan token JWT-nya.
Dan kali ini, kami berhasil mendapatkan daftar pengguna.
Jika kami kembali masih mendapatkan error untuk mengakses direktori /admin/
Kami menggunakan autentikasi token yang didapat tadi dan mendapatkan response 2 endpoint
- /check
- /backup
Implementasi titik akhir /check
belum selesai.
Tetapi titik akhir /backup
memberitahu kami bahwa metode GET tidak diizinkan.
Mari kita lihat perubahan dalam permintaan tersebut.
Dan hal tersebut mengindikasikan bahwa itu memerlukan objek JSON dengan atribut body.
Kami menyertakan objek JSON kosong dan mengubah jenis konten menjadi application/json
, yang menambahkan satu atribut tambahan yang disebut path untuk ditentukan.
Setelah menyertakan keduanya, muncul pesan sukses yaitu Done!
Mari kita mencoba injeksi perintah dasar dengan menggunakan perintah ping, tetapi sebelumnya kita akan memulai tcpdump.
Dan JSON
objeknya terlihat seperti ini. Coba dasar technique
injeksi perintah dengan ;
Mari kita kirim request. dan kami mencoba mendapatkan shell baliknya.
Dalam direktori /app
, saya menemukan file db.py
yang berisi kredensial PostgreSQL.
Untuk berinteraksi dengan database PostgreSQL, kita perlu meneruskan port menggunakan chisel.
Mari kita transfer file biner chisel.
Marilah kita terhubung ke basis data PostgreSQL. Kami berhasil mendapatkan ketiga hash, di antaranya ada yang milik kami.
Kami memecahkan hash menggunakan CrackStation dan mendapatkan kata sandi pengguna yang disebut 123meunomeeivani
.
Privileges Escalation
Memeriksa apakah dalam file snmpd.conf kami terdapat kata sandi SuperSecurePassword123__
Kami mencoba login dengan user James
yang passwordnya sudah kita dapatkan tadi
Memeriksa apakah pengguna tersebut memiliki hak istimewa sudo.
Kemudian kami melihatnya menjalankan biner /bin/sh dengan hak istimewa root.