Basit bir buffer overflow işlemi
Yapmanız gerekenler,
1-)Dosyayı inceleyip taşmanın olduğu kısmı ve atlama yapacağınız fonksiyonu bulmakYapmanız gerekenler,
2-)Bu verileri kullanarak uygulamayı sömürecek exploit kodunu yazmak
3-)Verdiğim ip ve portta bu uygulama çalışmakta yazmış olduğunuz exploit kodu ile direk shelle düşüp "/home/ctf/flag" dosyasının içerisindeki flagı okumak...
Herkese kolay gelsin.
Çözüm
Kimsenin ilgisini çekmediği için yüzeysel anlatacağım...
Öncelikle bu dosya hakkında bir kaç bilgi edinelim...
32 bit GNU/Linux uygulamasıymış peki ne gibi korumaları var.
Bu korumalar hakkında detaylı bilgiyi google amcadan alabilirsiniz...
Şimdi ise dosyamızı inceleyelim hangi kısma atlamamız gerekli açık nerede oluşuyor falan filan...
Adı üzerinde buffer overflow, örnekte gets ile alınan verinin atanan değişkenin alacağı değerden yüksek olmasından dolayı artan verinin stack'a yazılması. Durum daha kötü anlatılamazdı galiba...Burada register'ın ne işe yaradığını google amcadan öğrenebilirsiniz.Bizim eip register'i ile işimiz eip register'i programın akışını kontrol eder her girdiği fonksiyon da bir önce ki fonksiyona geri dönmek için stack'a adresini yazar, biz de bu kısmı değiştirerek programın akışını istediğimiz gibi şekil vereceğiz.
Bu örnekte shell kodla uğraşmamamıza gerek yok secure fonksiyonun incelediğiniz de beyniniz de simşekler çıkmış gözleriniz parlamış olmalı...
burada direk terminal'i çalıştırdığını göreceksiniz, programın akışını buraya yönlendirip program üzerinden direk shell'e düşeceğiz.
0x0804863a adresine yönlendirmemiz gerekiyor, Bu kısmı halletiğimize göre şimdi fuzzy işlemine geçip taşmanın olduğu boyutu öğrenelim. Bu iş için işi uzatmadan met@sploit reis'ten yardım alacağım, öncelikle pattern_create ile 500 karakter uzunluğunda bir string oluşturacağım.
gdb'yi çalıştırıp ve stringi girelim...
Göründüğü gibi taşma oldu eip registerina yazılan veriyi alıp met@sploit'in reisin pattern_offset'ini kullanıp kaç karakterden sonra eip üzerine yazdığını öğrenelim...
112 karakterden sonra eip üzerine yazıyormuş şimdi python'u kullanıp belirtilen uzunluktan bir string oluşturup little endian'e göre adresi yazalım ve test edelim çalışıyor mu diye...Yine google amca'dan öğrenebilirsiniz little ve big endian nedir diye...
Bu haliyle de sunucuya bağlanıp flag değerini alabiliriz.
Her ne kadar flagı almış olsak ta python ile exploitini yazmadan olmazdı...
Öncelikle bu dosya hakkında bir kaç bilgi edinelim...
32 bit GNU/Linux uygulamasıymış peki ne gibi korumaları var.
Bu korumalar hakkında detaylı bilgiyi google amcadan alabilirsiniz...
Şimdi ise dosyamızı inceleyelim hangi kısma atlamamız gerekli açık nerede oluşuyor falan filan...
Adı üzerinde buffer overflow, örnekte gets ile alınan verinin atanan değişkenin alacağı değerden yüksek olmasından dolayı artan verinin stack'a yazılması. Durum daha kötü anlatılamazdı galiba...Burada register'ın ne işe yaradığını google amcadan öğrenebilirsiniz.Bizim eip register'i ile işimiz eip register'i programın akışını kontrol eder her girdiği fonksiyon da bir önce ki fonksiyona geri dönmek için stack'a adresini yazar, biz de bu kısmı değiştirerek programın akışını istediğimiz gibi şekil vereceğiz.
Bu örnekte shell kodla uğraşmamamıza gerek yok secure fonksiyonun incelediğiniz de beyniniz de simşekler çıkmış gözleriniz parlamış olmalı...
burada direk terminal'i çalıştırdığını göreceksiniz, programın akışını buraya yönlendirip program üzerinden direk shell'e düşeceğiz.
0x0804863a adresine yönlendirmemiz gerekiyor, Bu kısmı halletiğimize göre şimdi fuzzy işlemine geçip taşmanın olduğu boyutu öğrenelim. Bu iş için işi uzatmadan met@sploit reis'ten yardım alacağım, öncelikle pattern_create ile 500 karakter uzunluğunda bir string oluşturacağım.
gdb'yi çalıştırıp ve stringi girelim...
Göründüğü gibi taşma oldu eip registerina yazılan veriyi alıp met@sploit'in reisin pattern_offset'ini kullanıp kaç karakterden sonra eip üzerine yazdığını öğrenelim...
112 karakterden sonra eip üzerine yazıyormuş şimdi python'u kullanıp belirtilen uzunluktan bir string oluşturup little endian'e göre adresi yazalım ve test edelim çalışıyor mu diye...Yine google amca'dan öğrenebilirsiniz little ve big endian nedir diye...
Bu haliyle de sunucuya bağlanıp flag değerini alabiliriz.
Her ne kadar flagı almış olsak ta python ile exploitini yazmadan olmazdı...
Moderatör tarafında düzenlendi: