Web Exploitation
Last updated
Last updated
Challenge | Link |
---|---|
Diberikan akses ke sebuah website dan source code. Lakukan analysis terhadap source codenya. Dapat dilihat bahwa ada 2 container yaitu web app dan ml app, container yang public facing adalah web app mari kita cek web app.
Terdapat vulnerability SSTI pada line yang diblock dimana kita ketahui dari adanya string yang bisa kita kontrol pada argument render_template_string. Namun disini terdapat blacklist yang membuat kita tidak bisa menggunakan common payload untuk SSTI yaitu
Kuncinya disini kita bisa melakukan SSTI dengan {% % }. Salah satu referensi yang saya gunakan adalah website berikut https://ctf.zeyu2001.com/2022/securinets-ctf-finals-2022/strong. Intinya kita bisa membypass character character penting untuk payload ssti seperti _, square brackets, dan {{ }}. Pada payload di website tersebut hanya memanfaatkan function yang tersedia dari module yang telah diimport, bedanya disini saya membuat payload untuk melakukan import dengan memanfaatkan builtin function. Berikut adalah payload RCE pertama saya
Setelah mendapat rce kita lanjut ke container kedua yaitu ml app.
pada ml app ada satu endpoint yang tidak dipanggil dimana-mana yang sangat mencurigakan. Jadi disini saya coba cari mengenai torch.load tersebut karena bedanya disini kita bisa pakai model kita sendiri. Kemudian saya mendapat referensi berikut https://hackmd.io/@Solderet/SomeWriteupForWaniCTF2023-XogSiA. Jadi ketika torch.load digunakan dan kita bisa menggunakan model kita sendiri kita bisa melakukan RCE dengan memanfaatkan pickle deserialization. Selanjutnya ada proteksi lain yaitu harus ada admin di session, melihat dari docker-compose kita tahu bahwa SECRET_KEY yang digunakan pada container web dan ml itu sama. Jadi lakukan leak untuk SECRET_KEY terlebih dahulu
Didapatkan secret_keynya adalah sup3rsecret-k3y-666, jadi selanjutnya tinggal otomasi untuk exploit picklenya. Jalankan kode berikut dengan python3.12 sesuai dengan container target
Generate cookie dengan key admin menggunakan secret_key yang udah dileak
Selanjutnya buat kode python untuk mengirim exploit ke ml_app karena tidak ada curl yang bisa digunakan.
Terakhir, bikin otomasi untuk mengirimkan file exploit ml_app dan exploit.ckpt ke web_app dan menjalankannya. Untuk bypass > dan . bisa gunakan format hex untuk string yaitu \x<hex_val>
Flag: CBC2024{bdb39edbd4a4cafd4147200936684880}
Diberikan akses ke sebuah website, login dengan hint yang diberikan yaitu guest:guest
Terdapat beberapa hyperlink, klik Astronaut. Pada burpsuite dapat diketahui terdapat request ke endpoint /view dengan parameter file.
Dari parameter terlihat seperti vulnerable terhadap local file read dengan memanfaatkan path traversal, gunakan common payload untuk membaca /etc/passwd
Disini kita sudah berhasil membaca /etc/passwd, selanjutnya saya coba membaca /flag.txt namun gagal.
Selanjutnya mencari informasi mengenai http server rocket ditemukan referensi berikut
Jadi rocket adalah framework dari rust, selanjutnya saya coba leak informasi dari project yaitu pada file Cargo.toml.
Coba lakukan leak terhadap source code
Karena tidak bisa maka lakukan leak untuk executablenya, ada 2 mode yang saya cari debug dan release dan ternyata ada pada release.
Setelah berhasil mendownload, buka dengan IDA.
filter nama fungsi berdasarkan nama project
Terdapat beberapa fungsi, terdapat fungsi get_flag yang besar kemungkinan untuk mendapatkan flag. Disini terdapat beberapa informasi yang kita pegang, seperti endpoint untuk view file, jadi kita harus cari korelasi antara fungsi view dan endpointnya. Enumerasi satu-satu fungsi view.
Pada fungsi dengan nama _ZN19rocket_ship_goes_by9view_file9into_info22monomorphized_function17h9a620aead7e1bf75E terdapat xref ke fungsi main, jika kita decompile pada xrefnya dapat dilihat terdapat endpoint untuk fungsi view.
Jadi untuk mendapatkan endpoint fungsi get_flag, kita lakukan hal yang sama.
Disini kita sudah tahu endpoint untuk get_flag yaitu wintheflag. Selanjutnya kita analisis fungsi get_flag
Pada fungsi _ZN19rocket_ship_goes_by8get_flag9into_info22monomorphized_function28_$u7b$$u7b$closure$u7d$$u7d$17ha81b4a5bad28ccbaE terdapat validasi untuk cookie dan kalau kita konversi nialinya adalah admin
Jadi disini kita diharuskan menggunakan admin untuk cookienya, namun dari request sukses yang kita tahu cookie hanya ada user. Jadi kita bisa lakukan debug apakah admin itu key atau value dari user tersebut. Untuk melakukan debug cukup buat direktori template aja, yang lain bisa diabaikan karena relate ke UI daripada ke backendnya.
Selanjutnya breakpoint pada 0x24CAC3
Akses endpoint /wintheflag dengan cookie dari login guest
Bisa dilihat bahwa nilai yang dibandingkan adalah guest dan admin. Jadi bisa dibilang bahwa kita harus login sebagai admin. Selanjutnya cek fungsi login
Pada fungsi _ZN19rocket_ship_goes_by5login9into_info22monomorphized_function28_$u7b$$u7b$closure$u7d$$u7d$17h5f53e279d7dab19bE dapat diketahui bahwa login dihardcode, jadi hanya bisa untuk guest:guest saja. Lanjut ke proses setelahnya yaitu jika user melakukan login dengan credential guest:guest
Terdapat fungsi add_private yang merupakan proses signing dan menghasil signature untuk user guest yang telah login. Nilai yang disign pun juga hardcoded yaitu guest, disini saya mendapat ide untuk mengubah nilai guest menjadi admin lalu melakukan continue pada program. Jadi nanti response dari endpoint login akan menghasilkan signature cookie untuk admin. Breakpoint pada address 0x24921A
Selanjutnya tinggal ubah nilai guest menjadi admin
Terakhir tinggal continue
Pada response akan terdapat cookie jadi gunakan cookie tersebut pada server target
Flag: CBC2024{9fe81363ba8fe3ef1731cc51a4bf734f}
No Hate Speech (230 pts)
Rocket Shop Goes by (350 pts)