mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['binary-exploitation/libc-heap/double-free.md'] to rs
This commit is contained in:
parent
bd7e56dc8d
commit
ba5b2660d5
1 changed files with 29 additions and 29 deletions
|
@ -1,27 +1,27 @@
|
|||
# Dvostruko Oslobađanje
|
||||
# Double Free
|
||||
|
||||
{% hint style="success" %}
|
||||
Naučite i vežbajte hakovanje AWS-a:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Obuka AWS Crveni Tim Stručnjak (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Naučite i vežbajte hakovanje GCP-a: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Obuka GCP Crveni Tim Stručnjak (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>Podržite HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
* 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 %}
|
||||
|
||||
## Osnovne Informacije
|
||||
## Basic Information
|
||||
|
||||
Ako oslobodite blok memorije više puta, možete poremetiti podatke alokatora i otvoriti vrata napadima. Evo kako se to dešava: kada oslobodite blok memorije, on se vraća u listu slobodnih blokova (npr. "brzi bin"). Ako oslobodite isti blok dva puta zaredom, alokator detektuje to i prijavljuje grešku. Međutim, ako **oslobodite još jedan blok između, provera dvostrukog oslobađanja se zaobilazi**, što uzrokuje korupciju.
|
||||
Ako oslobodite blok memorije više od jednom, to može poremetiti podatke alokatora i otvoriti vrata napadima. Evo kako se to dešava: kada oslobodite blok memorije, on se vraća u listu slobodnih delova (npr. "brzi bin"). Ako oslobodite isti blok dva puta zaredom, alokator to detektuje i javlja grešku. Ali ako **oslobodite drugi deo između, provera duplog oslobađanja se zaobilazi**, što uzrokuje korupciju.
|
||||
|
||||
Sada, kada zatražite novu memoriju (koristeći `malloc`), alokator vam može dati **blok koji je oslobođen dva puta**. To može dovesti do toga da dva različita pokazivača pokazuju na istu lokaciju memorije. Ako napadač kontroliše jedan od tih pokazivača, može promeniti sadržaj te memorije, što može izazvati sigurnosne probleme ili im čak omogućiti izvršavanje koda.
|
||||
Sada, kada zatražite novu memoriju (koristeći `malloc`), alokator vam može dati **blok koji je oslobođen dva puta**. To može dovesti do dva različita pokazivača koji upućuju na istu lokaciju u memoriji. Ako napadač kontroliše jedan od tih pokazivača, može promeniti sadržaj te memorije, što može izazvati sigurnosne probleme ili čak omogućiti izvršavanje koda.
|
||||
|
||||
Primer:
|
||||
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;
|
||||
}
|
||||
```
|
||||
U ovom primeru, nakon što se tcache popuni sa nekoliko oslobođenih blokova (7), kod **oslobađa blok `h`, zatim blok `i`, a zatim ponovo `h`, uzrokujući dvostruko oslobođavanje** (poznato i kao duplikat brzog bin-a). Ovo otvara mogućnost dobijanja preklapajućih memorijskih adresa prilikom ponovnog dodeljivanja, što znači da dva ili više pokazivača mogu pokazivati na istu memorijsku lokaciju. Manipulisanje podacima putem jednog pokazivača može zatim uticati na drugi, stvarajući kritičan sigurnosni rizik i potencijal za eksploataciju.
|
||||
U ovom primeru, nakon što se tcache napuni sa nekoliko oslobođenih delova (7), kod **oslobađa deo `h`, zatim deo `i`, a zatim ponovo `h`, uzrokujući duplo oslobađanje** (poznato i kao Fast Bin dup). Ovo otvara mogućnost dobijanja preklapajućih memorijskih adresa prilikom ponovnog alociranja, što znači da dva ili više pokazivača mogu ukazivati na istu memorijsku lokaciju. Manipulacija podacima kroz jedan pokazivač može zatim uticati na drugi, stvarajući kritičan bezbednosni rizik i potencijal za eksploataciju.
|
||||
|
||||
Izvršavajući to, primetite kako su **`i1` i `i2` dobili istu adresu**:
|
||||
Izvršavajući to, obratite pažnju na to kako **`i1` i `i2` imaju istu adresu**:
|
||||
|
||||
<pre><code>Početne alokacije:
|
||||
a: 0xaaab0f0c22a0
|
||||
|
@ -107,7 +107,7 @@ f: 0xaaab0f0c2340
|
|||
g: 0xaaab0f0c2360
|
||||
h: 0xaaab0f0c2380
|
||||
i: 0xaaab0f0c23a0
|
||||
Nakon ponovnih dodela:
|
||||
Nakon ponovnih alokacija:
|
||||
a1: 0xaaab0f0c2360
|
||||
b1: 0xaaab0f0c2340
|
||||
c1: 0xaaab0f0c2320
|
||||
|
@ -123,34 +123,34 @@ h1: 0xaaab0f0c2380
|
|||
## Primeri
|
||||
|
||||
* [**Dragon Army. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/dragon-army/)
|
||||
* Možemo alocirati samo blokove veličine Fast-Bin, osim za veličinu `0x70`, što sprečava uobičajeno prepisivanje `__malloc_hook`.
|
||||
* Umesto toga, koristimo PIE adrese koje počinju sa `0x56` kao cilj za Fast Bin dup (1/2 šanse).
|
||||
* Jedno mesto gde se čuvaju PIE adrese je u `main_arena`, koja je unutar Glibc-a i blizu `__malloc_hook`.
|
||||
* Ciljamo određeno odstupanje `main_arena` da alociramo blok tamo i nastavimo sa alociranjem blokova dok ne stignemo do `__malloc_hook` kako bismo dobili izvršenje koda.
|
||||
* Možemo alocirati samo delove veličine Fast-Bin osim za veličinu `0x70`, što sprečava uobičajeno prepisivanje `__malloc_hook`.
|
||||
* Umesto toga, koristimo PIE adrese koje počinju sa `0x56` kao cilj za Fast Bin dup (1/2 šansa).
|
||||
* Jedno mesto gde se čuvaju PIE adrese je u `main_arena`, koja se nalazi unutar Glibc i blizu `__malloc_hook`.
|
||||
* Ciljamo specifičan ofset `main_arena` da bismo alocirali deo tamo i nastavljamo sa alokacijom delova dok ne dođemo do `__malloc_hook` da bismo dobili izvršenje koda.
|
||||
* [**zero_to_hero. PicoCTF**](https://7rocky.github.io/en/ctf/picoctf/binary-exploitation/zero_to_hero/)
|
||||
* Koristeći Tcache binove i prelivanje nulama, možemo postići situaciju dvostrukog oslobođavanja:
|
||||
* Alociramo tri bloka veličine `0x110` (`A`, `B`, `C`)
|
||||
* Koristeći Tcache kante i prelivanje null-bajta, možemo postići situaciju duplog oslobađanja:
|
||||
* Alociramo tri dela veličine `0x110` (`A`, `B`, `C`)
|
||||
* Oslobađamo `B`
|
||||
* Oslobađamo `A` i ponovo alociramo da bismo koristili prelivanje nulama
|
||||
* Sada je veličina polja `B` `0x100`, umesto `0x111`, tako da ga možemo ponovo osloboditi
|
||||
* Imamo jedan Tcache-bin veličine `0x110` i jedan veličine `0x100` koji pokazuju na istu adresu. Dakle, imamo dvostruko oslobođavanje.
|
||||
* Iskorišćavamo dvostruko oslobođavanje koristeći [Tcache trovanje](tcache-bin-attack.md)
|
||||
* Oslobađamo `A` i ponovo alociramo da bismo iskoristili prelivanje null-bajta
|
||||
* Sada je veličina `B`-ovog polja `0x100`, umesto `0x111`, tako da ga možemo ponovo osloboditi
|
||||
* Imamo jednu Tcache-kantu veličine `0x110` i jednu veličine `0x100` koje ukazuju na istu adresu. Tako da imamo duplo oslobađanje.
|
||||
* Iskorišćavamo duplo oslobađanje koristeći [Tcache poisoning](tcache-bin-attack.md)
|
||||
|
||||
## Reference
|
||||
|
||||
* [https://heap-exploitation.dhavalkapil.com/attacks/double\_free](https://heap-exploitation.dhavalkapil.com/attacks/double\_free)
|
||||
|
||||
{% hint style="success" %}
|
||||
Naučite i vežbajte hakovanje AWS-a:<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">\
|
||||
Naučite i vežbajte hakovanje GCP-a: <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)
|
||||
Učite i vežbajte 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">\
|
||||
Učite i vežbajte 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>Podržite HackTricks</summary>
|
||||
|
||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili **telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
Loading…
Reference in a new issue