buffer overflow 1

Bill Elim


Mari kita lihat source code nya.


Untuk sekarang ada beberapa komponen yang tidak perlu kita pedulikan seperti setresgid dll. Mari kita fokus pada fungsi vuln()

Untuk menyelesaikan soal ini, kita perlu tahu konsep stack dan cara program menyimpan variabel.

Jadi bayangkan ada stack yg nyimpen variable-variable kita, nah diujungnya itu ada yang namanya return address

Return address ini berfungsi buat mengarahkan laju program setelah suatu fungsi selesai dieksekusi. Misalnya vuln() dieksekusi dari main(), maka setelah vuln selesai dieksekusi maka return address nya akan point ke main.

Mari kita lihat apa yang terjadi saat kita menyimpan data kedalam variabel dimana datanya lebih besar dari size variabel itu sendiri. Disini buf berukuran 32 byte, apa yang akan terjadi apabila data yang kita input melebih 32 byte?

Ya, return address nya akan teroverwrite, sehingga kita bisa memasukkan address lain ke dalam return address, dalam kasus ini, bisa kita overwrite menjadi win()

Untuk ngetes kita coba masukkan 32 byte A lalu kita input BBBB CCCC .... Sampe return address nya kena overwrite

Bisa dilihat return address nya berubah menjadi 0x45454545 yang berarti di overwrite saat EEEE, maka tinggal kita ganti EEEE nya menjadi address dari win() dan kita akan mendapatkan flagnya



Flag: picoCTF{the_m3tadata_1s_modified}


Thank you for reading!