jfinal框架——ofcmsv1.1.3代码审计
字数 1445 2025-08-20 18:18:10
JFinal框架下ofcms v1.1.3代码审计教学文档
一、项目概述
ofcms是基于JFinal框架开发的内容管理系统,版本v1.1.3存在多个安全漏洞。本教学文档将详细分析这些漏洞的发现过程和原理。
二、审计环境准备
- 项目地址:https://gitee.com/oufu/ofcms/tree/V1.1.3/
- 依赖分析:通过pom.xml查看项目依赖
- 配置文件路径:ofcms-V1.1.3\ofcms-admin\src\main\webapp\WEB-INF\web.xml
三、JFinal框架数据库操作基础
3.1 JFinal ORM操作简介
JFinal使用Db类执行SQL语句,主要方法:
-
Db.save:插入记录
Record user = new Record().set("name", "Alice").set("age", 25); Db.save("user", user); -
Db.find:查询多条记录
List<Record> users = Db.find("SELECT * FROM user"); -
Db.findFirst:查询单条记录
Record user = Db.findFirst("SELECT * FROM user WHERE id = ?", 1); -
Db.query:查询单个字段
String name = Db.queryStr("SELECT name FROM user WHERE id = ?", 1); -
Db.update:更新记录
int updatedRows = Db.update("UPDATE user SET age = ? WHERE id = ?", 30, 1); -
Db.delete:删除记录
int deletedRows = Db.delete("DELETE FROM user WHERE id = ?", 1); -
Db.tx:事务操作
boolean success = Db.tx(() -> { Db.update("UPDATE user SET age = ? WHERE id = ?", 30, 1); return true; }); -
Db.batch:批量操作
int[] results = Db.batchSave("user", users, 100); -
Db.getSqlPara:安全SQL执行(防注入)
SqlPara sqlPara = Db.getSqlPara("findUserById", params); List<Record> users = Db.find(sqlPara);
3.2 数据库配置
数据库配置位于JFWebConfig.java中的ADMIN_CONFIG,指定了数据库配置文件位置。
四、SQL注入漏洞分析
4.1 漏洞发现方法
- 搜索关键字:
Db.(find|findFirst|update|delete|save|batch)\s*\( - 重点关注未使用预编译或
Db.getSqlPara的SQL语句
4.2 漏洞实例分析
发现一处直接使用getPara传参的SQL执行:
// 漏洞代码示例
String sql = "UPDATE of_cms_link SET link_name='" + getPara("link_name") + "' WHERE link_id=" + getPara("link_id");
Db.update(sql);
漏洞利用:
payload: update of_cms_link set link_name=updatexml(1,concat(0x7e,(user())),0) where link_id = 4
4.3 漏洞修复建议
- 使用预编译参数:
Db.update("UPDATE of_cms_link SET link_name=? WHERE link_id=?", getPara("link_name"), getPara("link_id")); - 或使用
Db.getSqlPara
五、XSS漏洞分析
5.1 漏洞发现方法
- 寻找"输入点"和"输出点"
- 搜索关键字:
- 输入点:
getParameter,getPara,getRequestParameter - 输出点:
render,setAttr, JSP/HTML中的${}表达式
- 输入点:
5.2 常见XSS场景
- 用户输入直接输出到页面
- 富文本编辑器未过滤危险标签
- 反射型XSS在错误消息、搜索结果等处
六、其他潜在漏洞
6.1 文件上传漏洞
检查文件上传功能:
- 是否验证文件类型
- 是否限制文件大小
- 是否使用随机文件名
6.2 CSRF漏洞
检查:
- 关键操作是否有CSRF token保护
- 是否使用
jfinal.extras.interceptor.CSRFInterceptor
6.3 权限控制漏洞
检查:
- 管理后台URL是否可被普通用户访问
- 权限验证是否全面
七、审计工具推荐
-
静态分析工具:
- FindBugs
- SonarQube
- Fortify
-
动态测试工具:
- Burp Suite
- OWASP ZAP
-
正则表达式搜索:
- 预定义的安全敏感模式搜索
八、总结
- JFinal框架应用需特别注意SQL注入防护
- 审计时应重点关注直接拼接SQL的代码段
- XSS漏洞需结合输入输出点分析
- 建议建立安全检查清单,覆盖常见漏洞类型
附录:参考文章
- https://www.yijinglab.com/specialized/20220526170417
- https://mp.weixin.qq.com/s/dZAqUVpKr6fA_Lq7nJTmbw
- https://mp.weixin.qq.com/s/1agUDocOUbFgbiO83Qz5-w