Bypassing SOP with Iframes - 1
SOP-1 में Iframes
इस चुनौती को NDevTK और Terjanq द्वारा बनाई गई में आपको कोड में XSS का शोध करना होगा।
मुख्य समस्या यह है कि मुख्य पृष्ठ DomPurify का उपयोग data.body
भेजने के लिए करता है, इसलिए उस कोड को अपने खुद के 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
उत्पत्ति को बलपूर्वक कर सकते हैं।
अगर पृष्ठ embeddable होता तो आप उस सुरक्षा को उस तरीके से बायपास कर सकते थे (कुकीज भी SameSite=None
पर सेट की जानी चाहिए)।
SOP बायपास 2 (window.origin === null)
कम जाना जानकारी है कि जब sandbox मान allow-popups
सेट किया जाता है तो खुला popup सभी sandboxed गुण को वारिस्त करेगा जब तक allow-popups-to-escape-sandbox
सेट नहीं है।
इसलिए, null उत्पत्ति से popup खोलना window.origin
को पॉपअप के अंदर भी null
बना देगा।
चुनौती समाधान
इसलिए, इस चुनौती के लिए, कोई भी iframe बना सकता है, पॉपअप खोल सकता है वह पृष्ठ जिसमें वंलरेबल XSS कोड हैंडलर (/iframe.php
) के लिए, क्योंकि window.origin === e.origin
क्योंकि दोनों null
हैं, इससे XSS का शोषण करने वाला payload भेजना संभव है।
वह payload पहचानकर्ता प्राप्त करेगा और एक XSS को वापस शीर्ष पृष्ठ (पॉपअप खोलने वाला पृष्ठ) पर भेजेगा, जिसे स्थान को विकल्प करेगा वंलरेबल /iframe.php
पर। क्योंकि पहचानकर्ता जाना जाता है, इसलिए यह मायने नहीं रखता कि शर्त window.origin === e.origin
पूरी नहीं होती है (ध्यान दें, मूल है popup जो iframe से उत्पत्ति null
है) क्योंकि data.identifier === identifier
। फिर, XSS फिर से ट्रिगर होगा, इस बार सही उत्पत्ति में।
Last updated