Windows Exploit Geliştirme Serisi #1 | Exploit Geliştirmeye Giriş

Provido

Katılımcı Üye
21 Eki 2015
477
1
Part 1: Exploit Geliştirmeye Giriş


Bu, çok parçalı (mütevazi) bir exploit geliştirme serisinin ilk bölümüdür. Bu kısım, işimizi yapmak için neye ihtiyacımız olduğunu, exploitlerin arkasındaki temel fikirler ve aklımızda tutmamız gereken birkaç şey gibi bazı temel şeyleri kapsayacaktır. Eğer shell kodumuza ulaşmak ve çalıştırmak istiyorsak bunları bilmeliyiz. Bu eğitimlerde bugları bulmak yerine, her kısımda başarılı bir şekilde yararlanmak için belirli bir tekniğe ihtiyaç duyan açıklı bir program içerecektir. Zamanı geldiğinde “Kayıtlı Geri Dönüş İşaretçisi Taşması”ndan “ROP (Dönüş Odaklı Programlama)” ya kadar her şeyi anlatmak istiyorum. Tabii bu eğitimler kendilerini tekrar etmeyecek, bu yüzden oraya ulaşmak biraz zaman alacak. Bu eğitimler tüm küçük ayrıntıları ve olasılıkları kapsamayacağını belirtmekte fayda var. Bu bana (1) biraz zaman kazandırmak ve (2) dikkatli okuyucunun katılarak öğrenmesine izin vermek için tasarımla yapıldı.

Offensive Security ve Corelan’a bana bu mükemmel ve acı verici bağımlılığı verdikleri için özel bir teşekkür etmek istiyorum.


(1) Neye İhtiyacımız Var

Immunity Debugger – İndir

Immunity Debugger, Ollydbg’ye benzer ancak exploit geliştirmemize yardımcı olacak eklentileri çalıştırmamız gereken python desteğine sahiptir. Ücretsizdir, üstte verdiğim link ile sahte bilgiler vererek indir butonuna basın.


Mona.py

Mona, hızlı ve güvenilir exploit geliştirmekte yardımcı olacak tonlarca harika araca sahiptir. Bütün ayarları burada anlatmayacağım, eğitimde ilerledikçe yavaş yavaş anlatacağım. İndirin ve Immunity PyCommands klasörünün içine atın.


Pvefindaddr.py – İndir

Pvefindaddr, Mona’dan önce kullanılırdı. Eski olduğunu biliyorum ancak şu anda Mona’da olmayan bazı özellikleri kullanmak için kullanabiliriz. İndirin ve Immunity PyCommands klasörünün içine atın.


M3tasploit Sistemi – İndir

M3tasploit Sistemi’ni kapsamlı olarak kullanacağız. Genel olarak shell kodu üretmek için kullanacağız ayrıca, exploit yaptığımız programlardan geri alabileceğimiz herhangi bir bağlantıyı alabilecek bir platforma ihtiyacımız olacak. İhtiyacımız olan her şeye sahip olduğu için Backtrack’i kullanmanızı öneririm, ancak m3tasploiti istediğiniz şekilde kurmaktan çekinmeyin.


Virtualization Yazılımı

Burada iki seçeneğimiz var; ücretsiz olan Virtualbox ve ücretsiz olmayan Vmware. Eğer kullanabiliyorsanız Vmware’i tavsiye ederim, zeki bir insanın para ödemesine gerek olmayabilir. Exploitimizi geliştirmek için bununla birlikte bir sürü (32-bit) işletim sistemine ihtiyacımız olacak (En çok kullanımı WindowsXP PRO SP3 ve herhangi bir Windows7 yapacaksın).


(2) Taşmalar


Eğitimlerin amacı için olmaları gerektiği kadar zor veya basit tutmaya özen göstereceğim. Genel olarak exploit yazarken, Programda bir taşma bulmamız gerekiyor. Genellikle bu açıklar arabellek taşması (bir veri bölgesi alması gereken miktardan fazla veri aldığında oluşur) veya Yığın Taşması (genelde yığının sonununun ötesine yazan bir arabellek taşmasıdır) olacaktır. Böyle bir taşma olduğunda 2 şeye dikkat etmemiz gerek; (1) arabelleğimiz EIP’nin (Şu anki Talimat İşaretçisi) üstüne yazması gerek ve (2) CPU kayıtlarından biri arabellekte bulundurulması gerek. X86 CPU kayıtları listesini aşağıda ayrı komutlarla görebilirsiniz. Tek hatırlamamız gereken bu kayıtlardan herhangi biri arabelleğimizde (ve shell kodumuzda) depolanır.



Kod:
EAX - Main register used in arithmetic calculations. Also known as accumulator, as it holds results 
      of arithmetic operations and function return values.
EBX - The Base Register. Pointer to data in the DS segment.  Used to store the base address of the 
      program.
ECX - The Counter register is often used to hold a value representing the number of times a process 
      is to be repeated. Used for loop and string operations.
EDX - A general purpose registers. Also used for I/O operations. Helps extend EAX to 64-bits.
ESI - Source Index register. Pointer to data in the segment pointed to by the DS register.  Used as 
      an offset address in string and array operations. It holds the address from where to read data.
EDI - Destination Index register. Pointer to data (or destination) in the segment pointed to by the 
      ES register.  Used as an offset address in string and array operations. It holds the implied 
      write address of all string operations.
EBP - Base Pointer. Pointer to data on the stack (in the SS segment).  It points to the bottom of the 
      current stack frame. It is used to reference local variables.
ESP - Stack Pointer (in the SS segment). It points to the top of the current stack frame. It is used 
      to reference local variables.
EIP - Instruction Pointer (holds the address of the next instruction to be executed)



(3) Nasıl Çalışır?


Basitçe (1) aşırı uzun bir string depolayacak bir program elde etmeliyiz, (2) bu string EIP’’nin üstüne yazmalı ve bunun bir kısmını CPU kayıtlarında saklar, (3) Arabelleğimizi içeren kayıtı işaretleyen bir işaretçi bulmalıyız, (4) bu işaretçiyi arabelleğimizde doğru yere koymalıyız böylece EIP’nin üstüne yazabilsin, (5) program işaretçimize ulaştığında, talimatları çalıştırır ve arabelleği depolayan kayda geçer ve son olarak (6) CPU kayıtlarında depolanan arabellek parçasına shell kodumuzu yerleştiririz. Aslında, Yürütme akışına sızıyoruz ve kontrol ettiğimiz bir hafıza bölgesine yönlendiriyoruz. Eğer bunu yapmayı başarabilirsek, oraya koyduğumuz herhangi bir talimatı uzaktan yönetebilecek hale geliriz. Bu biraz basit bir anlatım ancak exploitin nasıl çalıştığına dair size bir fikir vermesini umuyorum.



 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.