Ret2lib
Last updated
Last updated
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Suština Ret2Libc je preusmeravanje toka izvršavanja ranjivog programa na funkciju unutar deljene biblioteke (npr., system, execve, strcpy) umesto izvršavanja shellcode-a koji je dostavio napadač na steku. Napadač kreira payload koji menja adresu povratka na steku da pokazuje na željenu funkciju biblioteke, dok takođe obezbeđuje da su svi potrebni argumenti ispravno postavljeni prema konvenciji pozivanja.
Dobiti adresu funkcije koju treba pozvati (npr. system) i komandu koju treba pozvati (npr. /bin/sh)
Generisati ROP lanac da prosledi prvi argument koji pokazuje na string komande i tok izvršavanja funkciji
Pretpostavljajući da je libc
koji se koristi onaj sa trenutnog računara, možete pronaći gde će biti učitan u memoriji sa:
Ако желите да проверите да ли ASLR мења адресу libc, можете урадити:
Poznavanjem korišćene libc, takođe je moguće pronaći offset do system
funkcije sa:
Poznavanjem korišćene libc, takođe je moguće pronaći offset do stringa /bin/sh
funkcije sa:
Poznavajući korišćeni libc, takođe je moguće koristiti Peda ili GEF da dobijete adresu funkcije system, funkcije exit i stringa /bin/sh
:
Ako proces kreira decu svaki put kada razgovarate s njim (mrežni server), pokušajte da pročitate tu datoteku (verovatno će vam biti potrebna root privilegija).
Ovde možete pronaći tačno gde je libc učitan unutar procesa i gde će biti učitan za svako dete procesa.
U ovom slučaju, učitan je u 0xb75dc000 (Ovo će biti osnovna adresa libc)
Može biti moguće da ne znate koju libc binarni fajl učitava (jer se možda nalazi na serveru kojem nemate pristup). U tom slučaju možete iskoristiti ranjivost da procurite neke adrese i saznate koja libc biblioteka se koristi:
Leaking libc address with ROPI možete pronaći pwntools šablon za ovo u:
Leaking libc - templateProverite stranicu https://libc.blukat.me/ i koristite nekoliko adresa funkcija unutar libc da biste saznali korisničku verziju.
Ovi napadi brute-force su samo korisni za 32bitne sisteme.
Ako je eksploatacija lokalna, možete pokušati da brute-force-ujete osnovnu adresu libc (korisno za 32bitne sisteme):
Ako napadate udaljeni server, možete pokušati da brute-force-ujete adresu libc
funkcije usleep
, prosledjujući kao argument 10 (na primer). Ako u nekom trenutku serveru treba dodatnih 10s da odgovori, pronašli ste adresu ove funkcije.
Izvršite shell jednostavno skakanjem na jednu specifičnu adresu u libc:
One GadgetU ovom primeru ASLR brute-force je integrisan u kod, a ranjivi binarni fajl se nalazi na udaljenom serveru:
Proverite primer sa:
ROP - Return Oriented ProgramingU slučaju ARM64, ret instrukcija skače na adresu na koju pokazuje x30 registar, a ne na adresu na koju pokazuje registar steka. Tako da je malo komplikovanije.
Takođe, u ARM64, instrukcija radi ono što instrukcija radi (nije moguće skočiti usred instrukcija i transformisati ih u nove).
Proverite primer sa:
Ret2lib + Printf leak - arm64Ovo omogućava curenje informacija iz procesa pozivajući printf
/puts
sa nekim specifičnim podacima postavljenim kao argument. Na primer, stavljanje adrese puts
u GOT prilikom izvršavanja puts
će curiti adresu puts
u memoriji.
Ovo u suštini znači zloupotrebu Ret2lib da se transformiše u ranjivost format stringova printf
koristeći ret2lib
da pozove printf sa vrednostima za eksploataciju (zvuči besmisleno, ali je moguće):
Ret2lib, uz curenje adrese funkcije u libc, koristeći jedan gadget
64 bita, ASLR omogućeno, ali bez PIE, prvi korak je popuniti preliv do bajta 0x00 kanarija da bi se zatim pozvao puts i curio. Sa kanarijom se kreira ROP gadget za pozivanje puts da curi adresu puts iz GOT-a i ROP gadget za pozivanje system('/bin/sh')
64 bita, ASLR omogućeno, bez kanarija, preliv steka u main iz podfunkcije. ROP gadget za pozivanje puts da curi adresu puts iz GOT-a i zatim poziva jedan gadget.
64 bita, bez pie, bez kanarija, bez relro, nx. Koristi write funkciju da curi adresu write (libc) i poziva jedan gadget.
Koristi format string da curi kanariju iz steka i preliv bafera da pozove system (to je u GOT-u) sa adresom /bin/sh
.
32 bita, bez relro, bez kanarija, nx, pie. Zloupotreba lošeg indeksiranja da curi adrese libc i heap iz steka. Zloupotreba prelivanja bafera da uradi ret2lib pozivajući system('/bin/sh')
(adresa heap-a je potrebna da bi se zaobišla provera).
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)