EXP-101: 8-Stack Based Overflow Nedir?

Stack Overflow, yazılım hatalarından biridir ve bir buffer’ın (arabellek) kapasitesinden daha fazla veri yazılması ile meydana gelir. Bu taşma, stack (yığın) üzerindeki bellek alanlarının ezilmesine, hatta geri dönüş adresinin (return address) bozulmasına neden olur.

Bu hatadan faydalanılarak, eğer belirli koşullar sağlanırsa, EIP (Instruction Pointer) register’ı üzerinde kontrol sağlanabilir ve program yönlendirilerek zararlı kodlar çalıştırılabilir.

Stack Based Overflow Nasıl Meydana Gelir?

Stack overflow, şu şartlar altında gerçekleşir:

  • Kontrol Edilmeyen Arabellek Boyutu: İçine veri yazılan arabellek (buffer) için, verinin boyutu kontrol edilmez.
  • Girdi Boyutunu Kontrol Etmeden Arabelleğe Kopyalama: Kullanıcıdan alınan veri, uzunluğu doğrulanmadan doğrudan arabelleğe kopyalanır.
  • Yetersiz Sınır Kontrolü: Verinin, hedef arabelleğin kapasitesini aşıp aşmadığı kontrol edilmeden belleğe kopyalanmasıdır.

Bu ihmaller, yerel değişkenlerin, saved EBP’nin ve return adresinin ezilmesine yol açar.

Stack Yapısı (Bellek Organizasyonu)

Stack yapısı, düşüken bellek adreslerine doğru çalışır. Bir fonksiyon çağrıldığında, aşağıdaki sıralamayla stack’te bilgiler tutulur:

Yüksek Adresler
---------------------------
Parametre B
Parametre A
Return Address (Dönüş adresi)
Saved EBP (Eski Base Pointer)
Yerel Değişkenler (Buffer vb.)
---------------------------
Düşük Adresler

Eğer buffer’ı aşarak yazılırsa, önce Saved EBP ezilir, daha sonra Return Address ezilerek EIP kaydı üzerinde kontrol sağlanabilir.

Kaynakça:

https://www.corelan.be

https://www.securitysift.com

Exploit Geliştirme 101 (2. Baskı) – M. ALPARSLAN AKYILDIZ

Hacking: The Art of Exploitation, 2nd Edition