今天继续给大家介绍渗透测试相关知识,本文主要内容是XXE漏洞详解(二)——DTD基础。
免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!
一、DTD简介和用法
DTD,即Document Type Definition,文档类型定义的简称,是一种精确描述XML语言的方式。DTD根据XML语言的语法规则检查XML文档结构的词汇和有效性。DTD主要用于保证XML文档格式正确,我们可以通过比较XML文档和DTD文件来看文档是否合乎规范,元素和标签使用是否正确。
我们可以在XML文档中指定DTD,即内部DTD。也可以将DTD保存在单独的文档中,然后单独添加,这样即外部DTD。
二、内部DTD使用
内部DTD指的是直接在XML文档中声明元素,这时需要在XML的头部声明中添加属性standalone,并将该属性的值设置为"yes"。
内部DTD使用语法如下所示:
<!DOCTYPE root-element
[
element-declarations
]>
一个内部DTD格式如下所示:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!DOCTYPE person [
<!ELEMENT person (name,age,address,country,major)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT country (#PCDATA)>
<!ELEMENT major (#PCDATA)>
]>
<person>
<name>Bob</name>
<age>24</age>
<address>1-1-110</address>
<country>China</country>
<major>History</major>
</person>
其中
<!ELEMENT person (name,age,address,country,major)>
定义了person根节点下面存在name、age等属性。
而
<!ELEMENT name (#PCDATA)>
则定义了name属性的类型是(#PCDATA)。
三、外部DTD使用
外部DTD元素定义在XML文档之外,可以是合法的.dtd文件,也可以是有效的URL。如果要引用外部DTD,那么在XML的头部声明中,需要设置standalone属性为"no"。
外部DTD声明语法为:
<!ENTITY element SYSTEM "xxx.dtd|http://…………">
例如:
<!ENTITY element1 SYSTEM "filename.dtd">
<!ENTITY element2 SYSTEM "http://www.exp.com/exp.dtd">
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200