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
ni syscall maalum inayotumiwa hasa kusafisha baada ya mchakato wa kushughulikia ishara kukamilika. Ishara ni usumbufu unaotumwa kwa programu na mfumo wa uendeshaji, mara nyingi kuashiria kuwa hali fulani ya kipekee imetokea. Wakati programu inapokea ishara, inasimamisha kazi yake ya sasa kwa muda ili kushughulikia ishara hiyo kwa signal handler, kazi maalum iliyoundwa kushughulikia ishara.
Baada ya signal handler kumaliza, programu inahitaji kurudi kwenye hali yake ya awali kana kwamba hakuna kilichotokea. Hapa ndipo sigreturn
inapoingia. Inasaidia programu kurudi kutoka kwa signal handler na kurejesha hali ya programu kwa kusafisha fremu ya stack (sehemu ya kumbukumbu inayohifadhi wito wa kazi na mabadiliko ya ndani) ambayo ilitumika na signal handler.
Sehemu ya kuvutia ni jinsi sigreturn
inavyorejesha hali ya programu: inafanya hivyo kwa kuhifadhi maadili yote ya register za CPU kwenye stack. Wakati ishara haizuiliwi tena, sigreturn
inatoa maadili haya kutoka kwenye stack, kwa ufanisi ikirekebisha register za CPU kwenye hali yao kabla ya ishara kushughulikiwa. Hii inajumuisha register ya stack pointer (RSP), ambayo inaelekeza kwenye kilele cha sasa cha stack.
Kuita syscall sigreturn
kutoka kwenye mchain ya ROP na kuongeza maadili ya register tunayotaka iingize kwenye stack inawezekana kudhibiti maadili yote ya register na hivyo kuita kwa mfano syscall execve
na /bin/sh
.
Kumbuka jinsi hii ingekuwa aina ya Ret2syscall ambayo inafanya iwe rahisi zaidi kudhibiti param za kuita Ret2syscalls nyingine:
Ret2syscallIkiwa unavutiwa hii ni muundo wa sigcontext unaohifadhiwa kwenye stack ili baadaye kurejesha maadili (mchoro kutoka hapa):
Kwa maelezo bora angalia pia:
Unaweza kupata mfano hapa ambapo wito wa signeturn unajengwa kupitia ROP (kuweka katika rxa thamani 0xf
), ingawa hii ni exploit ya mwisho kutoka hapo:
Check also the exploit from here ambapo binary tayari ilikuwa ikitumia sigreturn
na kwa hivyo si lazima kujenga hiyo na ROP:
Binary ya assembly inayoruhusu kuandika kwenye stack na kisha inaita syscall ya sigreturn
. Inawezekana kuandika kwenye stack ret2syscall kupitia muundo wa sigreturn na kusoma bendera ambayo iko ndani ya kumbukumbu ya binary.
Binary ya assembly inayoruhusu kuandika kwenye stack na kisha inaita syscall ya sigreturn
. Inawezekana kuandika kwenye stack ret2syscall kupitia muundo wa sigreturn (binary ina mfuatano wa /bin/sh
).
64 bits, hakuna relro, hakuna canary, nx, hakuna pie. Ujanja rahisi wa buffer overflow ukitumia kazi ya gets
bila vifaa vinavyofanya ret2syscall. Mnyororo wa ROP unaandika /bin/sh
kwenye .bss
kwa kuita gets tena, unatumia kazi ya alarm
kuweka eax kuwa 0xf
ili kuita SROP na kutekeleza shell.
Programu ya assembly ya 64 bits, hakuna relro, hakuna canary, nx, hakuna pie. Mchakato unaruhusu kuandika kwenye stack, kudhibiti register kadhaa, na kuita syscall kisha inaita exit
. Syscall iliyochaguliwa ni sigreturn
ambayo itapanga register na kuhamasisha eip
ili kuita amri ya syscall ya awali na kuendesha memprotect
kuweka nafasi ya binary kuwa rwx
na kuweka ESP katika nafasi ya binary. Kufuatia mchakato, programu itaita kusoma ndani ya ESP tena, lakini katika kesi hii ESP itakuwa ikielekeza kwenye amri inayofuata hivyo kupitisha shellcode kutandika kama amri inayofuata na kuitekeleza.
SROP inatumika kutoa ruhusa za utekelezaji (memprotect) kwa mahali ambapo shellcode iliwekwa.
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)