"Şeytan İçinde ki Sestir; O Sese Kulak Ver"

-Zorlu BUĞRAHAN-

2 Temmuz 2009 Perşembe

buffer overflow mantığı

kafayı yedim a.q buffer yüzünden ama nettim nettim öğrendim mantığını azda olsa :P şimdi mantık su her programda geçici hafıza (stack) mevcut eğer bu geçici hafıza denetimi sağlam olmazsa gerekenden fazla veri göndererek hafızada tasmaya sebep olabiliriz. diyelim programdan bi bi istekte bulunduk program isteği alıyor ve iletiyor aynı yolu takip ederek size cevap veriyor. işte eğer hafıza taşmasına sebep olursak geri dönüşte bizim belirlediğimiz yolu takip etmesini sağlayabiliriz. ve bizim belirlediğimiz yol ilede kendi exp. imizi çalıştırabiliyoruz. linux içinde root exp yazmanın mantığı bu. diyelim ki linux ta bi modül de şöyle bi fonksiyon olsun:
(unutmayın bu buffer işinde süper değilim hatta kötüyüm sadece ingilizce dökümanlardan çıkardığım mantığı anlatmaya çalışıyorum)

işte linuxta ki bir misali modülümüz ve içinde şu kodu barındırıyor olsun (kodu .c uzantılı kaydedin) :

void main(int argc, char **argv, char **envp) {

char array[200];
strcpy(array,argv[1]);

}

kodumuzu kaydedip derliyoruz nasılmı şöyle:

zorlu@ZoRLu:~/Masaüstü$ gcc buf.c -o buf1
buf.c: In function 'main':
buf.c:4: UYARI: 'strcpy' yerleşik işlevinin uyumsuz örtük bildirimi
buf.c:1: UYARI: 'main' için dönüş türü 'int' değil
zorlu@ZoRLu:~/Masaüstü$ chmod 777 buf1

ve derledikten sonra chmod ayarınıda yapıp çalıştırıyoruz:
zorlu@ZoRLu:~/Masaüstü$ ./buf1
ve şu hatayı alıyoruz:

Segmentation fault ( yani core dumped)

şimdi küçük bi işlemle dosyamıza veri gönderiyoruz:

şekilde gibi belli bir veriden sonra buffer olayı gercekleşiyor



şimdi core dumped hatasını alabileceğimiz veri miktarını buluyoruz ve ben buldum kurduğum ubuntuda:

zorlu@ZoRLu:~/Masaüstü$ ./buf1 `perl -e 'print "A" x 362'`BBBB
Segmentation fault

işte asıl işlemler bundan sonra başlıyor yok efenim eax, jmp vs vs daha okadar ileri gidemedim. umarım azda olsa sizde mantığını anlarsınız

0 yorum:

 
Dizi