Msingi wa Mbinu za Ukatili wa Binafsi
{{#include ../../banners/hacktricks-training.md}}
Taarifa za Msingi za ELF
Kabla ya kuanza kutumia chochote, ni muhimu kuelewa sehemu ya muundo wa ELF binary:
{{#ref}} elf-tricks.md {{#endref}}
Zana za Kutumia
{{#ref}} tools/ {{#endref}}
Mbinu ya Stack Overflow
Kwa 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.
Kudhibiti Mchakato
Kuna njia tofauti ambazo unaweza kumaliza kudhibiti mchakato wa programu:
- Stack Overflows kuandika upya kiashiria cha kurudi kutoka kwenye stack au EBP -> ESP -> EIP.
- Inaweza kuhitaji kutumia Integer Overflows ili kusababisha overflow
- Au kupitia Arbitrary Writes + Write What Where to Execution
- Format strings: Tumia
printfkuandika maudhui yasiyo na mipaka katika anwani zisizo na mipaka. - Array Indexing: Tumia muundo mbaya wa indexing ili uweze kudhibiti baadhi ya arrays na kupata kuandika yasiyo na mipaka.
- Inaweza kuhitaji 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:
{{#ref}} ../arbitrary-write-2-exec/ {{#endref}}
Mizunguko ya Milele
Kitu cha kuzingatia ni kwamba kawaida ku exploit udhaifu mmoja hakutoshi kutekeleza exploit yenye mafanikio, hasa baadhi ya ulinzi zinahitaji kupitishwa. Kwa hivyo, ni muhimu kujadili baadhi ya chaguzi za kufanya udhaifu mmoja uweze kutumika mara kadhaa katika utekelezaji mmoja wa binary:
- Andika katika mnyororo wa ROP anwani ya
mainfunction au anwani ambapo udhaifu unafanyika. - Kwa kudhibiti mnyororo sahihi wa ROP unaweza kuwa na uwezo wa kutekeleza vitendo vyote katika mnyororo huo
- Andika katika
exitaddress in 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_finiambayo itaita tena kazi kutoka.fini_array.
Malengo ya Ukatili
Lengo: Kuita kazi iliyopo
- ret2win: Kuna kazi katika msimbo unahitaji kuitwa (labda na baadhi ya parameta maalum) ili kupata bendera.
- Katika bof ya kawaida bila PIE na canary unahitaji tu kuandika anwani katika anwani ya kurudi iliyohifadhiwa kwenye stack.
- Katika bof yenye PIE, itabidi upite
- Katika bof yenye canary, itabidi upite
- Ikiwa unahitaji kuweka parameta kadhaa ili kuitisha kazi ya ret2win ipasavyo unaweza kutumia:
- Mnyororo wa ROP ikiwa kuna vifaa vya kutosha kuandaa parameta zote
- SROP (ikiwa unaweza kuita syscall hii) kudhibiti register nyingi
- Vifaa kutoka ret2csu na ret2vdso kudhibiti register kadhaa
- Kupitia Write What Where unaweza kutumia udhaifu mwingine (sio bof) kuitisha 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 upya anwani hiyo.
- ASLR au PIE inaweza kuathiri anwani.
- Uninitialized variables: Hujui kamwe.
Lengo: RCE
Kupitia shellcode, ikiwa nx imezimwa au kuchanganya shellcode na ROP:
- (Stack) Shellcode: Hii ni muhimu kuhifadhi shellcode kwenye stack kabla au baada ya kuandika upya kiashiria cha kurudi na kisha kuruka kwake ili kuitekeleza:
- Katika hali yoyote, ikiwa kuna canary, katika bof ya kawaida itabidi upite (leak) hiyo
- Bila ASLR na nx inawezekana kuruka kwenye anwani ya stack kwani haitabadilika kamwe
- Na ASLR itabidi utumie mbinu kama ret2esp/ret2reg ili kuruka kwake
- Na nx, itabidi utumie baadhi ya ROP kuitisha
memprotectna kufanya kurasa kuwarwx, ili kisha kuhifadhi shellcode humo (kuitisha kusoma kwa mfano) na kisha kuruka humo. - Hii itachanganya shellcode na mnyororo wa ROP.
Kupitia syscalls
- Ret2syscall: Inatumika kuitisha
execveili kuendesha amri zisizo na mipaka. Unahitaji kuwa na uwezo wa kupata vifaa vya kuitisha syscall maalum na parameta. - Ikiwa ASLR au PIE zimewezeshwa itabidi uzishinde ili kutumia vifaa vya ROP kutoka kwa binary au maktaba.
- SROP inaweza kuwa muhimu kuandaa ret2execve
- Vifaa kutoka ret2csu na ret2vdso kudhibiti register kadhaa
Kupitia libc
- Ret2lib: Inatumika kuitisha kazi kutoka maktaba (kawaida kutoka
libc) kamasystemna baadhi ya hoja zilizopangwa (mfano'/bin/sh'). Unahitaji binary ili kupakia maktaba yenye kazi unayotaka kuitisha (libc kawaida). - Ikiwa imeandikwa kwa statically na hakuna PIE, anwani ya
systemna/bin/shhaitabadilika, hivyo inawezekana kuzitumia kwa statically. - Bila ASLR na kujua toleo la libc lililopakiwa, anwani ya
systemna/bin/shhaitabadilika, hivyo inawezekana kuzitumia kwa statically. - Na ASLR lakini hakuna PIE**, kujua libc na binary ikitumia kazi ya
systeminawezekanaretkwa anwani ya system katika GOT na anwani ya'/bin/sh'katika param (utahitaji kufahamu hili). - Na ASLR lakini hakuna PIE, kujua libc na bila binary ikitumia
system: - Tumia
ret2dlresolvekutatua anwani yasystemna kuitisha - Pitisha ASLR na kuhesabu anwani ya
systemna'/bin/sh'katika kumbukumbu. - Na ASLR na PIE na kutokujua libc: Unahitaji:
- Pitisha PIE
- Pata
libcversion iliyotumika (leak anwani kadhaa za kazi) - Angalia hali za awali na ASLR ili kuendelea.
Kupitia EBP/RBP
- 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
Mambo Mengine
- Pointers Redirecting: Ikiwa stack ina viashiria vya kazi ambavyo vitaitwa au kwa string ambayo itatumika na kazi ya kuvutia (system au printf), inawezekana kuandika upya anwani hiyo.
- ASLR au PIE inaweza kuathiri anwani.
- Uninitialized variables: Hujui kamwe.
{{#include ../../banners/hacktricks-training.md}}