5.7 KiB
WWW2Exec - __malloc_hook & __free_hook
{% hint style="success" %}
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)
unga mkono HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za kuvamia kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud github repos.
Malloc Hook
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:
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %} one-gadget.md {% endcontent-ref %}
{% hint style="warning" %} Tafadhali 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. {% endhint %}
Free Hook
Hii ilidhulumiwa katika moja ya mfano kutoka kwenye ukurasa ukidhulumu shambulio la rundo la haraka baada ya kudhulumiwa shambulio la rundo lisilo na mpangilio:
{% content-ref url="../libc-heap/unsorted-bin-attack.md" %} unsorted-bin-attack.md {% endcontent-ref %}
Inawezekana kupata anwani ya __free_hook
ikiwa binary ina alama na amri ifuatayo:
gef➤ p &__free_hook
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:
gef➤ x/20i free
0xf75dedc0 <free>: push ebx
0xf75dedc1 <free+1>: call 0xf768f625
0xf75dedc6 <free+6>: add ebx,0x14323a
0xf75dedcc <free+12>: sub esp,0x8
0xf75dedcf <free+15>: mov eax,DWORD PTR [ebx-0x98]
0xf75dedd5 <free+21>: mov ecx,DWORD PTR [esp+0x10]
0xf75dedd9 <free+25>: mov eax,DWORD PTR [eax]--- VUNJA HAPA
0xf75deddb <free+27>: test eax,eax ;<
0xf75deddd <free+29>: jne 0xf75dee50 <free+144>
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
: -
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 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 wa0xfc*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 wa0x1f8
kinajengwa ili kupata kipande cha bendi ya haraka katika__free_hook
ambayo inabadilishwa na anwani ya kazi yasystem
. - 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.