赞
踩
前言:
XXE漏洞经常出现在CTF中,一直也没有系统的学习过,今天就来总结一波。
XXE 漏洞全称:XML External Entity Injection,即 XML 外部实体 注入漏洞。XXE 漏洞发生在应用程序解析 XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起 Dos攻击等危害。
想要了解 XXE漏洞,需要先了解一下关于 XML的基础知识。
XML全称:可扩展标记语言(Extensible Markup Language)。
XML是独立于软件和硬件的信息传输工具,它把数据从HTML中分离。 XML语言没有预定义的标签,需要作者定义自己的标签和自己的文档结构。
XML 被设计用来传输和存储数据,HTML 被设计用来显示数据。
XML文档结构包括:
XML声明
DTD 文档类型定义(可选)
文档元素。
示例代码:
其中 DTD (Document Type Definition)即 文档类型定义 部分 定义了XML文档的标签以及元素属性。
如上图中的DTD 就定义了XML的根元素为 note,然后根元素下面有一些子元素 (to,from,heading,body),那么下面的文档元素就可以使用这些元素:
<!--文档元素-->
<note>
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body>
</note>
注:
PCDATA:可被解析的字符数据。PCDATA 数据类型是会被解析器解析的文本。这些文本将被解析器检查 实体 以及 标记。文本中的标签会被当作标记来处理,而实体会被展开。与之对应的是CDATA
CDATA:不被解析的字符数据,CDATA 数据类型是不会被解析器解析的文本,在这些文本中的标签不会被当作标记来对 待,其中的实体也不会被展开。详细可点这 链接
其中DTD有两种构建方式,分别为内部 DTD声明和外部 DTD声明。
声明格式:
<!DOCTYPE 根元素 [元素声明]>
如 上例使用就是内部 DTD声明。
通过引入 dtd文件的方式进行声明(这一点和 css,javascript 很像)。
声明格式:
<!DOCTYPE 根元素 SYSTEM "文件名">
例:
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "test.dtd">
<note>
<to>H</to>
<from>E</from>
<head>L</head>
<body>LO</body>
</note>
test.dtd:
<!ELEMENT to (#PCDATA)><!--定义to元素为”#PCDATA”类型-->
<!ELEMENT from (#PCDATA)><!--定义from元素为”#PCDATA”类型-->
<!ELEMENT head (#PCDATA)><!--定义head元素为”#PCDATA”类型-->
<!ELEMENT body (#PCDATA)><!--定义body元素为”#PCDATA”类型-->
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。