- **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimizi**](https://opensea.io/collection/the-peass-family) görün
- 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'ı takip edin.
**Ret2win** zorlukları, özellikle **binary exploitation** içeren görevlerde, **Capture The Flag (CTF)** yarışmalarında popüler bir kategoridir. Amacımız, verilen bir binary dosyasındaki bir zafiyeti sömürerek genellikle `win`, `flag` vb. gibi adlandırılan belirli bir çağrılmamış işlevi çalıştırmaktır. Bu işlev çalıştırıldığında genellikle bir bayrak veya başarı mesajı yazdırır. Genellikle, istenen işleve yürütme akışını yönlendirmek için **stack** üzerindeki **return address**'i üzerine yazarak bir zafiyeti sömürmek gerekmektedir. İşte örneklerle daha detaylı bir açıklama:
Sızma için güçlü bir CTF çerçevesi olan **pwntools** kullanacağız. Sızma betiği, tamponu taşırarak ve dönüş adresini `win` fonksiyonunun adresiyle değiştirerek bir yük oluşturacaktır.
`win` fonksiyonunun adresini bulmak için **gdb**, **objdump** veya binary dosyaları incelemenize izin veren diğer araçları kullanabilirsiniz. Örneğin, `objdump` ile şu şekilde kullanabilirsiniz:
Python betiği, `vulnerable_function` tarafından işlendiğinde tamamen özenle oluşturulmuş bir mesaj gönderir ve bu mesaj, tamponu taşırarak yığın üzerindeki dönüş adresini `win` adresiyle üzer yazar. `vulnerable_function` geri döndüğünde, `main`e geri dönmek veya çıkmak yerine `win`e atlar ve mesaj yazdırılır.
* [**PIE**](../common-binary-protections-and-bypasses/pie/) adresin güvenilir olması için **devre dışı bırakılmalıdır** ya da işlevin depolanacağı adres her zaman aynı olmayacak ve `win` fonksiyonunun yüklendiği yeri belirlemek için bir sızıntıya ihtiyacınız olacaktır. Taşma nedeni olan işlev `read` veya benzeri olduğunda, dönüş adresini `win` fonksiyonu olacak şekilde 1 veya 2 bayt **Kısmi Üzerine Yazma** yapabilirsiniz. ASLR'nin çalışma şeklinden dolayı, son üç onaltılık hane rastgele değildir, bu yüzden doğru dönüş adresini elde etmek için **1/16 şans** (1 onaltılık) vardır.
* [**Yığın Kanaryaları**](../common-binary-protections-and-bypasses/stack-canaries/) da devre dışı bırakılmalıdır aksi takdirde tehlikeye düşen EIP dönüş adresi asla takip edilmeyecektir.
* Program, girişin boyutunu kontrol etmek için bir sayının son baytını doğruluyor, bu nedenle son baytın izin verilen aralık içinde olması koşuluyla herhangi bir boyut eklemek mümkündür. Ardından, giriş, bir ret2win ile istismar edilen bir tampon taşması oluşturur.