Exploit-Exercises Protostar Stack4 <kondanta>

kondanta

Katılımcı Üye
29 Tem 2017
910
0
CNCF
Tekrardan merhabalar. Aslinda gun icerisinde bir baska konu daha acmayi planlamiyordum lakin, bos durmaktan iyidir diyip devam ediyorum.



Hemen hizli bir sekilde bizden istenilen soru ile baslayalim:
Kod:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

vo id win()
{
  printf("code flow successfully changed\n");
}

int main(int argc, char **argv)
{
  char buffer[64];

  gets(buffer);
}
Soru bizden bu kodda yine win() fonksiyonunu calistirmamizi istiyor. Onemli bir ipucu olarakda, eip(instruction pointer'in yani fonksiyonu calistiracak pointerin) bu sefer bufferin hemen sonunda olmadigini belirtmis. Yani bu demek ki, daha onceki sorularda yaptigimiz 64 u gecirelim, sonra overwrite edelim mantigi burada o kadar kolay olmayabilir.


Sorunun cozumu icin iki farkli yol izlenebiliyor. Ikiside gayet basit.
Lakin ben biraz daha uzun olani izleyecegim cunku digerine gore anlasilabilirligi daha yuksek.

Ek olarak stack0-2 araliginda belirttigim bazi komut ve tanimlari hatirlamaniz gerekebilir.


Cozume gecelim. Yine her zamanki gibi, gdb yi acip assembly flawor'i intel yaptim. Maini disassembleladim.

lWMZ7J.png
Simdi burasi onemli. Bize lazim olan iki sey var:
  1. Stack Pointerin icerisi
  2. Base Pointerin saveledigi memory adresi
Hizli bir sekilde "x win" ile fonksiyonumuzun memori adresini alip kaydettik bir yere. Dursun bu.
Daha sonra break point atiyoruz. Ben burada once fonksiyonun cagirildigi yeri breaklemistim ama esp'nin icinde isime yarayacak bisey bulamayinca leave komutuna break attim.
Bu sekilde gets() fonksiyonu calisip isini bitirdikten sonraki stack icerigini gozlemleyebilecektim.


Gecen seferkinin aksine isler bu defa yolunda gitti. Stack pointerini checkliyorum.
okbVrX.png

Resimden de goreceginiz uzere, input olarak her zamanki 'print "A"*64 + "BBBB"
gondermistim. Stack icerisindeki 0x414141 ler AAAA lari 42 ler ise BBBB yi temsil ediyor.
Normalde eip BBBB nin oldugu yerden islem yapiyordu. Ama bu defa devaminda 0x00 ve iki base pointer degeri var. Ikisinin base pointer degeri oldugunu altta 'x/2x $ebp' ile kontrol ettigim icin biliyorum. Simdi bu degerlerden hangisi degerleri stack'e kaydedecek onu denemek lazim. Ilk olarak 0xbff'liyi denedim ama istedigim sonucu vermedi.

Onemli: memory noktasinda gordugunuz her 0x0 li deger icin bit hesabi yaparak inputlari gonderiyorum. her deger 4 bit. yani gondereceginiz input degerini 4'er sekilde arttirmaniz gerekiyor. ilk basta gonderdigimiz 64 ve + 4 "BBBB" vardi yani 68. 0xbff icin 72 gondermeniz gerekmekte.

0xbff li calismadigi icin diger degeri denedim. Onada input olarak "print 'A'*76 + 'BBBB'" gonderip denedim. Istedigimi aldim.


Aradagim memory noktasina ulasabildigim icin, geriye kalan tek sey scriptte win() fonksiyonun lokasyonunu iletmek kaliyordu. Onuda :
Kod:
pad = "A"*72 + "BBBB" # siz burada direk print"A"*76 da kullanabilirisniz. Ben sadece yazdigim degerleri memoryde farkli farkli gormekten hoslaniyorum 
var = "\xf4\x83\x04\x08"
print test+var
bu sekilde ayarlayarak programa pipeladim.

Sonuc:
WQNDGN.png

Simdi gelelim soru hakkindaki dusuncelerime. Bir onceki soruya kiyasla gercekten cok ama cok daha kolaydi. Onun disinda herkesin Protostari kendisi denemesini siddetle tavsiye ediyorum. Baslangic duzeyine hitap ettigi icin her bir soru en fazla 20 dakikanizi alacak sekilde hazirlanmis. Bunun yaninda basit assembly yorumlamayi ogreniyorsunuz. Tabiiki network, socket kisminda bizi ne bekliyor bilmesem de, egleneceginizin garantisini veriyorum.


 
Ü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.