Ret2win
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ret2win izazovi su popularna kategorija u Capture The Flag (CTF) takmičenjima, posebno u zadacima koji uključuju binary exploitation. Cilj je iskoristiti ranjivost u datom binarnom fajlu da se izvrši određena, neinvokovana funkcija unutar binarnog fajla, često nazvana nešto poput win
, flag
, itd. Ova funkcija, kada se izvrši, obično ispisuje zastavicu ili poruku o uspehu. Izazov obično uključuje prepisivanje povratne adrese na steku kako bi se preusmerio tok izvršenja na željenu funkciju. Evo detaljnijeg objašnjenja sa primerima:
Razmotrite jednostavan C program sa ranjivošću i win
funkcijom koju nameravamo da pozovemo:
Da biste kompajlirali ovaj program bez zaštite steka i sa ASLR onemogućenim, možete koristiti sledeću komandu:
-m32
: Kompajlirajte program kao 32-bitni binarni fajl (ovo je opcionalno, ali uobičajeno u CTF izazovima).
-fno-stack-protector
: Onemogućite zaštitu od prelivanja steka.
-z execstack
: Dozvolite izvršavanje koda na steku.
-no-pie
: Onemogućite poziciono nezavisne izvršne fajlove kako biste osigurali da se adresa funkcije win
ne menja.
-o vulnerable
: Imenovati izlazni fajl vulnerable
.
Za exploit, koristićemo pwntools, moćan CTF okvir za pisanje eksploitacija. Skripta za exploit će kreirati payload za prelivanje bafera i prepisivanje adrese povratka sa adresom funkcije win
.
Da biste pronašli adresu win
funkcije, možete koristiti gdb, objdump ili bilo koji drugi alat koji vam omogućava da pregledate binarne datoteke. Na primer, sa objdump
, mogli biste koristiti:
Ova komanda će vam prikazati asembler funkcije win
, uključujući njenu početnu adresu.
Python skripta šalje pažljivo oblikovanu poruku koja, kada je obradi vulnerable_function
, preplavljuje bafer i prepisuje adresu povratka na steku sa adresom win
. Kada vulnerable_function
vrati, umesto da se vrati na main
ili izađe, skače na win
, i poruka se ispisuje.
PIE treba da bude onemogućen kako bi adresa bila pouzdana tokom izvršavanja, inače adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je funkcija win učitana. U nekim slučajevima, kada funkcija koja uzrokuje prelivanje je read
ili slična, možete izvršiti Delimično Prepisivanje od 1 ili 2 bajta da promenite adresu povratka na funkciju win. Zbog načina na koji ASLR funkcioniše, poslednja tri heksadecimalna nibbla nisu nasumična, tako da postoji 1/16 šanse (1 nibble) da dobijete ispravnu adresu povratka.
Stack Canaries takođe treba da budu onemogućeni ili kompromitovana EIP adresa povratka nikada neće biti praćena.
32bit, bez ASLR
64 bita sa ASLR, sa leak-om adrese bin
64 bita, bez ASLR
32 bita, bez ASLR, dvostruko malo prelivanje, prvo preplavi stek i poveća veličinu drugog prelivanja
32 bita, relro, bez kanarinca, nx, bez pie, format string za prepisivanje adrese fflush
sa funkcijom win (ret2win)
32 bita, nx, ništa drugo, delimično prepisivanje EIP (1Byte) za pozivanje funkcije win
32 bita, nx, ništa drugo, delimično prepisivanje EIP (1Byte) za pozivanje funkcije win
Program samo validira poslednji bajt broja da proveri veličinu ulaza, stoga je moguće dodati bilo koju veličinu sve dok je poslednji bajt unutar dozvoljenog opsega. Tada, ulaz stvara prelivanje bafera koje se eksploatiše sa ret2win.
64 bita, relro, bez kanarinca, nx, pie. Delimično prepisivanje za pozivanje funkcije win (ret2win)
arm64, PIE, daje PIE leak funkcija win je zapravo 2 funkcije tako da ROP gadget koji poziva 2 funkcije
ARM64, off-by-one za pozivanje funkcije win
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)