Ret2lib
Maelezo Msingi
Kiini cha Ret2Libc ni kurekebisha mtiririko wa utekelezaji wa programu yenye kasoro kwa kazi ndani ya maktaba iliyoshirikiwa (k.m., system, execve, strcpy) badala ya kutekeleza shellcode iliyotolewa na muhusika kwenye stakabadilishi. Muhusika hupanga mzigo wa data ambao unabadilisha anwani ya kurudi kwenye stakabadilishi ili ielekeze kwenye kazi ya maktaba inayotakiwa, huku pia akifanya mipango kwa ajili ya hoja zozote muhimu kuwekwa sawa kulingana na mkataba wa wito.
Hatua za Mfano (zilizorahisishwa)
Pata anwani ya kazi ya kuita (k.m., system) na amri ya kuita (k.m., /bin/sh)
Unda mnyororo wa ROP ili kupitisha hoja ya kwanza ikielekeza kwenye mnyororo wa amri na mtiririko wa utekelezaji kwa kazi
Kutafuta anwani
Kudhani kwamba
libc
iliyotumiwa ni ile kutoka kwenye mashine ya sasa unaweza kupata mahali itakapopakiwa kumbukani na:
Ikiwa unataka kujua ikiwa ASLR inabadilisha anwani ya libc unaweza kufanya hivi:
Kujua libc iliyotumiwa pia inawezekana kupata kisawe cha kazi ya
system
kwa:
Kujua libc iliyotumiwa pia inawezekana kupata mbali hadi kwa kazi ya string
/bin/sh
na:
Kutumia gdb-peda / GEF
Kwa kujua libc iliyotumika, Pia ni rahisi kutumia Peda au GEF kupata anwani ya kazi ya system, ya kazi ya exit na ya string /bin/sh
:
Kutumia /proc/<PID>/maps
Ikiwa mchakato unazalisha watoto kila wakati unapozungumza naye (mtandao wa seva) jaribu kusoma faili hiyo (labda utahitaji kuwa na ruhusa ya mizizi).
Hapa unaweza kupata mahali hasa ambapo libc imepakia ndani ya mchakato na mahali ambapo itapakia kwa kila mtoto wa mchakato.
Katika kesi hii imepakia katika 0xb75dc000 (Hii itakuwa anwani ya msingi ya libc)
Libc isiyojulikana
Inaweza kuwa inawezekana kwamba hujui libc ambayo binary inapakia (kwa sababu inaweza kuwa mahali ambapo huna ufikiaji wowote). Katika kesi hiyo unaweza kutumia udhaifu wa kuvuja anwani na kupata ni libc ipi inayotumiwa:
Leaking libc address with ROPNa unaweza kupata kiolezo cha pwntools kwa hili katika:
Leaking libc - templateJua libc na 2 offsets
Angalia ukurasa https://libc.blukat.me/ na tumia anwani kadhaa za kazi ndani ya libc kugundua toleo lililotumiwa.
Kupitisha ASLR katika biti 32
Mashambulizi haya ya kufanya nguvu ni yenye manufaa kwa mifumo ya biti 32 tu.
Ikiwa shambulio ni la ndani, unaweza kujaribu kufanya nguvu ya anwani ya msingi ya libc (yenye manufaa kwa mifumo ya biti 32):
Kama unashambulia seva ya mbali, unaweza kujaribu kubaini kwa nguvu anwani ya kazi ya
libc
yausleep
, ukipeleka kama hoja 10 (kwa mfano). Ikiwa kwa wakati fulani seva inachukua sekunde 10 zaidi kujibu, umepata anwani ya kazi hii.
Gadget Moja
Tekeleza kabati kwa kuruka kwa anwani moja maalum katika libc:
One GadgetMfano wa Msimbo wa x86 Ret2lib
Katika mfano huu, ASLR ya kubaini kwa nguvu imejumuishwa katika msimbo na faili ya binary inayoweza kudhurika iko kwenye seva ya mbali:
Mfano wa Msimbo wa x64 Ret2lib
Angalia mfano kutoka:
ROP - Return Oriented ProgramingMfano wa ARM64 Ret2lib
Katika kesi ya ARM64, maagizo ya ret
yanaruka mahali ambapo usajili wa x30 unalinganisha na sio mahali ambapo usajili wa steki unalinganisha. Kwa hivyo ni kidogo ngumu zaidi.
Pia katika ARM64 maagizo hufanya kile ambacho maagizo yanafanya (siwezi kuruka katikati ya maagizo na kuyageuza kuwa mengine).
Angalia mfano kutoka:
Ret2lib + Printf leak - arm64Ret-into-printf (au puts)
Hii inaruhusu kuvuja kwa habari kutoka kwa mchakato kwa kuita printf
/puts
na baadhi ya data maalum iliyowekwa kama hoja. Kwa mfano kuweka anwani ya puts
katika GOT katika utekelezaji wa puts
kutavuja anwani ya puts
kwenye kumbukumbu.
Ret2printf
Hii kimsingi inamaanisha kutumia Ret2lib kuiweka katika udhaifu wa herufi za muundo wa printf
kwa kutumia ret2lib
kuita printf na thamani za kutumia (inaonekana haina maana lakini inawezekana):
Mifano Mingine & Marejeo
Ret2lib, ikitoa uvujaji wa anwani ya kazi katika libc, kutumia kifaa cha moja
Biti 64, ASLR imewezeshwa lakini hakuna PIE, hatua ya kwanza ni kujaza kujaza hadi baiti 0x00 ya canary kisha kuita puts na kuvuja. Kwa canary, kifaa cha ROP kinajengwa kuita puts kuvuja anwani ya puts kutoka GOT na kifaa cha ROP kuita
system('/bin/sh')
Biti 64, ASLR imewezeshwa, hakuna canary, kujaza steki katika kazi kuu kutoka kwa kazi ya mtoto. Kifaa cha ROP kuita puts kuvuja anwani ya puts kutoka GOT na kisha kuita kifaa cha moja.
Biti 64, hakuna PIE, hakuna canary, hakuna relro, nx. Inatumia kazi ya kuandika kuvuja anwani ya kuandika (libc) na kuita kifaa cha moja.
Inatumia herufi za muundo kuvuja kwa canary kutoka kwa steki na kujaza kijaza kufikia mfumo (iko kwenye GOT) na anwani ya
/bin/sh
.Biti 32, hakuna relro, hakuna canary, nx, pie. Kutumia indexing mbaya kuvuja anwani za libc na heap kutoka kwa steki. Kutumia kujaza kijaza kufanya ret2lib kuita
system('/bin/sh')
(anwani ya heap inahitajika kuvuka ukaguzi).
Last updated