XXE漏洞

漏洞原理学习·网安·生命在于学习 · 2021-10-19 · 69 人浏览
XXE漏洞

一、XXE描述

1、前言

XML外部实体注入,简称XXE漏洞,XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,目前,XML文件作为配置文件(Spring、Strust2等)、文档结构说明文件(PDF、RSS等)、图片格式文件(SVG header)应用比较广泛。XML的语法规范由DTD来进行控制。

2、简介

XML是可扩展的标记语言,设计用来进行数据的传输和存储。

二、XML和DTD介绍

1、示例

在这里插入图片描述
在这里插入图片描述

2、PCDATA

pcdata的意思是被解析的字符数据。
可以把字符数据想象为XML元素的开始标签与结束标签之间的文本,PCDATA是会被解析器解析的文本,这些文本将被解析器检查实体以及标记,文本中的标签会被当做标记来处理,而实体会被展开,不过,被解析的字符数据不应当包含任何&、<、>字符,需要用&;<;以及>;实体来分别替换他们。

3、CDATA

CDATA的意思是字符数据。
CDATA是不会被解析器解析的文本,在这些文本中的标签不会被当做标记来对待,其中的实体也不会被展开。

4、常见的xml语法结构

在这里插入图片描述
实体:实体是对数据的引用,根据实体种类的不同,XML解析器将使用实体的替代文本或者外部文档的内容来替代实体引用,它主要分为以下四类。

  • 内置实体
  • 字符实体
  • 通用实体
  • 参数实体
    参数实体用%实体名称申明,引用时也用%实体名称。
    其余实体直接用实体名称申明,引用时用实体名称。
    参数实体只能在DTD中申明,DTD中引用。
    其余实体只能在DTD中申明,在xml文档中引用。
    ==注意:参数实体是在DTD中被引用的,而其余实体是在xml文档中被引用的,另外定义%后面跟空格。==

5、DTD中的一些重要关键字

  • DOCTYPE(DTD的声明)
  • ENTITY(实体的声明)
  • SYSTEM、PUBLIC(外部资源申请)

6、内部实体声明

在这里插入图片描述

7、外部实体声明

在这里插入图片描述
在这里插入图片描述

8、参数实体格式

在这里插入图片描述

三、XXE漏洞防御方案

1、使用开发语言提供的禁用外部实体的方法

在这里插入图片描述

2、过滤用户提交的XML数据

在这里插入图片描述

3、升级libxml组件

xxe
Theme Jasmine by Kent Liao 京ICP备2023023335号-2京公网安备11010802044340号