Ret2plt
Last updated
Last updated
Naučite i vežbajte hakovanje AWS-a:HackTricks Obuka AWS Crveni Tim Stručnjak (ARTE) Naučite i vežbajte hakovanje GCP-a: HackTricks Obuka GCP Crveni Tim Stručnjak (GRTE)
Cilj ove tehnike bio bi procuriti adresu funkcije iz PLT-a kako biste mogli zaobići ASLR. Ovo je zato što ako, na primer, procurite adresu funkcije puts
iz libc-a, možete zatim izračunati gde je baza libc
-a i izračunati ofsete za pristup drugim funkcijama poput system
.
Ovo se može uraditi sa pwntools
payload-om kao što je (ovde):
Primetite kako se puts
(koristeći adresu iz PLT-a) poziva sa adresom puts
smeštenom u GOT-u (Globalnoj tabeli offseta). Ovo je zato što će do trenutka kada puts
štampa GOT unos puts-a, ovaj unos sadržaće tačnu adresu puts
-a u memoriji.
Takođe primetite kako se adresa main
koristi u eksploataciji tako da kada puts
završi izvršavanje, binarni fajl ponovo poziva main
umesto izlaska (tako da će procurila adresa i dalje biti validna).
Primetite kako je potrebno da binarni fajl ne bude kompajliran sa PIE-om ili morate pronaći curenje kako biste zaobišli PIE kako biste znali adresu PLT-a, GOT-a i main-a. U suprotnom, prvo morate zaobići PIE.
Možete pronaći potpuni primer ovog zaobilaženja ovde. Ovo je bio konačni eksploatacijski kod iz tog primera:
64 bita, omogućen ASLR ali bez PIE-a, prvi korak je popuniti prelivanje do bajta 0x00 kanara, a zatim pozvati puts i procuriti ga. Sa kanarom se kreira ROP gedžet za pozivanje puts-a kako bi procurila adresa puts-a iz GOT-a, a zatim ROP gedžet za pozivanje system('/bin/sh')
.
64 bita, omogućen ASLR, bez kanara, prelivanje steka u glavnoj funkciji iz podfunkcije. ROP gedžet za pozivanje puts-a kako bi procurila adresa puts-a iz GOT-a, a zatim pozvati jedan gedžet.