JFinalCMS_V5.0.0代码审计

环境搭建

这个系统有两个版本,一套 JFinal版本,一套Springboot版

JFinal:https://gitee.com/heyewei/JFinalcms

Springboot:https://gitee.com/heyewei/SpringBootCMS

我这里下载的是JFinal版本的

项目下载到本地后,使用IDEA打开

创建数据库

数据库配置文件:JFinalcms-master\src\main\resources\config.properties

修改pom.xml文件

给maven-compiler-plugin插件添加版本

后台账号:admin/123456

代码审计

SQL注入

第一处admin/admin

直接全局搜索admin/admin,只有这一个文件

getPara() 获取的是原始用户输入,没有任何过滤或转义,这两个参数直接传递给了 findPage() 方法

跟踪这个函数

里面是执行的sql语句,可以看到name和username的值都是直接拼接到sql语句中的,而且这里代码中也没有看到过滤,那么这里基本可以判断存在注入漏洞了

完整的调用追踪流程

复制代码
用户请求 (HTTP)
    ↓
AdminController.index() [第38-39行]
    ↓ getPara("name") 获取原始输入
    ↓
Admin.findPage() [第99-109行]
    ↓ 
    ↓ 第102行: filterSql+= " and name like '%"+name+"%'"
    ↓         ↑  这里直接拼接,没有使用参数化查询
    ↓
JFinal.paginate() 
    ↓
数据库执行SQL
    ↓
返回结果给前端

这里name和username都是存在注入的

这里可以拿去sqlmap进行测试

第二处前台/search

直接全局搜索 /search

这里点进去第一个查看

可以看到有两个参数,一个是keyword,一个是pageNumber,我们要看keyword,因为pageNumber的话是整型的,我们进行sql注入的话行不通,所以我们看字符串类型的keyword

全局搜索keyword

这里是把keyword的值追加到filterSql中

我们这里直接拿sqlmap去注入

任意文件写入

在后台模板管理处可以进行任意文件的写入

像这里有这个模板的话我们就可以进行文件的读取,写入和删除