xml实体攻击

分为外部实体攻击和内部实体攻击。

外部通用实体举例:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE admin[<!ENTITY user SYSTEM "file:///D:/user.txt">]><user><username>&user;</username><age>12</age></user>

user.txt如下:

chuchu

最终拿到的xml是这样的:

<user><username>chuchu</username><age>12</age></user>

相当于xml为我们提供了一种动态设置标签值的强大能力(果然每种语言都有要成为通用语言的野心啊。。。)

外部实体还有一种类型叫“参数实体”,其所能提供的动态能力更强,当然,可能更危险。

外部实体的英文翻译是XXE(Xml eXternal Entity)。

内部实体举例:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE a1 [<!ENTITY a1 "a1"><!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;"><!ENTITY a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;"><!ENTITY a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;">
]>
<user><username>&a4;</username><age>12</age></user>

内部实体可以递归展开,常用来做XML Entity Expansion攻击,造成Dos(Denial of service)。

解决方法

如果我们用sax解析xml,通常会使用:

SAXReader.createDefault

该方法会禁掉如下一些实体特性:

public static SAXReader createDefault() {SAXReader reader = new SAXReader();try {reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);reader.setFeature("http://xml.org/sax/features/external-general-entities", false);reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);} catch (SAXException var2) {}return reader;}

这些feature的详细说明:

// This is the PRIMARY defense. If DTDs (doctypes) are disallowed, almost all
// XML entity attacks are prevented
// Xerces 2 only - http://xerces.apache.org/xerces2-j/features.html#disallow-doctype-decl
// 因为实体都定义在doctype里,所以禁掉doctype,无论外部还是内部实体攻击就都不存在了
FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
dbf.setFeature(FEATURE, true);// If you can't completely disable DTDs, then at least do the following:
// Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-general-entities
// Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-general-entities
// JDK7+ - http://xml.org/sax/features/external-general-entities
// 禁掉外部通用实体(external general entity)。
FEATURE = "http://xml.org/sax/features/external-general-entities";
dbf.setFeature(FEATURE, false);// Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-parameter-entities
// Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-parameter-entities
// JDK7+ - http://xml.org/sax/features/external-parameter-entities
// 禁掉外部参数实体(external general entity)。
FEATURE = "http://xml.org/sax/features/external-parameter-entities";
dbf.setFeature(FEATURE, false);// Disable external DTDs as well
// 这玩意似乎对防御实体攻击没啥用?待确认
FEATURE = "http://apache.org/xml/features/nonvalidating/load-external-dtd";
dbf.setFeature(FEATURE, false);

结论:

  • 防御外部实体攻击,可以设置external-general-entities和external-parameter-entities选项为false
  • 防御内部实体展开攻击,似乎只能设置disallow-doctype-decl为true了

关于xml实体攻击的讨论相关推荐

  1. XML实体攻击:从内网探测到命令执行步步惊心

    2019独角兽企业重金招聘Python工程师标准>>> XML实体攻击:从内网探测到命令执行步步惊心 XML实体攻击是利用XML语言支持实体的特性对目标进行攻击.这种攻击技术在国外已 ...

  2. XXE(xml外部实体攻击)

    1.概念 XXE(XML External Entity)是指xml外部实体攻击漏洞.XML外部实体攻击是针对解析XML输入的应用程序的一种攻击.当包含对外部实体的引用的XML输入被弱配置XML解析器 ...

  3. %3c xml 和php冲突,[原创]WEB安全第五章 漏洞学习与利用11 xml实体注入

    WEB安全第五章 漏洞学习与利用11 xml实体注入 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数 ...

  4. 漏洞之XML实体注入

    XXE--XML外部实体注入 程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的. XML是可扩展标记语言,很类型HTML语言. 但是xml语言的标签没有预定义,需要自定义标签. XML ...

  5. 【漏洞学习——XML注入】高德导航某接口XML实体注入

    漏洞细节 在我对高德地图离线版进行测试时抓到一个接口便进行了深入测试 http://us.autonavi.com 实际产生漏洞的接口: http://us.autonavi.com/navisoft ...

  6. java xml 实体类_java中的xml与实体类之间的映射

    实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...

  7. java xml 实体类_XML和JAVA实体类的相互转化(微信例子)

    /** * 扩展xstream,使其支持CDATA块 * */ private static XStream xstream = new XStream(new XppDriver() { publi ...

  8. 【网络安全】JAVA代码审计—— XXE外部实体注入

    一.WEB安全部分 想要了解XXE,在那之前需要了解XML的相关基础 二.XML基础 2.1 XML语法 所有的XML元素都必须有一个关闭标签 XML标签对大小写敏感 XML必须正确嵌套 XML 文档 ...

  9. XML注入介绍--XXE,XEE,xpath等

    XML注入指在请求的XML中插入攻击利用代码.根据不同的场景,可能会形成以下的漏洞形式: (1)XEE ----xml entity xpansion(xml实体膨胀,用于dos) 具体介绍:http ...

最新文章

  1. (C++)用指针实现两数交换函数swap()的两种方法
  2. BootStrap在一行如何展示多行单据
  3. 程序员从初级到中级10个秘诀 【转载】
  4. Java Spring MVC项目搭建(三)——“Hello World”
  5. GridControl详解(十)BandedGridView
  6. keil obj 文件 结构_keil下的STM32程序开发部署(一)
  7. SQL:waitfor的使用
  8. PHP实现各种经典算法
  9. 基于分位数回归的静态CoVaR计算 案例与代码
  10. 细数AVPlayer的那些坑
  11. clone ubuntu 启动不能启动网卡
  12. 计算机功率在线测试,电脑功耗计算在线测试
  13. 网络传输大文件使用什么软件可以高速传输?
  14. 【Android动画九章】-帧动画
  15. html meta标签的常用写法
  16. 纹波测试方法(收集整理)
  17. 胡适致毕业生:功不唐捐
  18. java工厂方法模式记录日志_java工厂方法模式
  19. MIGO为玩家带来接近无限的可能
  20. C++ 获取本机所有的网卡配置、IP地址和Mac地址

热门文章

  1. ffmpeg 视频截图
  2. AP模式(路由器的几种模式)
  3. Ubuntu下制作windows U盘启动盘
  4. 奇迹MU服务器租用选择 真实好用 稳定不卡 还能防入侵
  5. 【渝粤教育】电大中专计算机职业素养 (8)作业 题库
  6. 如何将本地的项目推送至git仓库
  7. [转]多模匹配算法与dictmatch实现
  8. VC++6.0报错: include stdafx.h before including this file for PCH
  9. Google台湾工程师团队扩编 大举进军大学校园征才
  10. 字典型列表转化为csv文件格式