Java中利用EXCEL进行XXE攻击

本文探讨了如何在Java中利用Excel文件实施XXE攻击,详细介绍了攻击过程,包括修改Excel文件的zip内容以插入XXE验证POC,然后通过SAXReader解析导致的漏洞。此外,还提到了Apache POI的受影响版本和漏洞产生的原因,即XML文档加载外部实体。修复方案是通过SAXHelper类阻止外部实体引用,以及在dom解析时禁用外部实体。

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

  • Java中常见解析Excel引入的XXE组件复现与分析
    新建excel文件 修改后缀为.zip
    在zip文件中,修改[Content_Types].xml,在其中加入XXE验证POC
    重新修改后缀为 .xlsx

  • 结果发现
    直接通过 SAXReader 来解析xml文档,导致xxe漏洞的产生

  • 修复方案
    是在此处增加了一个SAXHelper类来进行防御处理
    Apache POI,受影响版本:poi-ooxml-3.10-FINAL 及其以下版本
    由于Excel文件实际上是一个压缩包格式文件,其中的xml文档如果被恶意构造加载外部实体参数,就会导致XXE漏洞。
    我们从excel文件中读取到的 xml 文件传入 document() 方法,导致触发漏洞跟进 document() 方法,发现是直接通过 dom 方式解析 xml 文件导致了xxe漏洞
    而修复方式采用的直接禁用外部实体引用。

/**
* 增加防止部实体注入逻辑
* @param reader
* @throws SAXException
* @see [类、类#方法、类#成员]
*/

 public static void setReaderFeature(SAXReader reader)
        throws SAXException
    {
        
        reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
        
        reader.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", true);
        
        // 是否包含外部生成的实体。当正在解析文档时为只读属性,未解析文档的状态下为读写。
        reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
        
        // 是否包含外部的参数,包括外部DTD子集。当正在解析文档时为只读属性,未解析文档的状态下为读写。
        reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
        
        reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
        
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值