SROP - Sigreturn-Oriented Programming
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)
Sigreturn
je posebna syscall koja se prvenstveno koristi za čišćenje nakon što signalni handler završi svoju izvršavanje. Signali su prekidi koje operativni sistem šalje programu, često da bi ukazali na to da se dogodila neka izuzetna situacija. Kada program primi signal, privremeno pauzira svoj trenutni rad da bi obradio signal pomoću signal handler-a, posebne funkcije dizajnirane za rad sa signalima.
Nakon što signalni handler završi, program treba da nastavi svoje prethodno stanje kao da se ništa nije dogodilo. Tu dolazi do izražaja sigreturn
. Pomaže programu da vrati iz signal handler-a i obnavlja stanje programa čišćenjem steka (odeljak memorije koji čuva pozive funkcija i lokalne promenljive) koji je koristio signalni handler.
Zanimljiv deo je kako sigreturn
obnavlja stanje programa: to čini tako što čuva sve vrednosti CPU registara na steku. Kada signal više nije blokiran, sigreturn
uklanja ove vrednosti sa steka, efikasno resetujući registre CPU-a na njihovo stanje pre nego što je signal obrađen. Ovo uključuje registar pokazivača steka (RSP), koji pokazuje na trenutni vrh steka.
Pozivanje syscall-a sigreturn
iz ROP lanca i dodavanje registarskih vrednosti koje bismo želeli da učitamo u stek omogućava nam da kontrolišemo sve registarske vrednosti i stoga pozovemo na primer syscall execve
sa /bin/sh
.
Napomena kako bi ovo bila vrsta Ret2syscall koja olakšava kontrolu parametara za pozivanje drugih Ret2syscall-a:
Ret2syscallAko vas zanima, ovo je sigcontext struktura koja se čuva na steku da bi se kasnije povratile vrednosti (dijagram iz ovde):
Za bolje objašnjenje pogledajte takođe:
Možete pronaći primer ovde gde se poziv na signeturn konstruira putem ROP-a (stavljajući u rxa vrednost 0xf
), iako je ovo konačni exploit odatle:
Proverite takođe eksploit ovde gde je binarni već pozivao sigreturn
i stoga nije potrebno to graditi sa ROP:
Skup instrukcija u assembleru koji omogućava pisanje na stek i zatim poziva sigreturn
syscall. Moguće je napisati na stek ret2syscall putem sigreturn strukture i pročitati zastavicu koja se nalazi unutar memorije binarnog fajla.
Skup instrukcija u assembleru koji omogućava pisanje na stek i zatim poziva sigreturn
syscall. Moguće je napisati na stek ret2syscall putem sigreturn strukture (binarni fajl sadrži string /bin/sh
).
64 bita, bez relro, bez kanarija, nx, bez pie. Jednostavna buffer overflow napada koristeći gets
funkciju sa nedostatkom gadgeta koji izvršava ret2syscall. ROP lanac piše /bin/sh
u .bss
ponovnim pozivanjem gets, zloupotrebljava alarm
funkciju da postavi eax na 0xf
kako bi pozvao SROP i izvršio shell.
64 bita program u assembleru, bez relro, bez kanarija, nx, bez pie. Tok omogućava pisanje na stek, kontrolu nekoliko registara, i pozivanje syscall-a, a zatim poziva exit
. Izabrani syscall je sigreturn
koji će postaviti registre i premestiti eip
da pozove prethodnu syscall instrukciju i izvrši memprotect
da postavi binarni prostor na rwx
i postavi ESP u binarnom prostoru. Prateći tok, program će ponovo pozvati read u ESP, ali u ovom slučaju ESP će pokazivati na sledeću instrukciju, tako da će prosleđivanje shellcode-a napisati kao sledeću instrukciju i izvršiti je.
SROP se koristi za dodeljivanje privilegija izvršenja (memprotect) mestu gde je shellcode postavljen.
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)