admin管理员组文章数量:1794759
2024全网最全面及最新且最为详细的网络安全技巧六 之 XML实体注入漏洞;典例分析EXP以及 如何防御 ———— 作者:LJS
6.1 xml基础知识
要了解xxe漏洞,那么一定得先明白基础知识,了解xml文档的基础组成。
XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素
xml文档的构建模块
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
元素
属性
实体
PCDATA
CDATA
下面是每个构建模块的简要描述。
1,元素 元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的。 实例:
代码语言:javascript代码运行次数:0运行复制<body>body text in between</body>
<message>some message in between</message>
空的 HTML 元素的例子是 "hr"、"br" 以及 "img"。
2,属性 属性可提供有关元素的额外信息 实例:
代码语言:javascript代码运行次数:0运行复制<img src="computer.gif" />
3.实体是用来定义普通文本的变量。实体引用是对实体的引用。
4,PCDATA PCDATA 的意思是被解析的字符数据(parsed character data)。 PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
代码语言:javascript代码运行次数:0运行复制<age>zhoujielun age > chenguanxi age</age>
5,CDATA CDATA 的意思是字符数据(character data)。 CDATA 是不会被解析器解析的文本。
DTD(文档类型定义)
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
DTD 可以在 XML 文档内声明,也可以外部引用。
1,内部声明: ex: <!DOCTYOE test any>
完整实例:
<?xml version="1.0"?>
<!DOCTYPE note [
<!-- 定义 DTD(文档类型定义) -->
<!ELEMENT note (to,from,heading,body)> <!-- 定义 note 元素包含 to, from, heading, body 子元素 -->
<!ELEMENT to (#PCDATA)> <!-- 定义 to 元素包含文本数据 (#PCDATA) -->
<!ELEMENT from (#PCDATA)> <!-- 定义 from 元素包含文本数据 (#PCDATA) -->
<!ELEMENT heading (#PCDATA)> <!-- 定义 heading 元素包含文本数据 (#PCDATA) -->
<!ELEMENT body (#PCDATA)> <!-- 定义 body 元素包含文本数据 (#PCDATA) -->
]>
<note>
<!-- note 元素开始 -->
<to>George</to> <!-- to 子元素包含文本数据 George -->
<from>John</from> <!-- from 子元素包含文本数据 John -->
<heading>Reminder</heading> <!-- heading 子元素包含文本数据 Reminder -->
<body>Don't forget the meeting!</body> <!-- body 子元素包含文本数据 Don't forget the meeting! -->
</note>
2,外部声明(引用外部DTD): ex:<!DOCTYPE test SYSTEM '.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的内容为
代码语言:javascript代码运行次数:0运行复制<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
DTD实体
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。
实体又分为一般实体和参数实体
1,一般实体的声明语法: 引用实体的方式:&实体名;
2,参数实体只能在DTD中使用,参数实体的声明格式: 引用实体的方式:%实体名;
1,内部实体声明:<!ENTITY eviltest "eviltest">
完整实例:
代码语言:javascript代码运行次数:0运行复制<?xml version="1.0"?>
内部DTD实体申明
<!DOCTYPE test [
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School">
]>
<test>&writer;©right;</test>
2,外部实体声明: 完整实例:
代码语言:javascript代码运行次数:0运行复制<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer SYSTEM ".dtd">
<!ENTITY copyright SYSTEM ".dtd">
]>
<author>&writer;©right;</author>
在了解了基础知识后,下面开始了解xml外部实体注入引发的问题。
- 6.2 XXE的攻击与危害(XML External Entity)
- 1,何为XXE?
- 答: xxe也就是xml外部实体注入。也就是上文中加粗的那一部分。
- 2,怎样构建外部实体注入?
- 方式一:直接通过DTD外部实体声明 XML内容
- 方式二:通过DTD文档引入外部DTD文档,再引入外部实体声明 XML内容:
- DTD文件内容:
- 方式三:通过DTD外部实体声明引入外部实体声明 .
- 好像有点拗口,其实意思就是先写一个外部实体声明,然后引用的是在攻击者服务器上面的外部实体声明 具体看例子,XML内容
- dtd文件内容:
- 3,支持的协议有哪些?
- 不同程序支持的协议如下图:
- 其中php支持的协议会更多一些,但需要一定的扩展支持。
- 4,产生哪些危害?
- XXE危害1:读取任意文件
- 该CASE是读取/etc/passwd,有些XML解析库支持列目录,攻击者通过列目录、读文件,获取帐号密码后进一步攻击,如读取tomcat-users.xml得到帐号密码后登录tomcat的manager部署webshell。
- 另外,数据不回显就没有问题了吗?如下图,
- 不,可以把数据发送到远程服务器,
- 远程evil.dtd文件内容如下:
- 触发XXE攻击后,服务器会把文件内容发送到攻击者网站
- XXE危害2:执行系统命令
- 该CASE是在安装expect扩展的PHP环境里执行系统命令,其他协议也有可能可以执行系统命令。
- XXE危害3:探测内网端口
- 该CASE是探测192.168.1.1的80、81端口,通过返回的“Connection refused”可以知道该81端口是closed的,而80端口是open的。
- XXE危害4:攻击内网网站
- 该CASE是攻击内网struts2网站,远程执行系统命令。
6.3 如何防御xxe攻击
方案一、使用开发语言提供的禁用外部实体的方法
代码语言:javascript代码运行次数:0运行复制//PHP
libxml_disable_entity_loader(true);
代码语言:javascript代码运行次数:0运行复制//JAVA
// 创建一个新的 DocumentBuilderFactory 实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 设置不展开实体引用
dbf.setExpandEntityReferences(false);
方案二、过滤用户提交的XML数据 关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-07-13,如有侵权请联系 cloudcommunity@tencent 删除漏洞数据xml网络安全技巧本文标签: 2024全网最全面及最新且最为详细的网络安全技巧六 之 XML实体注入漏洞典例分析EXP以及 如何防御作者LJS
版权声明:本文标题:2024全网最全面及最新且最为详细的网络安全技巧六 之 XML实体注入漏洞;典例分析EXP以及 如何防御 ———— 作者:LJS 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754687216a1705213.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论