# DĂ©bordement de tas {% hint style="success" %} Apprenez et pratiquez le piratage AWS :[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Apprenez et pratiquez le piratage GCP : [**Formation HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Soutenez HackTricks * Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)! * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Partagez des astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dĂ©pĂŽts GitHub.
{% endhint %} ## Informations de base Un dĂ©bordement de tas est similaire Ă  un [**dĂ©bordement de pile**](../stack-overflow/) mais dans le tas. Fondamentalement, cela signifie qu'un espace a Ă©tĂ© rĂ©servĂ© dans le tas pour stocker des donnĂ©es et que **les donnĂ©es stockĂ©es Ă©taient plus grandes que l'espace rĂ©servĂ©**. Dans les dĂ©bordements de pile, nous savons que certains registres comme le pointeur d'instruction ou le cadre de pile vont ĂȘtre restaurĂ©s Ă  partir de la pile et il pourrait ĂȘtre possible d'en abuser. En cas de dĂ©bordement de tas, il **n'y a aucune information sensible stockĂ©e par dĂ©faut** dans le fragment de tas qui peut ĂȘtre dĂ©bordĂ©. Cependant, il pourrait s'agir d'informations sensibles ou de pointeurs, donc la **criticitĂ©** de cette vulnĂ©rabilitĂ© **dĂ©pend** de **quelles donnĂ©es pourraient ĂȘtre Ă©crasĂ©es** et comment un attaquant pourrait en abuser. {% hint style="success" %} Pour trouver les dĂ©calages de dĂ©bordement, vous pouvez utiliser les mĂȘmes motifs que dans les [**dĂ©bordements de pile**](../stack-overflow/#finding-stack-overflows-offsets). {% endhint %} ### DĂ©bordements de pile vs dĂ©bordements de tas Dans les dĂ©bordements de pile, l'agencement et les donnĂ©es qui seront prĂ©sentes dans la pile au moment oĂč la vulnĂ©rabilitĂ© peut ĂȘtre dĂ©clenchĂ©e sont assez fiables. Cela est dĂ» au fait que la pile est linĂ©aire, augmentant toujours dans la mĂ©moire en collision, dans **des endroits spĂ©cifiques de l'exĂ©cution du programme, la mĂ©moire de pile stocke gĂ©nĂ©ralement un type de donnĂ©es similaire** et elle a une structure spĂ©cifique avec certains pointeurs Ă  la fin de la partie de pile utilisĂ©e par chaque fonction. Cependant, dans le cas d'un dĂ©bordement de tas, la mĂ©moire utilisĂ©e n'est pas linĂ©aire mais **les fragments allouĂ©s sont gĂ©nĂ©ralement Ă  des positions sĂ©parĂ©es de la mĂ©moire** (pas les uns Ă  cĂŽtĂ© des autres) en raison des **bacs et des zones** sĂ©parant les allocations par taille et parce que **la mĂ©moire prĂ©cĂ©demment libĂ©rĂ©e est utilisĂ©e** avant d'allouer de nouveaux fragments. Il est **compliquĂ© de savoir quel objet va entrer en collision avec celui vulnĂ©rable** Ă  un dĂ©bordement de tas. Ainsi, lorsqu'un dĂ©bordement de tas est trouvĂ©, il est nĂ©cessaire de trouver un **moyen fiable de faire en sorte que l'objet dĂ©sirĂ© soit le suivant en mĂ©moire** Ă  partir de celui qui peut ĂȘtre dĂ©bordĂ©. L'une des techniques utilisĂ©es pour cela est le **dĂ©mĂȘlage de tas** qui est utilisĂ© par exemple [**dans ce post**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). Dans le post, il est expliquĂ© comment dans le noyau iOS, lorsqu'une zone manque de mĂ©moire pour stocker des fragments de mĂ©moire, elle l'agrandit d'une page de noyau, et cette page est divisĂ©e en fragments des tailles attendues qui seraient utilisĂ©es dans l'ordre (jusqu'Ă  la version iOS 9.2, puis ces fragments sont utilisĂ©s de maniĂšre alĂ©atoire pour compliquer l'exploitation de ces attaques). Par consĂ©quent, dans le post prĂ©cĂ©dent oĂč un dĂ©bordement de tas se produit, pour forcer l'objet dĂ©bordĂ© Ă  entrer en collision avec un ordre victime, plusieurs **`kallocs` sont forcĂ©s par plusieurs threads pour essayer de s'assurer que tous les fragments libres sont remplis et qu'une nouvelle page est crĂ©Ă©e**. Pour forcer ce remplissage avec des objets d'une taille spĂ©cifique, l'**allocation hors ligne associĂ©e Ă  un port mach iOS** est un candidat idĂ©al. En ajustant la taille du message, il est possible de spĂ©cifier exactement la taille de l'allocation `kalloc` et lorsque le port mach correspondant est dĂ©truit, l'allocation correspondante sera immĂ©diatement libĂ©rĂ©e Ă  `kfree`. Ensuite, certains de ces espaces rĂ©servĂ©s peuvent ĂȘtre **libĂ©rĂ©s**. La liste de libĂ©ration **`kalloc.4096` libĂšre les Ă©lĂ©ments dans un ordre dernier entrĂ©, premier sorti**, ce qui signifie essentiellement que si certains espaces rĂ©servĂ©s sont libĂ©rĂ©s et que l'exploit essaie d'allouer plusieurs objets victimes tout en essayant d'allouer l'objet vulnĂ©rable au dĂ©bordement, il est probable que cet objet sera suivi d'un objet victime. ### Exemple libc [**Sur cette page**](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html), il est possible de trouver une Ă©mulation de dĂ©bordement de tas de base qui montre comment en Ă©crivant le bit prev in use du fragment suivant et la position de la taille prev, il est possible de **consolider un fragment utilisĂ©** (en le faisant croire qu'il est inutilisĂ©) et **ensuite le rĂ©allouer** en pouvant Ă©craser des donnĂ©es qui sont utilisĂ©es dans un autre pointeur Ă©galement. Un autre exemple de [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap0/index.html) montre un exemple trĂšs basique d'un CTF oĂč un **dĂ©bordement de tas** peut ĂȘtre exploitĂ© pour appeler la fonction gagnante et **obtenir le drapeau**. Dans l'exemple [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap1/index.html), il est possible de voir comment en abusant d'un dĂ©passement de tampon, il est possible d'**Ă©craser dans un fragment proche une adresse** oĂč **des donnĂ©es arbitraires de l'utilisateur** vont ĂȘtre Ă©crites. ### Exemple ARM64 Sur la page [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/), vous pouvez trouver un exemple de dĂ©bordement de tas oĂč une commande qui va ĂȘtre exĂ©cutĂ©e est stockĂ©e dans le fragment suivant Ă  partir du fragment dĂ©bordĂ©. Ainsi, il est possible de modifier la commande exĂ©cutĂ©e en l'Ă©crasant avec une exploitation facile telle que : ```bash python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt ``` ### Autres exemples * [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/) * Nous utilisons une vulnĂ©rabilitĂ© de dĂ©bordement d'entier pour obtenir un dĂ©bordement de tas. * Nous corrompons les pointeurs vers une fonction Ă  l'intĂ©rieur d'une `struct` du bloc dĂ©bordĂ© pour dĂ©finir une fonction telle que `system` et obtenir l'exĂ©cution de code. {% hint style="success" %} Apprenez et pratiquez le piratage AWS :[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Apprenez et pratiquez le piratage GCP : [**Formation HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Soutenez HackTricks * Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)! * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Partagez des astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dĂ©pĂŽts GitHub.
{% endhint %}