[PicoCTF 2019] – NewOverflow2

Diberikan sebuah binary dengan konfigurasi sebagai berikut:
Berikut adalah list fungsi yang ada dalam binary:
Jika kita lihat isi fungsi win_fn akan terlihat sebagai berikut:

Untuk bisa mendapatkan flag, kita harus membuat fungsi win_fn1 dan win_fn2 menjadi true. Berikut isi dari kedua fungsi tersebut:

Disini terlihat bahwa untuk membuat value dari win1 jadi true kita harus memasukkan argument 0xDEADBEEF dan untuk win2 harus ada argument 0xBAADCAFE0xCAFEBABE0xABADBABE. Namun untuk win2 ada satu permasalahan.

Tidak ada gadget yang bisa menampung 3 variable. Sedangkan untuk menapung 3 variable kita perlu register RDI, RSI, RDX. Namun tidak ada gadget itu dalam binary ini, maka kita tidak bisa membuat value dari win2 menjadi true. Lalu bagaimana? Bila kita diminta untuk mengikuti alur program, mengapa kita tidak mencoba untuk merubah alur program?

Jika kita perhatikan lebih baik, di dalam binary terdapat fungsi flag dengan pseudocode sebagai berikut:

Didalam fungsi ini, tidak ada validasi untuk memunculkan flag. Kita bisa menggunakan ini untuk mendapatkan flag. Dengan ini ada beberapa hal yang kita perlukan:

  • Alamat fungsi win_fn1
  • Gadget pop rdi; ret
  • Argument fungsi win_fn1
  • Gadget ret;
  • Alamat fungsi flag

Untuk kelima hal yang kita butuhkan bisa didapat dari screenshot-screenshot diatas:

Dari sini, kita sudah punya semua yang kita butuhkan untuk mendapatkan flag, tinggal menyusun payload saja. Tahapan exploit kita adalah sebagai berikut:

  • Isi buffer
  • Panggil fungsi win_fn1
  • Gadget pop rdi; ret
  • Argument win_fn1
  • Gadget ret
  • Panggil fungsi flag

Dari strategi payload diatas, flag bisa didapat dengan exploit script sebagai berikut:

 

Leave a Reply

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