Pikachu漏洞练习平台之XXE(XML外部实体注入)

目录

什么是 XML?

什么是DTD?

什么是XEE?

常见payload


什么是 XML?

XML 指可扩展标记语言(EXtensible Markup Language);

XML 不会做任何事情,而是用来结构化、存储以及传输信息;

XML 标签没有被预定义,需要我们自行定义标签。

XML总体由元素组成,元素可以额外附加属性,需要提前定义,元素中可以引用实体。

XML中的5个预定义实体引用:

<	<
>	>
&	&
"	"
'	'

实体根据引用方式,分为内部实体与外部实体 。

实体可以理解为变量,必须先在DTD中定义声明,然后在文档中的其他位置引用该变量的值。

 &a; 
  元素    属性         实体

内部实体:


外部实体:


参数实体:

或者

 一个 XML 文档实例:



Tove
Jani
Reminder
Don't forget me this weekend!

第一行是 XML 声明,它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言);下一行描述文档的根元素(本文档是一个便签:);接下来 4 行描述了根的 4 个子元素(to, from, heading 以及 body)。

什么是DTD?

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

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

 内部的 DOCTYPE 声明:假如 DTD 被包含在 XML 源文件中

外部文档声明:假如 DTD 位于 XML 源文件的外部

带有 DTD 的 XML 文档实例:







]>

Tove
Jani
Reminder
Don't forget me this weekend

在DTD设置了一些变量,然后在XML文档中再使用到这些变量。 

什么是XEE?

XXE就是攻击者自定义了XML文件进行了执行,最终效果实现读取系统文件。

常见payload

测试代码

 
 ]> 
&xxe;

读取文件的payload

对于Windows:


 ]>
&xxe;

对于Linux:


 ]>
&xxe;

UTF-8(可变长度编码)有时候也用ISO-8859-1(单字节固定长度编码)也可不指定编码

测试解析xml代码情况

Pikachu漏洞练习平台之XXE(XML外部实体注入)_第1张图片

回显test

Pikachu漏洞练习平台之XXE(XML外部实体注入)_第2张图片

因为我这里的靶场是使用Linux系统搭建的,因此尝试读取 /etc/passwd

Pikachu漏洞练习平台之XXE(XML外部实体注入)_第3张图片

读取成功

Pikachu漏洞练习平台之XXE(XML外部实体注入)_第4张图片

你可能感兴趣的:(web,XEE,xml,开发语言,XXE,web安全,DTD)