# Kutambua Index ya Array
{% hint style="success" %}
Jifunze na zoezi la Udukuzi wa AWS:[**Mafunzo ya HackTricks kwa Wataalam wa Timu Nyekundu ya AWS (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Jifunze na zoezi la Udukuzi wa GCP: [**Mafunzo ya HackTricks kwa Wataalam wa Timu Nyekundu ya GCP (GRTE)**](https://training.hacktricks.xyz/courses/grte)
unga mkono HackTricks
* Angalia [**mpango wa usajili**](https://github.com/sponsors/carlospolop)!
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
## Taarifa Msingi
Kategoria hii inajumuisha mapungufu yote yanayotokea kwa sababu ni rahisi kubadilisha data fulani kupitia makosa katika kushughulikia viashiria katika mizunguko. Ni kategoria pana sana ambayo haina mbinu maalum kwani mbinu ya kutumia inategemea kabisa hali ya mapungufu.
Hata hivyo, hapa unaweza kupata **mifano** mizuri:
* [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html)
* Kuna **mizunguko inayogongana**, moja kwa **anwani** ambapo data imewekwa na nyingine na **ukubwa** wa data hiyo. Inawezekana kubadilisha moja kutoka kwa nyingine, kuruhusu kuandika anwani ya aina yoyote ikionyesha kama ukubwa. Hii inaruhusu kuandika anwani ya kazi ya `free` kwenye jedwali la GOT na kisha kuibadilisha na anwani ya `system`, na kuita free kutoka kwa kumbukumbu yenye `/bin/sh`.
* [https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html)
* Biti 64, hakuna nx. Badilisha ukubwa ili upate aina ya kujaza kijeraha ambapo kila kitu kitatumika kama nambari maradufu na kupangwa kutoka ndogo hadi kubwa hivyo ni lazima kuunda shellcode ambayo inatimiza mahitaji hayo, ikizingatiwa kuwa canary isitoke kutoka mahali pake na hatimaye kubadilisha RIP na anwani ya ret, ambayo inatimiza mahitaji ya awali na kuweka anwani kubwa kama anwani mpya inayoashiria mwanzo wa mizunguko (iliyovuja na programu) hivyo inawezekana kutumia ret kuruka hapo.
* [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
* Biti 64, hakuna relro, canary, nx, hakuna pie. Kuna off-by-one katika mizunguko kwenye mizunguko ambayo inaruhusu kudhibiti kipanya kwa kutoa WWW (inaiandika jumla ya nambari zote za mizunguko kwenye anwani iliyobadilishwa na off-by-one katika mizunguko). Mizunguko inadhibitiwa hivyo anwani ya GOT `exit` inabadilishwa na `pop rdi; ret`, na kwenye mizunguko inaongezwa anwani ya `main` (kurudi kwa `main`). Mnyororo wa ROP kutolea anwani ya put katika GOT kwa kutumia puts unatumika (`exit` itaitwa hivyo itaita `pop rdi; ret` kwa hivyo kutekeleza mnyororo huu kwenye mizunguko). Hatimaye mnyororo mpya wa ROP unatekelezwa ret2lib unatumika.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
* Biti 32, hakuna relro, hakuna canary, nx, pie. Tumia index mbaya kufichua anwani za libc na heap kutoka kwenye mizunguko. Tumia kujaza kijeraha kufanya ret2lib ikitoa `system('/bin/sh')` (anwani ya heap inahitajika kuvuka ukaguzi).