Basic Stack Binary Exploitation Methodology
Last updated
Last updated
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kabla ya kuanza kuhamasisha chochote ni muhimu kuelewa sehemu ya muundo wa ELF binary:
ELF Basic InformationKwa mbinu nyingi ni vizuri kuwa na mpango wa wakati mbinu kila moja itakuwa na manufaa. Kumbuka kwamba ulinzi sawa utaathiri mbinu tofauti. Unaweza kupata njia za kupita ulinzi katika kila sehemu ya ulinzi lakini si katika mbinu hii.
Kuna njia tofauti ambazo unaweza kumaliza kudhibiti mchakato wa programu:
Stack Overflows kuandika tena kiashiria cha kurudi kutoka kwenye stack au EBP -> ESP -> EIP.
Inaweza kuhitajika kutumia Integer Overflows ili kusababisha overflow
Au kupitia Arbitrary Writes + Write What Where to Execution
Format strings: Tumia printf
kuandika maudhui yasiyo na mipaka katika anwani zisizo na mipaka.
Array Indexing: Tumia mbinu mbaya ya indexing ili uweze kudhibiti baadhi ya arrays na kupata kuandika yasiyo na mipaka.
Inaweza kuhitajika kutumia Integer Overflows ili kusababisha overflow
bof to WWW kupitia ROP: Tumia overflow ya buffer kujenga ROP na uweze kupata WWW.
Unaweza kupata mbinu za Write What Where to Execution katika:
Write What Where 2 ExecKitu cha kuzingatia ni kwamba kawaida kuhamasisha moja tu ya udhaifu huenda isiwe ya kutosha kutekeleza uhamasishaji wenye mafanikio, hasa baadhi ya ulinzi unahitaji kupitishwa. Kwa hivyo, ni muhimu kujadili baadhi ya chaguzi za kufanya udhaifu mmoja uweze kuhamasishwa mara kadhaa katika utekelezaji mmoja wa binary:
Andika katika mnyororo wa ROP anwani ya main
function au anwani ambapo udhaifu unafanyika.
Kwa kudhibiti mnyororo sahihi wa ROP unaweza kuwa na uwezo wa kutekeleza vitendo vyote katika mnyororo huo
Andika katika exit
anwani katika GOT (au kazi nyingine yoyote inayotumiwa na binary kabla ya kumaliza) anwani ya kurudi kwenye udhaifu
Kama ilivyoelezwa katika .fini_array, hifadhi kazi 2 hapa, moja ya kuita udhaifu tena na nyingine ya kuita __libc_csu_fini
ambayo itaita tena kazi kutoka .fini_array
.
ret2win: Kuna kazi katika msimbo unahitaji kuitwa (labda na baadhi ya vigezo maalum) ili kupata bendera.
Katika bof yenye PIE, itabidi upite
Katika bof yenye canary, itabidi upite
Ikiwa unahitaji kuweka vigezo kadhaa ili kuitwa kwa usahihi kazi ya ret2win unaweza kutumia:
Mnyororo wa ROP ikiwa kuna vifaa vya kutosha kuandaa vigezo vyote
SROP (ikiwa unaweza kuita syscall hii) kudhibiti register nyingi
Kupitia Write What Where unaweza kutumia udhaifu mwingine (sio bof) kuita kazi ya win
.
Pointers Redirecting: Ikiwa stack ina viashiria vya kazi ambavyo vitaitwa au kwa string ambayo itatumika na kazi ya kuvutia (system au printf), inawezekana kuandika tena anwani hiyo.
Uninitialized variables: Hujui kamwe.
(Stack) Shellcode: Hii ni muhimu kuhifadhi shellcode kwenye stack kabla au baada ya kuandika tena kiashiria cha kurudi na kisha kuruka kwake ili kuitekeleza:
Katika hali yoyote, ikiwa kuna canary, katika bof ya kawaida utahitaji kupita (leak) hiyo
Na ASLR itabidi utumie mbinu kama ret2esp/ret2reg ili kuruka kwake
Hii itachanganya shellcode na mnyororo wa ROP.
Ret2syscall: Inatumika kuita execve
ili kuendesha amri zisizo na mipaka. Unahitaji kuwa na uwezo wa kupata vifaa vya kuita syscall maalum na vigezo.
SROP inaweza kuwa muhimu kuandaa ret2execve
Ret2lib: Inatumika kuita kazi kutoka maktaba (kawaida kutoka libc
) kama system
na vigezo vilivyopangwa (mfano '/bin/sh'
). Unahitaji binary ili kupakia maktaba yenye kazi unayotaka kuita (libc kawaida).
Ikiwa imeandikwa kwa statically na hakuna PIE, anwani ya system
na /bin/sh
haitabadilika, hivyo inawezekana kuzitumia kwa statically.
Bila ASLR na kujua toleo la libc lililopakiwa, anwani ya system
na /bin/sh
haitabadilika, hivyo inawezekana kuzitumia kwa statically.
Tumia ret2dlresolve
kutatua anwani ya system
na kuitumia
Pitisha ASLR na kuhesabu anwani ya system
na '/bin/sh'
katika kumbukumbu.
Pitisha PIE
Pata libc
toleo lililotumika (leak anwani kadhaa za kazi)
Angalia hali za awali na ASLR ili kuendelea.
Stack Pivoting / EBP2Ret / EBP Chaining: Kudhibiti ESP ili kudhibiti RET kupitia EBP iliyohifadhiwa kwenye stack.
Inatumika kwa off-by-one stack overflows
Inatumika kama njia mbadala ya kumaliza kudhibiti EIP wakati unatumia EIP kujenga payload katika kumbukumbu na kisha kuruka kwake kupitia EBP
Pointers Redirecting: Ikiwa stack ina viashiria vya kazi ambavyo vitaitwa au kwa string ambayo itatumika na kazi ya kuvutia (system au printf), inawezekana kuandika tena anwani hiyo.
Uninitialized variables: Hujui kamwe.
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)