# Array Indexing
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
## Grundlegende Informationen Diese Kategorie umfasst alle Schwachstellen, die auftreten, weil es möglich ist, bestimmte Daten durch Fehler bei der Behandlung von Indizes in Arrays zu überschreiben. Es handelt sich um eine sehr breite Kategorie ohne spezifische Methodik, da der Exploit-Mechanismus vollständig von den Bedingungen der Schwachstelle abhängt. Hier finden Sie jedoch einige gute **Beispiele**: * [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html) * Es gibt **2 kollidierende Arrays**, eines für **Adressen**, an denen Daten gespeichert sind, und eines mit den **Größen** dieser Daten. Es ist möglich, eines vom anderen zu überschreiben, um eine beliebige Adresse zu schreiben, die als Größe angegeben wird. Dies ermöglicht das Schreiben der Adresse der `free`-Funktion in die GOT-Tabelle und dann das Überschreiben mit der Adresse zu `system` und das Aufrufen von free aus einem Speicher mit `/bin/sh`. * [https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html) * 64 Bit, kein nx. Überschreiben einer Größe, um eine Art Pufferüberlauf zu erhalten, bei dem alles als doppelte Zahl verwendet wird und von kleinster bis größter sortiert wird. Daher muss ein Shellcode erstellt werden, der diese Anforderung erfüllt, unter Berücksichtigung, dass der Canary nicht von seiner Position verschoben werden sollte, und schließlich das Überschreiben des RIP mit einer Adresse zu ret, die die vorherigen Anforderungen erfüllt, und das Setzen der größten Adresse auf eine neue Adresse, die auf den Anfang des Stacks zeigt (vom Programm geleakt), sodass es möglich ist, den ret zu verwenden, um dorthin zu springen. * [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/) * 64 Bit, kein relro, Canary, nx, kein pie. Es gibt ein Off-by-One in einem Array im Stack, das es ermöglicht, einen Zeiger zu steuern, der WWW gewährt (es schreibt die Summe aller Zahlen des Arrays in die überschriebene Adresse des Off-by-One im Array). Der Stack wird kontrolliert, sodass die GOT-Adresse von `exit` mit `pop rdi; ret` überschrieben wird, und im Stack wird die Adresse zu `main` hinzugefügt (Rückkehr zu `main`). Eine ROP-Kette wird verwendet, um die Adresse von put in der GOT unter Verwendung von puts zu leaken (`exit` wird aufgerufen, sodass es `pop rdi; ret` aufrufen wird und somit diese Kette im Stack ausführen wird). Schließlich wird eine neue ROP-Kette verwendet, die ret2lib ausführt. * [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, kein relro, kein Canary, nx, pie. Missbrauch eines schlechten Indexierens, um Adressen von libc und Heap aus dem Stack zu leaken. Missbrauch des Pufferüberlaufs, um ein ret2lib aufzurufen, das `system('/bin/sh')` aufruft (die Heap-Adresse wird benötigt, um eine Überprüfung zu umgehen).