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版本=“ 1.0” encoding =“ utf-8”?> 381

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

<?xml版本=“ 1.0” encoding =“ utf-8”?> <!doctype foo [<!entity xxe xxe system“ file://// etc/passwd”>]> &xxe;

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

无效的产品ID:root:x:0:0:root:/root:/bin/bash守护程序:x:1:1:daemon:/usr/sbin:/usr/usr/sbin/sbin/nologin bin:x:2:2:2:2:2:2:2:2:2:2:2:2:2:2:bin:/bin:/usr/sbin/nologin ...

笔记

使用现实世界的XXE漏洞,已提交的XML中通常会有大量的数据值,其中任何一个都可以在应用程序的响应中使用。要系统地测试XXE漏洞,通常需要通过使用定义的实体并查看其是否出现在响应中,从而单独测试XML中的每个数据节点。

利用XXE执行SSRF攻击

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

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

在以下XXE示例中,外部实体将使服务器向组织基础结构内的内部系统提出后端HTTP请求:

<!doctype foo [<!entity xxe系统“ http://internal.vulnerable-websitbeplay体育能用吗e.com/”>]>]>

盲人XXE漏洞

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

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

寻找XXE注射的隐藏攻击表面

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

Xinclude攻击

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

在这种情况下,您无法进行经典的XXE攻击,因为您无法控制整个XML文档,因此无法定义或修改Doctype元素。但是,您可能可以使用Xinclude反而。Xinclude是XML规范的一部分,它允许从子登机料构建XML文档。你可以放置一个Xinclude在XML文档中的任何数据值中攻击,因此可以在只能控制将单个数据的数据放置在服务器端XML文档中的情况下进行攻击。

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

XXE通过文件上传攻击

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

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

XXE通过修改的内容类型攻击

大多数帖子请求使用HTML表单生成的默认内容类型,例如应用/X-WWW-Form-urlenCoded。一些网站期beplay体育能用吗望以这种格式接收请求,但会忍受包括XML在内的其他内容类型。

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

发布/操作http/1.0内容类型:应用程序/x-www-form-urlencoded内容长度:7 foo = bar

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

发布/操作http/1.0 content-type:text/xml内容长度:52 <?xml版本=“ 1.0” encoding =“ utf-8”?> bar bar

如果应用程序可容忍消息主体中包含XML的请求,并以XML解析,则可以通过重新格式化请求使用XML格式来达到隐藏的XXE攻击表面。

如何查找和测试XXE漏洞

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

手动测试XXE漏洞通常涉及:

  • 测试文件检索通过根据知名操作系统文件定义外部实体,并在应用程序响应中返回的数据中使用该实体。
  • 测试盲人XXE漏洞通过根据您控制的系统定义基于URL的外部实体,并监视与该系统的交互。Burp合作者客户端对于这个目的而言是完美的。
  • 通过使用使用一个Xinclude攻击尝试检索众所周知的操作系统文件。

笔记

请记住,XML只是数据传输格式。确保您还测试了其他基于XML的功能,例如其他漏洞XSSSQL注入。您可能需要使用XML逃生序列编码有效载荷以避免打破语法,但您也可以将其使用到混淆您的攻击为了绕过弱防御能力。

如何防止XXE漏洞

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

通常,足以禁用解决外部实体并禁用支持的支持Xinclude。这通常可以通过配置选项或通过编程方式覆盖默认行为来完成。有关XML解析库或API的文档,以获取有关如何禁用不必要功能的详细信息。

免费注册以跟踪您的学习进度

通过Portswigger的网络安全学院工作的好处beplay官网可以赌beplay体育能用吗
  • 练习在现实目标上利用漏洞。

  • 记录您从学徒到专家的发展。

  • 看看您在我们的名人堂中排名。

已经有一个帐户?在此登录