XXE
- XXE漏洞产生原因
XXE漏洞:XML外部实体注入漏洞;应用程序解析XML输入时,没有对上传的XML文件内容进行过滤,没有禁止外部实体的加载,导致可以加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、DOS攻击等。 - XXE与HTML
XML是可扩展标记语言、重点在传输数据和存储数据,HTML是展示数据。 - XXE文档构建模块
元素、属性、实体、PCDATA、CDATA

1、XML声明
2、DTD文档类型定义
3、文档元素 - 实体
实体是用来定义普通文本的变量。实体引用时对实体的引用。
实体分为一般实体和参数实体。
1、一般实体:声明方式;引用一般实体的方法:& 实体内容;

2、参数实体:声明方式: 引用参数实体的方法: %实体名称;

- DTD实体
DTD文档类型定义的作用是定义XML文档的合法构建模块。
DTD实体中,分为内部实体声明和外部实体声明。

- XXE漏洞可能存在地方


- XXE利用手段
1、文件读取:如读取密码文件、配置文件、源代码等。,通过参数实体回显(需要支持外部DTD)
2、SSRF服务器端请求伪造:外部实体不仅可以访问本地文件file://,还可以利用http://或PHP://filter、ftp://等协议探测内网服务
3、DOS攻击:通过递归实体引用耗尽资源,构造极小的xml文件、在解析时消耗服务器大量内存,导致服务器瘫痪。
4、XXE盲注:攻击者可以通过外带信道将数据泄露出来。让服务器将敏感数据通过HTTP或DNS请求发送到攻击者控制的服务器上。

- XXE防御手段
1、禁用外部实体
2、对用户提交的XML数据进行过滤。
3、配置解析器过滤ENTITY声明
4、应用程序使用最低的系统权限
5、及时升级,修补安全漏洞。 - XXE注入与XML注入的区别
1、XML注入:攻击者通过注入XML标签或者内容,破坏文档结构或逻辑(如修改用户权限字段)
2、XXE注入:利用XML解析器加载外部实体的功能,读取文件、发起SSRF或拒绝服务攻击。
区别:XML注入针对应用逻辑层,XXE利用解析器特性。
XXE需要依赖外部实体声明:,XML注入无需实体扩展
XXE 盲注利用方法
XXE (XML External Entity) 盲注是指当应用程序解析XML输入时存在XXE漏洞,但攻击者无法直接看到解析结果的情况。以下是几种主要的XXE盲注利用方法:
- 带外数据外泄 (OOB - Out-of-Band)
1.1 通过HTTP请求外泄数据
1.2 通过FTP协议外泄数据 - 基于错误的盲注
2.1 通过错误消息获取数据 - 延时技术 (Time-based)
3.1 使用负载导致处理延迟 - 本地DTD利用技术
4.1 利用已知本地DTD文件 - 特殊文件读取技术
5.1 读取PHP源代码 - 服务器端请求伪造 (SSRF):gopher://信息查找系统。用于组织和检索文件。
6.1 探测内网服务
防御措施
1、使用白名单验证XML输入
2、使用更安全的替代格式(如JSON)
3、限制XML解析器的网络访问
4、定期更新XML处理库
5、禁用DTD和外部实体:
java
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
- 遇到告警如何研判?
1、攻击载荷几乎都在POST请求的Body中。
DOCTYPE声明:存在<!DOCTYPE、<!ENTITY关键字。
SYSTEM关键字:用于声明外部实体,后面通常会跟一个恶意URL。
恶意URL方案:文件读取:网络探测ssrf、盲注外带 http://dnslog.cn/xxxx、http://[攻击者VPS]。
参数实体:实体名前有%符号。直接引用&xxe;或进行包装绕过。
2、HTTP请求头特征
Content-type:通常为application或text/xml。如果Content-type时appliaction/json但却出现XML载荷,很可能时误报或攻击者探测行为。
User-Agent:特定UA,如XXEinjector
3、URL参数:攻击载荷可能经过编码后放在GET请求的参数中。请求的URL路径是否时已知、处理xml数据的api接口?(如SOAP服务器接口、文件上传解析接口、单点登录SAML回调接口、明确的API接口/api/xml/import)。
4、响应体包含敏感文件信息,响应体出现明显XML解析错误信息,但错误信息中泄露了文件路径或部分内容(如 java.io.FileNotFoundException: /etc/passwd (Permission denied))。响应状态码为200,但返回了异常的数据。


浙公网安备 33010602011771号