İ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 Stack3 <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 15:43
#1
Exploit-Exercises Protostar Stack3 <kondanta>
Merhaba, tekrar ben ve tekrar yeni bir protostar challengei. Busefer sadece 1 adet soru cozumu yapabilecegim cunku gercekten bir function overload etmek beni bu kadar yormamisti.

Soru -> Bizden istenen bufferi'i overflow edip hic cagirilmayan win fonksiyonunu cagirmak.
Ipucu olarak gdb ve object dump yardimci olur denmis.
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)
{
  volatile int (*fp)();
  char buffer[64];

  fp = 0;

  gets(buffer);

  if(fp) {
      printf("calling function pointer, jumping to 0x%08x\n", fp);
      fp();
  }
}

Simdi ilk olarak buna daha once paylastigim 0-2 stacklerindeki gibi bir yaklasimda bulunmak faydali olabilir diye dusundum. Ama istedigim sonucu bir turlu alamadim.
Yaklasik son 1 saattir debuggerla icli disli oldum. Sonra garip bir sekilde calisti.


Cozume gececek olursam, hemen gdb yi acip disassemblerimi ayarladim. Burada onemli olan bir husus, win() fonksiyonun memorydeki adresi. onu da
Kod:
x win
yazarak elde ettik.

Artik disassemblera gecebilriiz:
Simdi onumuze gelen info dumpta neden 0x08048475 adresine breakpoint attigimi soruyor olabilirsiniz kendinize. Aciklayayim. Eax genel registerlardan bitanesidir ve genel olarak input output aritmetik vs icin kullanilir. "0x08048475" Bu noktada eax cagirilmasi bana sunu dusundurtuyor, demek ki burada input aliniyor. Bu yuzden, debug'in kalan kismini bu noktada yogunlasarak devam ettirecegim.


Gecen orneklerde de oldugu gibi bufferin kapasitesi 64. Bu demekki 65 ve uzeri uzunluktaki her input bufferi overflow etmeye yetecek. Buradaki onemli durum overflow ederken fonksiyonun adresi ile etmemiz gerektigi.


Gecen orneklerden de oldugu uzere ezberden bir input verdim. Scriptin icerigi:
Kod:
print "A"*65 + "BBBB"
idi. Bu scripti input olarak kullanabilmem icin once onu bir degisken haline getirmem gerekiyordu ve outputu test dosyasina pipeladim.
Daha sonra gdb icerisinde r(run) < ~/test ile programa inputu gonderdim. Daha sonra
"info registers" ile gonderdigim inputun ne derece etki ettigine baktim. Ama aldigim sonuc biraz garip geldi. 0x42'nin karakter karsiligi B, 0x41'in A. Bekledigim sonuc 0x41414142 iken tam tersini aldim.
Programin little Endian oldugu tamamen aklimda cikmisti. Bu yuzden surec gereksiz derecede uzadi.


Daha sonra scripti bu sekilde degistirip tekrar "python stack3.py > text" ile test dosyasina pipeladim.


Ve sonunda sonuca su sekilde ulastim ulastim.


Lakin basta da belirttigim uzere, kodun little endian olusunu unutmam sureci bi nebze uzatti uzatmasina da, bir noktada debugger da cildirdi. Memoryi uzerine yazdirmamak icin direndi diyebilirim. Hic olmadik adresleri falan uzerine yazdi. Yani 0x841 input verip registerda 0x32380 gibi bir sonucla karsilastim uzun sure. Umarim basiniza gelmez.
Bu arada reverse engineering ile ilgileneniz varsa, ya da merak edeniniz varsa iyaretci sayfama belirttiginiz taktirde radare2 ile ilgili calismalarimi sizlerle paylasmaya calisabilirim.




Tekrardan, Saglicakla~

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

DevOps Engineer
Konu kondanta tarafından (31-08-2017 15:50 Saat 15:50 ) değiştirilmiştir.
osm4nl1evl4d1, Edros Detretus Teşekkür etti.
osm4nl1evl4d1 - ait Kullanıcı Resmi (Avatar)
Tamamen Forumdan Uzaklaştırıldı
Üyelik tarihi:
03/2017
Nereden:
T Ü R K
Mesajlar:
4.255
Konular:
194
Teşekkür (Etti):
791
Teşekkür (Aldı):
1005
Ticaret:
(0) %
31-08-2017 15:49
#2
valla dostum okumak çok keyifliydi.
devamını beklerim.
eline emeğine sağlık
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 15:56
#3
Alıntı:
osm4nl1evl4d1´isimli üyeden Alıntı Mesajı göster
valla dostum okumak çok keyifliydi.
devamını beklerim.
eline emeğine sağlık
Tesekkur ederim! önümüzdeki haftaya kadar bütün seriyi bitirmeyi planlıyorum. Ama bu sorudaki gibi, tuhaf aksaklıklar bazen süreci uzatıyor ...
---------------------

DevOps Engineer
KusursuzBiri - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2017
Mesajlar:
34
Konular:
1
Teşekkür (Etti):
2
Teşekkür (Aldı):
2
Ticaret:
(0) %
01-09-2017 19:34
#4
güzel konu

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ı