SROP - Sigreturn-Oriented Programming
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Sigreturn
is 'n spesiale syscall wat hoofsaaklik gebruik word om op te ruim nadat 'n seinhandler sy uitvoering voltooi het. Seine is onderbrekings wat deur die bedryfstelsel na 'n program gestuur word, dikwels om aan te dui dat 'n uitsonderlike situasie plaasgevind het. Wanneer 'n program 'n sein ontvang, pauzeer dit tydelik sy huidige werk om die sein met 'n seinhandler te hanteer, 'n spesiale funksie wat ontwerp is om met seine te werk.
Nadat die seinhandler klaar is, moet die program sy vorige toestand hervat asof niks gebeur het nie. Dit is waar sigreturn
in die spel kom. Dit help die program om terug te keer van die seinhandler en herstel die program se toestand deur die stapelraam (die gedeelte van geheue wat funksie-oproepe en plaaslike veranderlikes stoor) wat deur die seinhandler gebruik is, op te ruim.
Die interessante deel is hoe sigreturn
die program se toestand herstel: dit doen dit deur alle CPU se registerwaardes op die stapel te stoor. Wanneer die sein nie meer geblokkeer is nie, pop sigreturn
hierdie waardes van die stapel af, wat effektief die CPU se registers na hul toestand voor die sein hanteer is, reset. Dit sluit die stapelpunt-register (RSP) in, wat na die huidige bokant van die stapel wys.
Om die syscall sigreturn
van 'n ROP-ketting te bel en die registerwaardes wat ons wil hê dat dit in die stapel moet laai, by te voeg, is dit moontlik om alle registerwaardes te beheer en dus te bel byvoorbeeld die syscall execve
met /bin/sh
.
Let op hoe dit 'n type Ret2syscall sou wees wat dit baie makliker maak om parameters te beheer om ander Ret2syscalls aan te roep:
Ret2syscallAs jy nuuskierig is, dit is die sigcontext-struktuur wat in die stapel gestoor word om later die waardes te herstel (diagram van hier):
Vir 'n beter verduideliking kyk ook:
Jy kan hier 'n voorbeeld vind waar die oproep na signeturn via ROP saamgestel word (die waarde 0xf
in rxa plaas), alhoewel dit die finale uitbuiting van daar is:
Kontroleer ook die exploit van hier waar die binêre reeds sigreturn
aangeroep het en daarom is dit nie nodig om dit met 'n ROP te bou nie:
Assembly binêre wat toelaat om na die stapel te skryf en dan die sigreturn
syscall aanroep. Dit is moontlik om op die stapel 'n ret2syscall via 'n sigreturn struktuur te skryf en die vlag wat binne die geheue van die binêre is, te lees.
Assembly binêre wat toelaat om na die stapel te skryf en dan die sigreturn
syscall aanroep. Dit is moontlik om op die stapel 'n ret2syscall via 'n sigreturn struktuur te skryf (die binêre het die string /bin/sh
).
64 bits, geen relro, geen canary, nx, geen pie. Eenvoudige buffer overflow wat die gets
funksie misbruik met 'n gebrek aan gadgets wat 'n ret2syscall uitvoer. Die ROP-ketting skryf /bin/sh
in die .bss
deur weer gets
aan te roep, dit misbruik die alarm
funksie om eax op 0xf
te stel om 'n SROP aan te roep en 'n shell uit te voer.
64 bits assembly program, geen relro, geen canary, nx, geen pie. Die vloei laat toe om in die stapel te skryf, verskeie registers te beheer, en 'n syscall aan te roep en dan exit
aan te roep. Die geselekteerde syscall is 'n sigreturn
wat registre stel en eip
beweeg om 'n vorige syscall instruksie aan te roep en memprotect
uit te voer om die binêre ruimte op rwx
te stel en die ESP in die binêre ruimte te stel. Volg die vloei, die program sal weer lees in ESP aanroep, maar in hierdie geval sal ESP na die volgende instruksie wys, sodat 'n shellcode as die volgende instruksie geskryf en uitgevoer sal word.
SROP word gebruik om uitvoeringsregte (memprotect) aan die plek te gee waar 'n shellcode geplaas is.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)