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)
Ikiwa unachomoa block ya kumbukumbu zaidi ya mara moja, inaweza kuharibu data ya allocator na kufungua mlango wa mashambulizi. Hapa kuna jinsi inavyotokea: unapochomoa block ya kumbukumbu, inarudi kwenye orodha ya vipande vya bure (mfano "fast bin"). Ikiwa unachomoa block ile ile mara mbili mfululizo, allocator inagundua hili na kutupa kosa. Lakini ikiwa unachomoa kipande kingine katikati, ukaguzi wa double-free unakwepwa, na kusababisha uharibifu.
Sasa, unapofanya ombi la kumbukumbu mpya (ukitumia malloc
), allocator inaweza kukupa block ambayo imeshachomolewa mara mbili. Hii inaweza kusababisha viashiria viwili tofauti kuashiria eneo moja la kumbukumbu. Ikiwa mshambuliaji anadhibiti mmoja wa viashiria hivyo, wanaweza kubadilisha maudhui ya kumbukumbu hiyo, ambayo inaweza kusababisha matatizo ya usalama au hata kuwapa uwezo wa kutekeleza msimbo.
Example:
Katika mfano huu, baada ya kujaza tcache na vipande kadhaa vilivyofutwa (7), msimbo unafuta kipande h
, kisha kipande i
, na kisha h
tena, na kusababisha double free (pia inajulikana kama Fast Bin dup). Hii inafungua uwezekano wa kupokea anwani za kumbukumbu zinazovuka wakati wa reallocating, ikimaanisha viashiria viwili au zaidi vinaweza kuelekeza kwenye eneo moja la kumbukumbu. Kupanua data kupitia kiashiria kimoja kunaweza kuathiri kingine, na kuunda hatari kubwa ya usalama na uwezekano wa unyakuzi.
Ukitekeleza, angalia jinsi i1
na i2
zilipata anwani sawa:
Tunaweza tu kugawa vipande vya ukubwa wa Fast-Bin isipokuwa kwa ukubwa 0x70
, ambayo inazuia kawaida __malloc_hook
kuandikwa tena.
Badala yake, tunatumia anwani za PIE ambazo huanza na 0x56
kama lengo la Fast Bin dup (1/2 nafasi).
Mahali moja ambapo anwani za PIE zinahifadhiwa ni katika main_arena
, ambayo iko ndani ya Glibc na karibu na __malloc_hook
Tunalenga offset maalum ya main_arena
ili kugawa kipande huko na kuendelea kugawa vipande hadi kufikia __malloc_hook
ili kupata utekelezaji wa msimbo.
Kwa kutumia Tcache bins na overflow ya null-byte, tunaweza kufikia hali ya double-free:
Tunagawa vipande vitatu vya ukubwa 0x110
(A
, B
, C
)
Tunafuta B
Tunafuta A
na kugawa tena ili kutumia overflow ya null-byte
Sasa uwanja wa ukubwa wa B
ni 0x100
, badala ya 0x111
, hivyo tunaweza kuifuta tena
Tuna Tcache-bin moja ya ukubwa 0x110
na moja ya ukubwa 0x100
ambazo zinaelekeza kwenye anwani sawa. Hivyo tuna double free.
Tunatumia double free kwa kutumia Tcache poisoning
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)