1016.XXE漏洞攻防学习
前言
对于xxe漏洞的认识一直都不是很清楚,而在我为期不长的挖洞生涯中也没有遇到过,所以就想着总结一下,撰写此文以作为记录,加深自己对xxe漏洞的认识。
xml基础知识
要了解xxe漏洞,那么一定得先明白基础知识,了解xml文档的基础组成。
XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素
xml文档的构建模块
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
- 元素
- 属性
- 实体
- PCDATA
- CDATA
下面是每个构建模块的简要描述。
1,元素
元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的。
实例:
<body>body text in between</body> <message>some message in between</message>
空的 HTML 元素的例子是 "hr"、"br" 以及 "img"。
2,属性
属性可提供有关元素的额外信息
实例:
<img src="computer.gif" />
3,实体
实体是用来定义普通文本的变量。实体引用是对实体的引用。
4,PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
5,CDATA
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。
DTD(文档类型定义)
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
DTD 可以在 XML 文档内声明,也可以外部引用。
1,内部声明:<!DOCTYPE 根元素 [元素声明]> ex: <!DOCTYOE test any>
完整实例:
<?xml version="1.0"?>
<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
2,外部声明(引用外部DTD):<!DOCTYPE 根元素 SYSTEM "文件名"> ex:<!DOCTYPE test SYSTEM 'http://www.test.com/evil.dtd'>
完整实例:
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd"> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
而note.dtd的内容为:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
DTD实体
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。
实体又分为一般实体和参数实体
1,一般实体的声明语法:<!ENTITY 实体名 "实体内容“>
引用实体的方式:&实体名;
2,参数实体只能在DTD中使用,参数实体的声明格式: <!ENTITY % 实体名 "实体内容“>
引用实体的方式:%实体名;
1,内部实体声明:<!ENTITY 实体名称 "实体的值"> ex:<!ENTITY eviltest "eviltest">
完整实例:
<?xml version="1.0"?>
<!DOCTYPE test [ <!ENTITY writer "Bill Gates"> <!ENTITY copyright "Copyright W3School.com.cn"> ]> <test>&writer;©right;</test>
2,外部实体声明:<!ENTITY 实体名称 SYSTEM "URI">
完整实例:
<?xml version="1.0"?>
<!DOCTYPE test [ <!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd"> <!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd"> ]> <author>&writer;©right;</author>
在了解了基础知识后,下面开始了解xml外部实体注入引发的问题。
XXE的攻击与危害(XML External Entity)
1,何为XXE?
答: xxe也就是xml外部实体注入。也就是上文中加粗的那一部分。
2,怎样构建外部实体注入?
方式一:直接通过DTD外部实体声明
XML内容
方式二:通过DTD文档引入外部DTD文档,再引入外部实体声明
XML内容:
DTD文件内容:
方式三:通过DTD外部实体声明引入外部实体声明
好像有点拗口,其实意思就是先写一个外部实体声明,然后引用的是在攻击者服务器上面的外部实体声明
具体看例子,XML内容
dtd文件内容:
3,支持的协议有哪些?
不同程序支持的协议如下图:
其中php支持的协议会更多一些,但需要一定的扩展支持。
4,产生哪些危害?
XXE危害1:读取任意文件
该CASE是读取/etc/passwd,有些XML解析库支持列目录,攻击者通过列目录、读文件,获取帐号密码后进一步攻击,如读取tomcat-users.xml得到帐号密码后登录tomcat的manager部署webshell。
另外,数据不回显就没有问题了吗?如下图,
不,可以把数据发送到远程服务器,
远程evil.dtd文件内容如下:
触发XXE攻击后,服务器会把文件内容发送到攻击者网站
XXE危害2:执行系统命令
该CASE是在安装expect扩展的PHP环境里执行系统命令,其他协议也有可能可以执行系统命令。
XXE危害3:探测内网端口
该CASE是探测192.168.1.1的80、81端口,通过返回的“Connection refused”可以知道该81端口是closed的,而80端口是open的。
XXE危害4:攻击内网网站
该CASE是攻击内网struts2网站,远程执行系统命令。
如何防御xxe攻击
方案一、使用开发语言提供的禁用外部实体的方法
PHP:
libxml_disable_entity_loader(true);JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
方案二、过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。
最后
通过本次对XXE的总结,认真了解了XML基础知识,XXE的攻击方式与及防御方案。
参考资料
1,未知攻焉知防——XXE漏洞攻防
2,XXE注入攻击与防御
3,DTD教程
转载于:https://www.cnblogs.com/yh-ma/p/10275933.html
1016.XXE漏洞攻防学习相关推荐
- xxe漏洞的学习与利用总结
前言 对于xxe漏洞的认识一直都不是很清楚,而在我为期不长的挖洞生涯中也没有遇到过,所以就想着总结一下,撰写此文以作为记录,加深自己对xxe漏洞的认识. xml基础知识 要了解xxe漏洞,那么一定得先 ...
- xxe漏洞攻防 简介 xml 引用外部实体 构造恶意内容
目录 一.XML基础知识 二.XML外部实体注入(XML External Entity) 三.客户端XXE案例 四.防御XXE攻击 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言 ...
- java xxe漏洞利用_【技术分享】XXE漏洞攻防之我见
作者:激越王 预估稿费:400RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 你是否听说过xml注入攻击呢,或者对它只知其一不知其二呢? 现在让我们从xml相关基础知识开 ...
- XXE漏洞详解 一文了解XXE漏洞
前言 本篇总结归纳XXE漏洞 1.什么是XXE 普通的XML注入 XML外部实体(XML External Entity, XXE) Web应用的脚本代码没有限制XML引入外部实体,从而导致测试者可以 ...
- 【Web安全笔记】之【4.0 常见漏洞攻防】
文章目录 4.0 常见漏洞攻防 4.1 SQL注入 4.1.1 注入分类 1. 简介 2. 按技巧分类 1). 盲注 2). 报错注入 3). 堆叠注入 3. 按获取数据的方式分类 1). inban ...
- java xxe漏洞利用_XXE漏洞攻防原理
方便永远是安全的敌人 你的知识面,决定你的攻击面 1简述 XXE(XML External Entity)是指xml外部实体攻击漏洞.XML外部实体攻击是针对解析XML输入的应用程序的一种攻击.当包含 ...
- 一篇文章带你深入理解漏洞之 XXE 漏洞
目录 一.XXE 是什么 二.简单介绍一下背景知识: 三.基础知识 重点来了: 四.我们能做什么 实验一:有回显读本地敏感文件(Normal XXE) 新的问题出现 新的解决方法 实验二:无回显读取本 ...
- 浅谈XXE漏洞攻击与防御——本质上就是注入,盗取数据用
浅谈XXE漏洞攻击与防御 from:https://thief.one/2017/06/20/1/ XML基础 在介绍xxe漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点 ...
- 网络安全特训之——网络信息安全攻防学习平台(选择题)
网络信息安全攻防学习平台(选择题) 文章目录 网络信息安全攻防学习平台(选择题) 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 第九题 第十题 第十一题 第十二题 第十三题 第十四题 ...
最新文章
- jQuery源码 Ajax模块分析
- Java调用webservice.asmx接口.
- 数据结构树及相关算法题
- java 日历记事本_calendar 一个用java编写的日历记事本. 具有正常日历功能;也可以用于在不同日期记录下当日重要的事情 - 下载 - 搜珍网...
- IO流练习题 实现图片的加密解密操作
- 万字长文深入探究Oracle DML锁机制
- LOJ 2085: 洛谷 P1587: bzoj 4652: 「NOI2016」循环之美
- Android世界第一个activity启动过程
- 日程表、学生课表插件
- 一、基础篇--1.3进程和线程-CountDownLatch、CyclicBarrier 和 Semaphore
- 《金字塔原理》学习笔记 | 第4篇—演示的逻辑
- mdf2iso linux,MDF to ISO下载
- suse 12 sp5安装bug
- 【WiFi】WiFi 6E
- openStreetMap数据分析举例-使用Qt统计城市科技指数排名
- 清北学堂2018noip集训D1
- 关于QImageReader多次调用read失败的问题
- Android Studio:基本UI界面设计 (详细)
- 嵌入式linux培训教程,嵌入式Linux开发学习之Linux文件系统学习
- JIRA中的史诗、故事、版本与冲刺