Bir C programi calistirdiginizda hafizanin belli bir adresine bir pointer
yaziliyor.Onun altina programin argumanlari ve daha sonra kodu(asagi dogru
buyuyen bir stack).Eger program uzunlugunu kontrol etmeden komut satirinda
verdiginiz string'i aliyor ve hafizaya kopyaliyorsa programin bu bug'indan
yararlanilip buffer overflow yaptiriliyor.Soyle:Tam o argumanin uzunlugunda
garbage olarak bir string,ardinda da calistirmak istediginiz kod,mesela
shell fork eden bir kod parcasi :)
(kucuk olmasi icin genelde assembly kullaniliyor).Ama burada oyle iyi bir byte
hesabi yapmalisiniz ki, yazdiginiz kod buffer'i doldurup, tam olarak onun
uzerindeki return adresini overwrite etsin.Programin isi bitip o adrese tekrar
geri geldiginde,yazdiginiz kod parcasi calistirilir.Artik kodunuz neyse :)
Ama bunun icin yamalar da var,non-executable stack gibi...
baris sertkaya
ODTU bilgisayar muhendisligi