Link soal: https://bnv.web.ctfcompetition.com
Diberikan soal sebagai berikut
Kita mencoba untuk melakukan submit dan tanggapan dari server adalah
Lalu kita mencoba untuk melakukan intercept dengan menggunakan bantuan Burp Suite. Sebelumnya, kita mengganti url tersebut menggunakan “http” agar kita bisa menginterceptnya
Kita menemukan {“message”:”135601360123502401401250″} yang dalam bentuk JSON dengan key nya message dan value nya 135601360123502401401250
Value itu disesuaikan dengan nama-nama city yang ada di website tersebut. Jika kita mengganti value tersebut, maka response yang diberikan dari server adalah “No result found”
Kita mencoba untuk mencari vulnerable-vulnerable yang berkaitan dengan JSON dan kita menemukan website-website yang berguna untuk membantu kita dalam pengerjaan soal ini.
Link tersebut antara lain:
- https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html
- https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html
Link-link di atas semuanya menjelaskan tentang adanya XXE bug dengan cara menconvert JSON request ke XML request
Langkah awal yang kita lakukan adalah mengganti Content-type nya menjadi XML dan mencoba untuk menambahkan <?xml version=”1.0″ ?>
Dapat kita lihat bahwa ada error XML “Start tag expected, ‘<‘ not found, line 1, column 23”. Di sini kita bisa mengetahui bahwa kita bisa menggunakan XML di server tersebut dan di proses oleh si server.
Setelah kita mengetahui hal tersebut, langkah selanjutnya yang kita lakukan adalah mencari file local dtd di server tersebut. Kita menemukan link https://mohemiv.com/all/exploiting-xxe-with-local-dtd-files/ yang berisikan tentang payload yang dapat kita gunakan untuk mengexploit XXE dengan menggunakan local dtd file
Kita menggunakan file local dtd ini untuk mentrigger error message agar server menampilkan file-file nya melalui error message yang ditampilkan oleh si server ini
Ketika kita mencoba untuk menggunakan payload tersebut, server memberikan respon
Kita tidak berhasil untuk menemukan local file dtd nya, sehingga kita mencoba untuk membaca bagian bawah dari link yang sudah kita cantumkan tadi, ada terdapat cara kita untuk menemukan local dtd file di server tersebut
/usr/share/yelp/dtd/docbookx.dtd di sini berisikan entity-entity yang dapat kita overwrite
Ketika docbookx.dtd tersebut kita buka, kita bisa lihat terdapat banyak entity-entity yang berbentuk sebagai berikut
Lalu kita mencoba untuk menggunakan payload tersebut dan menggabungkannya dengan payload yang sudah kita coba masukkan sebelumnya
Pada bagian “Your DTD Code” kita menggantikannya dengan payload yang ada di bagian awal tadi
Kita berhasil masuk dan mendapatkan file-file yang ada di server tersebut di bagian /etc/passwd nya
Lalu kita mencoba untuk mencari flagnya dengan mengganti etc/passwd menjadi flag
Dan kita mendapatkan flagnya
Flag: CTF{0x1033_75008_1004x0}