# Dizi İndeksleme {% hint style="success" %} AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks'i Destekleyin * [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! * 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** * **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
{% endhint %} ## 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) * **2 çakışan dizi** bulunmaktadır, biri verilerin depolandığı **adresler** için diğeri ise o verilerin **boyutları** için. Birinden diğerini üzerine yazmak mümkündür, bu da rastgele bir adresi boyut olarak belirlemeyi sağlar. Bu, GOT tablosundaki `free` fonksiyonunun adresini yazmayı ve ardından onu `system` adresiyle üzerine yazmayı ve hafızadan `/bin/sh` ile free'yi ç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 doğru sıralanacağı bir tür tampon taşmasını geçmek için gereken bir kabuk kodu oluşturulması gerekmektedir, bu gereksinimi karşılayan bir adresle RIP'nin üzerine yazılması gerekmektedir ve en büyük adresin, yığının başlangıcına işaret eden yeni bir adresle değiştirilmesi gerekmektedir (program tarafından sızdırılan). Son olarak, sızdırılan adresi kullanarak GOT'ta put adresini sızdırmak için bir ROP zinciri kullanılır (`exit` ç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://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 yığın, dizideki fazla olan bir hata tarafından üzerine yazılan adresin tüm sayıların toplamını yazdığı bir adresi kontrol eder. 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ülür). GOT'ta put adresini sızdırmak için puts kullanılarak bir ROP zinciri kullanılır (`exit` ç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 için kötüye kullanma yapılır. Tampon taşmasını kötüye kullanarak `system('/bin/sh')` çağıran bir ret2lib yapısı oluşturulur (bir kontrolü atlamak için yığın adresine ihtiyaç duyulur).