XML外部实体注入

本文首发于先知社区

XML外部实体注入

前言:

最近做了一道WEB题,涉及到XML外部实体注入(即XXE漏洞),恰好也没有系统的学习过,这次就了解一些其攻击方式包含的原理,并通过WEB题来实战一番。

0x01:简单了解XML

XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 被设计为传输和存储数据,其焦点是数据的内容
XML 被设计用来结构化、存储以及传输信息
XML 允许创作者定义自己的标签和自己的文档结构

XML的优点:

xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,非常适合Web传输,而且xml有助于在服务器之间穿梭结构化数据,方便开发人员控制数据的存储和传输。

XML的特点及作用:

特点:

 1. xml与操作系统、编程语言的开发平台都无关
 2. 实现不同系统之间的数据交互

作用:

 1. 配置应用程序和网站
 2. 数据交互

而且在配置文件里边所有的配置文件都是以XMl的格式来编写的,跨平台进行数据交互,它可以跨操作系统,也可以跨编程语言的平台,所以可以看出XML是非常方便的,应用的范围也很广,但如果存在漏洞,那危害就不言而喻了。

XML语法、结构与实体引用:

语法:

1.XML元素都必须有关闭标签。
2.XML 标签对大小写敏感。
3.XML 必须正确地嵌套。
4.XML 文档必须有根元素。
5.XML 的属性值须加引号。

结构:

1.XML 文档声明,在文档的第一行
2.XML 文档类型定义,即DTD,XXE 漏洞所在的地方
3.XML 文档元素

如:
在这里插入图片描述
实体引用:
在 XML 中一些字符拥有特殊的意义,如果把字符 < 放在 XML 元素中,便会发生错误,这是因为解析器会把它当作新元素的开始。
例如:

<message>hello < world</message>

便会报错,为了避免这些错误,可以实体引用来代替 < 字符

<message>hello &lt; world</message>

XML 中,有 5 个预定义的实体引用,分别为:
在这里插入图片描述
上面提到XML 文档类型定义,即DTD,XXE 漏洞所在的地方,为什么这个地方会产生XXE漏洞那,不要着急,先来了解一下DTD。

0x02 了解DTD:

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

优点:

有了DTD,每个XML文件可以携带一个自身格式的描述。
有了DTD,不同组织的人可以使用一个通用DTD来交换数据。

DTD文档的三种应用形式:

1.内部DTD文档

<!DOCTYPE 根元素[定义内容]>

2.外部DTD文档

<!DOCTYPE 根元素 SYSTEM "DTD文件路径">

3.内外部DTD文档结合

<!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>

例如:
上半部分是内部DTD文档,下半部分是XML文档
在这里插入图片描述
#PCDATA(Parsed Character Data) ,代表的是可解析的字符数据,即字符串

下面再举一个外部DTD文档的例子:
新建一个DTD文档,文件名叫LOL.dtd,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT game (lol, dota, dnf)>
<!ELEMENT lol (#PCDATA)>
<!ELEMENT dota (#PCDATA)>
<!ELEMENT dnf (#PCDATA)>

再新建一个XML文档,加入外部DTD文件的名称(同一个路径下只给出文件名即可)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE game SYSTEM "LOL.dtd">
<game>
    <lol>a</lol>
    
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值