[Hack The Box] — Sunday walkthrough / Solution

Sedikit cerita mengenai langkah penyelesaian salah satu Lab dari HTB berjudul “Sunday”

Faisal Yudo Hernawan
7 min readOct 2, 2018

بسم الله الرحمن الرحيم

Beberapa hari yang lalu, saya berhasil menyelesaikan salah satu mesin dari hack the box. Mengingat bahwa mesin itu sudah retired, maka saya pun mencoba membuat solusi mengenai cara saya mengambil alih mesin terkait yang diharapkan dapat menjadi pembelajaran untuk rekan pembaca.

Sebagai informasi, mesin yang saya coba pada waktu itu bernama sunday dengan sistem operasi solaris. Adapun seperti biasanya, tujuan dari tantangan ini yaitu peserta diminta untuk mengambil alih mesin secara penuh untuk mendapatkan flag yang tersimpan di dalam mesin yang tersedia. Flag yang tersimpan pada mesin pun terbagi menjadi dua yang terdiri dari user.txt dan root.txt.

Untuk flag user.txt, peserta dapat mengambilnya apabila peserta sudah mendapatkan akses setara limit user (low level user / standard user). Sedangkan flag yang tersimpan pada root.txt baru akan didapatkan ketika peserta sudah mengambil alih mesin secara penuh atau bisa dikatakan setingkat root. Di dalam implementasinya, untuk dapat mendapatkan akses mesin secara penuh, tentu diperlukan tahapan-tahapan seperti enumeration, gaining access serta privilege escalation.

I. Enumeration

Dalam tahap enumeration, saya mencoba melakukan pengumpulan informasi seperti port yang digunakan serta OS yang digunakan pada mesin target. Informasi-Informasi ini terbilang sangat penting dan berguna untuk melakukan serangan pada tahapan selanjutnya. Tentunya terdapat beberapa tools yang dapat digunakan untuk mengeksekusi hal ini, namun untuk memudahkan rekan pembaca dalam memahaminya, maka saya mencoba menggunakan nmap. Command yang digunakan pun terbilang sederhana, yaitu dengan nmap -v -sS -sV ip-target

Gambar 1. Gambar pengujian port scanning menggunakan NMAP

Berdasarkan gambar di atas saya mendapatkan informasi bahwa port yang terbuka yaitu TCP 79, 111 dan 8080. Dari sini, saya pun mencoba melakukan akses pada setiap port yang terbuka.

1.1. Analyzing 79/TCP

Untuk tahap pertama, saya mencoba melakukan pengecekan pada finger service yang jalan pada port 79/TCP.

Gambar 2. Gambar percobaan akses menggunakan finger

Melalui pengaksesan terhadap layanan finger, saya pun mendapatkan informasi berupa username yang dapat digunakan untuk login ke server target. Dari hasil yang ada, dapat disimpulkan bahwa terdapat dua user yang dapat login ke sistem yang terdiri dari user sammy dan sunny.

1.2. Analyzing 111/TCP

Tahap selanjutnya adalah saya mencoba mengakses service RPC yang jalan pada 111/TCP. Berdasarkan pencarian menggunakan searchploit, didapati beberapa kerentanan terkait Remote Code Execution yang dapat dimanfaatkan attacker untuk mengambil alih sistem secara remote.

Pada kesempatan ini, Saya mencoba menggunakan beberapa kode yang tersedia untuk mencoba melakukan pengujian pada service terkait, namun gagal mendapatkan akses shell. Berdasarkan hasil ini, dapat disimpulkan bahwa service tidak rentan terhadap serangan RCE.

Gambar 3. Gambar pencarian vulnerability service RCP pada Sun Solaris
Gambar 4. Gambar pengujian exploit pada service RPC namun gagal

1.3. Analyzing 8080/TCP

Tahapan selanjutnya yaitu mencoba melakukan pengujian pada service HTTP yang berjalan pada port 8080. Saya mencoba mengakses IP:8080 menggunakan browser dan akhirnya mendapati tampilan directory listing.

Gambar 5. Directory Listing

Karena direktori ini dapat diakses secara publik, saya pun mendapatkan beberapa direktori yang saya anggap menarik yang salah satunya adalah /backup yang menyimpan informasi sensitif berisikan file shadow.backup. Dari informasi ini, akhirnya berhasil diperoleh daftar user beserta password (dalam bentuk hash) yang terdapat pada mesin target.

Gambar 6. Gambar shadow.backup

1.4. Simple Password Cracking

Salah satu cara sederhana yang dapat ditempuh untuk melakukan “cracking” terhadap suatu password (katakanlah dalam bentuk hash), maka kita dapat menggunakan beberapa tools seperti JTR atau hashcat. Adapun pada percobaan cracking kali ini, saya mencoba menggunakan John (JTR).

Umumnya untuk melakukan cracking membutuhkan waktu yang tidak sebentar yang tentunya bergantung dari kompleksitas password yang sedang di-crack dan spesifikasi komputer yang digunakan untuk melakukan cracking.

Singkat cerita, melalui cara ini, saya berhasil memperoleh password yang digunakan oleh user sammy dan sunny. Adapun user sammy memiliki password cooldude! sedangkan sunny mempunyai password sunday.

Gambar 7. Gambar hasil cracking hash menggunakan John

1.5. Finding the Uncommon SSH Port

