[angstromCTF 2018] – MadLibs

General Information

Title              : MadLibs

URL               : http://web2.angstromctf.com:7777/

Keywords    : SSTI, Flask

Field Exploration

Sebuah tantangan yang baik dapat diselesaikan dengan pengenalan medan yang baik pula. Saya mulai mengerjakan tantangan ini dengan sebuah pertanyaan nalar, kenapa namanya madlibs? Pencarian awal di Google membawa saya pada sebuah kolom informasi mengenai seorang DJ asal Amerika bernama Otis Jackson.

dj madlib

Dari pencarian tersebut, saya mengetahui kalau Madlib selain berprofesi sebagai seorang DJ, ia juga seorang rapper. DJ Madlib juga pernah membintangi film layar lebar seperti yang tercatat pada gambar diatas. Apakah informasi ini membantu menyelesaikan tantangan? Tidak, namun fitur related searches membawa saya pada sebuah informasi yang berguna tentang MadLibs yang sebenarnya.

real madlibs

Short hand, aplikasi MadLibs pada tantangan ini menerima input user kemudian menggabungkan dan menampilkannya ke dalam web menggunakan framework Flask. Adanya penggunaan Flask dan mekanisme menerima input dari pengguna untuk dirender kedalam konten membuat pemikiran saya mengarah pada SSTI, Server Side Template Injection. Petunjuk tambahan, source code dapat diakses lewat http://web2.angstromctf.com:7777/get-source.

Solving Problem

Setelah memilih cerita yang akan dijadikan template, saya diberikan 4 kolom input, AuthorName, Adjective, Noun, dan Verb. Keempatnya nanti akan dirender kedalam template dan ditampilkan di web, sehingga semuanya berpotensi menjadi injection point tantangan ini.

madlibs form

Langkah selanjutnya adalah mencari input mana yang benar benar memiliki celah SSTI, dengan melakukan fuzzing {{12*12}} pada setiap kolom input, saya memastikan bahwa kolom Author Name memiliki vulnerability SSTI, karena yang tampil pada web bukanlah string {{12*12}} melainkan angka 144, yang adalah hasil dari perkalian 12 dengan 12. Artinya, input saya pada kolom Author Name tidak dirender kedalam web sebagai sebuah string melainkan dijalankan sebagai sebuah instruksi.

Dengan adanya vulnerability SSTI memungkinkan saya mengeksekusi instruksi/perintah diluar yang seharusnya dijalankan oleh server. Dan berdasarkan petunjuk pada source code, untuk mendapatkan flag saya hanya perlu mengambil nilai dari variabel secret_key milik program.

Secret_key biasanya digunakan sebagai key untuk mengenkripsi cookie dan menjaga agar client-side session (signed cookies) tetap aman. Untuk menampilkan isinya, saya menggunakan payload {{config}}, penggunaan config memberikan instruksi pada server untuk menampilkan semua informasi tentang konfigurasi server yang diterapkan saat ini,

Flag and/or Results

 

Leave a Reply

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