Stack Based Overflows #2

RM2MP3

Simge Karahan
3 min readDec 20, 2020

Serinin bir önceki konusuna buradan ulaşabilirsiniz.

Buffer overflow, arabelleğe saklayabileceğinden daha fazla veri yüklenmesi durumudur. Arabellek aşımının önüne geçilmezse Shellcode’lar çalıştırılabilir, yani yazdırılan kodlarla sistemde her şey yaptırılabilir. Shellcode, kabukta yazılan zararlı kodlar anlamında bir terimdir.

Peki taşma nasıl gerçekleşir? Örneğin bellekte 4 byte’lık yer ayrılmış olsun, buraya yazmaya çalıştığımız veri 6 byte olunca 4 byte, o veri için ayrılmış yere yazılır ama 2 byte bir sonraki bellek bölümüne yazılır ve orada da başka veri olacağı için oradaki veriyi tehlikeye atarak programı bozar. Bu taşmadan dolayı oluşan zafiyeti kullanmak da buffer overflow yöntemidir. Eğer çok daha büyük veri yazılmaya çalışılırsa program çöker.

Örnek: Hatalı şekilde biçimlendirilmiş bir m3u dosyasını açmaya çalışırken uygulamanın nasıl çöktüğüne bakalım.

Öncelikle bir Python dosyası oluşturuyoruz:

Bu kod ile dosyaya 20000 tane A harfi yazılıyor. Kodu çalıştırıyoruz:

Dosya başarılı bir şekilde oluşturuldu:

Oluşturulan “crash.m3u” dosyasını Windows XP sanal makinesine atınca dosyamız şekildeki gibi bir media dosyası olarak gözükür:

“Easy RM to MP3 Converter” programında çalıştırırsak şöyle bir hata elde ederiz:

Bir hata olduğu ortada ama bu programın çökmesine yetecek kadar büyük bir hata değil. Eğer A değerini 30000 ile çarparsak yeni crash.m3u dosyasında aldığımız sonuç programın çökmesidir. Çünkü ayırdığı hafıza alanından çok daha büyük bir veri yollamaya çalıştık. Bu da taşmaya neden oldu ve uygulama çöktü:

Immunity debugger ile assembly kodlarına baktığımızda tüm adreslerin A ile dolduğunu(A harfinin hexadecimal karşılığı 41'dir) görebiliriz:

Yaptığımız işlemi özetleyecek olursak, bir fonksiyon çağırılırken geri dönüş adresi Stack’e yazılır, biz EIP değerini overwrite ederek geri dönüş adresini değiştirdik. Program artık bizim istediğimiz akışta devam ediyor, assembly komutlarını incelediğimizde de “access violation” olarak görmekteyiz:

Kaynak: https://www.corelan.be/

--

--