[PicoCTF 2018] – ropchain

Untuk soal ini, kita diberikan sebuah file binary dan source code C.

Untuk konfigurasi file binary masih sama seperti writeup ini.

Dilihat dari source code C yang kita dapat, kita harus mendapatkan value true pada fungsi win1 dan win2 untuk bisa mendapatkan flag yang terdapat pada fungsi flag. Tapi permasalahannya ketiga fungsi tersebut tidak pernah dipanggil oleh program. Lalu pada fungsi vuln, terdapat pengisian input dengan menggunakan fungsi gets dan array sebesar 16. Tidak hanya itu, untuk bisa mendapatkan nilai true pada fungsi win2 dan mendapatkan flag pada fungsi flag, ada validasi yang harus kita lewati terlebih dahulu.

Kita harus memasukkan value 0xBAAAAAAD pada argument fungsi win2 dan 0xDEADBAAD pada argument fungsi flag.

Lalu bagaimana kita akan mendapatkan flag jika fungsinya saja tidak dipanggil?

Jawabannya? ROPchain (seperti pada judul soal).

Untuk melakukan exploit ROPchain, kita memerlukan beberapa hal, antara lain:

  • Alamat fungsi win1
  • Alamat fungsi win2
  • Alamat fungsi flag
  • Argument untuk fungsi win2 dan flag

Untuk mendapatkan 3 alamat fungsi pada 3 poin pertama, kita bisa gunakan gdb.

$ gdb rop

$ info function -> Menampilkan semua fungsi yang dipanggil oleh program

Disini terlihat bahwa alamat fungsi adalah sebagai berikut:

Nah, sekarang kita sudah punya semua yang kita butuhkan. Sekarang? Tinggal menyusun exploit.

Rencana exploit kita adalah sebagai berikut:

  • Mengisi buffer
  • Overwrite EBP
  • Panggil fungsi win1
  • Panggil fungsi win2
  • Panggil fungsi flag
  • Argument fungsi win2
  • Argument fungsi flag

Berikut adalah script exploit yang digunakan:

Leave a Reply

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