Ret2lib
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kiini cha Ret2Libc ni kuelekeza mtiririko wa utekelezaji wa programu iliyo hatarini kwa kazi ndani ya maktaba ya pamoja (e.g., system, execve, strcpy) badala ya kutekeleza shellcode iliyotolewa na mshambuliaji kwenye stack. Mshambuliaji anaunda payload inayobadilisha anwani ya kurudi kwenye stack ili kuelekeza kwenye kazi ya maktaba inayotakiwa, huku pia akipanga kwa ajili ya hoja zozote muhimu kuwekwa sawa kulingana na kanuni ya wito.
Pata anwani ya kazi ya kuita (e.g. system) na amri ya kuita (e.g. /bin/sh)
Tengeneza mnyororo wa ROP ili kupitisha hoja ya kwanza ikielekeza kwenye mfuatano wa amri na mtiririko wa utekelezaji kwa kazi
Ikiwa libc
inayotumika ni ile kutoka kwa mashine ya sasa unaweza kupata ambapo itapakuliwa kwenye kumbukumbu kwa:
Ikiwa unataka kuangalia kama ASLR inabadilisha anwani ya libc unaweza kufanya:
Kujua libc inayotumika pia inawezekana kupata offset ya kazi ya system
kwa:
Kujua libc inayotumika pia inawezekana kupata offset ya string /bin/sh
function kwa:
Kujua libc inayotumika, pia inawezekana kutumia Peda au GEF kupata anwani ya kazi ya system, ya kazi ya exit na ya mfuatano /bin/sh
:
Ikiwa mchakato unaunda watoto kila wakati unapoizungumza nao (seva ya mtandao) jaribu kusoma faili hiyo (labda utahitaji kuwa root).
Hapa unaweza kupata mahali hasa ambapo libc imepakuliwa ndani ya mchakato na mahali itakapopakuliwa kwa kila mtoto wa mchakato.
Katika kesi hii imepakuliwa katika 0xb75dc000 (Hii itakuwa anwani ya msingi ya libc)
Inaweza kuwa inawezekana kwamba hujui libc ambayo binary inapakua (kwa sababu inaweza kuwa kwenye seva ambapo huna ufikiaji wowote). Katika kesi hiyo unaweza kutumia udhaifu huo ili kuvuja anwani kadhaa na kupata libc maktaba inayotumika:
Na unaweza kupata kiolezo cha pwntools kwa hili katika:
Angalia ukurasa https://libc.blukat.me/ na tumia anwani kadhaa za kazi ndani ya libc ili kugundua toleo lililotumika.
Mashambulizi haya ya nguvu ni ya manufaa tu kwa mifumo ya 32bit.
Ikiwa exploit ni ya ndani, unaweza kujaribu kuangamiza anwani ya msingi ya libc (ya manufaa kwa mifumo ya 32bit):
Ikiwa unashambulia seva ya mbali, unaweza kujaribu kuvunjia nguvu anwani ya kazi ya libc
usleep
, ukipitia kama hoja 10 (kwa mfano). Ikiwa katika wakati fulani seva inachukua sekunde 10 zaidi kujibu, umepata anwani ya kazi hii.
Tekeleza shell kwa kuruka tu kwenye anwani moja maalum katika libc:
Katika mfano huu, uvunjaji nguvu wa ASLR umejumuishwa katika msimbo na binary iliyo hatarini iko kwenye seva ya mbali:
Angalia mfano kutoka:
Katika kesi ya ARM64, amri ya ret inaruka mahali ambapo usajili wa x30 unapoelekeza na sio mahali ambapo usajili wa stack unapoelekeza. Hivyo ni ngumu kidogo.
Pia katika ARM64 amri inafanya kile amri inafanya (haiwezekani kuruka katikati ya amri na kuzibadilisha kuwa mpya).
Angalia mfano kutoka:
Hii inaruhusu kuvuja taarifa kutoka kwa mchakato kwa kuita printf
/puts
na data maalum iliyowekwa kama hoja. Kwa mfano, kuweka anwani ya puts
katika GOT ndani ya utekelezaji wa puts
itakuwa kuvuja anwani ya puts
katika kumbukumbu.
Hii kwa msingi inamaanisha kutumia Ret2lib kubadilisha kuwa udhaifu wa muundo wa printf
kwa kutumia ret2lib
kuita printf na thamani za ku exploit (inasikika kama haina maana lakini inawezekana):
Ret2lib, ikitoa kuvuja kwa anwani ya kazi katika libc, kwa kutumia gadget moja
64 bit, ASLR imewezeshwa lakini hakuna PIE, hatua ya kwanza ni kujaza overflow hadi byte 0x00 ya canary ili kisha kuita puts na kuvuja. Kwa canary gadget ya ROP inaundwa kuita puts kuvuja anwani ya puts kutoka GOT na gadget ya ROP kuita system('/bin/sh')
64 bits, ASLR imewezeshwa, hakuna canary, overflow ya stack katika main kutoka kwa kazi ya mtoto. Gadget ya ROP kuita puts kuvuja anwani ya puts kutoka GOT na kisha kuita gadget moja.
64 bits, hakuna pie, hakuna canary, hakuna relro, nx. Inatumia kazi ya kuandika kuvuja anwani ya kuandika (libc) na inaita gadget moja.
Inatumia muundo wa mfuatano kuvuja canary kutoka kwa stack na overflow ya buffer kuingia katika system (iko katika GOT) na anwani ya /bin/sh
.
32 bit, hakuna relro, hakuna canary, nx, pie. Tumia uainishaji mbaya kuvuja anwani za libc na heap kutoka kwa stack. Tumia overflow ya buffer kufanya ret2lib ikitoa system('/bin/sh')
(anwani ya heap inahitajika ili kupita ukaguzi).
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)