<summary><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong> ile sıfırdan kahraman olmak için AWS hackleme öğrenin<strong>!</strong></summary>
* Şirketinizi **HackTricks'te reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın!
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'u takip edin**.
* **Hacking hilelerinizi paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek** katkıda bulunun.
İçerik Güvenlik Politikası (CSP), öncelikle **cross-site scripting (XSS) gibi saldırılara karşı koruma sağlamayı amaçlayan** bir tarayıcı teknolojisi olarak tanınır. Tarayıcı tarafından güvenli bir şekilde yüklenen kaynakların yollarını ve kaynakları tanımlayarak çalışır. Bu kaynaklar, resimler, çerçeveler ve JavaScript gibi bir dizi öğeyi kapsar. Örneğin, bir politika, aynı etki alanından (self) kaynakların yüklenmesine ve yürütülmesine izin verebilir, içerideki kaynaklara ve `eval`, `setTimeout` veya `setInterval` gibi işlevler aracılığıyla dize kodunun yürütülmesine izin verebilir.
CSP'nin uygulanması, **yanıt başlıkları** aracılığıyla veya HTML sayfasına **meta öğeleri ekleyerek** gerçekleştirilir. Bu politikaya uygun olarak, tarayıcılar bu şartları proaktif olarak uygular ve tespit edilen ihlalleri hemen engeller.
CSP, etkin ve pasif içeriği yükleme için kökenleri kısıtlar ve içerisinde `eval()` kullanımı gibi konuları kontrol eder. Bir örnek politika şu şekildedir:
* **script-src**: URL'ler, içe gömülü betikler ve olay işleyicileri veya XSLT stil sayfaları tarafından tetiklenen betikler de dahil olmak üzere JavaScript için belirli kaynakları izin verir.
* **default-src**: Belirli getirme yönergeleri yokken kaynakları getirmek 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 arabirimler kullanılarak yüklenebilecek URL'leri sınırlar.
* **frame-src**: Çerçeveler için URL'leri sınırlar.
* **frame-ancestors**: Geçerli sayfayı gömebilecek kaynakları belirtir, `<frame>`, `<iframe>`, `<object>`, `<embed>` ve `<applet>` gibi öğeler için geçerlidir.
* **img-src**: Resimler için izin verilen kaynakları tanımlar.
* **font-src**: `@font-face` kullanılarak yüklenen yazı tipleri için geçerli kaynakları belirtir.
* **manifest-src**: Uygulama belirteç dosyalarının izin verilen kaynaklarını tanımlar.
* **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 kullanılarak yükleme için izin verilen URL'leri belirtir.
* **form-action**: Form gönderimleri için geçerli uç noktaları listeler.
* **plugin-types**: Bir sayfanın çağırabileceği mime türlerini sınırlar.
* **upgrade-insecure-requests**: Tarayıcılara HTTP URL'lerini HTTPS'ye yeniden yazmalarını söyler.
* **sandbox**: `<iframe>`'in sandbox özniteliğiyle benzer kısıtlamalar uygular.
* **report-to**: Politika ihlal edildiğinde raporun gönderileceği bir grup belirtir.
* **worker-src**: Worker, SharedWorker veya ServiceWorker betikleri 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 şekilde (a, form, window.location, window.open, vb.) gezinebileceği URL'leri sınırlar.
### Kaynaklar
*`*`: `data:`, `blob:`, `filesystem:` şemalarına sahip URL'ler dışında tüm URL'lere izin verir.
*`'self'`: Aynı etki alanından yükleme yapmaya izin verir.
*`'data'`: Kaynakların veri şeması üzerinden yüklenmesine izin verir (örneğin, Base64 kodlu resimler).
*`'none'`: Herhangi bir kaynaktan yükleme yapmayı engeller.
*`'unsafe-eval'`: `eval()` ve benzeri yöntemlerin kullanımına izin verir, güvenlik nedenleriyle önerilmez.
*`'unsafe-hashes'`: Belirli içe gömülü olay işleyicilerini etkinleştirir.
*`'unsafe-inline'`: İçe gömülü `<script>` veya `<style>` gibi kaynakların kullanımına izin verir, güvenlik nedenleriyle önerilmez.
*`'nonce'`: Kriptografik bir nonce (bir kez kullanılan sayı) kullanarak belirli içe gömülü betiklere beyaz liste oluşturur.
*`'sha256-<hash>'`: Belirli bir sha256 karma değeri olan betikleri beyaz listeye alır.
*`'strict-dynamic'`: Bir nonce veya karma tarafından beyaz listeye alınmışsa herhangi bir kaynaktan betik yüklenmesine izin verir.
*`'host'`: `example.com` gibi belirli bir ana bilgisayar belirtir.
*`https:`: HTTPS kullanan URL'leri sınırlar.
*`blob:`: Blob URL'lerinden kaynakların yüklenmesine izin verir (örneğin, JavaScript tarafından oluşturulan Blob URL'leri).
*`filesystem:`: Dosya sisteminden kaynakların yüklenmesine izin verir.
*`'report-sample'`: İhlal raporunda ihlal eden kodun bir örneğini içerir (hata ayıklama için kullanışlıdır).
*`'strict-origin'`: 'self' ile benzerdir, ancak kaynakların protokol güvenlik düzeyinin belgeyle eşleştiğinden emin olur (yalnızca güvenli kökenler güvenli kökenlerden kaynak yükleyebilir).
*`'strict-origin-when-cross-origin'`: Aynı köken istekleri yaparken tam URL'leri gönderir, ancak istek çapraz kökenli 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üvenlik zayıflatıldığı için önerilmez.
Eğer bir şekilde izin verilen bir JS kodu, JS kodunuzla birlikte DOM'da yeni bir script etiketi oluşturursa, izin verilen bir betik tarafından oluşturulduğu için **yeni script etiketi çalıştırılmaya izin verilecektir**.
Bu yöntem, bir web uygulamasının içerik güvenlik politikasını (Content Security Policy - CSP) atlayarak dosya yükleme işlemini gerçekleştirmek için kullanılır. CSP, web uygulamalarında XSS saldırılarını önlemek için kullanılan bir güvenlik mekanizmasıdır. 'self' ifadesi, web uygulamasının kendi kaynaklarına erişim izni verir.
Bu yöntemi kullanmak için, hedef web uygulamasında bir dosya yükleme işlemi gerçekleştirilirken, CSP politikasında 'self' ifadesinin bulunması gerekmektedir. Bu durumda, saldırgan, dosyayı yüklemek için 'self' ifadesini kullanarak CSP politikasını atlayabilir.
Bu politikada, 'self' ifadesi, kaynakların yalnızca web uygulamasının kendi alanından yüklenmesine izin verir. Saldırgan, bu politikayı atlamak için dosyayı yüklemek için 'self' ifadesini kullanabilir.
Bu yöntem, web uygulamasının CSP politikasının zayıf bir şekilde yapılandırıldığı durumlarda etkili olabilir. Ancak, güvenlik açığı tespit edildiğinde, web uygulamasının CSP politikasının güncellenmesi gerekmektedir.
Dahası, sunucu tarafından kabul edilen bir uzantıyla (_script.png_ gibi) bir dosyanın içine **JS kodu yükleyebilseniz bile**, bu yeterli olmayacaktır çünkü apache sunucusu gibi bazı sunucular, dosyanın uzantısına dayanarak **dosyanın MIME türünü seçer** ve Chrome gibi tarayıcılar, bir resim olması gereken bir şeyin içindeki Javascript kodunu **çalıştırmayı reddeder**. "Neyse ki", hatalar var. Örneğin, bir CTF'den öğrendiğim gibi **Apache, .wave uzantısını bilmez**, bu yüzden audio/\* gibi bir **MIME türüyle sunmaz**.
Buradan, bir XSS ve dosya yükleme bulursanız ve **yanlış yorumlanan bir uzantı** bulmayı başarırsanız, o uzantıya sahip bir dosyayı ve betiğin İçeriğini yüklemeyi deneyebilirsiniz. Veya, sunucu yüklenen dosyanın doğru biçimini kontrol ediyorsa, bir poliglot oluşturabilirsiniz ([burada bazı poliglot örnekleri](https://github.com/Polydet/polyglot-database)).
Bu yazı, `cdn.cloudflare.com` (veya izin verilen başka bir JS kütüphane deposu) üzerinden **tüm kütüphaneleri yükleyebileceğinizi**, her bir kütüphaneden eklenen tüm fonksiyonları çalıştırabileceğinizi ve **hangi fonksiyonların hangi kütüphanelerden `window` nesnesini döndürdüğünü** kontrol edebileceğinizi göstermektedir.
[**Bu CTF çözümüne**](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/) adresini kötüye kullanarak CSP'yi atlayarak keyfi JS kodu çalıştırabilirsiniz:
Bir web uygulamasında içerik güvenliği politikası (CSP) kullanılıyorsa, üçüncü taraf uç noktalara erişim engellenebilir. Ancak, JSONP (JSON with Padding) kullanarak bu kısıtlamaları aşmak mümkündür.
JSONP, bir web sayfasının farklı bir etki alanındaki bir sunucudan veri almasına izin veren bir yöntemdir. Bu yöntem, bir `<script>` etiketi kullanarak veriyi alır ve geri çağırma işlevini kullanarak sayfaya ekler. CSP, `<script>` etiketlerinin yalnızca belirli kaynaklardan yüklenmesine izin verdiğinden, JSONP bu kısıtlamaları atlayabilir.
Bir CSP tarafından engellenen bir üçüncü taraf uç noktaya erişmek için, hedef sunucuda JSONP desteği olmalıdır. JSONP desteği sunan bir API kullanarak, hedef sunucuya bir istek gönderilebilir ve yanıt JSONP formatında alınabilir. Bu yanıt, `<script>` etiketi içindeki bir geri çağırma işlevi aracılığıyla sayfaya eklenir.
Bu yöntem, CSP tarafından engellenen üçüncü taraf uç noktalara erişmek için kullanılabilir. Ancak, JSONP'nin güvenlik riskleri olduğunu unutmamak önemlidir. JSONP, XSS (Cross-Site Scripting) saldırılarına yol açabilir ve güvenlik açıklarına neden olabilir. Bu nedenle, JSONP kullanırken dikkatli olunmalı ve güvenlik önlemleri alınmalıdır.
Aşağıdaki gibi senaryolarda, `script-src``self` ve belirli bir etki alanına ayarlandığında, JSONP kullanılarak bypass edilebilir. JSONP uç noktaları, güvensiz geri çağırma yöntemlerine izin verir ve saldırganın XSS gerçekleştirmesine olanak tanır, çalışan payload:
Aynı zafiyet, **güvenilir uç nokta bir Açık Yönlendirme içeriyorsa** meydana gelecektir çünkü başlangıç uç noktası güvenilir ise yönlendirmeler de güvenilir kabul edilir.
Aşağıdaki [gönderide](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) açıklandığı gibi, CSP'de izin verilen birçok üçüncü taraf alanı, veri sızdırmak veya JavaScript kodu çalıştırmak için kötüye kullanılabilir. Bu üçüncü taraflardan bazıları şunlardır:
Hedefinizin CSP'sinde izin verilen alanlardan herhangi birini bulursanız, üçüncü taraf hizmetine kaydolarak CSP'yi atlayabilir ve ya veriyi bu hizmete sızdırabilir ya da kodu çalıştırabilirsiniz.
Content Security Policy (CSP) is a security mechanism implemented by web applications to mitigate the risk of cross-site scripting (XSS) attacks. CSP allows web developers to specify which resources (such as scripts, stylesheets, and images) are allowed to be loaded and executed on a web page. However, there are certain techniques that can be used to bypass CSP and potentially exploit vulnerabilities in the application.
## Bypassing CSP using Inline Scripts
CSP typically restricts the execution of inline scripts, which are scripts embedded directly within HTML tags. However, there are several ways to bypass this restriction:
1.**Event Handlers**: By using event handlers such as `onload` or `onclick`, it is possible to execute arbitrary JavaScript code inline. For example:
2.**Data URIs**: Data URIs allow embedding data directly into the HTML document. By using a data URI with a `script` tag, it is possible to execute inline JavaScript code. For example:
3.**`javascript:` URL scheme**: The `javascript:` URL scheme allows executing JavaScript code directly in the URL. By using this scheme, it is possible to bypass CSP and execute inline scripts. For example:
```html
<ahref="javascript:alert('XSS')">Click me</a>
```
## Bypassing CSP using External Scripts
CSP also restricts the loading and execution of external scripts. However, there are techniques that can be used to bypass this restriction:
1.**Whitelisted Domains**: If the CSP policy allows loading scripts from specific domains, it may be possible to find a subdomain or a different domain that is not restricted by CSP. For example, if the CSP policy allows loading scripts from `example.com`, it may be possible to load a script from `subdomain.example.com` or `evil.com`.
2.**Nonce-based CSP**: Some CSP policies use a nonce (a random value) to allow specific inline scripts to be executed. By injecting a script tag with the correct nonce value, it is possible to bypass CSP and execute arbitrary JavaScript code. For example:
```html
<scriptnonce="randomvalue">alert('XSS')</script>
```
3.**Unsafe Inline Scripts**: In some cases, the CSP policy may allow specific inline scripts to be executed. By injecting a script tag with the `unsafe-inline` attribute, it is possible to bypass CSP and execute arbitrary JavaScript code. For example:
Content Security Policy (CSP) is an important security mechanism that helps protect web applications against cross-site scripting (XSS) attacks. However, it is not foolproof, and there are techniques that can be used to bypass CSP. Web developers should be aware of these bypass techniques and take appropriate measures to mitigate the risk of exploitation.
Verileri çıkarmanız gerekiyor, [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 her zaman yapıldığı gibi. Bu durumda, genel olarak aşağıdaki adımları izlersiniz:
1. Buradan bir Facebook Geliştirici hesabı oluşturun.
1. Yeni bir "Facebook Girişi" uygulaması oluşturun ve "Web sitesi" seçeneğini seçin.
1. "Ayarlar -> Temel"e gidin ve "Uygulama Kimliği"ni alın.
1. Verileri çıkarmak istediğiniz hedef siteye, Facebook SDK aracı "fbq"yu doğrudan kullanarak ve "customEvent" ve veri yükü ile veri çıkarabilirsiniz.
1. Uygulama "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)
1. "Test Etkinlikleri" sekmesini seçerek "sizin" web siteniz tarafından gönderilen etkinlikleri görebilirsiniz.
Ardından, kurban tarafında, aşağıdaki kodu çalıştırarak Facebook izleme pikselini saldırganın Facebook geliştirici hesabı uygulama kimliğine yönlendirmek ve böyle bir özel etkinlik oluşturmak için aşağıdaki kodu çalıştırırsınız:
Diğer tabloda belirtilen yedi üçüncü taraf alan adı için, bunları kötüye kullanmanın başka birçok 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) başvurun.
Yol kısıtlamalarını atlamak için bahsedilen yönlendirme yönteminin yanı sıra, bazı sunucularda kullanılabilecek başka bir teknik olan Relative Path Overwrite (RPO) tekniği vardır.
Bu, tarayıcı için `https://example.com/scripts/react/` altında bulunan `..%2fangular%2fangular.js` adlı bir dosya yüklüyormuşsunuz gibi göründüğü için CSP'ye uyumludur.
Sonuç olarak, bunu çözecekler ve `https://example.com/scripts/react/../angular/angular.js` talep edecekler, bu da `https://example.com/scripts/angular/angular.js` ile eşdeğerdir.
Eğer **base-uri** yönergesi eksikse, [**dangling markup injection**](../dangling-markup-html-scriptless-injection/) gerçekleştirmek için bunu kötüye kullanabilirsiniz.
Ayrıca, eğer **sayfa, bir Nonce kullanarak göreli bir yol** (örneğin `<script src="/js/app.js">`) kullanarak bir betik yüklüyorsa, XSS elde etmek için **base****tag**'ınızı kullanarak **kendi sunucunuzdan** betiği **yükleyebilirsiniz.**\
Eğer zafiyetli sayfa **httpS** ile yükleniyorsa, base'de bir httpS URL kullanın.
Bir politika olan İçerik Güvenlik Politikası (CSP), JavaScript olaylarını kısıtlayabilir. Bununla birlikte, AngularJS, özel olaylar sunarak alternatif bir çözüm sunar. Bir olay içinde, AngularJS, tarayıcıdaki olay nesnesine referans olan benzersiz bir `$event` nesnesi sağlar. Bu `$event` nesnesi, CSP'yi atlamak için kullanılabilir. Özellikle Chrome'da, `$event/event` nesnesi, olayın yürütme zincirinde yer alan bir nesne dizisini içeren bir `path` özelliğine sahiptir ve `window` nesnesi her zaman sonunda bulunur. Bu yapı, kum havuzu kaçış taktikleri için önemlidir.
Bu diziyi `orderBy` filtresine yönlendirerek, onun üzerinde döngü oluşturmak ve terminal öğesini (`window` nesnesi) kullanarak `alert()` gibi bir global işlevi tetiklemek mümkündür. Aşağıdaki örnek kod parçacığı, bu süreci açıklar:
Bu örnek, `ng-focus` direktifinin etkinleştirilmesi için `$event.path|orderBy` kullanımını vurgular. `path` dizisini manipüle etmek için kullanılır ve `window` nesnesini kullanarak `alert()` fonksiyonunu çalıştırır, böylece `document.cookie` ifşa edilir.
Bir Angular JS uygulamasında betik yükleme için etki alanlarını beyaz listeye alan bir CSP politikası, geri çağırma işlevlerinin ve belirli zafiyetli sınıfların çağrılması yoluyla atlatılabilir. Bu teknik hakkında 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 bulunabilir.
Ancak, [CSP spec 4.2.2.3. Yollar ve Yönlendirmeler](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects) bölümünde açıklandığı gibi, yönlendirme farklı bir yola yönlendirirse, orijinal kısıtlamaları atlayabilir.
Eğer CSP `https://www.google.com/a/b/c/d` olarak ayarlanmışsa, yolun dikkate alındığı için `/test` ve `/a/test` betikleri 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)//`'e yönlendirilecektir**. Yönlendirme olduğu için **yol dikkate alınmaz** ve **betik yüklenebilir**, böylece yol kısıtlaması atlatılır.
Bu nedenle, en iyi çözüm, web sitesinin açık yönlendirme açıklarına sahip olmadığından ve CSP kurallarında istismar edilebilecek alan adlarının olmadığından emin olmaktır.
`'unsafe-inline'`, herhangi bir betiği kodun içinde çalıştırabileceğiniz anlamına gelir (XSS kodu çalıştırabilir) ve `img-src *`, web sayfasında herhangi bir kaynaktan herhangi bir resmi kullanabileceğiniz anlamına gelir.
Bu CSP'yi resimler aracılığıyla verileri dışarı çıkararak atlayabilirsiniz (bu durumda XSS, bir bot tarafından erişilebilen bir sayfada bir CSRF'yi istismar eder ve bir resim aracılığıyla bayrağı çıkarırken bir SQLi çıkarır):
Bu yapılandırmayı ayrıca, bir resmin içine yerleştirilmiş JavaScript kodunu yüklemek için de kullanabilirsiniz. Örneğin, sayfa Twitter'dan resim yüklemeye izin veriyorsa, özel bir resim oluşturabilir, bunu Twitter'a yükleyebilir ve "**unsafe-inline**" özelliğini kötüye kullanarak bir XSS gibi JS kodunu yürütebilirsiniz. Bu kod, resmi yükleyecek, içinden JS'yi çıkaracak ve onu çalıştıracaktır: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
Siz tarafından gönderilen bir **parametre**, **politikanın bildirisine yapıştırılıyorsa**, politikayı**kullanışsız hale getiren** bir şekilde politikayı değiştirebilirsiniz. Aşağıdaki yöntemlerden herhangi birini kullanarak script 'unsafe-inline' izni verebilirsiniz:
Bu yönerge mevcut script-src yönergelerini üzerine yazar.\
Bir örneği burada 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)
Dikkat edin, `'unsafe-inline'` yönergesinin eksik olduğunu fark edin.\
Bu sefer, bir `<iframe` ile XSS kullanarak kurbanı**kontrolünüzdeki** bir sayfayı**yüklemeye** zorlayabilirsiniz. Bu sefer, kurbanın bilgi çıkarmak 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 süreyi bir şekilde **kontrol edebilirseniz**, ihtiyacınız olan bilgiyi çıkarabilirsiniz.
Bu sefer, bir **bayrak** çıkarılacak, bir **karakter doğru tahmin edildiğinde** SQLi tarafından **yanıt** fonksiyonunun uyku süresi nedeniyle daha fazla zaman alır. Sonra bayrağı çıkarabileceksiniz:
Bu saldırı, saldırganın kullanıcıyı tarayıcının yer işaretleri üzerine bir bağlantıyı sürükleyip bırakmaya ikna ettiği bir sosyal mühendislik gerektirir. Bu yer işareti, **kötü amaçlı javascript** kodunu içerecektir ve sürüklendiğinde veya tıklandığında mevcut web penceresinin bağlamında çalıştırılacak, CSP'yi atlayacak ve çerezler veya tokenlar gibi hassas bilgileri çalmaya izin verecektir.
[**Bu CTF çözümünde**](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ılır. Bu daha kısıtlayıcı CSP, belirli bir JS dosyasının yüklenmesine izin vermedi ve ardından **prototip kirliliği** veya **dom clobbering** aracılığıyla farklı bir betiği kötüye kullanarak keyfi bir betik yüklemeye izin verdi.
Bu [**CTF çözümünde**](https://github.com/aszx87410/ctf-writeups/issues/48), **HTML enjeksiyonu** aracılığıyla **CSP** daha fazla **kısıtlanabiliyordu**, böylece CSTI'yi önleyen bir betik devre dışı bırakıldı ve bu nedenle **zafiyet sömürülebilir hale geldi.**\
CSP, **HTML meta etiketleri** kullanılarak daha kısıtlayıcı hale getirilebilir ve içerideki betikler **nonce** iznini kaldırarak **devre dışı bırakılabilir** ve **sha** ile belirli bir içerideki betik etkinleştirilebilir:
Eğer sunucunun yanıt olarak **`Content-Security-Policy-Report-Only`** başlığını**senin kontrolünde bir değerle** döndürmesini sağlayabilirsen (belki CRLF nedeniyle), bu başlığı kendi sunucuna yönlendirebilirsin ve sızdırmak istediğin **JS içeriğini****`<script>`** etiketiyle sararsan, büyük olasılıkla CSP tarafından `unsafe-inline` izin verilmediği için bu bir CSP hatası tetikleyecek ve hassas bilgileri içeren script kısmı`Content-Security-Policy-Report-Only` üzerinden sunucuya gönderilecektir.
- 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** gizli bir URL'ye (örneğin, `https://usersecret.example2.com`) yönlendirilir.
-`securitypolicyviolation` etkinliğini dinleyerek, `blockedURI` özelliği yakalanabilir. Bu özellik, engellenen URI'nin alan adını ortaya çıkararak, başlangıç URL'sinin yönlendirildiği gizli alan adını sızdırır.
İlginç bir nokta, Chrome ve Firefox gibi tarayıcıların CSP'ye ilişkin iframe'leri işleme konusunda farklı davranışlara sahip olmasıdır, bu da tanımsız davranış nedeniyle hassas bilgilerin sızmasına yol açabilir.
Başka bir teknik ise CSP'yi kendisi kullanarak gizli alt alan adını çıkarmaktır. Bu yöntem, ikili arama algoritmasına dayanır ve CSP'yi kasıtlı olarak engellenen belirli alan adlarını içerecek şekilde ayarlamayı gerektirir. Örneğin, gizli alt alan adı bilinmeyen karakterlerden oluşuyorsa, CSP yönergesini bu alt alan adlarını engellemek veya izin vermek için değiştirerek farklı alt alan adlarını iteratif olarak test edebilirsiniz. Aşağıda, bu yöntemi kolaylaştırmak için CSP'nin nasıl ayarlanabileceğini gösteren bir örnek bulunmaktadır:
CSP tarafından engellenen veya izin verilen istekleri izleyerek, gizli alt alan adındaki olası karakterleri daraltarak sonunda tam URL'yi ortaya çıkarabilirsiniz.
Her iki yöntem de CSP uygulamasının ve tarayıcılardaki davranışının inceliklerinden yararlanır ve görünüşte güvenli politikaların hassas bilgileri istemeden sızdırabileceğini gösterir.
PHP, varsayılan olarak yanıtı 4096 bayte kadar tamponlar. Bu nedenle, PHP bir uyarı gösteriyorsa, yeterli veri sağlayarak uyarıların içine, **yanıt****CSP başlığından önce****gönderilecektir**, bu da başlığın görmezden gelinmesine neden olur.\
Sonra, tekniğin temel olarak **yanıt tamponunu uyarılarla doldurmak** olduğu için CSP başlığı gönderilmez.
[**Bu yazıdan**](https://blog.ssrf.kr/69) göründüğü kadarıyla, bir CSP korumasını atlamak mümkün olmuş, hata sayfasını (potansiyel olarak CSP olmadan) yükleyerek ve içeriğini yeniden yazarak.
SOME, bir sayfanın bir uç noktasında bulunan bir XSS'i (veya çok sınırlı bir XSS'i) **kötüye kullanmak** için aynı kökten **diğer uç noktalarını kötüye kullanır**. Bu, savunmasız uç noktayı saldırgan sayfadan yükleyerek ve ardından saldırgan sayfayı kötüye kullanmak istediğiniz aynı kökteki gerçek uç noktaya yeniden yükleyerek yapılır. Bu şekilde, **savunmasız uç nokta**, **payload** içindeki **`opener`** nesnesini kullanarak **kötüye kullanmak istediğiniz gerçek uç noktanın DOM'una erişebilir**. Daha fazla bilgi için şuraya bakın:
Ayrıca, **wordpress**'in `/wp-json/wp/v2/users/1?_jsonp=data` yolunda bir **JSONP** uç noktası vardır ve bu uç nokta, yalnızca harf, sayı ve noktalarla sınırlı olmak üzere çıktıya gönderilen **veriyi yansıtır**.
Bir saldırgan, bu uç noktayı kötüye kullanarak WordPress'e karşı bir SOME saldırısı**oluşturabilir** ve bunu `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` içine yerleştirebilir. Bu **script**, **'self'** tarafından **izin verildiği için yüklenecektir**. 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 **atlatan****savunmasız****geri çağırma** uç noktası aracılığıyla **SOME saldırısını** kötüye kullanabilir... 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/) adresine bakın.
Eğer harici sunucularla **etkileşimde bulunmanıza izin vermeyen** sıkı bir CSP varsa, bilgileri sızdırmak için her zaman yapabileceğiniz bazı şeyler vardır.
Sayfaları daha hızlı yüklemek için tarayıcılar, ana bilgisayar adlarını IP adreslerine önceden çözümleyip daha sonra kullanmak üzere önbelleğe alırlar.\
Tarayıcıya bir ana bilgisayar adını önceden çözümlemesi için şu şekilde belirtebilirsiniz: `<link reol="dns-prefetch" href="something.com">`
<summary><strong>Sıfırdan kahraman olmak için AWS hackleme öğrenin</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Şirketinizi HackTricks'te **reklam vermek veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz olan [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)** takip edin.**