Web V1 (Solved After Event)

This is my first time making a website using Python!!!! :D

http://103.163.139.198:12312arrow-up-right

Author: daffainfo

Selain link menuju website, kita juga diberikan filearrow-up-right zip yang berisikan source code webapp nya.

Webapp ini dibuat menggunakan framework Flask dari Python, dengan kode main.py sebagai berikut.

Pada bagian "register", ada kode seperti ini.

Data dari POST request yang berbentuk username=username&password=password langsung dimasukkan begitu saja pada objek User , tanpa pengecekan sama sekali. Nah, di class User, ada atribut is_admin yang value-nya adalah 0 atau 1 (kalau 1, maka user tersebut adalah Admin).

Kalau begitu, kita bisa saja melakukan registrasi menggunakan data berikut pada POST request: username=username&password=password&is_admin=1 . Dengan begini, kita telah membuat sebuah akun Admin.

Berikutnya, ada sebuah fitur bernama Admin fetcher. Ini adalah setup klasik untuk serangan SSRF. Di sini, kita bisa masukkan URL apapun dan website akan menampilkan apapun data response dari request GET terhadap URL tersebut. Pada website ini, ada syarat unik yakni URL yang dimasukkan harus memiliki hostname "daffainfo.com".

Tapi, implementasinya benar-benar tidak aman. Selama ada string "daffainfo.com" pada URL, maka requestnya akan dijalankan. Untuk membypass aturan ini, kita bisa tambahkan ?url=daffainfo.com di akhir URL. Berikut adalah hasil untuk input URL http://example.com?url=daffainfo.com.

Nah, kembali ke source code. Untuk mendapatkan flag, kita perlu mengakses engpoint /internal . Akses menuju endpoint ini hanya dibolehkan dari 127.0.0.1 alias mesin lokal. Tapi tidak apa-apa, karena kita punya fitur Admin fetch. Fungsi fetching ini akan mengakses endpoint tadi sebagai mesin lokal.

Hal penting lainnya adalah, sebagai mesin lokal, kita tidak mengunjungi website pada URL publiknya yakni http://103.163.139.198:12312/internal . Akan tetapi, pada mesin lokal, webapp ini dijalankan pada http://0.0.0.0:1337. Maka dari itu, payload akhir kita menjadi sebagai berikut.

Flag: IFEST13{4b0a3c7d05927b28970fdfffe803e7fb}

Last updated