[HackTheBox] – BountyHunter

BountyHunter
Easy – Box
By SlothSpider

Initial

Pertama-tama, saya melakukan enumerasi menggunakan Nmap ke alamat IP 10.10.11.100. Kita dapatkan hasil seperti berikut (gambar 1).

gambar 1

Dari gambar 1, kita dapat lihat bahwa terdapat dua buah port yang terbuka, yaitu port 22 dan port 80.

Saatnya kita mengunjungi halaman web pada port 80 tersebut (gambar 2).

gambar 2

Dari hasil penelusuran pada web tersebut, kita bisa mengetahui bahwa terdapat sebuah halaman portal (portal.php) yang mengarahkan kita menuju halaman log_submit.php.

Foothold

Sebelum membahas lebih lanjut mengenai file log_submit.php, saya melakukan directory bruteforcing menggunakan dirbuster dan menemukan beberapa file, salah satu file yang menarik adalah db.php (gambar 3).

gambar 3

Hanya terdapat halaman kosong pada halaman db.php tersebut. Hal ini bisa disebabkan karena file db.php hanya berisi data seperti kredensial dan tidak melakukan output ke halaman web.

Kembali ke file submit_log.php, di halaman ini kita bisa melakukan submit bounty hunter report (gambar 4).

gambar 4

Ketika kita melakukan inspect element, pada bagian head, kita bisa menemukan bahwa log_submit.php melakukan akses ke /resources/bountylog.js (gambar 5).

gambar 5

Langsung saja kita lihat file bountylog.js tersebut.

Kita lihat bahwa pada terdapat XML pada halaman tersebut. Ternyata, kita bisa melakukan XEE injection (lihat ini) terhadap web tersebut. Oleh sebab itu, langsung saja kita intercept request web menggunakan Burpsuite.

gambar 6

Ketika kita melakukan submit bounty report pada halaman log_submit.php, web akan melakukan request dengan mengubah string data yang berisi XML menjadi base64 (gambar 6). Karena memiliki vulnerability XML External Entities (XXE) (lihat ini), sehingga, kita bisa ubah isi dari XML tersebut untuk mendapatkan isi dari file db.php yang tidak bisa kita lihat tadi.

Namun, agar isi dari file db.php yang dibatasi oleh “<?php” dan “?>” bisa terlihat (bukan mengeksekusinya), kita perlu mengakses file tersebut menggunakan PHP file inclusion vulnerability dan merubah isi dari file db.php tersebut menjadi base64 (lihat ini).

Sehingga, kita ubah payload kita pada bagian

menjadi:

Sehingga, payload kita adalah:

Sekarang, saatnya kita melakukan exploit. Kita kirim sebuah request untuk melakukan submit pada halaman log_submit.php dan kita intercept pesan tersebut. Kemudian, pada burpsuite, kita pindahkan request tersebut dari intercept menuju repeater. Kemudian, kita ubah request kita menjadi payload di atas. Namun, payload diatas perlu kita ubah dahulu menjadi base64. Kemudian, kita bisa mengirimnya.

Pada bagian response dapat kita lihat bahwa kita mendapatkan sebuah string dalam bentuk base64 yang merupakan sebuah kredensial (gambar 7).

gambar 7

User

Namun, bisa kita gunakan untuk apa kredensial ini, kita tidak bisa mengakses database atau menemukan hal lain dari web tersebut. Oleh sebab itu, langsung kita coba saja melakukan bruteforce untuk melakukan SSH. Namun, pertama-tama kita perlu tahu dulu nama-nama dari user yang ada. Kita bisa melakukan XSS dan mengakses file /etc/passwd (gambar 8).

gambar 8

Kita dapatkan response (gambar 8) dan mengekstrak username tersebut dan memasukkannya kedalam sebuah file bernama users.

Sekarang, saatnya kita melakukan bruteforcing SSH menggunakan bantuan hydra menggunakan command berikut.

Kita dapatkan username dan password yang sesuai (gambar 9).

gambar 9

Saatnya kita melakukan SSH dan mengambil flag user (gambar 10).

gambar 10

Privilege Escalation

Kita lihat bahwa user development dapat menjalankan “/usr/bin/python3.8 /opt/skytrain_inc/ticketValidator.py” sebagai sudoers (gambar 11).

gambar 11

Kita lihat isi dari file ticketValidator.py sebagai berikut.

Dari file di atas, terdapat suatu celah, yaitu pada pemanggilan fungsi eval() pada load_file.

Untuk mengakses fungsi tersebut, terdapat beberapa syarat yang perlu dipenuhi, untuk mempermudah, saya membuat catatan berikut.

Kita buat payload kita seperti berikut dengan file bernama hello.md.

Di sini, saya hanya akan membahas pada baris terakhir pada payload saya. Pada baris terakhir, ** digunakan untuk memenuhi syarat dari progamnya, 704 agar nilai tersebut ketika di modulo dengan 7 bersisa 4, tanda + digunakan sebagai pemisah antara syarat agar eval() dijalankan dan kode untuk melakukan exploit kita, dan sisa nya adalah payload kita untuk mengeluarkan bash shell dengan sudo privilege.

gambar 12

Kita dapatkan root shell (gambar 12)!

Leave a Reply

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