前置知识
XXE如何理解?
它是可扩展标记语言 ( XML) 用于存储和传输数据。
通常始于异步JavaScript和XML技术(ajax技术):网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面。
目前JSON的使用比XML更加普遍。JSON和XML都被用于在Ajax模型中的XML技术。
这种标记语言允许开发人员定义和表示任意数据结构的HTML。
以下为定义属性和值的Security Assertion Markup Language(SAML)语言
<saml:AttributeStatement>
<saml:Attribute Name="username"> # 定义属性
<saml:AttributeValue> # 定义值
vickieli
</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
XML 格式广泛用于 Web 应用程序的各种功能,包括身份验证、文件传输和图像上传,或者只是将 HTTP 数据从客户端传输到服务器并返回。
XML 文档可以包含 文档类型定义 ( DTD) ,它定义了 XML 文档的结构及其包含的数据。
注意:&file; 是实体,而不是外部实体。
这些DTD可以从外部加载或在文件本身的DOCTYPE标签中声明
以下是一个DTD,它定义了一个名为file的XML实体
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE example [
<!ENTITY file "Hello!">
]>
<example>&file;</example> # &file; = Hello!
我们可以将XML的实体,理解于类似编程语言中的变量:即,&file; = Hello!
XML 文档还可以使用外部实体通过 URL 访问本地或远程内容。
当语法中使用SYSTEM 关键字时,则该实体是外部实体,其值将从URL加载
URL可以从本地文件系统中加载,也可以从互联网中加载
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE example [
<!ENTITY file SYSTEM "file:///example.txt">
]>
<example>&file;</example>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE example [
<!ENTITY file SYSTEM "http://example.com/index.html">
]