Root > Documents > Exploits / Vulnerabilities > Overflowla Tanışmak - (overflow series 1)
Cyber-Warrior.Org \ Doküman \ Exploits / Vulnerabilities > Overflowla Tanışmak - (overflow series 1)
Madde
  Yazar : Türkeşhan
  Date : 22.10.2012 20:36:35
 
# Overflowla Tanışmak - (overflow series 1)
 

OVERFLOW ile Tanisma ( Meeting the overflow )


Her programlama dilinde sabit ve kullaniciya tanimli degiskenler olmak üzere 2 deger vardir.Kullaniciya tanimli degiskenler Program hafizaya islerken ; programlarin data-segmentine yerlestirilir.
Sabit degiskenler ise programlar çalisirken stack dedigimiz özel hafizada tutulur. Bu verilerin yerleri belirtilen degerlere göre boyutlandirilmistir.

Overflow tasma demektir kelime anlami olarak. Bizim overflowda yapacagimiz islem , bir hafizaya yada isleme tasiyabileceginden fazla deger yükleyip hafizayi overflow etmektir..


Tasma islemi tamamlandiktan sonra artik hafiza mevcut ds(datasegment)’den islemi çikartarak bir üst Process’e iletir. Burada runtime error , bool of memory , out of memory , dumping memory gibi hatalari görebilirsiniz. bu hatalar üst process e bagli tanimlanmamis bir islem olmadigindan kaynaklanir.


Bir iki satir yukarida yazdigim gibi Datasegmentte tanimlanmis 5 paket degerinde bir degisken var ve bu degiskenin adi onur olsun.

Kod olarak göreceksek :

     int onur = 5;

Kodu çalisir haldeyken BSS’de Onur adina 5 paketlik bir hafiza rezerve edilir. ve SImdi biz bu 5 paketlik yeri 5000 paketle doldurup ONUR degiskenini tasirdigimizda programin çalismamasi disinda baska neler yapabiliriz ?


Overflow Ettigimiz Segmente BASKA bir proccessin adresini yerlestirirsek fonksiyon tekrar çalismak istediginde o proccesin adresini çalistirarak ordaki instructionlari çalistirmaya baslar ve proccess enjekte edilmis olur..

YANI Sizin anlayacaginiz Dilde : Bir islemi kapatip kendi istedigimiz islemi devreye sokuyoruz..Yani islemleri hackliyoruz :)

Burada dedigim seyleri yapmak istedigimizde devreye bizim en büyük yardimcimiz olan shellcodelar girer...

Shellcode Nedir ? ( What the Shell Code ?)

Shellcode en açik tabiri ile derlenmis makine direktifleridir. Yani exploitin en önemli noktasidir. Exploitlerin türleri vardir misal kimisi port’u dinlemeye alirken bir baskasi sisteme yönetici ekleyebilir. Iste bu farkliligi saglayan shellcode’dur. Portu dinlemeye alan veya sisteme yönetici ekleyen kisim shellcode kismidir. Shellcode bilinen bir dil ile C,ASM ile yazilmis kodun derlenmis ve makinenin execute edebilecek sekle getirilmis hali olarak düsünün.

Kullanmaya gelinirse. Kullanmasi exploit edilen yazilima göre degisir. Ve BoF teknigine göre misal iki türlü teknik kullanilabilir. Birisi NOP Sled bir digeri ise Register’a Ziplama teknigi bu exploit hazirlanirken belirlenebilecek bir teknik seçimi olabilir. Ama mutlaka önce ayrilmis buffer kisminin doldurulmasi ve tasirilmasi gerekir.

10 bytelik ayrilmis bir buffera önce ne kadar bir junk(çöp) data doldurmaliyiz ki arabellek tassin diyerek. Debuggerlar yardimi ile bunu belirlersin. Daha sonra buffer üstüne belirledigin byte kadar çöp data ile doldurursun daha sonra teknige göre geri dönüs adresini veya ziplama noktasini ekledikten sonra Shellcode’u eklersin. Misal örnek vermek gerekirse


10 bytelik bir buffer’a ne kadar çöp data doldurmaliyiz ki dönüs adresi üstüne yazabilelim.

char szBuf[10]; buffer’a sahip programa rastgele birbirinden farkli data ekleyelim.

ABCDEFGHIJKLMNOPRSTUVYZ0123456789

data bu olsun. OllyDbg’da bu datayi verip çalistirdigimizda. Su hatayi aliriz.


Buffer doldu ve EIP üstüne 38373635 datasi geldi. Ve adresi 38373635 gibi olmayan bir degerle degistirdi. Buradaki degerler Hex olarak çikar. biz 38 37 36 ve 35’in ASCII karsiliklarina bakarsak 38=8 37=7 36=6 35=5 degerlerine sahip oldugunu görürüz. Yani


28 baytlik çöp data doldurmak EIP üstüne yazmaya yeterli geliyor demektir.

ÇÖPDATA+GERIDÖNÜSADRESI+NOP+SHELLCODE

biçiminde NOP sled tipi bir BoF ile istedigimiz direktifi çalistirtabiliriz.


Sistem Çagrilari Nedir ? ( What the System Callings ?)

Her kernelde yapilan islemler islemlerin büyüklügü,modeli,islenecegi hw-ds , gibi katagorilendirilerek 3 e ayrilir.

Bu katagoriler , hardware interrupt , hardware trap , software initiated trap tir.

HardwARE interrupt ya disk sürücü gibi bir dis aygittan ya da içerden islemciden kaynaklanan merkezi islem birimine yönelik hizmet istegi. Disaridan gelen is kesme örnegi olarak klavye ile bir karakter girisi, içerden gelen is kesme örnegi olarak programin sifira bölme gibi olanaksiz bir is yaptirmasi sonucu gösterilebilir.

Hardware trap o anki islem ve datasegment ile alakalidir.senkron yada asenkron olabilirler ve sifira bölme hatasi gibi hatalar hardware trapa dahildir..


Software Initiated trap tamamen yazilimsaldir ve donanimla herhangi bir alaka icermez . genelikle kernel tarafindan sistemi planlamak adina çagrilirlar..
   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©