6.8 KiB
WWW2Exec - __malloc_hook & __free_hook
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite svoju kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRIJAVU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte Porodicu PEASS, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitteru 🐦 @hacktricks_live.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Malloc Hook
Kako možete videti na zvaničnom GNU sajtu, promenljiva __malloc_hook
je pokazivač koji pokazuje na adresu funkcije koja će biti pozvana svaki put kada se pozove malloc()
koja je smeštena u sekciji podataka libc biblioteke. Stoga, ako se ova adresa prepiše sa One Gadget-om na primer i pozove se malloc
, One Gadget će biti pozvan.
Da bi se pozvao malloc moguće je sačekati da program to pozove ili pozivanjem printf("%10000$c")
koji alocira previše bajtova čime libc
poziva malloc da ih alocira na hipu.
Više informacija o One Gadget-u:
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %} one-gadget.md {% endcontent-ref %}
{% hint style="warning" %} Imajte na umu da su hook-ovi onemogućeni za GLIBC >= 2.34. Postoje druge tehnike koje se mogu koristiti na modernim verzijama GLIBC-a. Pogledajte: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md. {% endhint %}
Free Hook
Ovo je zloupotrebljeno u jednom od primera sa stranice zloupotrebe brze binarne napade nakon što je zloupotrebljen napad na nesortiranu binu:
{% content-ref url="../heap/unsorted-bin-attack.md" %} unsorted-bin-attack.md {% endcontent-ref %}
Dobar trik (od ovde) za pronalaženje lokacije free hook-a ako binarni fajl ima simbole je uraditi nešto slično:
gef➤ set __free_hook = 0xfacade
gef➤ search-pattern 0xfacade
U istom postu možete pronaći detaljan vodič korak po korak o tome kako pronaći adresu slobodnog kuka bez simbola. Ukratko, u funkciji free:
gef➤ x/20i free
0xf75dedc0 <free>: push ebx
0xf75dedc1 <free+1>: call 0xf768f625
0xf75dedc6 <free+6>: add ebx,0x14323a
0xf75dedcc <free+12>: sub esp,0x8
0xf75dedcf <free+15>: mov eax,DWORD PTR [ebx-0x98]
0xf75dedd5 <free+21>: mov ecx,DWORD PTR [esp+0x10]
0xf75dedd9 <free+25>: mov eax,DWORD PTR [eax]
0xf75deddb <free+27>: test eax,eax ;<--- PREKID OVDE
0xf75deddd <free+29>: jne 0xf75dee50 <free+144>
U pomenutom prekidu u prethodnom kodu, u $eax
će se nalaziti adresa slobodnog kuka.
Sada se izvodi brzi napad na bin:
- Prvo je otkriveno da je moguće raditi sa brzim delovima veličine 200 na lokaciji
__free_hook
: -
gef➤ p &__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 deo veličine 0x200 na ovoj lokaciji, biće moguće prepisati pokazivač funkcije koja će biti izvršena
- Za to, kreira se novi deo veličine
0xfc
i poziva se spojena funkcija sa tim pokazivačem dva puta, na taj način dobijamo pokazivač na oslobođeni deo veličine0xfc*2 = 0x1f8
u brzom binu. - Zatim se poziva funkcija za uređivanje u ovom delu kako bi se izmenila adresa
fd
ovog brzog bina da pokazuje na prethodnu funkciju__free_hook
. - Zatim se kreira deo veličine
0x1f8
kako bi se povukao prethodno beskoristan deo iz brzog bina, tako da se kreira još jedan deo veličine0x1f8
kako bi se dobio brzi bin deo na lokaciji__free_hook
koji je prepisan adresom funkcijesystem
. - Na kraju se oslobođuje deo koji sadrži string
/bin/sh\x00
pozivom funkcije brisanja, pokreće se funkcija__free_hook
koja pokazuje na sistem sa/bin/sh\x00
kao parametrom.
Reference
- https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook
- https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite svoju kompaniju reklamiranu na HackTricks-u ili da preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRETPLATU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitteru 🐦 @hacktricks_live.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.