XML实体注入漏洞

xml · 浏览次数 : 0

小编点评

**漏洞概述** - **高危漏洞类型**:XML实体注入漏洞 - **漏洞全称**:XML External Entity Injection (XXE) - **漏洞描述**:XXE漏洞发生于应用程序解析XML输入时,若未禁止外部实体加载,可能会加载恶意外部文件,进而导致文件读取、命令执行、内网端口扫描、攻击内网网站、发起DOS攻击等危害。 **影响版本** - 3.16及以下版本 **修复方案** 1. 升级poi jar包至4.1.2版本: - 示例依赖: ```xml org.apache.poi poi 4.1.2 org.apache.xmlbeans xmlbeans ``` 2. 手动调整代码中的相关方法及属性: - 例如: ```java cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); cellStyle.setBottomBorderColor(HSSFColor.BLACK.index); cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); cellStyle.setLeftBorderColor(HSSFColor.BLACK.index); cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); ``` 更新至: ```java cellStyle.setAlignment(HorizontalAlignment.CENTER); cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); cellStyle.setBorderBottom(BorderStyle.THIN); cellStyle.setBottomBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex()); cellStyle.setBorderLeft(BorderStyle.THIN); cellStyle.setLeftBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex()); cellStyle.setBorderRight(BorderStyle.THIN); cellStyle.setRightBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex()); cellStyle.setBorderTop(BorderStyle.THIN); cellStyle.setTopBorderColor(HSSFColor.HSSFColorPredefined.BLACK INDEX); ``` 3. 如更新后仍出现报错,手动排除poi中的xmlbeans并重新引入: - 示例依赖: ```xml org.apache.poi poi 4.1.2 org.apache.xmlbeans xmlbeans org.apache.xmlbeans xmlbeans 3.1.0 ``` > 注意:只需引入一个版本的xmlbeans以避免冲突,不要存在多个版本的xmlbeans。

正文

漏洞等级:高危

漏洞类型:XML实体注入

漏洞描述:XXE漏洞全称XML Extemal Endy niecionlxm以外部实体注入漏洞,X在漏洞发生在应用程序经析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起d0s攻击等危害。xxe漏洞触发的点往往是可以上传xm文件的位置,没有对上传的xm,文件进行过滤,导致可上传恶意xm文件。

具体修复方案:

1.需要将poi  jar包升级到4.1.2版本,我当前使用的版本是3.16。

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>4.1.2</version>
   <exclusions>
      <exclusion>
         <groupId>org.apache.xmlbeans</groupId>
         <artifactId>xmlbeans</artifactId>
      </exclusion>
   </exclusions>
</dependency>

 

2.升级完jar包后代码中引入的需要相关方法及属性就会报错,这时候需要我们手动调整这些错误。

以下是3.6及以下的版本显示:

cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBottomBorderColor(HSSFColor.BLACK.index);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);

更高版本是这样的:

cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBottomBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setLeftBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setRightBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setTopBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());

 

3.调整完成后可以启动成功,但是上传文件依然会报错,错误信息如下:

 Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg/apache/xmlbeans/XmlOptions;

这时候就需要我们手动排除poi里的xmbeans,重新 引入xmbeans,注意:xmlbeans只能引入一个,不要存在其他版本的xmlbeans,不然依然会报错。

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.xmlbeans</groupId>
                    <artifactId>xmlbeans</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
<!-- xmlbeans -->
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>3.1.0</version>
</dependency>

注意:不是pom.xml只引入一个版本就行了,是引用的Maven仓库中只能存在一个版本的xmlbeans。

 

与XML实体注入漏洞相似的内容:

XML实体注入漏洞

漏洞等级:高危 漏洞类型:XML实体注入漏洞描述:XXE漏洞全称XML Extemal Endy niecionlxm以外部实体注入漏洞,X在漏洞发生在应用程序经析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起d0s攻击等危害。

Web攻防--xxe实体注入

# web攻防--xxe实体注入 ## 漏洞简介 XML 外部实体注入(也称为 XXE)是一种 Web 安全漏洞,允许攻击者干扰应用程序对 XML 数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。 在某些情况下,攻击者可以利用 X

spring-关于组件的注入及获取流程

一、组件注入的基本流程: 容器初始化: Spring应用启动时,会读取配置(如XML配置、注解配置等),并根据这些配置创建Bean定义(BeanDefinition)。 根据Bean定义,Spring容器实例化Bean,并管理它们之间的依赖关系。 依赖解析与注入: 当一个Bean依赖于另一个Bean

Spring Boot Starter 剖析与实践

本文介绍了在没有 Spring Boot 和 Starter 之前,开发人员在使用传统的 Spring XML 开发 Web 应用时需要引用许多依赖,并且需要大量编写 XML 代码来描述 Bean 以及它们之间的依赖关系。也了解了如何利用 SPI 加载自定义标签来加载 Bean 并进行注入。

vue上通过krpano.js实现360全景图

首先贴出一些XML对应的函数,文件内容都有注释说明, 前端代码读取xml文件代码 // 初始化 window.embedpano({ xml: 0, target: 'pano', html5: 'only', mobilescale: 1.0, passQueryParameters: 'star

从XML配置角度理解Spring AOP

本文是全面解析面向切面编程的实践指南。通过深入讲解切面、连接点、通知等关键概念,以及通过XML配置实现Spring AOP的步骤。

Springboot项目使用Undertow替换内置Tomcat服务器,实现RESTFUL接口web应用

Maven实例:pom.xml文件中添加更换依赖 org.springframework.boot spring-boot-starter

鸿蒙HarmonyOS实战-ArkTS语言基础类库(XML)

前言 数据传输的数据格式有以下几种常见的格式: JSON(JavaScript Object Notation):JSON是一种轻量级的数据交换格式,可读性高且易于解析。它使用键值对的方式表示数据,并且支持多层嵌套。 XML(eXtensible Markup Language):XML是一种标

从原理到实战,详解XXE攻击

本文分享自华为云社区《【安全攻防】深入浅出实战系列专题-XXE攻击》,作者: MDKing。 1 基本概念 XML基础:XML 指可扩展标记语言(Extensible Markup Language),是一种与HTML类似的纯文本的标记语言,设计宗旨是为了传输数据,而非显示数据。是W3C的推荐标准。

资源描述框架的用途及实际应用解析

**RDF(资源描述框架)**是一种用于机器理解网络资源的框架,使用XML编写。它通过URI标识资源,用属性描述资源,便于计算机应用程序处理信息。RDF在语义网上促进信息的确切含义和自动处理,使得网络信息可被整合。RDF语句由资源、属性和属性值组成。RDF文档包括``根元素和`