XXE漏洞简介
XXE(XML External Entity,XML外部实体注入)漏洞产生的原因是:应用程序在解析XML时没有过滤外部实体的加载,导致加载了恶意的外部文件,造成执行命令、读取文件、扫描内网、攻击内网应用等危害。
XML基础
XML(eXtensible Markup Language,可扩展标记语言)用来结构化、存储以及传输信息。
XML文档结构包括3部分:XML声明、文档类型定义(可选)和文档元素。
XML声明
<?xml version="1.0" encoding="ISO-8859-1"?>
XML声明以结束。version属性时必选的,他定义了XML的版本。encoding属性是可选的,定义了XML进行解码时所有的字符集。
文档类型定义
文档类型定义(Documnet Type Definition,DTD)用来约束一个XML文档的书写规范。
对元素进行定义的基础语法如下:
<!ELEMENT 元素名 类型>
内部定义
将文档类型定义直接放在XML文档中,称为内部定义。内部定义的格式如下:
<!DOCTYPE 根元素 [元素声明]>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
DOCTYPE note定义此文档是note类型的文档。ELEMENT note(to,from,heading,body)定义note有4个元素:to、from、heading、body。
ELEMENT to(#PCDATA)定义to元素为#PCDATA类型
XML漏洞修复
- 禁用外部实体
- 过滤用户提交的XML数据。过滤关键词为<!DOCTYPE、<!ENTITY、SYSTEM和PUBLIC。