前言

对于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;&copyright;</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;&copyright;</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/r00tuser/p/7255939.html

xxe漏洞的学习与利用总结相关推荐

  1. XXE漏洞详解与利用

    XXE:XML 外部实体注入 XXE(XML External Entity,XML 外部实体注入)正是当允许引用外部实体时,通过构造恶意内容,导致读取任意文件.执行系统命令.内网探测与攻击等危害的一 ...

  2. Web安全 XXE漏洞的 测试和利用.(读取服务器的任何文件 和 收集服务器的内网信息.)

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

  3. 1016.XXE漏洞攻防学习

    前言 对于xxe漏洞的认识一直都不是很清楚,而在我为期不长的挖洞生涯中也没有遇到过,所以就想着总结一下,撰写此文以作为记录,加深自己对xxe漏洞的认识. xml基础知识 要了解xxe漏洞,那么一定得先 ...

  4. 分享SSRF漏洞的学习和利用

    前言 本文主要记录一次我们在复盘嘶吼网站渗透报告时遇到的一个SSRF漏洞.此漏洞并结合腾讯云的API接口,可以获取大量嘶吼服务器的敏感信息.利用这些敏感信息,又可以进行更为深入的渗透. 这篇文章将会发 ...

  5. XXE漏洞详解 一文了解XXE漏洞

    前言 本篇总结归纳XXE漏洞 1.什么是XXE 普通的XML注入 XML外部实体(XML External Entity, XXE) Web应用的脚本代码没有限制XML引入外部实体,从而导致测试者可以 ...

  6. 网络安全课第五节 XXE 漏洞的检测与防御

    11 XXE 漏洞:XML 解析器的坑 上一讲我们介绍了 SSRF 漏洞,一种专门针对服务端的请求伪造攻击,常被用于攻击内网.在里面我介绍了 Burp Collaborator 用于专门测试无回显漏洞 ...

  7. %3c xml 和php冲突,[原创]WEB安全第五章 漏洞学习与利用11 xml实体注入

    WEB安全第五章 漏洞学习与利用11 xml实体注入 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数 ...

  8. java xxe漏洞利用_XXE漏洞攻防原理

    方便永远是安全的敌人 你的知识面,决定你的攻击面 1简述 XXE(XML External Entity)是指xml外部实体攻击漏洞.XML外部实体攻击是针对解析XML输入的应用程序的一种攻击.当包含 ...

  9. java xxe漏洞利用_【技术分享】XXE漏洞攻防之我见

    作者:激越王 预估稿费:400RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 你是否听说过xml注入攻击呢,或者对它只知其一不知其二呢? 现在让我们从xml相关基础知识开 ...

最新文章

  1. 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序
  2. Persona 动画编辑器参考
  3. spring boot使用外置tomcat部署需增加如下初始化类
  4. 前端模块规范AMD/UMD/CommonJs
  5. Python案例:计算softmax函数值
  6. 4 转推流格式_ppt 转 pdf怎么转?这个宝藏技巧不会太亏了!
  7. 会场安排问题(贪心算法) Comparator类排序的学习
  8. MAC:使用install_name_rpath修改编译结果的rpath
  9. 精仿互站huzhan开源源码交易平台 TP框架 多用户虚拟品交易商城 可二开 支持PHP5.3-5.6
  10. 用计算机做初中模拟物理实验,仿真物理实验室初中完整版
  11. 实验设计与分析 (总结8)
  12. python计算圆环的面积_圆环的面积计算公式
  13. 通过mysql修改后台密码_怎么通过修改数据库修改网站后台的管理员密码?
  14. 开机无法跳过谷歌验证_如何跳过Nexus7第一次开机设置的网络验证
  15. 2022美国大学生数学建模竞赛A题思路与总结
  16. 每月一书(202102):《人类简史》
  17. LUN详解 iscsi
  18. Linux(ECS云服务器)
  19. SPI flash烧录器EZP2019试用记录
  20. linux下的c开发工具,4.3.2 Linux下的C开发工具

热门文章

  1. Spring的AOP是什么?
  2. vuex -- mutations接收参数
  3. python网络爬虫之入门[一]
  4. 对计算机等级考试成绩有异议能申请复查吗?怎么申请?
  5. 【Axure 教程】中继器(基础篇)
  6. express,multer,jQuery前端后端上传单个文件
  7. Springfox Swagger UI
  8. c++ 引用传参和指针传参的区别
  9. 洛谷 P1706 全排列问题
  10. android和ios龙之谷,龙之谷手游iOS和安卓能一起玩吗 服务器数据互通吗