XXE全称XML External Entity Injection漏洞,是一种在应用程序解析XML输入时,由于未能禁止外部实体加载而引发的安全漏洞。该漏洞可能导致文件读取、命令执行、内网端口扫描等多种攻击。

XML(eXtensible Markup Language)是用于标记电子文件以提供结构性的标记语言,允许用户自定义标记语言。XML文档结构包括XML声明、DTD(文档类型定义,可选)和文档元素。其语法规则包括:

  1. 所有XML元素必须有关闭标签。

  2. XML标签大小写敏感,且必须正确嵌套。

  3. 属性值必须加引号。

  4. 支持实体引用,例如小于符号“<”用&lt;表示。

DTD中定义的实体分为内部实体和外部实体。实体是定义引用普通文本或特殊字符的快捷方式。示例如下:

  • 内部实体

  • 外部实体

XXE漏洞产生的原因在于应用程序在解析XML时未能禁止外部实体加载。攻击者可以利用此漏洞通过上传恶意XML文件实现攻击,如文件读取、命令执行、内网端口扫描等。典型攻击方式包括:

  1. PHP回显型XXE:上传恶意XML文件以回显服务器上的敏感信息。

  2. PHP盲注型XXE:在未能确认服务器回显的情况下,构造请求让外部服务器获取信息并回显给攻击者。

  3. Java回显型和盲注型XXE:与PHP类似,通过构造XML文件实现信息回显或盲注。

  4. 文件解析攻击:处理如Excel文件的XML解析时,若允许外部实体加载,可能触发XXE漏洞。

XXE漏洞主要危害包括文件读取、命令执行、内网端口扫描、内部网络攻击和拒绝服务攻击(DOS)。

防护方法

  1. 禁止外部实体加载;

  2. 严格过滤用户上传的文件,避免恶意文件被解析。

掌握XML和XXE基础知识是防御该漏洞的关键。开发者应在开发过程中严格控制外部实体加载权限,确保用户输入内容的安全。