Sudah mendapatkan username dan password lalu mau digunakan untuk apa? Pastinya credentials ini dapat kita manfaatkan untuk login ke dalam mesin target. Tetapi bukannya tidak ada port SSH yang terbuka?

Memang benar. Berdasarkan hasil scanning menggunakan nmap, tidak ditemukan service SSH yang jalan pada server dimaksud. Namun mari kita mencoba melakukan enumeration lebih dalam melalui informasi yang tersedia dari issue terkait directory listing tadi.

Pada kesempatan ini, saya pun melakukan pencarian pada direktori SSH yang terdapat pada direktori etc. Dari hasil ini, saya mendapatkan konfigurasi SSH yang “menyatakan” bahwa layanan SSH di server itu running pada port 22022.

Gambar 8. Gambar directory listing pada SSH
Gambar 9. Gambar konfigurasi SSH

Dengan demikian, maka kita sudah berhasil memperoleh beberapa informasi yang cukup bermanfaat dari tahapan enuemrasi ini, yang secara garis besar berisikan beberapa hal sebagai berikut:

  • Ditemukannya username yang terdaftar pada target melalui service finger.
  • Ditemukannya hash password yang tersimpan pada shadow.backup.
  • Username sammy menggunakan password dengan value: cooldude! dan sunny dengan password sunday.
  • Service SSH running pada port yang tidak biasa yaitu port 22022.

2. Gaining Access

Berdasarkan informasi yang sudah didapatkan pada tahap sebelumnya, saya mencoba melakukan remote server target melalui layanan SSH. Adapun credentials yang digunakan yaitu username sammy dengan password cooldude!

Gambar 10. Gambar remote SSH target

Berdasarkan gambar di atas, dapat terlihat bahwa saya akhirnya berhasil mendapatkan akses SSH server target serta mendapatkan flag user.txt. Walaupun berhasil mendapatkan akses menuju server target namun akses yang didapat terbilang masih sebatas user biasa (belum setingkat root). Untuk mendapatkan akses root, tentunya perlu melakukan privileges escalation.

2.1. Privileges Escalation

Sebenarnya terdapat banyak sekali cara yang dapat ditempuh dalam melakukan privileges escalation. Beberapa di antaranya seperti local exploit dengan memanfaatkan kerentanan pada kernel sistem operasi atau dapat juga dengan menggunakan abusing sudo.

Pada tahap pertama ini, saya mencoba melakukan pemeriksaan sudo menggunakan command sudo -l dengan tujuan untuk mencari tahu ada tidaknya program yang dapat digunakan untuk metode terkait. Pada tahap ini saya pun mendapatkan informasi (root) NOPASSWD: /usr/bin/wget yang artinya user sammy dapat menjalankan program wget dengan setingkat user root tanpa menggunakan password.

Gambar 11. Gambar pengecekan sudo

2.2. Downloading shadow file (with root access command)

Di dalam implementasinya, tentunya terdapat beberapa skenario yang dapat dilakukan untuk mendapatkan akses shell menggunakan wget. Adapun cara yang saya gunakan pada kesempatan ini untuk mendapatkan akses shell setingkat root menggunakan wget adalah mengirim file shadow yang tersimpan pada /etc/shadow menuju host attacker memanfaatkan wget.

Gambar 12. Gambar mengirim /etc/shadow menuju host attacker menggunakan wget
Gambar 13. Gambar listening port untuk menerima hasil kiriman dari server target

2.3. Replacing the Found Hash and Send back to Server

Dari hasil sebelumnya, dapat terlihat bahwa kita telahmendapatkan isi dari file shadow yang tersimpan pada server target. Untuk mempersingkat waktu, saya tidak melakukan cracking hash password pada user root. Adapun cara yang saya lakukan dengan mengganti nilai hash user root dengan nilai hash milik user sammy seperti pada Gambar 14 di bawah.

Gambar 14. Gambar modifikasi nilai hash user root

Setelah dimodifikasi lalu mau di apakan ? Tentu saja di kirim balik ke server target untuk mengganti file shadow yang tersimpan pada server.

Gambar 15. Gambar menjalan SimpleHTTPServer
Gambar 16. Gambar mendownload file shadow pada host attacker dan disimpan pada /etc/shadow di target

2.4. Login with the New Password

Setelah berhasil memodifikasi isi dari /etc/shadow sesuai dengan keinginan maka langkah selanjutnya melakukan percobaan akses root menggunakan perintah su lalu masukan password cooldude!

Gambar 17. Gambar mendapatkan akses root

Mesin target berhasil diambil alih secara penuh dan saya berhasil mendapatkan flag yang tersimpan pada root.txt

3. The Closing

Demikian write-up yang dapat saya sampaikan terkait meraih akses root pada salah satu mesin HTB bernama “Sunday”.

Dari sini dapat kita ambil sedikit pelajaran bahwa pencarian informasi mengenai target adalah salah satu bagian terpenting untuk melanjutkan proses pemanfaatan kerentanan / eksploitasi. Pada penerapannya di realita, sering kali kita pun akan dihadapkan dengan membaca berbagai manual yang diharapkan dapat semakin membantu kita dalam memahami situasi yang ada pada target.

Adapun untuk hal terkait privilege escalation, maka rekan pembaca dapat mencoba melihat beberapa referensi yang saya gunakan saat mengambil sertifikasi OSCP:

--

--