[EasyCTFIV]: Format – Format String Exploitation

Binary file untuk challenge ini dapat didownload melalui link ini.

Challenge ini cukup simple, ketika saya melihat title soal, terlihat jelas bahwa ada sesuatu yang harus kita lakukan dengan format string, untuk mengecek maka saya menjalankan program dan menginput ‘%p’ sebagai testcase pertama.

Terlihat bahwa hasilnya program mengoutput sebuah address memory. Untuk lebih jelas, saya melakukan file dan checksec terhadap file tersebut.

Kita masih belum memiliki clue yang jelas, sehingga ada baiknya kita melihat ke gdb untuk mengetahui codenya.

Hal yang menarik dari disassembly fungsi main adalah fungsi do_format yang dipanggil oleh main(). Maka kita cek isi dari function do_format()

Ada hal yang menarik di sini. do_format membandingkan isi dari eax dengan pointer yang ada di [rbp-0x54] dan ketika hasilnya equal (perbandingannya sama) maka akan memanggil function get_flag.
Oke jadi ada beberapa poin yang harus kita perhatikan.

  • Yang dicompare oleh program adalah eax (padahal register untuk input pertama pada architecture 64 bit adalah RAX) yang berarti yang dicompare hanyalah 4byte besar dari RAX.
  • Secret password yang kita butuhkan adalah sebuah memory address 4byte yang bisa kita cek dengan format string exploitation
  • Oleh karena itu, secret passwordnya adalah 0x——–00000000 (hanya 4 byte pertama yang dilihat sehingga 4byte terakhir harusnya berisikan 00.

Skenario yang perlu kita lakukan hanyalah melihat output dari format string bug dengan beberapa inputan ‘%p’ (format pointer) lalu kita mengecek yang sesuai dengan tipe secret password yang sudah kita buat di atas.

Terlihat bahwa yang sesuai dengan tipe yang harus kita cari adalah  0x14fd6bbf00000000 pada offset ke 7. Sehingga kita bisa langsung mengcopy 4 byte pertama dari pointer yang ada pada offset ke7 ke dalam inputan lalu terlihat  fungsi call_flag terpanggil dengan melakukan cat flag.txt

Leave a Reply

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