1、概念

XXE(XML External Entity)是指xml外部实体攻击漏洞。XML外部实体攻击是针对解析XML输入的应用程序的一种攻击。当包含对外部实体的引用的XML输入被弱配置XML解析器处理时,就会发生这种攻击。这种攻击通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
(简单来说,XXE就是XML外部实体注入。当应用程序允许引用外部实体时,通过构造恶意内容,就可以导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。)

2、文档的基础组成

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素;

3、漏洞原理

3.1、DTD

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

3.1.1、内部的 DOCTYPE 声明:

<!DOCTYPE 根元素 [元素声明]>

3.1.2、外部的 DOCTYPE 声明:

<!DOCTYPE 根元素 SYSTEM “文件名”>

这是包含 DTD 的 “note.dtd” 文件

3.1.3、DTD实体

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
实体引用是对实体的引用。
实体可在内部或外部进行声明。

DTD内部实体声明:
<!ENTITY 实体名称 “实体的值”>

DTD外部实体声明:
<!ENTITY 实体名称 SYSTEM “URI/URL”>

4、XML外部实体

XML,可拓展的标记语言,(eXtensible Markup Language),用于传输和存储数据。
XML文档实例:

4.1、XML“外部实体”实例:


可以在DOCTYPE头部标签中通过SYSTEM关键字定义“实体”,这些“实体”可以访问本地或远程的内容。SYSTEM告诉XML解释器,从URI中读取实体的内容。攻击者可以通过实体将自定义的值发送给应用程序,然后让应用程序去呈现,比如上面就是把实体定义为passwd文件,让XML解释器去读取文件。

4.1.1、攻击方法:

**方式一:**直接通过DTD外部实体声明
XML内容

**方式二:**通过DTD文档引入外部DTD文档,再引入外部实体声明
XML内容:

DTD文件内容:

**方式三:**通过DTD外部实体声明引入外部实体声明
好像有点拗口,其实意思就是先写一个外部实体声明,然后引用的是在攻击者服务器上面的外部实体声明
具体看例子,XML内容

dtd文件内容:

5、如何发现XXE漏洞

5.1、寻找XML输入点

比如Content-Type:text/xml, post的数据包含XML格式,如:
<forgot><username>admin</username></forgot>
请求头中添加Content-Type:text/xml,或Content-type:application/xml
同时,POST中添加payload

5.2、 通过关键字,在代码中查找XML解释器,确认解释器是否针对此漏洞做了安全限制(禁用外部实体、过滤关键字等)

关键字:DocumentBuilderFactory等

6、危害:

6.1.任意文件读取(如上)


通过提交自动以URI,可以读取任意文件(本地或远程)。
还可以通过DTD文档引入外部DTD文档,再引入外部实体声明,如下:

以上输入有回显的情况,/etc/passwd可以直接被显示出来,无回显的情况,需要把文件外发至远程服务器,具体如下:

6.2、拒绝服务攻击

原理为:构造恶意的XML实体文件耗尽可用内存,因为许多XML解析器在解析XML文档时倾向于将它的整个结构保留在内存中,解析非常慢,造成了拒绝服务器攻击。

6.3、测试后端服务器的开放端口


通过返回的“Connection refused”可以知道该81端口是closed的,而80端口是open的。

6.4、后端WEB漏洞如果可以通过URL加以利用,可造成WEB漏洞攻击

6.5、命令执行


PHP要开启PECL上的Expect扩展。
危害:
可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害

7、防御:

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

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

7.2、过滤用户提交的XML数据

过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

7.3、使用第三方应用代码及时升级补丁

XXE(xml外部实体攻击)相关推荐

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

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

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

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

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

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

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

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

  5. XXE(XML外部实体注入)详解

    1. XXE漏洞描述 XXE(XML External Entity Injection)又称为"XML外部实体注入漏洞". 当允许引用外部实体时,通过构造恶意内容,就可能导致任意 ...

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

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

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

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

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

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

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

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

最新文章

  1. 收藏! Linux 服务器必备的安全设置
  2. PyCaret-低代码ML库使用指南
  3. 【知识星球】分组卷积最新进展,全自动学习的分组有哪些经典模型?
  4. LeetCode Longest Valid Parentheses
  5. docker云计算_为什么Docker成为虚拟化和云计算的新热潮?
  6. POJ 2777 线段树
  7. 比_thread高级的threading模块,对比释放锁例子
  8. Spring bean注入方式
  9. c#压缩解压缩bzip2、tar、zip、gzip、deflate、ntdll
  10. lingo程序与c语言的区别,lingo与高级语言连接(以C++)为例
  11. DataFrame基础操作
  12. SAP成都研究院飞机哥:程序猿和飞机的不解之缘
  13. 分形理论在图像处理中的应用研究(综述)
  14. 微信支付服务商平台(商户平台)扫码登录后提示“登录超时,请重新登录”时该怎么处理?
  15. STM32锁死解锁方法
  16. CSU_1505_酷酷的单词
  17. 3万字智慧工业园区整体解决方案
  18. TCP协议和UDP协议的区别及其应用
  19. 每日新闻:百度首个无人驾驶运营项目落户武汉;微软叫停Linux专利战;网易携手芬兰电信Elisa;瑞星华为联合发布云安全解决方案...
  20. Blue Indian's Puzzler Keygenme

热门文章

  1. tecplot脚本在Linux系统下运行,Linux系统下安装Tecplot的步骤详解
  2. java applet编程_第二十讲 Java Applet程序设计
  3. FMEA软件——你们的FMEA还“活着”吗?
  4. SAP中采购自动评估收货结算基本应用分析
  5. 简单的php员工信息表格代码,员工信息表程序(自写,待优化)
  6. Linux驱动开发学习笔记-电容触摸屏驱动
  7. 谷歌地图卫星下周发射 分辨率提高至0.5米
  8. 富头像上传编辑器(flash头像上传插件)
  9. 自定义Camera系列之:SurfaceView + Camera2
  10. 2022年浙江大华编程题