Iframes in XSS, CSP and SOP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
एक iframed पृष्ठ की सामग्री को इंगित करने के 3 तरीके हैं:
src
के माध्यम से एक URL इंगित करना (URL क्रॉस ओरिजिन या समान ओरिजिन हो सकता है)
data:
प्रोटोकॉल का उपयोग करके सामग्री इंगित करने के लिए src
के माध्यम से
सामग्री इंगित करने के लिए srcdoc
के माध्यम से
माता-पिता और बच्चे के वेरिएबल्स तक पहुँच
यदि आप पिछले html को http सर्वर (जैसे python3 -m http.server
) के माध्यम से एक्सेस करते हैं, तो आप देखेंगे कि सभी स्क्रिप्ट्स निष्पादित होंगी (क्योंकि इसे रोकने के लिए कोई CSP नहीं है)।, माता-पिता किसी भी iframe के अंदर secret
var तक पहुँच नहीं पाएंगे और केवल iframes if2 और if3 (जिन्हें समान-साइट माना जाता है) मूल विंडो में secret तक पहुँच सकते हैं।
ध्यान दें कि if4 को null
मूल माना जाता है।
कृपया ध्यान दें कि निम्नलिखित बायपास में iframed पृष्ठ के लिए प्रतिक्रिया में कोई CSP हेडर नहीं है जो JS निष्पादन को रोकता है।
script-src
का self
मान data:
प्रोटोकॉल या srcdoc
विशेषता का उपयोग करके JS कोड के निष्पादन की अनुमति नहीं देगा।
हालांकि, CSP का none
मान उन iframes के निष्पादन की अनुमति देगा जो src
विशेषता में एक URL (पूर्ण या केवल पथ) डालते हैं।
इसलिए, यह संभव है कि एक पृष्ठ के CSP को बायपास किया जाए:
ध्यान दें कि पिछला CSP केवल इनलाइन स्क्रिप्ट के निष्पादन की अनुमति देता है।
हालांकि, केवल if1
और if2
स्क्रिप्ट निष्पादित होने जा रही हैं लेकिन केवल if1
माता-पिता के रहस्य तक पहुँच सकेगा।
इसलिए, यह संभव है कि यदि आप सर्वर पर एक JS फ़ाइल अपलोड कर सकते हैं और इसे iframe के माध्यम से लोड कर सकते हैं, तो CSP को बायपास किया जा सकता है, भले ही script-src 'none'
हो। यह संभावित रूप से एक ही साइट JSONP एंडपॉइंट का दुरुपयोग करके भी किया जा सकता है।
आप इसे निम्नलिखित परिदृश्य के साथ परीक्षण कर सकते हैं जहाँ एक कुकी चुराई जाती है, भले ही script-src 'none'
हो। बस एप्लिकेशन चलाएँ और इसे अपने ब्राउज़र के साथ एक्सेस करें:
Iframe के भीतर का सामग्री sandbox
विशेषता के उपयोग के माध्यम से अतिरिक्त प्रतिबंधों के अधीन हो सकता है। डिफ़ॉल्ट रूप से, यह विशेषता लागू नहीं होती है, जिसका अर्थ है कि कोई प्रतिबंध नहीं है।
जब उपयोग किया जाता है, तो sandbox
विशेषता कई सीमाएँ लगाती है:
सामग्री को इस तरह से माना जाता है जैसे कि यह एक अद्वितीय स्रोत से उत्पन्न होती है।
फॉर्म जमा करने का कोई प्रयास अवरुद्ध होता है।
स्क्रिप्ट का निष्पादन निषिद्ध है।
कुछ APIs तक पहुँच अक्षम है।
यह लिंक को अन्य ब्राउज़िंग संदर्भों के साथ बातचीत करने से रोकता है।
<embed>
, <object>
, <applet>
या समान टैग के माध्यम से प्लगइन्स का उपयोग निषिद्ध है।
सामग्री के शीर्ष स्तर के ब्राउज़िंग संदर्भ में सामग्री द्वारा नेविगेशन को रोका जाता है।
स्वचालित रूप से सक्रिय होने वाली सुविधाएँ, जैसे वीडियो प्लेबैक या फॉर्म नियंत्रणों का ऑटो-फोकसिंग, अवरुद्ध होती हैं।
विशेषता का मान खाली छोड़ा जा सकता है (sandbox=""
) ताकि उपरोक्त सभी प्रतिबंध लागू हों। वैकल्पिक रूप से, इसे विशिष्ट मानों की एक स्पेस-सेपरेटेड सूची पर सेट किया जा सकता है जो iframe को कुछ प्रतिबंधों से छूट देती है।
निम्नलिखित पृष्ठों की जांच करें:
Bypassing SOP with Iframes - 1Bypassing SOP with Iframes - 2Blocking main page to steal postmessageSteal postmessage modifying iframe locationLearn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)