alpertunga
Üye
ROP Emporium ret2win (64bit) Writeup
![detail detail](https://vvhack.org/uploads/default/original/2X/2/20cc3be1aebf2252b736d43066048cea1e87dc16.png)
x64 mimaride dosyamızı indirdikten sonra ilk olarak strings ret2win ve checksec çıktılarına bakalım.
![strings strings](https://vvhack.org/uploads/default/original/2X/c/cea5a25f8e00400b9613f418eb36d3de571d6342.png)
Burda bizim için birkaç açıklama/ipucu olduğunu görüyoruz
![checksec checksec](https://vvhack.org/uploads/default/original/2X/9/9bfe391072855d11ad0df581475b260d1cf4b691.png)
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 main](https://vvhack.org/uploads/default/original/2X/d/d847c5cf69940be849d5e9203c16d31fd526df46.png)
Burda pwnme isimli bir fonksiyon olduğunu görüyoruz. Adından ötürü tabiki dikkatimizi çekiyor
![pwnme pwnme](https://vvhack.org/uploads/default/original/2X/f/f1692c5b0c8479afded40231e3e4524a8c2596ae.png)
Aynı zamanda programımızın içerisinde ret2win isimli bir fonksiyon daha bulunmakta
![ret2win ret2win](https://vvhack.org/uploads/default/original/2X/e/eff700ba217512161998ada5571740297cb3b3a4.png)
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 bof](https://vvhack.org/uploads/default/original/2X/a/a68973e0090033420a0b61fb1497d0e7f58c98c0.png)
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 exploit](https://vvhack.org/uploads/default/original/2X/8/8ad4600ce1362b1593e119643b6c5ce024195bbb.png)
Gördüğünüz gibi başarılı bir şekilde fonksiyonumuzu çağırıp çalıştırdık ve flag dosyasını okuduk.