xxe漏洞详解(xml外部实体注入)

前置知识

XML:XML使用 DTD(document type definition)文档类型定义来组织数据,格式统一,跨平台和语言,早已成为业界公认的标准。XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

json:JavaScaript对象表示法(JavaScript Object Notation),是存储和交换文本信息的语法。具有文本量更小、更快和更易解析的特点。Json和HTML不一样,HTML主要用于显示数据,JSON主要用于传递数据,所以一般作为数据的查询接口。

XXE

XML外部实体注入,XXE漏洞发生在应用程序解析XML输入时,XML文件的解析依赖libxml 库,而 libxml2.9 以前的版本默认支持并开启了对外部实体的引用,服务端解析用户提交的XML文件时,未对XML文件引用的外部实体(含外部一般实体和外部参数实体)做合适的处理,并且实体的URL支持 file:// 和 ftp:// 等协议,导致可加载恶意外部文件 和 代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。

XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件

那么如何构建外部实体注入呢?

方式一:直接通过DTD外部实体声明



]>
&b;

方式二:(一般实体)通过DTD外部实体声明引入外部DTD文档,再引入外部实体声明



]>
&b;
 
#而http://mark4z5.com/evil.dtd内容为

方式三:(参数实体)通过DTD外部实体声明引入外部DTD文档,再引入外部实体声明



]>
%b;
 
#http://mark4z5.com/evil.dtd文件内容

XXE是XML外部实体注入攻击,XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。

 

你可能感兴趣的:(漏洞原理)