Ret2lib
Last updated
Last updated
Jifunze na zoezi la AWS Hacking:Mafunzo ya HackTricks AWS Red Team Expert (ARTE) Jifunze na zoezi la GCP Hacking: Mafunzo ya HackTricks GCP Red Team Expert (GRTE)
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.
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
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:
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
:
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)
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 - templateAngalia ukurasa https://libc.blukat.me/ na tumia anwani kadhaa za kazi ndani ya libc kugundua toleo lililotumiwa.
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
ya usleep
, ukipeleka kama hoja 10 (kwa mfano). Ikiwa kwa wakati fulani seva inachukua sekunde 10 zaidi kujibu, umepata anwani ya kazi hii.
Tekeleza kabati kwa kuruka kwa anwani moja maalum katika libc:
One GadgetKatika mfano huu, ASLR ya kubaini kwa nguvu imejumuishwa katika msimbo na faili ya binary inayoweza kudhurika iko kwenye seva ya mbali:
Angalia mfano kutoka:
ROP - Return Oriented ProgramingKatika 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 - arm64Hii 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.
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):
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).