一、 什么是XXE漏洞?
XXE (XML External Entity injection)XML 外部实体注入漏洞,如果XML 文件在引用外部实体时候,可以沟通构造恶意内容,可以导致读取任意文件,命令执行和对内网的攻击,这就是XXE漏洞, 这个漏洞需要大家还有一定的XML协议基础,因此为了更好的去理解漏洞本身原理,必须给大家普及一下XML相关的知识点。
二、 XML的基础知识点
需要大家安安静静好好看一下XML基础,这里给大家 提供一个学习参考地址:(https://www.w3cschool.cn/xml/xml-intro.html), 为了让大家快速理解上手,我梳理了一下, 提取了关键思路点如下:
2.1、什么是XML?
XML是可扩展的标记语言(eXtensible Markup Language),设计用来进行数据的传输和存储, 结构是树形结构,有标签构成,这点很想HTML语言。 但是XML和HTML有明显区别如下:
XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。
2.2、XML结构?
来看一个简单的XML 文件结构, 第一行XML的声明,第二 为根元素, 下面的to, from,heading和body 都是子元素,构成了一个出色的自我描述性的结构
Tove
Jani
Reminder
Don't forget me this weekend!
2.3 XML DTD (重点)
DTD全称为,Document Type Definition,中文翻译为文档类型定义,是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。
文档类型定义(DTD)可定义合法的XML文档构建模块。 它使用一系列合法的元素来定义文档的结构。
DTD 有两种声明的方法,一种是内部声明,一种是外部声明,我们下面开具体看一下:
DTD 的内部声明:
外部需要一个DTD的文件,比如:note.dtc
]>
Tove
Jani
Reminder
Don't forget me this weekend!
DTD的外部声明:
]>
Tove
Jani
Reminder
Don't forget me this weekend!
三、XXE漏洞的成因和危害?
3.1 漏洞成因
XML数据在传输中数据被修改,服务器执行被恶意插入的代码,最终实现攻击的目的,XXE漏洞就是在XML在外部声明的时候出现了问题。 看一下修改后的代码:
]>
&content;
3.2 漏洞危害
读取系统文件
执行系统命令
探测内网端口
攻击内部网络
四、XXE漏洞利用过程
4.1 环境介绍
OS: Centos 6.5 Linux
中间件:apache
xml的靶场测试环境:https://github.com/vulnspy/phpaudit-XXE
PHP: PHP Version 5.3.3 ,php要求的libxml2.8以下,截图如下:
4.2 读取系统文件
step1:为浏览器配置好burpsuit的代理(具体配置不在讲述)step2:打开靶场测试的index.php
step3: 选择“SimpleXMLElement.php”测试,点击"submit"
step5:把数据放到repeater 模块step6:提交数据到服务器,读取了/etc/passwd 文件内容
五、 加固建议
禁止使用DTD的外部声明
对用户提交过来的XML数据进行过滤
备: 本人也在学习中,如果有不准确的地方,希望大牛能多多指正,也希望大家分享的XXE漏洞更多的攻击手法。
领取专属 10元无门槛券
私享最新 技术干货