XXE注入漏洞研究

2019年11月3日09:20:14 发表评论

XXE Injection几年来一直在OWASP Top 10列表中,并且经常出现在Synack Red Team(SRT)的提交中。XXE注入不限于Web应用程序;任何有XML解析器(网站,主机,软件)的地方,都有XXE的潜力。

1. XML及其实体

关于XXE最好的部分是它完全是XML语言的有效功能。此攻击没有任何黑魔法,只是默认情况下经常启用的可滥用功能。此功能是外部实体。

要了解ENTITY,我们必须首先查看文档类型定义(DTD)文件。DTD文件是XML文件的一种特殊类型,其中包含有关XML格式或结构的信息。它们用于在不同的独立XML文件之间建立一致性。这些DTD文件可以包含一个称为ENTITY的元素。请参阅以下示例.dtd文件:

  1. <!DOCTYPE STRUCTURE [
  2. <!ELEMENT SPECIFICATIONS (#PCDATA)>
  3. <!ENTITY VERSION “1.1”>
  4. <!ENTITY file SYSTEM “file:///c:/server_files/application.conf” >
  5. ]>

我们不会为.dtd文件的语法而烦恼,只是要了解引用此.dtd文件的任何XML都需要遵循其结构。

其中的ENTITY标记只是调用XML文件(源)可以引用的特殊字符的快捷方式。请注意,最后一个ENTITY标记实际上是通过SYSTEM关键字提取本地文件的内容的。

上面的.dtd文件可以按以下方式使用:

  1. <?xml version=”1.0″ encoding=”UTF-8″?>
  2. <!DOCTYPE foo SYSTEM “https://www.agesec.com/formatting.dtd”>
  3. <specifications>&file;</specifications>

使用DOCTYPE标记调用formatting.dtd,XML文件可以引用其中的ENTITY和结构。

无需完整的.dtd文件形式即可使用ENTITY。通过调用DOCTYPE并使用方括号[],您可以引用仅在该XML文件中使用的ENTITY标签。下面,在 </ configuration>标记中引用了application.conf文件,但没有完整的.dtd文件来托管它:

  1. <?xml version=”1.0″ encoding=”ISO-8859-1″?>
  2. <!DOCTYPE example [
  3. <!ELEMENT example ANY >
  4. <!ENTITY file SYSTEM “file:///c:/server_files/application.conf” >
  5. ]>
  6. <configuration>&file;</configuration>

因此,概括如下:

DTD文件可以在XML文件的外部或内部

实体存在于DTD文件中

ENTITY可以调用本地系统文件

发表评论

后发表评论