作者: 纯情
时间: 2026-01-15
分类: 开源
环境搭建 ● windows 10 ● jdk 17 ● mysql 5.7.26 ● fastcms 0.1.6 下载地址: https://github.com/my-fastcms/fastcms 登录: http://127.0.0.1:8080/fastcms-master.html 账号/密码:admin/1
1 数据库配置 数据库配置文件:fastcms-master/web/src/main/resources/application.yml
数据库文件:fastcms-master/doc/sql/fastcms-master.sql
2 开发环境 搭建环境会遇到 Java 9+ 模块系统(JPMS)兼容性问题 ,在运行配置中添加虚拟机选项(VM options),输入下列参数即可
3 生产环境 存在漏洞的功能在开发环境无法使用,但在生产环境又无法 debug,此节侧重于在 idea debug 打包,找到 fastcms-master/build.bat 文件(windows 环境用 bat,linux 环境用 sh),双击进行打包,打包完成会出现 .dist 目录
.dist 目录中,启动 startup.cmd 文件即可运行程序,但这样无法 debug,记住 fastcms-master-server.jar 的绝对路径,这是用 idea debug 的关键
在 idea 的运行配置中添加 jar 应用程序
需要设置下列四个参数,jar 路径是 fastcms-master-server.jar 的绝对路径,工作目录则是 fastcms-master-server.jar 的所在目录,虚拟机选项和程序实参,则贴在图片下面。名称无所谓
虚拟机选项
程序实参
启动成功会显示 8080 端口,以及启动时间
代码审计 入口文件:fastcms-master/web/src/main/java/com/fastcms/web/controller/admin/PluginController.java 第一个 if 检查是否为开发环境,如果是开发环境则报错,因此必须是生产环境,生产环境 debug 前面有配置步骤,这里不在叙述,后面两个 if 判断是否有后缀,是否是 jar、zip 文件,最后进入安装环境
installPlugin 方法先安装再激活
loadPlugin 方法中,loadPluginFromPath 加载插件,resolvePlugins 解决依赖
loadPluginFromPath 是 pf4j 的原生方法,简单看一下,pluginId 不存在代表新插件,新插件载入需要获取插件元数据(pluginDescriptor),获取插件所有类(pluginClassLoader),创建插件实例(pluginWrapper)最后通过 addPlugin 方法载入
这里就已经实例化并载入了插件,后面需要激活插件,跟进 startPlugin 方法,根据 pluginId 获取插件,再根据插件获取实例化对象,执行 start 方法激活,中间只是判断插件的状态,是激活还是禁止
start 方法如下,这是官方 HelloPlugin 插件,是否可以在这里加点代码?
漏洞复现 这里为了方便演示,修改官方插件,插件编写方法附在最后 找到 fastcms-master/plugins/hello-world-plugin/src/main/java/com/fastcms/hello/HelloPlugin.java 文件,添加下列代码
在 fastcms-master/plugins/hello-world-plugin/ 目录下打包成 jar 文件
fastcms-master/plugins/hello-world-plugin/target/hello-world-plugin-0.1.6-SNAPSHOT.jar
http://127.0.0.1:8080/fastcms-master.html 登录,账号密码:admin/1
此时插件管理显示暂无数据,选择打包好的 jar 文件
上传成功显示插件信息,弹出计算器
上面是第一次验证的步骤,如果想要重复验证,这时有三种方法 ● 停止项目,找到 astcms-master.distplugins ,删除 jar,重新启动,再次上传 ● 点击卸载,修改 jar 包名,点击上传 ● 修改 pom.xml 中的 artifactId 、 plugin.id 标签,重新打包 jar 演示第二种:点击卸载,会弹出 405 不必理会,刷新一下会移除插件信息,但 jar 包会被保留(在自己编写插件中,若全限定类名不一致,会存在插件信息未移除的情况)
这时上传文件名完全一致的 jar 包会报错,修改 jar 包名后可以上传
必须的插件结构(推荐在 fastcms-master/plugins 目录下,完成插件写好后在 fastcms-master/plugins/xxx-plugin 目录下用 mvn clean package 打包) ● xxx-plugin/src/main/java/com/fastcms/xxx/XxxPlugin.java ● xxx-plugin/plugin.properties ● xxx-plugin/pom.xml XxxPlugin.java
plugin.properties
pom.xml
标签: 漏洞复现 , Java , 代码审计 , 插件系统 , RCE , FastCMS , PF4J