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 mhandisi wa ishara kukamilisha utekelezaji wake. 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 mhandisi wa ishara, kazi maalum iliyoundwa kushughulikia ishara.
Baada ya mhandisi wa ishara kumaliza, programu inahitaji kurudi katika hali yake ya awali kana kwamba hakuna kilichotokea. Hapa ndipo sigreturn
inapoingia. Inasaidia programu kurudi kutoka kwa mhandisi wa ishara na kurejesha hali ya programu kwa kusafisha fremu ya stack (sehemu ya kumbukumbu inayohifadhi wito wa kazi na vigezo vya ndani) ambayo ilitumika na mhandisi wa ishara.
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 katika hali yao kabla ya ishara kushughulikiwa. Hii inajumuisha register ya pointer ya stack (RSP), ambayo inaelekeza kwenye kilele cha sasa cha stack.
Kuita syscall sigreturn
kutoka kwenye mnyororo wa ROP na kuongeza maadili ya register tunayotaka iandike 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 kudhibiti vigezo ili 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. Uvunjaji rahisi wa buffer ukitumia kazi ya gets
kwa kukosa gadgets zinazofanya ret2syscall. Mnyororo wa ROP unaandika /bin/sh
kwenye .bss
kwa kuita gets tena, inatumia 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)