PB-CMS v2.0代码审计
Xavier123 漏洞分析 276浏览 · 2025-03-26 01:41

0x01

瀑布内容管理系统,采用SpringBoot + Apache Shiro + Mybatis Plus + Thymeleaf 实现的内容管理系统(附带权限管理),是搭建博客、网站的不二之选。致力于开发最精简、实用的CMS管理系统,适合搭建博客、企业网站等,持续开发中。



0x02项目地址

https://gitee.com/LinZhaoguan/pb-cms



0x03 声明

此分享主要用于交流学习,请勿用于非法用途,否则一切后果自付。



0x04项目启动

image.png


2、修改本地文件上传的路径:

在上传管理中的云存储配置中修改为本地存储

image.png


配置文件中修改路径为你指定上传路径



image.png


这边点保存

5f63f2839c1782b087cb4df2711385d.png




0x05漏洞复现:

1、任意文件上传

漏洞文件路径

src/main/java/com/puboot/module/admin/controller/UploadController.java

image.png




可以看代码,调用 upload 方法上传文件,然后判断返回状态码是否为200,是的话就上传成功,否则失败

image.png




再来跟进下upload方法,可以看到调用ossService.upload(file)方法将文件上传

image.png




跟进upload方法

image.png




我们看到switch分支,我们是本地存储,直接看到UPLOAD_TYPE_LOCAL,跟进uploadLocal方法

image.png


可以看到,获取原文件名前缀、时间戳和原文件后缀,无任何过滤,直接使用 FileCopyUtils.copy将文件字节内容写入到目标文件中

image.png


我们试着传JSP

找到后台功能点,进行上传捉包

image.png




数据包如下

image.png


由于没找到对应的功能点,请求路由改为/uploadForEditor,进行发包

image.png


后缀改为jsp,可以发现上传成功

image.png




直接访问变成下载了

image.png




因为这个框架为Springboot框架,springboot框架一般不引用依赖的话不解析jsp文件,但是该系统使用的模板框架为thymeleaf 3.0.15,该版本的模板存在模板注入漏洞,该上传点可以直接上传任意文件后缀以及穿目录,所以我们可以将恶意模板直接上传到 thymeleaf的模板目录中替换掉原本的 404.html 模板,实际位于 target/classes/templates/error/404.html



我们来测试下:

这个版本的模板注入的payload需要进行绕过,payload如下



[[${T(ch.qos.logback.core.util.OptionHelper).instantiateByClassName("org.springframework.expression.spel.standard.SpelExpressionParser","".getClass().getSuperclass(),T(ch.qos.logback.core.util.OptionHelper).getClassLoader()).parseExpression("T(java.lang.String).forName('java.lang.Runtime').getRuntime().exec('calc')").getValue()}]]



插入到404.html上,保存然后重新运行项目

image.png




访问不存在的地址,弹计算器了

image.png


那现在直接进行测试,但是发现没法指定目录进行跨越

image.png


2、存储xss

基于上述任意文件上传,直接上传html

image.png




访问

image.png




3Csrf

代码中没有csrf的防护

新增用户管理处-用户管理-新增用户处

image.png


抓包如下

image.png


生成csrf_poc

image.png


访问poc,成功添加

image.png


image.png


0 条评论
某人
表情
可输入 255
目录