WWW2Exec - __malloc_hook & __free_hook
Last updated
Last updated
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)
Kama unavyoweza Tovuti rasmi ya GNU, variable __malloc_hook
ni pointer inayotaja anwani ya kazi itakayoitwa kila wakati malloc()
inapoitwa imehifadhiwa katika sehemu ya data ya maktaba ya libc. Hivyo, ikiwa anwani hii itafutwa 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 inachukua bytes nyingi sana na kufanya libc
kuita malloc ili kuzigawa kwenye heap.
Maelezo zaidi kuhusu One Gadget katika:
One GadgetKumbuka kwamba hooks zime zimemwondolewa kwa GLIBC >= 2.34. Kuna mbinu nyingine zinazoweza kutumika kwenye toleo za kisasa za GLIBC. Tazama: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.
Hii ilitumiwa vibaya katika moja ya mifano kutoka kwenye ukurasa ikitumia shambulio la fast bin baada ya kutumia shambulio la unsorted bin:
Unsorted Bin AttackInawezekana kupata anwani ya __free_hook
ikiwa binary ina alama kwa amri ifuatayo:
Katika chapisho unaweza kupata mwongozo wa hatua kwa hatua juu ya jinsi ya kupata anwani ya free hook bila alama. Kwa muhtasari, katika kazi ya free:
Katika kuvunjika kunakotajwa katika msimbo wa awali katika $eax
kutakuwa na anwani ya free hook.
Sasa shambulio la fast bin linafanywa:
Kwanza kabisa inagundulika kuwa inawezekana kufanya kazi na fast chunks za ukubwa 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 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.
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)