Translated ['binary-exploitation/libc-heap/double-free.md'] to fr

This commit is contained in:
Translator 2024-08-13 18:55:43 +00:00
parent a261d0915f
commit 212e124417

View file

@ -1,27 +1,27 @@
# Double Free
{% hint style="success" %}
Apprenez et pratiquez le piratage AWS : <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Apprenez et pratiquez le piratage GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Formation HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Soutenez HackTricks</summary>
<summary>Support HackTricks</summary>
* 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.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Informations de base
## Basic Information
Si vous libérez un bloc de mémoire plus d'une fois, cela peut perturber les données de l'allocateur et ouvrir la porte aux attaques. Voici comment cela se produit : lorsque vous libérez un bloc de mémoire, il retourne dans une liste de morceaux libres (par exemple, le "fast bin"). Si vous libérez le même bloc deux fois de suite, l'allocateur détecte cela et génère une erreur. Mais si vous **libérez un autre morceau entre-temps, la vérification de double libération est contournée**, provoquant une corruption.
Si vous libérez un bloc de mémoire plus d'une fois, cela peut perturber les données de l'allocateur et ouvrir la porte à des attaques. Voici comment cela se produit : lorsque vous libérez un bloc de mémoire, il retourne dans une liste de morceaux libres (par exemple, le "fast bin"). Si vous libérez le même bloc deux fois de suite, l'allocateur détecte cela et renvoie une erreur. Mais si vous **libérez un autre morceau entre-temps, la vérification de double libération est contournée**, provoquant une corruption.
Maintenant, lorsque vous demandez une nouvelle mémoire (en utilisant `malloc`), l'allocateur pourrait vous donner un **bloc qui a été libéré deux fois**. Cela peut conduire à deux pointeurs différents pointant vers le même emplacement mémoire. Si un attaquant contrôle l'un de ces pointeurs, il peut modifier le contenu de cette mémoire, ce qui peut causer des problèmes de sécurité ou même lui permettre d'exécuter du code.
Maintenant, lorsque vous demandez de la nouvelle mémoire (en utilisant `malloc`), l'allocateur peut vous donner un **bloc qui a été libéré deux fois**. Cela peut conduire à deux pointeurs différents pointant vers le même emplacement mémoire. Si un attaquant contrôle l'un de ces pointeurs, il peut modifier le contenu de cette mémoire, ce qui peut causer des problèmes de sécurité ou même leur permettre d'exécuter du code.
Exemple :
Example:
```c
#include <stdio.h>
#include <stdlib.h>
@ -88,14 +88,14 @@ printf("f1: %p\n", (void *)f1);
printf("g1: %p\n", (void *)g1);
printf("h1: %p\n", (void *)h1);
printf("i1: %p\n", (void *)i1);
printf("i2: %p\n", (void *)i1);
printf("i2: %p\n", (void *)i2);
return 0;
}
```
Dans cet exemple, après avoir rempli le tcache avec plusieurs tranches libérées (7), le code **libère la tranche `h`, puis la tranche `i`, et ensuite `h` à nouveau, provoquant une double libération** (également connue sous le nom de Fast Bin dup). Cela ouvre la possibilité de recevoir des adresses mémoire superposées lors de la réallocation, ce qui signifie que deux pointeurs ou plus peuvent pointer vers le même emplacement mémoire. La manipulation des données via un pointeur peut alors affecter l'autre, créant un risque de sécurité critique et un potentiel d'exploitation.
Dans cet exemple, après avoir rempli le tcache avec plusieurs chunks libérés (7), le code **libère le chunk `h`, puis le chunk `i`, et ensuite `h` à nouveau, provoquant un double free** (également connu sous le nom de Fast Bin dup). Cela ouvre la possibilité de recevoir des adresses mémoire qui se chevauchent lors de la réallocation, ce qui signifie que deux ou plusieurs pointeurs peuvent pointer vers la même localisation mémoire. Manipuler des données via un pointeur peut alors affecter l'autre, créant un risque de sécurité critique et un potentiel d'exploitation.
En l'exécutant, notez comment **`i1` et `i2` ont la même adresse** :
En l'exécutant, notez comment **`i1` et `i2` ont obtenu la même adresse** :
<pre><code>Allocations initiales :
a : 0xaaab0f0c22a0
@ -107,7 +107,7 @@ f : 0xaaab0f0c2340
g : 0xaaab0f0c2360
h : 0xaaab0f0c2380
i : 0xaaab0f0c23a0
Après les réallocations :
Après réallocations :
a1 : 0xaaab0f0c2360
b1 : 0xaaab0f0c2340
c1 : 0xaaab0f0c2320
@ -123,34 +123,34 @@ h1 : 0xaaab0f0c2380
## Exemples
* [**Dragon Army. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/dragon-army/)
* Nous ne pouvons allouer que des tranches de taille Fast-Bin, sauf pour la taille `0x70`, ce qui empêche l'écrasement habituel de `__malloc_hook`.
* Nous ne pouvons allouer que des chunks de taille Fast-Bin sauf pour la taille `0x70`, ce qui empêche l'écrasement habituel de `__malloc_hook`.
* Au lieu de cela, nous utilisons des adresses PIE qui commencent par `0x56` comme cible pour Fast Bin dup (1/2 chance).
* Un endroit où les adresses PIE sont stockées est dans `main_arena`, qui se trouve à l'intérieur de Glibc et près de `__malloc_hook`.
* Nous ciblons un décalage spécifique de `main_arena` pour allouer une tranche là-bas et continuons d'allouer des tranches jusqu'à atteindre `__malloc_hook` pour obtenir l'exécution de code.
* Nous ciblons un offset spécifique de `main_arena` pour allouer un chunk là et continuer à allouer des chunks jusqu'à atteindre `__malloc_hook` pour obtenir une exécution de code.
* [**zero_to_hero. PicoCTF**](https://7rocky.github.io/en/ctf/picoctf/binary-exploitation/zero_to_hero/)
* En utilisant les bacs Tcache et un débordement de zéro, nous pouvons atteindre une situation de double libération :
* Nous allouons trois tranches de taille `0x110` (`A`, `B`, `C`).
* Nous libérons `B`.
* Nous libérons `A` et allouons à nouveau pour utiliser le débordement de zéro.
* Maintenant, la taille de `B` est `0x100`, au lieu de `0x111`, donc nous pouvons le libérer à nouveau.
* Nous avons un bac Tcache de taille `0x110` et un de taille `0x100` qui pointent vers la même adresse. Nous avons donc une double libération.
* Nous exploitons la double libération en utilisant [l'empoisonnement du Tcache](tcache-bin-attack.md)
* En utilisant des bins Tcache et un débordement de null-byte, nous pouvons atteindre une situation de double-free :
* Nous allouons trois chunks de taille `0x110` (`A`, `B`, `C`)
* Nous libérons `B`
* Nous libérons `A` et allouons à nouveau pour utiliser le débordement de null-byte
* Maintenant, le champ de taille de `B` est `0x100`, au lieu de `0x111`, donc nous pouvons le libérer à nouveau
* Nous avons un Tcache-bin de taille `0x110` et un de taille `0x100` qui pointent vers la même adresse. Donc nous avons un double free.
* Nous exploitons le double free en utilisant [Tcache poisoning](tcache-bin-attack.md)
## Références
* [https://heap-exploitation.dhavalkapil.com/attacks/double\_free](https://heap-exploitation.dhavalkapil.com/attacks/double\_free)
{% hint style="success" %}
Apprenez et pratiquez le piratage AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Apprenez et pratiquez le piratage GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Formation HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Apprenez et pratiquez le hacking AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Apprenez et pratiquez le hacking GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Soutenez HackTricks</summary>
<summary>Soutenir HackTricks</summary>
* 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) github repos.
* **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 hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
</details>
{% endhint %}