WWW2Exec - __malloc_hook & __free_hook
Reading time: 4 minutes
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Malloc Hook
Soos jy kan sien op die Official GNU site, is die veranderlike __malloc_hook
'n pointeur wat na die adres van 'n funksie wat aangeroep sal word wanneer malloc()
aangeroep word gestoor in die dataseksie van die libc biblioteek. Daarom, as hierdie adres oorgeskryf word met 'n One Gadget byvoorbeeld en malloc
aangeroep word, sal die One Gadget aangeroep word.
Om malloc aan te roep, is dit moontlik om te wag vir die program om dit aan te roep of deur printf("%10000$c")
aan te roep wat te veel bytes toewys, wat maak dat libc
malloc aanroep om dit in die heap toe te wys.
Meer inligting oor One Gadget in:
warning
Let daarop dat hooks deaktiveer is vir GLIBC >= 2.34. Daar is ander tegnieke wat op moderne GLIBC weergawes gebruik kan word. Sien: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.
Free Hook
Dit is misbruik in een van die voorbeelde op die bladsy wat 'n vinnige bin-aanval misbruik het nadat 'n ongesorteerde bin-aanval misbruik is:
Dit is moontlik om die adres van __free_hook
te vind as die binêre simbole het met die volgende opdrag:
gef➤ p &__free_hook
In die pos kan jy 'n stap-vir-stap gids vind oor hoe om die adres van die free hook sonder simbole te lokaliseer. As opsomming, in die free funksie:
gef➤ x/20i free
0xf75dedc0 : push ebx
0xf75dedc1 : call 0xf768f625
0xf75dedc6 : add ebx,0x14323a
0xf75dedcc : sub esp,0x8
0xf75dedcf : mov eax,DWORD PTR [ebx-0x98]
0xf75dedd5 : mov ecx,DWORD PTR [esp+0x10]
0xf75dedd9 : mov eax,DWORD PTR [eax]--- BREAK HERE
0xf75deddb : test eax,eax ;<
0xf75deddd : jne 0xf75dee50
In die genoemde breekpunt in die vorige kode sal die adres van die free hook in $eax
geleë wees.
Nou word 'n fast bin aanval uitgevoer:
- Eerstens word daar ontdek dat dit moontlik is om met fast chunks van grootte 200 in die
__free_hook
ligging te werk: 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
- As ons daarin slaag om 'n fast chunk van grootte 0x200 in hierdie ligging te kry, sal dit moontlik wees om 'n funksie-aanwyser te oorskry wat uitgevoer sal word.
- Hiervoor word 'n nuwe chunk van grootte
0xfc
geskep en die saamgevoegde funksie word twee keer met daardie aanwyser aangeroep, sodat ons 'n aanwyser na 'n vrygestelde chunk van grootte0xfc*2 = 0x1f8
in die fast bin verkry. - Dan word die edit funksie in hierdie chunk aangeroep om die
fd
adres van hierdie fast bin te wys na die vorige__free_hook
funksie. - Dan word 'n chunk van grootte
0x1f8
geskep om die vorige nuttelose chunk uit die fast bin te verkry, sodat 'n ander chunk van grootte0x1f8
geskep word om 'n fast bin chunk in die__free_hook
te kry wat oorgeskryf word met die adres van diesystem
funksie. - En uiteindelik word 'n chunk wat die string
/bin/sh\x00
bevat, vrygestel deur die delete funksie aan te roep, wat die__free_hook
funksie aktiveer wat na system met/bin/sh\x00
as parameter wys.
References
- 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.
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.