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

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:

One Gadget

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:

Unsorted Bin Attack

Dit is moontlik om die adres van __free_hook te vind as die binêre simbole het met die volgende opdrag:

bash
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 grootte 0xfc*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 grootte 0x1f8 geskep word om 'n fast bin chunk in die __free_hook te kry wat oorgeskryf word met die adres van die system 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

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