XXE漏洞——xml外部实体注入XXE

XXE:

  • XXE全称XML External Entity Injection,也就是XML外部实体注入攻击,漏洞是对非安全的外部实体数据进行处理时引发的安全问题。要了解XXE,就必须懂得XML的一些规则。
  • XML是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
  • XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素

XML:

  • XML是The Extensible Markup Language(可扩展标识语言)的简写。
  • XML最初的目的是弥补HTML的不足,后来逐渐用于网络数据的转换和描述。
  • XML的设计宗旨是传输数据,不是显示数据。
  • XML在web中的应用已十分广泛。
  • XML是各种应用程序之间数据传输最常用的工具。
  • 与HTML的区别在于一个被设计用来展示数据,一个用来传输数据

xml实体(ENTITY):

  • 在一个甚至多个XML文档中频繁使用某一条数据,我们可以预先定义一个这条数据的“别名”,即一个ENTITY,然后在这些文档中需要该数据的地方调用它。
  • 根据实体的来源我们可以分为内部实体和外部实体。
  • XML定义了两种类型的ENTITY,一种在XML文档中使用,另一种作为参数在DTD文件中使用。
  • 定义好的ENTITY在文档中通过“&实体名;”来使用。
  • 可以把实体当作xml语言的变量。

DTD:

  • DTD(Documnet Type Definition):
  • 即文档类型定义,是一种XML约束模式语言,属于XML文件组成的一部分。
  • DTD文档有三种应用形式:
  • 1.内部DTD文档
  • 2.外部DTD文档
  • 3.内外部DTD文档结合
  • DTD(文档类型定义)的作用:
  • 定义 XML 文档的合法构建模块。我们在XML中可以自定义标记,那XML解析器怎么认识这些自定义标记并根据自定义标记的处理法则来处理元素呢?这需要DTD,它是我们用来定义我们自己定义的标记的含义,我们自己定义元素的相关属性的文档。
  • DTD与XML是类与对象,数据库表结构与记录的关系。
  • DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
  • 数据库表结构与数据记录。
  • 每个XML文件可以携带一个自身格式的描述。
  • 不同组织的人可以使用一个通用DTD来交换数据。
  • 应用程序可以使用一个标准DTD校验从外部世界接收来的XML数据是否有效。
  • DTD应用格式请查阅:
  • https://www.w3school.com.cn/dtd/dtd_intro.asp

XML实体分为:

  • 1、普通实体
  • 2、参数实体

XXE漏洞原理:

  • 普通实体引入外部实体:
  • 通过file协议,引入外部参数实体:
  •     
  •     ]>
  • &xxe;
  • 参数实体引入外部实体:
  • 引入外部参数实体outdtd.dtd文件:
  •     
  •     % a;]>
  • &xxe;
  • outdtd.dtd

XXE危害:

  • 1:读取任意文件。
  • 2:URL请求。
  • 3: Dos拒绝服务:递归调用,占用大量服务器资源。
  • 4、攻击内网网站。
  • 5、探测内网端口。

如何防御XXE攻击:

  • 1、使用开发语言提供的禁用外部实体的方法。
  • 2、过滤用户提交的XML数据。
  • 3、

你可能感兴趣的:(漏洞,安全)