Tujuan
Temukan jarak dari buffer ke alamat kembali dan kendalikan tujuan ret.
Konsep
Instruksi call menyimpan return address, yaitu alamat instruksi berikutnya pada pemanggil. Fungsi vuln kemudian menyimpan EBP dan menyediakan buffer di stack. Saat fungsi selesai, leave memulihkan frame dan ret mengambil alamat kembali dari stack.
Overflow kini dapat mencapai return address. Offset adalah jumlah byte dari awal buffer ke bagian yang ingin ditimpa. Empat byte saved EBP juga perlu dilewati; ukuran buffer saja belum tentu sama dengan offset.
Panduan alat
Alamat target ditampilkan di bawah materi ini. Tugas Anda adalah menemukan jaraknya dari awal buffer. Anda boleh menghitung dari source atau menggunakan pola cyclic(80).
Jalankan pola tersebut dan buka Register CPU. Crash setelah ret biasanya membuat EIP berisi empat byte pola. Masukkan cyclic_find(angka) sebagai ekspresi payload untuk melihat offset dalam pratinjau byte heksadesimal. Pembantu di situs ini menghasilkan empat byte offset dalam little-endian; misalnya 10 00 00 00 berarti offset 16. Cocokkan dengan panel stack yang menandai saved EBP dan alamat kembali.
Tantangan
Ganti return address dengan alamat fungsi target yang disediakan, sampai program mencetak STACK_OFFSET_OK. Crash saat mencari offset adalah bagian dari latihan; crash saja belum berarti berhasil.
Pilih Uji payload untuk menjalankan masukan di browser. Setelah berhasil, Kirim jawaban meminta verifikasi server dan menyimpan progress. Masuk dengan GitHub diperlukan untuk mengirim jawaban.
Petunjuk dapat dibuka satu per satu. Untuk akun yang masuk, setiap petunjuk mengurangi poin sesuai aturan yang ditampilkan di panduan.
Source latihan
Tab Kode sumber menampilkan representasi konsep C. Binary dibuat dari assembly GNU; layout stack mengikuti assembly tersebut, bukan hasil kompilasi C. Anda juga dapat mengunduh binary latihan.
Alamat fungsi target: 0x804802d.