Ret2lib
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Die essensie van Ret2Libc is om die uitvoeringsvloei van 'n kwesbare program te herlei na 'n funksie binne 'n gedeelde biblioteek (bv., system, execve, strcpy) in plaas daarvan om aanvaller-geleverde shellcode op die stapel uit te voer. Die aanvaller stel 'n payload saam wat die terugkeeradres op die stapel aanpas om na die gewenste biblioteekfunksie te wys, terwyl hy ook sorg dat enige nodige argumente korrek opgestel word volgens die aanroepkonvensie.
Kry die adres van die funksie om aan te roep (bv. system) en die opdrag om aan te roep (bv. /bin/sh)
Genereer 'n ROP-ketting om die eerste argument wat na die opdragstring wys en die uitvoeringsvloei na die funksie oor te dra
Aannemend dat die libc
wat gebruik word die een van die huidige masjien is, kan jy vind waar dit in geheue gelaai sal word met:
As jy wil kyk of die ASLR die adres van libc verander, kan jy doen:
Deur die libc wat gebruik word te ken, is dit ook moontlik om die offset na die system
funksie te vind met:
Deur die libc wat gebruik word te ken, is dit ook moontlik om die offset na die string /bin/sh
funksie te vind met:
As jy die libc ken wat gebruik word, is dit ook moontlik om Peda of GEF te gebruik om die adres van die system funksie, die exit funksie en die string /bin/sh
te kry:
As die proses kinders skep elke keer as jy met dit praat (netwerkbediener), probeer om daardie lêer te lees (waarskynlik sal jy root nodig hê).
Hier kan jy presies vind waar die libc gelaai is binne die proses en waar dit gelaai gaan word vir elke kind van die proses.
In hierdie geval is dit gelaai in 0xb75dc000 (Dit sal die basisadres van libc wees)
Dit mag moontlik wees dat jy nie weet watter libc die binêre laai nie (omdat dit dalk op 'n bediener geleë is waar jy geen toegang het nie). In daardie geval kan jy die kwesbaarheid misbruik om adres te lek en uit te vind watter libc biblioteek gebruik word:
Leaking libc address with ROPEn jy kan 'n pwntools-sjabloon hiervoor vind in:
Leaking libc - templateKyk na die bladsy https://libc.blukat.me/ en gebruik 'n paar adresse van funksies binne die libc om die weergawe wat gebruik word uit te vind.
Hierdie brute-forcing aanvalle is slegs nuttig vir 32-bis stelsels.
As die eksploit plaaslik is, kan jy probeer om die basisadres van libc te brute-force (nuttig vir 32-bis stelsels):
As jy 'n afstandsbediener aanval, kan jy probeer om die adres van die libc
funksie usleep
te brute-force, met 10 as argument (byvoorbeeld). As die bediener op 'n stadium 10s ekstra neem om te antwoord, het jy die adres van hierdie funksie gevind.
Voer 'n shell uit deur net na een spesifieke adres in libc te spring:
One GadgetIn hierdie voorbeeld is ASLR brute-force geïntegreer in die kode en die kwesbare binêre is geleë op 'n afstandsbediener:
Kyk na die voorbeeld van:
ROP - Return Oriented ProgramingIn die geval van ARM64, spring die ret instruksie na waar die x30 register wys en nie waar die stapel register wys nie. Dit is dus 'n bietjie meer ingewikkeld.
Ook in ARM64 doen 'n instruksie wat die instruksie doen (dit is nie moontlik om in die middel van instruksies te spring en hulle in nuwe te transformeer nie).
Kyk na die voorbeeld van:
Ret2lib + Printf leak - arm64Dit stel jou in staat om inligting van die proses te lek deur printf
/puts
met spesifieke data as 'n argument aan te roep. Byvoorbeeld, om die adres van puts
in die GOT in 'n uitvoering van puts
te plaas, sal dit die adres van puts
in geheue lek.
Dit beteken basies om 'n Ret2lib te misbruik om dit in 'n printf
formaat string kwesbaarheid te transformeer deur die ret2lib
te gebruik om printf met die waardes aan te roep om dit te ontgin (dit klink nutteloos maar is moontlik):
Ret2lib, gegee 'n lek na die adres van 'n funksie in libc, met behulp van een gadget
64 bit, ASLR geaktiveer maar geen PIE nie, die eerste stap is om 'n oorgang te vul tot die byte 0x00 van die canary om dan puts aan te roep en dit te lek. Met die canary word 'n ROP gadget geskep om puts aan te roep om die adres van puts van die GOT te lek en dan 'n ROP gadget om system('/bin/sh')
aan te roep.
64 bits, ASLR geaktiveer, geen canary nie, stapeloorgang in hoof vanaf 'n kind funksie. ROP gadget om puts aan te roep om die adres van puts van die GOT te lek en dan 'n een gadget aan te roep.
64 bits, geen pie, geen canary, geen relro, nx. Gebruik die write funksie om die adres van write (libc) te lek en roep een gadget aan.
Gebruik 'n formaat string om die canary van die stapel te lek en 'n buffer oorgang om in system te bel (dit is in die GOT) met die adres van /bin/sh
.
32 bit, geen relro, geen canary, nx, pie. Misbruik 'n slegte indeksering om adresse van libc en heap van die stapel te lek. Misbruik die buffer oorgang om 'n ret2lib aan te roep wat system('/bin/sh')
aanroep (die heap adres is nodig om 'n kontrole te omseil).
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)