WWW2Exec - __malloc_hook & __free_hook
Last updated
Last updated
Leer & oefen AWS Hack: HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hack: HackTricks Opleiding GCP Red Team Expert (GRTE)
Soos jy kan sien op die Offisiële GNU-webwerf, is die veranderlike __malloc_hook
'n wyser wat wys na die adres van 'n funksie wat geroep sal word wanneer malloc()
geroep word gestoor in die data-afdeling van die libc-biblioteek. Daarom, as hierdie adres oorskryf word met 'n One Gadget byvoorbeeld en malloc
word geroep, sal die One Gadget geroep word.
Om malloc te roep, is dit moontlik om te wag vir die program om dit te roep of deur printf("%10000$c")
te roep wat te veel bytes toewys en libc
dwing om hulle in die heap toe te ken.
Meer inligting oor One Gadget in:
One GadgetLet daarop dat hake uitgeskakel 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 het nadat 'n ongesorteerde bin-aanval misbruik is:
Unsorted Bin AttackDit is moontlik om die adres van __free_hook
te vind as die binêre lêers simbole het met die volgende bevel:
In die pos kan jy 'n stap-vir-stap-gids vind oor hoe om die adres van die vrye haak sonder simbole te vind. As 'n opsomming, in die vrye funksie:
In die genoemde breek in die vorige kode sal die adres van die vrye haak in $eax
geleë wees.
Nou word 'n vinnige bin-aanval uitgevoer:
Eerstens word ontdek dat dit moontlik is om met vinnige stukke van grootte 200 op die __free_hook
-plek 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 op hierdie plek 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 geroep met daardie aanwyser, op hierdie manier verkry ons 'n aanwyser na 'n vrygemaakte stuk van grootte 0xfc*2 = 0x1f8
in die vinnige bin.
Dan word die wysigingsfunksie in hierdie stuk geroep om die fd
-adres van hierdie vinnige bin te wysig om na die vorige __free_hook
-funksie te wys.
Dan word 'n stuk met grootte 0x1f8
geskep om uit die vinnige bin die vorige nuttelose stuk te herwin sodat 'n ander stuk van grootte 0x1f8
geskep kan word om 'n vinnige bin-stuk in die __free_hook
te kry wat oorskryf is met die adres van die system
-funksie.
En uiteindelik word 'n stuk wat die string /bin/sh\x00
bevat, vrygemaak deur die verwyderingsfunksie te roep, wat die __free_hook
-funksie aanroep wat na die stelsel met /bin/sh\x00
as parameter wys.
Leer & oefen AWS-hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)