前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【XXE漏洞】XXE漏洞是怎样形成的?

【XXE漏洞】XXE漏洞是怎样形成的?

作者头像
一名白帽的成长史
发布2020-01-14 16:01:25
2.3K0
发布2020-01-14 16:01:25
举报

Hello,各位小伙伴大家好~

这里是你们的小编Monster~

最近学习了XXE漏洞的基本原理,一起来看看吧!

Part.1

XML基础

XML语法

XXE漏洞是由于web应用程序解析了恶意的xml代码导致的。

因此,在学习之前,我们先来康康xml的基本原理。

与HTML相比:

  • 首先要明白,XML与HTML类似,但不是HTML的代替。
  • XML主要被用于传输和存储数据,其焦点是数据的内容。
  • HTML 则被设计用来显示数据,其焦点是数据的外观。
  • HTML 旨在显示信息,而 XML 旨在传输信息。

我们先来看一个简单的例子:

  • 第一行为xml声明,用于声明版本号及编码方式等信息。
  • xml为树型结构,有一个根节点(如message),及多个子节点。
  • 节点的名称(如from、to)均可以自定义。
  • 每一行(如<to>huangyu</to>)包括标签称为一个元素。
  • 所有的xml元素都必须有一个闭合标签,标签大小写敏感。
  • xml中的空格会被保留(如Welcome to Beijing!)。

DTD

为了方便开发和制定xml的格式,我们使用DTD来检查xml的合法性。

可以把DTD看作一套统一的格式,大家都按这个格式来交换数据。

(1)内部声明

即直接在xml文档中进行声明,格式为:

<!DOCTYPE 根元素 SYSTEM [元素声明]>

为上面的例子添加一个DTD内部声明:

  • ELEMENT用于声明xml中的元素。
  • PCDATA是指会被解析器解析的文本。
  • 对应的还有CDATA,指不会被解析器解析的文本。

(2)外部声明

如果DTD位于xml源文件的外部,那么可以使用外部声明,格式为:

<!DOCTYPE 根元素 SYSTEM "文件名">

xml文件修改为:

外部文件message.dtd内容:

DTD实体

DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

DTD实体也可以内部声明或外部引用。

XXE就是由于xml引用了恶意的外部实体导致

(1)内部实体声明

<!ENTITY 实体名称 "实体的值">

因为DTD是一种快捷变量,因此可改写上面的例子为:

(2)外部实体声明

当然也可以从外部加载DTD实体,如下:

Part.2

XXE漏洞

漏洞实现

XXE(XML External Entity),即xml外部实体注入。引用外部实体时,不同的程序可支持不同的协议:

我们先来写一个简单的xml接收页面:

三个主要的函数说明:

(1)php://input

//用于读取POST的原生数据。

(2)file_get_contents()

//将读取到的内容放入字符串中。

(3)simplexml_load_string()

//用于将字符串转换为xml对象

访问该页面并使用xml传入数据:

服务器成功接收了参数:

现在我们尝试利用外部实体声明读一下本机文件:

成功读取到win.ini文件内容:

这就是一个简单的xxe漏洞利用。

pikachu平台

我们来看看pikachu平台上的xxe漏洞:

查看后端代码:

和我们的演示代码差不多,使用前面代码的尝试注入:

也能成功读取敏感文件:

如果需要读取php文件,需要经过base64加密后读取出来:

获取加密后的信息:

解密后即可获取源码:

XXE防御

(1)禁用外部实体

以php为例,可以通过以下函数禁用外部实体:

libxml_disable_entity_loader(ture)

(2)过滤敏感关键词

<!DOCTYPE、<!ENTITY、SYSTEM和PUBLIC等

(3)使用高版本

libxml2.9.1及以后的版本,默认不解析外部实体。

Part.3

结语

这就是今天的全部内容了,大家都明白了吗?

欢迎到公众号:一名白帽的成长史提问&留言~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一名白帽的成长史 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档