İPUCU

Siber Güvenlik Siber Güvenlik ile alakalı araçların kullanımı, bilgi paylaşımı ve siber güvenlik eğitimi ile ilgili kaynakların paylaşıldığı alanımızdır.

Seçenekler

Exploit-Exercises Protostar Stack4 <kondanta>

kondanta - ait Kullanıcı Resmi (Avatar)
Deneyimli Yazılımcı
Üyelik tarihi:
07/2017
Nereden:
CNCF
Mesajlar:
912
Konular:
36
Teşekkür (Etti):
33
Teşekkür (Aldı):
263
Ticaret:
(0) %
31-08-2017 18:22
#1
Exploit-Exercises Protostar Stack4 <kondanta>
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.

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.

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:

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.


---------------------

DevOps Engineer
Bade Perest - ait Kullanıcı Resmi (Avatar)
Forumdan Uzaklaştırıldı
Üyelik tarihi:
06/2017
Yaş:
99
Mesajlar:
1.696
Konular:
137
Teşekkür (Etti):
365
Teşekkür (Aldı):
251
Ticaret:
(0) %
31-08-2017 18:26
#2
Guzel anlatım olmuş.eline saglık
DarkHealler - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
10/2015
Nereden:
izmir:)
Yaş:
27
Mesajlar:
8.071
Konular:
1071
Teşekkür (Etti):
1893
Teşekkür (Aldı):
2207
Ticaret:
(0) %
19-09-2017 23:37
#3
konu taşınmıştır.
---------------------


Birgun tekrar donecegim

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı