WWW2Exec - __malloc_hook & __free_hook
Last updated
Last updated
Učite i vežbajte AWS Hacking: Učite i vežbajte GCP Hacking:
Kao što možete videti na , 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:
Napomena da su hook-ovi onemogućeni za GLIBC >= 2.34. Postoje druge tehnike koje se mogu koristiti na modernim verzijama GLIBC. Vidi: .
Ovo je zloupotrebljeno u jednom od primera sa stranice koja zloupotrebljava napad na brzi bin nakon što je zloupotrebljen napad na neusortirani bin:
Moguće je pronaći adresu __free_hook
ako binarni fajl ima simbole sa sledećom komandom:
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.
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čite i vežbajte AWS Hacking: Učite i vežbajte GCP Hacking:
Proverite !
Pridružite se 💬 ili ili pratite nas na Twitter-u 🐦 .
Podelite hakerske trikove slanjem PR-ova na i github repozitorijume.