ROP Emporium ret2win (x64) Writeup

ROP Emporium ret2win (64bit) Writeup​

detail


x64 mimaride dosyamızı indirdikten sonra ilk olarak strings ret2win ve checksec çıktılarına bakalım.

strings


Burda bizim için birkaç açıklama/ipucu olduğunu görüyoruz

checksec


Programımızda NX (non executable stack) koruması açık. Aynı zamanda sistemimizde ASLR koruması da açık.

Kısaca ön bilgi sahibi olduğumuza göre artık gdb ile main fonksiyonumuzu incelemeye geçebiliriz.

main


Burda pwnme isimli bir fonksiyon olduğunu görüyoruz. Adından ötürü tabiki dikkatimizi çekiyor :)

pwnme


Aynı zamanda programımızın içerisinde ret2win isimli bir fonksiyon daha bulunmakta

ret2win


Programımızın adının da olduğu bu fonksiyonun anlamının return to win olduğunu düşünürsek belleği taşırdıktan sonra bu fonksiyonun adresini rip üzerine yazarak çalıştırmamız beklenmektedir.

O halde zafiyet bulunan pwnme isimli fonksiyonumuzun sonuna bir breakpoint koyarak kaç byte dan sonra rip üzerine yazabildiğimize bakalım.

bof


64 bit sistemlerde RIP üzerine yazılan adrese eğer program sıçrayamaz veya yürütülecek herhangi birşey bulamazsa o adresi 32 bit mimaride olduğu gibi üzerinde tutmak yerine rsp üzerinde tutar. Böylelikle herhangi bir Segmentation fault üretmemiş olacaktır.

RSP üzerinde yazan değeri arattığımızda offset değerinin 40 olduğunu görebiliriz.


gdb-peda$ pattern offset AA0AAFAAb
AA0AAFAAb found at offset: 40
gdb-peda$


GDB üzerinde disas ret2win veya objdump -S ret2win | grep "ret2win" diyerek fonksiyonumuzun adresini öğrenebiliriz.


[alp@eren]$ objdump -S ret2win | grep "ret2win"
ret2win: file format elf64-x86-64
0000000000400811 <ret2win>:


Offsetimizi ve ret2win fonksiyonumuzun adresini öğrendiğimize göre artık exploitimizi hazırlayabiliriz.

exploit


Gördüğünüz gibi başarılı bir şekilde fonksiyonumuzu çağırıp çalıştırdık ve flag dosyasını okuduk.
 
  • Like
Tepkiler: sef
Üst