环境搭建
这个系统有两个版本,一套 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去注入


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

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