FESTICTF 2024
Last updated
Last updated
App
Web Exploitation
SSTI Lua, Misconfig
Bot
Web Exploitation
XSS, CSRF
JS
Web Exploitation
SSTI EJS
Classic Calculator
Web Exploitation
SSTI Jinja
Ini merupakan multi vulnerable challenge, dimana dalam 1 source yang sama terdapat 3 vuln yang berbeda. Pertama untuk App vulnerable terhadap SSTI Lua via Nginx Proxy, lalu Bot vulnerable terhadap XSS dan CSRF, dan terkahir untuk JS vulnerable terhadapat SSTI EJS.
Terdapat source code utama dari web yang disediakan yang dapat menjadi pintu masuk dari semua vulnerability yang ada, yaitu berikut
Jika, dilihat ada yang menarik pada endpoint /upload, dimana fungsionalitas adalah membaca qrcode yang diupload dan membaca konten dari qrcode tersebut untuk dirender.
Ada beberapa hal disini yang menarik, yaitu
Menggunakan ejs.render untuk merender kontennya
Tidak ada filtering pada saat melakukan render
Hal ini dapat menyebabkan terjadinya sebuah vulnerability.
Dan sebelum lanjut, berikut adalah script python yang dapat digunakan untuk men-generate qrcodenya
Pertama kita akan melakukan exploit terhadap bot nya, yaitu dengan XSS. Dapat memanfaatkan dari segi rendering yang tidak difilter, jadi bisa men-generate qrcode dengan isi konten sebagai berikut, untuk melakukan abusing code nya dan mendapatkan cookie lalu dikirim ke webhook
Setelah tergenerate kita harus membuat kode html yang harus di host ke third party, karena tadi method yang digunakan adalah POST, dimana perlu untuk memanfaatkan vulnerability CSRF, dan berikut kode html nya
Jika sudah, host file html dan file qrcode tadi dan lalu masukkan url host nya ke url bot, kemudian tunggu diwebhook dan akan mendapatkan flagnya.
Untuk ini vulnerable terhadapat SSTI EJS, karena rendering kontennya menggunakan ejs.render dan tidak ada sanitasi apapun.
Yang perlu diketahui bahwa flagnya ada didalam sistem yaitu di /flag.txt yang bisa diketahui lewat file Dockerfile.
Cukup simple, hanya tinggal melakukan generate qrcode dengan isi konten ejs syntax, yaitu sebagai berikut, yang fungsinya untuk melakukan include sebuah file
Jika sudah ter-generate langsung saja execute command berikut
Setelah dijalankan maka akan langsung mendapatkan flagnya.
Yang terakhir, sebenarnya ini adalah app yang digunakan untuk melakukan proxy melalui server nginx, berikut konfigurasi proxynya
Terdapat proxy endpoint yaitu /dev/ yang dimana melakukan proxy untuk melakukan load dari kode lua.
Berikut lua code yang digunakan
Jika dilihat lebih teliti dari bagian konfigurasi proxy /dev/, sebenernya endpoint ini akan melakukan rendering konten dari request yang diberikan dimana endpoint yang diberikan relative terhadap endpoint saat ini, dan dilakukan rewrite uri /dev/, sehingga uri /dev/ sebenarnya tidak masuk ke dalam request.
Dan lebih teliti lagi bahwa proxy tersebut melakukan behavior yang sama dengan apa yang direquest oleh user, yaitu method dan body mengikuti request dari user, dan lalu response dari requestnya kemudian akan dirender ke lua code nya.
Lalu pada bagian lua code terdapat 2 kali assignment variable, dimana ini bisa menjadi vulnerable terhadapat SSTI, dan jika diketahui value dari kontennya pun dapat dikontrol dari user.
Berikut flow attackingnya
Melakukan request ke /dev/upload, yang nantinya proxy tersebut akan melakukan request /upload
Menggunakan method POST, dan juga mengirim file qrcode
Isi konten file qrcode dengan kode injection lua
Berikut isi konten yang dapat dimasukkan ke qrcode nya sebagai injection lua nya
Tinggal ubah ubah saja value cmd diatas untuk mencari flagnya, dan lalu bisa kirim request dengan command berikut
Classic, basic, and common template for calculator apps.
You know what to do ...
Ini adalah simple app, dimana vulnerable terhadap SSTI Jinja
Dalam source file nya langsung terlihat bahwa terdapat vulnerability SSTI Jinja
Langsung saja untuk exploit dapat menggunakan payload berikut yang dapat dikirim ke input websitenya
Tinggal sesuaikan saja value cmd untuk bisa mendapatkan flagnya