Selamun Aleyküm THT Ailesi
Giriş
Bu Serimizde Buffer Overflow ve ya Türkçesi Bellek Taşması zafiyetlerini ve Exploit Shellcode Geliştirmeye çalışacağız.
Örnek uygulamalar üzerinde inceleyerek exploit kodlamayı en iyi şekilde anlamanıza vesile olacağım
NOT: Seri part'lar halinde ve Videolar ile akıcı anlaşılır anlatımla olacak.
BUFFER OWERFLOW
Bu yazı muhtemelen seri şeklinde olacaktır. İlk olarak local bir buffer overflow uygulaması ile temelleri yazmaya başlayacağız, sonrakilerde remote overflow içinde anlatımlar olacaktır. Umarım...
Bellek Taşması Nedir?
Bellek taşması, sınırlı boyuttaki bellek alanına, planlanan miktarın üzerinde veri kopyalanınca yaşanan taşma durumudur. En klasik örneği vermek gerekirse:
char a[4];
strcpy(a, 'cok uzun bir metin');
Örnek C kodunu açıklamak gerekirse:
A isimli 4 baytlık bir karakter dizisi tanımlandı.
Fonksiyon yardımıyla bu karakter dizisine 18 karakterlik bir metin kopyalandı.
Ayrılan alan 4 baytlıktı, 18 karakter kopyalamaya çalıştığımızda ayırdığımız bellek taşacak ve geri kalan 14 karakter belleğin kenarındaki diğer bellek alanlarına yazılacak.
Eğer belleği taşırıp diğer hafıza alanlarına yazılacak baytlar saldırgan tarafından kontrol edilebiliyorsa, programın akışını kontrol edebilmek ya da değiştirmek mümkün olur.
Temel olarak buffer overflow için şunu söyleyebiliriz:
Uygulamanın çalışma sırasında kullanıcıdan aldığı bir girdiye ayrılan sınırın üstünde data girişi yapmaktır.
Birçok overflow yazısında int buff[125] gibi bir girdi alanı açılıp strcpy, memcpy vs ile C dilinin kontrolsüz fonksiyonlarını kullanarak uygulamaya 125'ten fazla bir input yollayarak programı patlatmayı anlatır.
Anlatılanda doğrudur, mantık aynen bu şekilde işler, haddinden fazla input'u göndermek ve eğer kontrol yoksa uygulamayı patlatmak.
Uygulamaya fazla input yolladığımızda stack'in yapısından dolayı stack'e atılan parametreler ve geri dönüş değerler ezilir/kaybolur bundan dolayı uygulama crash olur ve sonlanır.
İyi bir exploit, geri dönüş değerini istediğimiz bir alana referans ettirmek ve o alana shellcode'umuzu doldurmak ile olur. Sonrası işlemcide, sağolsun kendisi bizim için işlemleri yapacaktır.
Nasıl yapılacağını anlatmadan önce bir takım önbilgilerden bahsetmem gerekiyor.
Register'lar
IA-32 mimarisindeki genel kullanımlı register'lara hızlı bir bakış atacağız.
Bütün register'ların ilk harfi olan E extended, 16 bitlik mimariden extend edilerek, 32 bit olduğu manasına gelmektedir.
EAX: Akümülatör. Aritmetik işlemlerde bolca kullanılır. Ek olarak fonksiyonların geri dönüş değerleri de bu registerda saklanır.
ECX: Sayaç (counter). Döngülerde sayaç değişkeni olarak kullanılır. Ayrıca Object Oriented dillerinde geliştirilmiş yazılımlarda this pointerinin değerini tutar.
ESP: Stack pointer. Daha sonra açıklayacağımız stack veri yapısının son giren (ya da diğer bir deyiş ile ilk çıkacak) elemanını gösterir.
EBP: Base pointer. Stack veri yapısının tabanını (ilk giren, son çıkacak elemanı) gösterir.
ESI/EDI: Source Index / Destination Index
EIP: Instruction pointer. CPU'nun an itibariyle code segment'i içerisindeki hangi instruction'i çalıştıracağını gösterir.
Exploit Geliştirme Araçları
Debug ve Disassemble Yöntemleri
Debugger Yazılımları (windbg , ImmunityDebugger, Gnu Debuger)
Disassembler Yazılımı (IDA Disassembler)
Buffer Overflow'un Temelleri
Hatalı Kod Örnekleri
Açık Avlama Yöntemleri
Fuzzing
Crash ve Binary Analizi
Shellcoding
Shellcode temelleri
Shellcode geliştirme süreci
Shellcode çeşitleri
Windows Exploiting
Stack Overflow Exploiting
Unicode Overflow Exploiting
SEH Overflow Exploiting
Bypassing SafeSEH
Egg hunter Shellcodes ve exploiting
Linux Exploiting
Stack Overflow ve Exploiting.
Not: Evet bu yazımızda temel bilgileri aşılamış olduk. Umarım seri sayesinde herkes bir exploit geliştiricisi olur inşallah, serilerde görüşmek üzere Hoşça kalın
SELAMETLE
Giriş
Bu Serimizde Buffer Overflow ve ya Türkçesi Bellek Taşması zafiyetlerini ve Exploit Shellcode Geliştirmeye çalışacağız.
Örnek uygulamalar üzerinde inceleyerek exploit kodlamayı en iyi şekilde anlamanıza vesile olacağım
NOT: Seri part'lar halinde ve Videolar ile akıcı anlaşılır anlatımla olacak.
BUFFER OWERFLOW
Bu yazı muhtemelen seri şeklinde olacaktır. İlk olarak local bir buffer overflow uygulaması ile temelleri yazmaya başlayacağız, sonrakilerde remote overflow içinde anlatımlar olacaktır. Umarım...
Bellek Taşması Nedir?
Bellek taşması, sınırlı boyuttaki bellek alanına, planlanan miktarın üzerinde veri kopyalanınca yaşanan taşma durumudur. En klasik örneği vermek gerekirse:
char a[4];
strcpy(a, 'cok uzun bir metin');
Örnek C kodunu açıklamak gerekirse:
A isimli 4 baytlık bir karakter dizisi tanımlandı.
Fonksiyon yardımıyla bu karakter dizisine 18 karakterlik bir metin kopyalandı.
Ayrılan alan 4 baytlıktı, 18 karakter kopyalamaya çalıştığımızda ayırdığımız bellek taşacak ve geri kalan 14 karakter belleğin kenarındaki diğer bellek alanlarına yazılacak.
Eğer belleği taşırıp diğer hafıza alanlarına yazılacak baytlar saldırgan tarafından kontrol edilebiliyorsa, programın akışını kontrol edebilmek ya da değiştirmek mümkün olur.
Temel olarak buffer overflow için şunu söyleyebiliriz:
Uygulamanın çalışma sırasında kullanıcıdan aldığı bir girdiye ayrılan sınırın üstünde data girişi yapmaktır.
Birçok overflow yazısında int buff[125] gibi bir girdi alanı açılıp strcpy, memcpy vs ile C dilinin kontrolsüz fonksiyonlarını kullanarak uygulamaya 125'ten fazla bir input yollayarak programı patlatmayı anlatır.
Anlatılanda doğrudur, mantık aynen bu şekilde işler, haddinden fazla input'u göndermek ve eğer kontrol yoksa uygulamayı patlatmak.
Uygulamaya fazla input yolladığımızda stack'in yapısından dolayı stack'e atılan parametreler ve geri dönüş değerler ezilir/kaybolur bundan dolayı uygulama crash olur ve sonlanır.
İyi bir exploit, geri dönüş değerini istediğimiz bir alana referans ettirmek ve o alana shellcode'umuzu doldurmak ile olur. Sonrası işlemcide, sağolsun kendisi bizim için işlemleri yapacaktır.
Nasıl yapılacağını anlatmadan önce bir takım önbilgilerden bahsetmem gerekiyor.
Register'lar
IA-32 mimarisindeki genel kullanımlı register'lara hızlı bir bakış atacağız.
Bütün register'ların ilk harfi olan E extended, 16 bitlik mimariden extend edilerek, 32 bit olduğu manasına gelmektedir.
EAX: Akümülatör. Aritmetik işlemlerde bolca kullanılır. Ek olarak fonksiyonların geri dönüş değerleri de bu registerda saklanır.
ECX: Sayaç (counter). Döngülerde sayaç değişkeni olarak kullanılır. Ayrıca Object Oriented dillerinde geliştirilmiş yazılımlarda this pointerinin değerini tutar.
ESP: Stack pointer. Daha sonra açıklayacağımız stack veri yapısının son giren (ya da diğer bir deyiş ile ilk çıkacak) elemanını gösterir.
EBP: Base pointer. Stack veri yapısının tabanını (ilk giren, son çıkacak elemanı) gösterir.
ESI/EDI: Source Index / Destination Index
EIP: Instruction pointer. CPU'nun an itibariyle code segment'i içerisindeki hangi instruction'i çalıştıracağını gösterir.
Exploit Geliştirme Araçları
Debug ve Disassemble Yöntemleri
Debugger Yazılımları (windbg , ImmunityDebugger, Gnu Debuger)
Disassembler Yazılımı (IDA Disassembler)
Buffer Overflow'un Temelleri
Hatalı Kod Örnekleri
Açık Avlama Yöntemleri
Fuzzing
Crash ve Binary Analizi
Shellcoding
Shellcode temelleri
Shellcode geliştirme süreci
Shellcode çeşitleri
Windows Exploiting
Stack Overflow Exploiting
Unicode Overflow Exploiting
SEH Overflow Exploiting
Bypassing SafeSEH
Egg hunter Shellcodes ve exploiting
Linux Exploiting
Stack Overflow ve Exploiting.
Not: Evet bu yazımızda temel bilgileri aşılamış olduk. Umarım seri sayesinde herkes bir exploit geliştiricisi olur inşallah, serilerde görüşmek üzere Hoşça kalın
SELAMETLE
Moderatör tarafında düzenlendi: