1. beplay体育能用吗网络安全学院
  2. XXE注入

XML外部实体(XXE)注入

在本节中,我们将解释XML外部实体注入的内容,描述了一些常见的例子,解释了如何查找和利用各种XXE注入,并总结如何防止XXE注入攻击。

什么是XML外部实体注入?

XML外部实体注入(也称为XXE)是一个web安全漏洞,它允许攻击者干扰应用程序对XML数据的处理。beplay体育能用吗它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统交互。

在某些情况下,通过利用XXE漏洞执行攻击,攻击者可以升级XXE攻击,从而危及底层服务器或其他后端基础设施服务器端请求伪造(SSRF)攻击。

XXE注入

XXE漏洞如何出现?

某些应用程序使用XML格式在浏览器和服务器之间传输数据。执行此操作的应用程序几乎始终使用标准库或平台API处理服务器上的XML数据。XXE漏洞出现,因为XML规范包含各种潜在的危险功能,并且标准解析器也支持这些功能,即使它们通常不被应用程序使用。

XML外部实体是一种自定义XML实体类型,其定义值从声明的DTD外部加载。外部实体从安全角度尤其有趣,因为它们允许基于文件路径或URL的内容来定义实体。

XXE攻击的类型是什么?

有各种类型的XXE攻击:

利用XXE检索文件

要执行XXE注入攻击,从服务器的文件系统中检索任意文件,您需要以两种方式修改提交的XML:

  • 介绍(或编辑doctype.元素,它定义包含文件路径的外部实体。
  • 在应用程序响应中返回的XML中编辑数据值,以利用定义的外部实体。

例如,假设一个购物应用程序通过向服务器提交以下XML来检查产品的库存水平:

<?XML Version =“1.0”编码=“UTF-8”?>
< stockCheck > < productId > 381 < / productId > < / stockCheck >

该应用程序对XXE攻击没有特定的防御,因此您可以利用XXE漏洞来检索/ etc / passwd文件通过提交以下XXE有效载荷:

<?XML Version =“1.0”编码=“UTF-8”?>
< !DOCTYPE foo []> . exe
&xxe;

此XXE有效载荷定义了外部实体&xxe;的内容是谁的值/ etc / passwd文件中使用实体ProductId.价值。这会导致应用程序的响应包括文件内容:

无效的产品ID:root:x:0:0:root:/ root:/ bin / bash
守护进程:x:1:1:守护进程:/ usr / sbin:/ usr / sbin / nologin
垃圾箱:x:2:2:垃圾箱:/ bin:/ usr / sbin / nologin

请注意

对于真实的XXE漏洞,提交的XML中通常会有大量数据值,其中任何一个都可能在应用程序的响应中使用。为了系统地测试XXE漏洞,您通常需要单独测试XML中的每个数据节点,方法是使用您定义的实体并查看它是否出现在响应中。

利用XXE执行SSRF攻击

除了检索敏感数据外,XXE攻击的另一个主要影响是它们可以被用来执行服务器端请求伪造(SSRF)。这是一个潜在的严重漏洞,在这个漏洞中,服务器端应用程序可能会向服务器可以访问的任何URL发出HTTP请求。

利用XXE漏洞执行SSRF攻击,您需要使用要定位的URL定义外部XML实体,并在数据值中使用定义的实体。如果您可以在应用程序响应中返回的数据值中使用定义的实体,则您将能够在应用程序的响应中查看来自URL的响应,因此获得与后端系统的双向交互。如果没有,那么你只能执行盲人SSRF.攻击(仍可能产生严重后果)。

在以下XXE示例中,外部实体将导致服务器对组织基础架构内的内部系统进行后端HTTP请求:

< !DOCTYPE foo []>

盲目XXE漏洞

许多XXE漏洞的实例是盲目的。这意味着应用程序不会在其响应中返回任何已定义的外部实体的值,因此无法返回服务器端文件的直接检索。

仍然可以检测和利用盲目XXE漏洞,但需要更先进的技术。您有时可以使用带外技术来查找漏洞并利用它们以exfiltrate数据。您有时可以触发XML解析错误,导致在错误消息中披露敏感数据。

寻找XXE注入的隐藏攻击面

在许多情况下,XXE注入漏洞的攻击表面显而易见,因为应用程序的正常HTTP流量包括包含XML格式数据的请求。在其他情况下,攻击表面不太可见。但是,如果在正确的位置看,您将找到不包含任何XML的请求的XXE攻击曲面。

XInclude攻击

有些应用程序接收客户提交的数据,将服务器端嵌入到XML文档中,然后解析文档。当客户端提交的数据被放入后端SOAP请求中时,会发生这种情况,然后由后端SOAP服务处理。

在这种情况下,您不能执行典型的XXE攻击,因为您不能控制整个XML文档,因此不能定义或修改doctype.元素。但是,你可以使用Xinclude.代替。Xinclude.是XML规范的一部分,它允许从子文档构建XML文档。你可以在Xinclude.在XML文档中的任何数据值中进行攻击,因此在只控制放置在服务器端XML文档中的单个数据项的情况下,可以执行攻击。

执行A.Xinclude.攻击,你需要参考Xinclude.命名空间并提供您希望包含的文件的路径。例如:

< foo xmlns:ξ= " http://www.w3.org/2001/XInclude " >
< xi:包括解析= " text " href = " file: / / / etc / passwd”/ > < / foo >

通过文件上传XXE攻击

某些应用程序允许用户上传然后将其处理服务器端的文件。某些常用文件格式使用XML或包含XML子组件。基于XML的格式的示例是Office文档格式,如DOCX和SVG等图像格式。

例如,应用程序可能允许用户在上载后在服务器上上传图像,并在服务器上进行处理或验证这些。即使应用程序期望接收像PNG或JPEG等格式,所使用的图像处理库可能支持SVG图像。由于SVG格式使用XML,攻击者可以提交恶意SVG映像,因此达到隐藏的攻击表面以进行XXE漏洞。

XXE通过修改内容类型进行攻击

大多数POST请求使用由HTML表单生成的默认内容类型,例如Application / X-WWW-Form-Urlencoded。某些网站期beplay体育能用吗望以此格式接收请求,但会容忍其他内容类型,包括XML。

例如,如果正常请求包含以下内容:

POST HTTP / 1.0 /行动
内容类型:应用程序/ X-WWW-Form-Urlencoded
内容长度:7

foo = bar.

然后,您可能能够提交以下请求,同样的结果:

POST HTTP / 1.0 /行动
的content - type: text / xml
内容长度:52

<?XML Version =“1.0”编码=“UTF-8”?> bar

如果应用程序容忍包含邮件正文中的XML的请求,并将身体内容解析为XML,只需通过重新格式化请求来使用XML格式来达到隐藏的XXE攻击曲面。

如何查找和测试XXE漏洞

绝大多数XXE漏洞可以使用Burp Suite的快速可靠地发现bepaly下载

手动测试XXE漏洞通常包括:

  • 测试文件检索通过基于众所周知的操作系统文件定义外部实体,并使用在应用程序响应中返回的数据中的该实体。
  • 测试盲目XXE漏洞通过将外部实体定义为您来控制的系统,以及监视与该系统的交互的系统。打嗝合作者客户非常适合这个目的。
  • 通过使用。XML测试服务器端XML文档中用户提供的非XML数据是否容易被包含XInclude攻击试图检索一个众所周知的操作系统文件。

如何防止XXE漏洞

实际上,所有XXE漏洞都会出现,因为应用程序的XML解析库支持应用程序不需要或打算使用的潜在危险的XML功能。预防XXE攻击的最简单和最有效的方法是禁用这些功能。

通常,禁用外部实体的解析和禁用对Xinclude.。这通常可以通过配置选项或通过编程覆盖默认行为来完成。有关如何禁用不必要功能的详细信息,请参阅XML解析库或API的文档。

使用Burp套件查找XXE漏洞

通过PortSwigger的网络安全学院工作的好处beplay官网可以赌beplay体育能用吗

从Web安全学院开始,在那里你可以练习利用beplay体育能用吗现实目标的漏洞。和它的自由!

已经有账户了?这里登录