当前位置:   article > 正文

「 典型安全漏洞系列 」05.XML外部实体注入XXE详解_外部实体注入漏洞的攻击思

外部实体注入漏洞的攻击思

1. XXE简介

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

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

在这里插入图片描述

1.1. XML介绍

可扩展标记语言(Extensible Markup Language,XML)包含两点:

  • 标记:指计算机能理解的信息符号(标签),通过这些标签,计算机之间可以处理包含各种信息的HTML、文章等;
  • 可扩展性:使用者可以根据需要自行定义标签。

下面是一个包含XML声明、文档类型定义(Document Type Definition,DTD)的XML文件样例。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
  <!ELEMENT root (element1, element2)>
  <!ELEMENT element1 (#PCDATA)>
  <!ELEMENT element2 (#PCDATA)>
]>

<root>
  <element1>Value 1</element1>
  <element2>Value 2</element2>
  <attribute name="attr1">Value A</attribute>
</root>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Note:DTD用于定论XML文档的结构,它作为XML文件的一部分位于XML声明和文档元素(样例中<root>节点下的元素)之间。

外部实体语法格式为:<!ENTITY 实体名 SYSTEM "URL/URI",这里的URL可以使用file://协议,因此可以从XML文件中加载外部实体。

2. 攻击原理

一些应用程序使用XML格式在浏览器和服务器之间传输数据。这样做的应用程序实际上总是使用标准库或平台API来处理服务器上的XML数据。XXE漏洞的出现是因为XML规范包含各种潜在的危险功能,而标准解析器支持这些功能,即使应用程序通常不使用这些功能

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

3. 攻击思路

攻击者通常首先扫描目标系统,寻找存在安全漏洞的XML文档。然后,构造恶意的外部实体引用,并将其插入到目标XML文档中。最后,通过发送带有恶意实体引用的XML文档给目标系统的用户,诱使用户打开这个文档,从而实现远程代码执行或本地文件读取等攻击目的。

4. 防御方法

  • 使用开发语言提供的禁用外部实体的方法:实际上,所有XXE漏洞都是由于应用程序的XML解析库支持应用程序不需要或不打算使用的潜在危险的XML功能而产生的。防止XXE攻击的最简单、最有效的方法是禁用这些功能;
  • 输入过滤:过滤用户提交的XML数据,关键词<!DOCTYPE、<!ENTITY SYSTEM、PUBLIC

Note:通常,禁用外部实体的解析和禁用对XInclude的支持就足够了。这通常可以通过配置选项或通过编程重写默认行为来完成。有关如何禁用不必要的功能的详细信息,请参阅XML解析库或API的文档。

5. 攻击案例

5.1. 环境介绍

攻击者利用XXE漏洞,通过回显获取系统敏感信息,环境地址:https://portswigger.net/web-security/xxe/lab-exploiting-xxe-to-retrieve-files

5.2. 攻击细节

1、发现请求参数包含XML格式数据
访问产品页面,单击“检查库存”,并在Burp Suite中拦截生成的POST请求,截图如下
在这里插入图片描述

2、检测XML是否被解析及是否支持DTD引用外部实体,有回显或者报错
首先在XML声明和stockCheck元素之间插入以下外部实体定义:<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>,然后将productId编号替换为对外部实体的引用:&xxe;。响应应包含“Invalid product ID:”,后跟/etc/passwd文件的内容。
在这里插入图片描述
完整的payload如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>

<stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>
  • 1
  • 2
  • 3

6. 参考

[1] https://portswigger.net/web-security/xxe


前期回顾
「 典型安全漏洞系列 」04.服务器端请求伪造SSRF详解
「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解
「 典型安全漏洞系列 」02.SQL注入详解
「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/612690
推荐阅读
相关标签
  

闽ICP备14008679号