[Hack The Box] — Sunday walkthrough / Solution
Sedikit cerita mengenai langkah penyelesaian salah satu Lab dari HTB berjudul “Sunday”
بسم الله الرحمن الرحيم
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
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.
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.
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.
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.
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.
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.
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!
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.
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.
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.
Setelah dimodifikasi lalu mau di apakan ? Tentu saja di kirim balik ke server target untuk mengganti file shadow yang tersimpan pada server.
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!
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:
- https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/
- https://payatu.com/guide-linux-privilege-escalation/
- “Windows Privilege Escalation Scripts & Techniques” by Rahmat Nurfauzi https://link.medium.com/X4Ix0gYbcW
- http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
- https://github.com/swisskyrepo/PayloadsAllTheThings?files=1
- http://www.fuzzysecurity.com/tutorials/16.html
Follow publikasi Al-Fursan ID untuk berbagai tulisan terkait keamanan siber dengan bahasa Indonesia: