Double Free
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 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.
Example:
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, obratite pažnju na to kako i1
i i2
imaju istu adresu:
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.
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 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
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)