XXE漏洞利用

英文全名即 Xml External Entity Injection, 即我们所说的 xml 外部实体注入攻击。
实体可以通过预定义在文档中被调用,而实体的标识符又可以访问本地或者远程内容,当允许引用外部实体时,攻击者便可以构造恶意内容来达到攻击。

XML:

xml 是一种可扩展的标记语言,主要就是用来传输数据的,你可以理解为就是一种写法类似于 html 语言的数据格式文档。但是 xmlhtml 是为不同目的而设计的,html 旨在显示数据信息,而 xml 旨在传输数据信息

DTD:
xml 格式相关的就是这个叫 dtd(document type definition )的东西了,这个 dtd 的作用就是去定义 xml 文档的合法构建模块,也就是说声明了 xml 的内容格式规范。

DTD的声明方式:

1、内部 dtd:即对 XML 文档中的元素、属性和实体的 DTD 的声明都在 XML 文档中。

2、外部 dtd : 即对 XML 文档中的元素、属性和实体的 DTD 的声明都在一个独立的 DTD 文件(.dtd)中。

内部DTD的实例:




          

<!ELEMENT body (#PCDATA)>
<!ENTITY writer "hello word">        
]>

                                                                         
<note>
<body>&writerbody>
note>

我们就 dtd 的内容一个一个来看,

1、!DOCTYPE note (第四行)定义此文档是 note 类型的文档。
2、!ELEMENT note (第五行)定义 note 元素有一个元素:“body "
3、!ELEMENT body (第六行)定义 body 元素为 " #PCDATA” 类型
4、!ENTITY writer " hello world"(第七行)定义了一个内部实体

最后 body 元素标签里的"&writer"就是对内部实体的一个引用,到输出的时候 &writer 就会被 "hello world" 替换。

外部DTD的实例:



]>

<root>
  <body>&xxebody>
root>

1、!ELEMENT foo ANY (第三行)定义元素为 ANY,即可以接受任何元素。
2、!ENTITY xxe SYSTEM “file:///c:/test.dtd”(第四行)定义了一个外部实体

这里样义文档就会对 c:/test.dtd 文件资源进行引用,这是一种用 SYSTEM 关键字的引用方式,还有一种用 PUBLIC 引用公用 DTD 的方式:


你可能感兴趣的:(漏洞利用)