hacktricks/binary-exploitation/array-indexing.md

30 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Dizi İndeksleme
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Ş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!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
## Temel Bilgiler
Bu kategori, dizilerdeki indekslerin işlenmesindeki hatalar nedeniyle belirli verilerin üzerine yazılabilmesine olanak tanıyan tüm zayıflıkları içerir. Saldırı mekanizması tamamen zayıflığın koşullarına bağlı olduğundan belirli bir metodolojiye sahip değildir.
Ancak burada bazı güzel **örnekler** bulabilirsiniz:
* [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html)
* Verilerin depolandığı **adresler** için bir tane ve o verilerin **boyutları** için bir tane olmak üzere **2 çakışan dizi** bulunmaktadır. Birinden diğerine üzerine yazma yapmak mümkündür, bu da rastgele bir adresi boyut olarak belirterek yazmayı sağlar. Bu, GOT tablosundaki `free` fonksiyonunun adresini yazmayı ve ardından onu `system` adresiyle üzerine yazmayı ve hafızadan `/bin/sh` ile çağırmayı mümkün kılar.
* [https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html)
* 64 bit, nx yok. Bir boyutu üzerine yazarak her şeyin çift sayı olarak kullanılacağı ve en küçükten en büyüğe sıralanacağı bir tür tampon taşmasını elde etmek mümkündür, bu nedenle bu gereksinimi karşılayan bir kabuk kodu oluşturmak gereklidir. Ayrıca, canary'nin konumundan hareket ettirilmemesi gerektiğini ve son olarak RIP'nin bir ret adresiyle üzerine yazılması gerektiğini ve bu gereksinimleri karşılayan ve yığının başlangıcına işaret eden yeni bir adresin en büyük adresi eklenmesi gerektiğini unutmamak gerekir (program tarafından sızdırılan). Bu şekilde ret'in oraya atlaması mümkün olacaktır.
* [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
* 64 bit, relro yok, canary yok, nx yok, pie yok. Yığında bir dizide bir tane fazla olan bir hata vardır ve bu, bir işaretçiyi kontrol etmeyi sağlar ve bu işaretçi, dizideki fazla olan bir hata tarafından üzerine yazılan adreslerin toplamını yazmaktadır. Yığın kontrol edilir, bu nedenle GOT `exit` adresi `pop rdi; ret` ile üzerine yazılır ve yığında `main` adresi eklenir (`main`'e geri dönüş yapılır). Ardından, puts kullanarak GOT'taki adresin sızdırılması için bir ROP zinciri kullanılır (`exit` çağrılacak, bu nedenle `pop rdi; ret` çağrılacak ve bu nedenle bu zincir yığında çalıştırılacaktır). Son olarak, ret2lib'i çalıştıran yeni bir ROP zinciri kullanılır.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
* 32 bit, relro yok, canary yok, nx yok, pie yok. Bir kötü indeksleme kullanarak libc ve yığın adreslerini sızdırmak mümkündür. Tampon taşmasını kötüye kullanarak `system('/bin/sh')` çağrısı yapmak için ret2lib kullanılır (bir kontrolü atlatmak için yığın adresine ihtiyaç vardır).