#7 XXE漏洞基础
xml基础知识
要了解xxe漏洞,那么一定得先明白基础知识,了解xml文档的基础组成。XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素
xml文档的构建模块
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:元素、属性、实体、PCDATA、CDATA
下面是每个构建模块的简要描述。
1,元素
元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的。
实例:
<body>body text in between</body>
<message>some message in between</message>
空的 HTML 元素的例子是 “hr”、”br” 以及 “img”。
2,属性
属性可提供有关元素的额外信息
实例:
<img src=”computer.gif” />
3,实体
实体是用来定义普通文本的变量。实体引用是对实体的引用。
4,PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
5,CDATA
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。
DTD(文档类型定义)
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
DTD 可以在 XML 文档内声明,也可以外部引用。
1,内部声明:<!DOCTYPE 根元素 [元素声明]> ex: <!DOCTYOE test any>
完整实例:
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
2,外部声明(引用外部DTD):<!DOCTYPE 根元素 SYSTEM “文件名”> ex:<!DOCTYPE test SYSTEM ‘http://www.test.com/evil.dtd’>
完整实例:
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
而note.dtd的内容为:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
DTD实体
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。
实体又分为一般实体和参数实体
1,一般实体的声明语法:<!ENTITY 实体名 “实体内容“>
引用实体的方式:&实体名;
2,参数实体只能在DTD中使用,参数实体的声明格式: <!ENTITY % 实体名 “实体内容“>
引用实体的方式:%实体名;
1,内部实体声明:<!ENTITY 实体名称 “实体的值”> ex:<!ENTITY eviltest “eviltest”>
完整实例:
<?xml version=”1.0″?>
<!DOCTYPE test [
<!ENTITY writer “Bill Gates”>
<!ENTITY copyright “Copyright W3School.com.cn”>
]>
<test>&writer;©right;</test>
2,外部实体声明:<!ENTITY 实体名称 SYSTEM “URI”>
完整实例:
<?xml version=”1.0″?>
<!DOCTYPE test [
<!ENTITY writer SYSTEM “http://www.w3school.com.cn/dtd/entities.dtd”>
<!ENTITY copyright SYSTEM “http://www.w3school.com.cn/dtd/entities.dtd”>
]>
<author>&writer;©right;</author>
在了解了基础知识后,下面开始了解xml外部实体注入引发的问题。
3种XXE不同攻击方式
Web/移动应用程序,Word处理器,Web服务和内容管理平台使用可扩展标记语言(XML)格式在人类可读和机器可读格式的系统之间存储和传输数据。如果未正确验证XML数据的输入,则可能使您容易受到许多不同类型的攻击,例如SQL注入,跨站点脚本,服务器端请求伪造,
本地文件读取,拒绝服务以及(此时的英雄) post)XML外部实体(XXE)注入攻击。本文主要关注使用XXE注入攻击的不同攻击场景。
什么是XXE?
XML外部实体(XXE)注入是一个严重的缺陷,允许攻击者读取服务器上的本地文件,访问内部网络,扫描内部端口或在远程服务器上执行命令。它针对解析XML的应用程序。
当包含对外部实体的引用的XML输入由弱配置的XML解析器处理时,会发生此攻击。攻击者通过在XML数据中嵌入恶意内联DOCTYPE定义来利用它。当Web服务器处理恶意XML输入时,实体将被扩展,这可能会导致攻击者访问Web服务器的文件系统,远程文件系统访问或通过HTTP/HTTPS建立与任意主机的连接。
示例攻击场景
- 来自服务器的本地文件劫持
- 通过文件上载功能访问服务器文件
- 具有递归实体扩展的DOS攻击
攻击场景1:本地文件劫持服务器
当攻击者在请求中发送格式错误的XML payload时,服务器处理此payload并发回包含敏感信息的响应,例如服务器的本地文件,应用程序配置文件,内部网络详细信息等。在少数情况下,在使用精心设计的XXE payload提交HTTP请求时,服务器使用服务器的/etc/passwd/进行响应。
快照1:具有恶意INLINE DOCTYPE定义的HTTP请求 – 具有相应的响应
但是,在许多情况下,服务器可能不会发回响应。攻击者可以利用此方法的另一种方法是在XXE payload中包含URL(攻击者控制的服务器)。当服务器解析payload时,它会对攻击者控制的服务器进行额外调用,从而攻击者侦听受害者的服务器并捕获本地文件,服务器配置文件和其他服务器详细信息等信息。
以下图像(快照2和3)显示URL包含在XXE payload中。提交HTTP请求后,服务器会对攻击者控制的服务器进行额外调用。因此,攻击者侦听来自受害者系统的请求并捕获服务器详细信息(/etc/passwd/)
快照2:包含受攻击控制URL的HTTP请求
快照3:受害者的服务器向攻击者的服务器发出额外的呼叫
攻击场景2:通过“ 文件上载” 功能访问服务器文件
许多应用程序支持“文件上载”功能(XLSX,DOCX,PPTX,SVG或任何XML MIME类型格式)以供进一步处理。通常,这些文件具有XML MIME类型。攻击者可以利用固有的XML类型并上传嵌入了XXE payload的恶意文件。当服务器解析文件时,执行包含XXE有效载荷的文件,导致客户端服务器的敏感信息泄露。请注意,在站点的一部分上解析XML的库(例如API)可能与解析上载文件的库不同。
快照4:将XXE payload嵌入到Docx文件中.Docx(就像pptx和xlsx一样)本质上是Open XML(OXML)文件。
快照5:将恶意docx文件上载到(示例)应用程序
快照6:文件提交后,服务器会响应服务器/ etc / passwd的敏感信息
攻击场景3:使用递归实体扩展进行DOS攻击
这种攻击也称为Billion Laugh攻击,XML Bomb或递归实体扩展攻击。当解析器不断扩展其自身内的每个实体时会发生此攻击,这会使服务器过载并导致服务器关闭。
从上图中,我们看到当解析器开始解析XML文件时,最初是“&lol9;” 引用实体“lol9”来获取值,但“lol9”本身再次引用“lol8”实体。就像一个实体引用了十个实体一样,这十个实体再次引用其他实体。这样,当解析器扩展实体时,CPU的利用率会大幅增加,从而导致服务器崩溃并变得无响应。
结论
在OWASP排名前10位的2017年排行榜中排名第四,XXE并不是一个新的漏洞,而是一个在最近的应用程序中越来越受欢迎的漏洞。成功的XXE攻击可能会导致安全和业务功能方面的巨大损失。阻止XXE攻击的几种方法包括。
禁用外部实体。必要时,仅允许受限和受信任的外部链接
关闭XML中的实体扩展
仔细检查所使用的XML库的版本是否容易受到XXE的攻击。
在解析之前验证用户提供的外部/内部实体和INLINE DOCTYPE定义的输入。
补充:
https://www.cnblogs.com/r00tuser/p/7255939.html
https://www.we45.com/blog/3-ways-an-xxe-vulnerability-could-hit-you-hard