WWW2Exec - __malloc_hook & __free_hook
Last updated
Last updated
Jifunze na zoezi la Kuvamia AWS:Mafunzo ya HackTricks AWS Timu Nyekundu Mtaalam (ARTE) Jifunze na zoezi la Kuvamia GCP: Mafunzo ya HackTricks GCP Timu Nyekundu Mtaalam (GRTE)
Kama unavyoweza Tovuti Rasmi ya GNU, kipengele __malloc_hook
ni kipande kinachoelekeza kwenye anwani ya kazi itakayoitwa wakati wowote malloc()
inaitwa imehifadhiwa kwenye sehemu ya data ya maktaba ya libc. Kwa hivyo, ikiwa anwani hii itabadilishwa na One Gadget kwa mfano na malloc
inaitwa, One Gadget itaitwa.
Kuita malloc inawezekana kusubiri programu iite au kwa kuita printf("%10000$c")
ambayo inaendelea kuchukua nafasi nyingi kufanya libc
iite malloc kuzitenga kwenye rundo.
Maelezo zaidi kuhusu One Gadget katika:
One GadgetTafadhali elewa kwamba vitanzi vime lemazwa kwa GLIBC >= 2.34. Kuna njia nyingine ambazo zinaweza kutumika kwenye toleo za kisasa za GLIBC. Angalia: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.
Hii ilidhulumiwa katika moja ya mfano kutoka kwenye ukurasa ukidhulumu shambulio la rundo la haraka baada ya kudhulumiwa shambulio la rundo lisilo na mpangilio:
Unsorted Bin AttackInawezekana kupata anwani ya __free_hook
ikiwa binary ina alama na amri ifuatayo:
Katika chapisho unaweza kupata mwongozo wa hatua kwa hatua juu ya jinsi ya kutambua anwani ya kitanzi cha bure bila alama. Kwa muhtasari, katika kazi ya bure:
Katika kuvunja iliyotajwa katika msimbo uliopita katika $eax
kutakuwa na anwani ya kitanzi cha bure.
Sasa shambulio la bendi ya haraka linatekelezwa:
Kwanza kabisa inagundulika kuwa ni rahisi kufanya kazi na vipande vya haraka vya ukubwa wa 200 katika eneo la __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 tunaweza kupata kipande cha haraka cha ukubwa wa 0x200 katika eneo hili, itawezekana kubadilisha kidole cha kazi ambacho kitatekelezwa
Kwa hili, kipande kipya cha ukubwa wa 0xfc
kinajengwa na kuitwa kazi iliyochanganywa mara mbili na kidole hicho, njia hii tunapata kidole kwa kipande kilichofutwa cha ukubwa wa 0xfc*2 = 0x1f8
katika bendi ya haraka.
Kisha, kazi ya hariri inaitwa kwenye kipande hiki kurekebisha anwani ya fd
ya bendi hii ya haraka ili ielekee kwenye kazi ya awali ya __free_hook
.
Kisha, kipande cha ukubwa wa 0x1f8
kinajengwa ili kurejesha kutoka kwa bendi ya haraka kipande kisichofaa cha awali hivyo kipande kingine cha ukubwa wa 0x1f8
kinajengwa ili kupata kipande cha bendi ya haraka katika __free_hook
ambayo inabadilishwa na anwani ya kazi ya system
.
Na mwishowe kipande kinachohifadhi string /bin/sh\x00
kinawekwa huru kwa kuita kazi ya kufuta, kuzindua kazi ya __free_hook
ambayo inaelekeza kwa mfumo na /bin/sh\x00
kama parameter.