WWW2Exec - __malloc_hook & __free_hook
Last updated
Last updated
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)
Kao što možete videti na Official GNU site, promenljiva __malloc_hook
je pokazivač koji pokazuje na adresu funkcije koja će biti pozvana svaki put kada se pozove malloc()
smeštena u sekciji podataka libc biblioteke. Stoga, ako se ova adresa prepiše sa One Gadget, na primer, i pozove se malloc
, One Gadget će biti pozvan.
Da biste pozvali malloc, moguće je čekati da program to pozove ili pozivom printf("%10000$c")
koji alocira previše bajtova, čineći da libc
poziva malloc da ih alocira na heap-u.
Više informacija o One Gadget-u u:
One GadgetNapomena da su hook-ovi onemogućeni za GLIBC >= 2.34. Postoje druge tehnike koje se mogu koristiti na modernim verzijama GLIBC. Vidi: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.
Ovo je zloupotrebljeno u jednom od primera sa stranice koja zloupotrebljava napad na brzi bin nakon što je zloupotrebljen napad na neusortirani bin:
Unsorted Bin AttackMoguće je pronaći adresu __free_hook
ako binarni fajl ima simbole sa sledećom komandom:
U postu možete pronaći vodič korak po korak o tome kako locirati adresu slobodnog hook-a bez simbola. Kao sažetak, u funkciji free:
U pomenutom prekidu u prethodnom kodu u $eax
će se nalaziti adresa slobodnog hook-a.
Sada se vrši napad na brze binove:
Prvo je otkriveno da je moguće raditi sa brzim chunk-ovima veličine 200 na lokaciji __free_hook
:
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook> gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200
0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6076f <list_all_lock+15>: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
Ako uspemo da dobijemo brzi chunk veličine 0x200 na ovoj lokaciji, biće moguće prepisati pokazivač funkcije koja će biti izvršena
Za to, kreira se novi chunk veličine 0xfc
i spojena funkcija se poziva sa tim pokazivačem dva puta, na ovaj način dobijamo pokazivač na oslobođeni chunk veličine 0xfc*2 = 0x1f8
u brzom binu.
Zatim se poziva funkcija za uređivanje u ovom chunk-u da modifikuje adresu fd
ovog brzog bina da pokazuje na prethodnu funkciju __free_hook
.
Zatim se kreira chunk veličine 0x1f8
da se povrati iz brzog bina prethodni beskorisni chunk tako da se kreira još jedan chunk veličine 0x1f8
da se dobije brzi bin chunk u __free_hook
koji se prepisuje sa adresom funkcije system
.
I konačno, chunk koji sadrži string /bin/sh\x00
se oslobađa pozivom funkcije za brisanje, aktivirajući funkciju __free_hook
koja pokazuje na sistem sa /bin/sh\x00
kao parametrom.
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)