WWW2Exec - __malloc_hook & __free_hook

Reading time: 4 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Malloc Hook

Kama unavyojua Official GNU site, variable __malloc_hook ni pointer inayotaja anwani ya kazi itakayoitwa kila wakati malloc() inapoitwa iliyohifadhiwa katika sehemu ya data ya maktaba ya libc. Hivyo, ikiwa anwani hii itabadilishwa na One Gadget kwa mfano na malloc inaitwa, One Gadget itaitwa.

Ili kuita malloc inawezekana kusubiri programu iite au kwa kuita printf("%10000$c") ambayo inapata bytes nyingi sana ikifanya libc kuita malloc ili kuzigawa kwenye heap.

Maelezo zaidi kuhusu One Gadget katika:

{{#ref}} ../rop-return-oriented-programing/ret2lib/one-gadget.md {{#endref}}

warning

Kumbuka kwamba hooks zime zimemalizwa kwa GLIBC >= 2.34. Kuna mbinu nyingine ambazo zinaweza kutumika kwenye toleo za kisasa za GLIBC. Tazama: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.

Free Hook

Hii ilitumiwa vibaya katika moja ya mifano kutoka kwenye ukurasa ikitumia shambulio la fast bin baada ya kutumia shambulio la unsorted bin:

{{#ref}} ../libc-heap/unsorted-bin-attack.md {{#endref}}

Inawezekana kupata anwani ya __free_hook ikiwa binary ina alama kwa kutumia amri ifuatayo:

bash
gef➤  p &__free_hook

Katika posti unaweza kupata mwongozo wa hatua kwa hatua juu ya jinsi ya kupata anwani ya free hook bila alama. Kama muhtasari, katika kazi ya free:

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 

Katika kuvunjika kunakotajwa katika msimbo uliotangulia, katika $eax kutakuwa na anwani ya free hook.

Sasa shambulio la fast bin linafanywa:

  • Kwanza kabisa inagundulika kwamba inawezekana kufanya kazi na chunks za ukubwa 200 katika eneo la __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

  • Ikiwa tutafanikiwa kupata chunk ya haraka ya ukubwa 0x200 katika eneo hili, itakuwa inawezekana kubadilisha kiashiria cha kazi ambacho kitatekelezwa
  • Kwa hili, chunk mpya ya ukubwa 0xfc inaundwa na kazi iliyounganishwa inaitwa kwa kiashiria hicho mara mbili, kwa njia hii tunapata kiashiria kwa chunk iliyofutwa ya ukubwa 0xfc*2 = 0x1f8 katika fast bin.
  • Kisha, kazi ya kuhariri inaitwa katika chunk hii kubadilisha anwani ya fd ya fast bin hii ili kuelekeza kwenye kazi ya awali ya __free_hook.
  • Kisha, chunk yenye ukubwa 0x1f8 inaundwa ili kupata kutoka kwa fast bin chunk isiyo na matumizi ya awali ili chunk nyingine ya ukubwa 0x1f8 iundwe ili kupata chunk ya fast bin katika __free_hook ambayo imeandikwa tena na anwani ya kazi ya system.
  • Na hatimaye, chunk inayoshikilia mfuatano wa /bin/sh\x00 inafutwa kwa kuita kazi ya kufuta, ikichochea kazi ya __free_hook ambayo inaelekeza kwa system na /bin/sh\x00 kama parameter.

Marejeleo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks