JPress审计
0x01 目标熟悉
JPress 是一个使用 Java 开发的、开源免费的建站神器,灵感来源于 WordPress,目前已经有超过 10w+ 的网站使用 JPress 搭建,其中包括多个政府机构,200+上市公司,中科院、红十字会等。
JPress基于JBoot而不是SpringBoot
0x02 环境搭建
依照官方文档:http://doc.jpress.cn/manual/start.html
下载项目并解压到指定目录下
配置好java环境,可参考:http://doc.jpress.cn/manual/jdk_config.html
配置好maven环境,可参考:http://doc.jpress.cn/manual/maven_config.html
这里有一个小问题,maven切换到阿里云的源后,执行mvn help:system会报错,暂时使用官方源
配置好IDEA开发环境,可参考:http://doc.jpress.cn/manual/idea_environment_config.html
maven不了解的,可参考:https://www.cnblogs.com/lenve/p/12047793.html
可通过如下命令启动
1 | cd jpress |
也可通过IDEA启动,配置好IDEA开发环境后,依照文档定位到文件starter/src/main/java/io.jpress/Starter,点击启动方法main,如下图
成功启动,如下图
访问127.0.0.1:8080进入安装界面,如下图
一路下一步,依照提示操作即可,成功搭建后,使用内网ip访问,前台界面如下
后台界面如下
在 starter/src/main/resources/undertow.txt 中可以修改端口
0x03 代码审计
01 通杀最新版的后台插件上传getshell
登录后台后,查看后台功能,在插件->安装可以看到能安装插件,想到将恶意代码放入插件中,然后上传插件getshell,如下图
开始动手,首先查看项目目录,能大概猜到,插件目录是jpress-addons,如下图
展开项目,我们修改jpress-addon-helloworld子项目,可以看到HelloWorldAddon这个文件负责:安装、卸载、启动、停止时触发的动作,如下图
HelloWorldAddonController这个文件负责访问某些路径时触发的动作,我们选择在方法adminmenutest()中添加如下恶意代码
1 | try { |
添加后如下图
然后我们将项目jpress-addon-helloworld打包成jar包,我这边进入jpress-addon-helloworld子目录后执行mvn clean package会打包失败,需要进入根目录执行mvn clean package,执行后如下图
然后在jpress-addon-helloworld的target目录下找到jpress-addon-helloworld-4.0.jar,登录后台,在插件处上传jpress-addon-helloworld-4.0.jar,然后点击插件测试,如下图
可以看到成功弹出计算器
同样的方式,我们测试下,在最新版(截止到2022/12/27,最新版为5.0.5)中,此方法是否可以getshell,同样的过程搭建一下jpress最新版,搭建好后进入后台,如下图
上传刚才打包好的jar包,点击插件测试,看到可成功执行命令,弹出计算器