Ret2lib
Maelezo Msingi
Esensi ya 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 mkalimani kwenye rundo. Mshambuliaji hupanga mzigo wa data ambao hubadilisha anwani ya kurudi kwenye rundo ili ielekeze kwenye kazi ya maktaba inayotakiwa, huku pia akifanya mipango ya kuweka vigezo vyovyote vinavyohitajika kulingana na mkataba wa kuita.
Hatua za Mfano (zilizorahisishwa)
Pata anwani ya kazi ya kupiga simu (k.m. system) na amri ya kupiga simu (k.m. /bin/sh)
Unda mnyororo wa ROP ili kupitisha hoja ya kwanza ikionyesha kwenye mfuatano wa amri na mtiririko wa utekelezaji kwa kazi
Kupata anwani
Kudhani kwamba
libc
inayotumiwa ni ile kutoka kwenye mashine ya sasa unaweza kupata mahali itakapoloadiwa kumbukani na:
Ikiwa unataka kujua ikiwa ASLR inabadilisha anwani ya libc unaweza kufanya:
Kwa kujua libc iliyotumiwa pia ni rahisi kupata kisawe cha kazi ya
system
kwa:
Kujua libc iliyotumiwa pia ni rahisi kupata kisawe cha kazi ya string
/bin/sh
na:
Kutumia gdb-peda / GEF
Kwa kujua libc iliyotumiwa, 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 itakapopakiwa 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:
pageLeaking libc address with ROPNa unaweza kupata kiolezo cha pwntools kwa hili katika:
pageLeaking libc - templateJua libc na 2 offsets
Angalia ukurasa https://libc.blukat.me/ na tumia anwani kadhaa za kazi ndani ya libc ili kugundua toleo lililotumiwa.
Kupita 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
usleep
, ukitoa 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 tu katika libc:
pageOne GadgetMfano wa Msimbo wa x86 Ret2lib
Katika mfano huu, ASLR brute-force imejumuishwa katika msimbo na faili ya binary yenye kasoro iko kwenye seva ya mbali:
Mfano wa Msimbo wa x64 Ret2lib
Angalia mfano kutoka:
pageROP - Return Oriented ProgramingMfano wa ARM64 Ret2lib
Katika kesi ya ARM64, maagizo ya ret
hupanda mahali ambapo usajili wa x30 unaelekeza na sio mahali ambapo usajili wa stakini unaelekeza. Kwa hivyo ni kidogo ngumu zaidi.
Pia katika ARM64 maagizo hufanya kile ambacho maagizo yanafanya (haipatikani kuruka katikati ya maagizo na kubadilisha kuwa mengine mapya).
Angalia mfano kutoka:
pageRet2lib + 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 kubadilisha kuwa printf
format strings vulnerability 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 stakini katika main 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 string ya muundo kuvuja kwa canary kutoka kwa stakini 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 stakini. Kutumia kujaza kijaza kufanya ret2lib kuita
system('/bin/sh')
(anwani ya heap inahitajika kuzidi ukaguzi).
Last updated