WWW2Exec - __malloc_hook & __free_hook
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Soos jy kan Amptelike GNU webwerf sien, is die veranderlike __malloc_hook
'n wysser 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 libc
dwing om malloc aan te roep om dit in die heap toe te wys.
Meer inligting oor One Gadget in:
One GadgetLet 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.
Dit is misbruik in een van die voorbeelde van die bladsy wat 'n vinnige bin aanval misbruik na 'n onsorteerde bin aanval misbruik is:
Unsorted Bin AttackDit is moontlik om die adres van __free_hook
te vind as die binêre simbole het met die volgende opdrag:
In die pos kan jy 'n stap-vir-stap gids vind oor hoe om die adres van die free hook te lokaliseer sonder simbole. As opsomming, in die free funksie:
In die genoemde breek in die vorige kode sal die adres van die free hook in $eax
geleë wees.
Nou word 'n fast bin aanval uitgevoer:
Eerstens word ontdek dat dit moontlik is om met vinnige stukke van grootte 200 in die __free_hook
ligging te werk:
$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 vinnige stuk van grootte 0x200 in hierdie ligging te kry, sal dit moontlik wees om 'n funksie-aanwyser te oorskryf wat uitgevoer sal word.
Hiervoor word 'n nuwe stuk van grootte 0xfc
geskep en die saamgevoegde funksie word twee keer met daardie aanwyser aangeroep, op hierdie manier verkry ons 'n aanwyser na 'n vrygestelde stuk van grootte 0xfc*2 = 0x1f8
in die vinnige bin.
Dan word die redigeerfunksie in hierdie stuk aangeroep om die fd
adres van hierdie vinnige bin te wys na die vorige __free_hook
funksie.
Dan word 'n stuk van grootte 0x1f8
geskep om die vorige nuttelose stuk uit die vinnige bin te verkry, sodat 'n ander stuk van grootte 0x1f8
geskep kan word om 'n vinnige bin stuk in die __free_hook
te kry wat oorgeskryf word met die adres van die system
funksie.
En uiteindelik word 'n stuk wat die string /bin/sh\x00
bevat, vrygestel deur die verwyderingsfunksie aan te roep, wat die __free_hook
funksie aktiveer wat na system met /bin/sh\x00
as parameter wys.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)