jfinal框架——ofcmsv1.1.3代码审计
字数 1445 2025-08-20 18:18:10

JFinal框架下ofcms v1.1.3代码审计教学文档

一、项目概述

ofcms是基于JFinal框架开发的内容管理系统,版本v1.1.3存在多个安全漏洞。本教学文档将详细分析这些漏洞的发现过程和原理。

二、审计环境准备

  1. 项目地址:https://gitee.com/oufu/ofcms/tree/V1.1.3/
  2. 依赖分析:通过pom.xml查看项目依赖
  3. 配置文件路径:ofcms-V1.1.3\ofcms-admin\src\main\webapp\WEB-INF\web.xml

三、JFinal框架数据库操作基础

3.1 JFinal ORM操作简介

JFinal使用Db类执行SQL语句,主要方法:

  1. Db.save:插入记录

    Record user = new Record().set("name", "Alice").set("age", 25);
    Db.save("user", user);
    
  2. Db.find:查询多条记录

    List<Record> users = Db.find("SELECT * FROM user");
    
  3. Db.findFirst:查询单条记录

    Record user = Db.findFirst("SELECT * FROM user WHERE id = ?", 1);
    
  4. Db.query:查询单个字段

    String name = Db.queryStr("SELECT name FROM user WHERE id = ?", 1);
    
  5. Db.update:更新记录

    int updatedRows = Db.update("UPDATE user SET age = ? WHERE id = ?", 30, 1);
    
  6. Db.delete:删除记录

    int deletedRows = Db.delete("DELETE FROM user WHERE id = ?", 1);
    
  7. Db.tx:事务操作

    boolean success = Db.tx(() -> {
        Db.update("UPDATE user SET age = ? WHERE id = ?", 30, 1);
        return true;
    });
    
  8. Db.batch:批量操作

    int[] results = Db.batchSave("user", users, 100);
    
  9. Db.getSqlPara:安全SQL执行(防注入)

    SqlPara sqlPara = Db.getSqlPara("findUserById", params);
    List<Record> users = Db.find(sqlPara);
    

3.2 数据库配置

数据库配置位于JFWebConfig.java中的ADMIN_CONFIG,指定了数据库配置文件位置。

四、SQL注入漏洞分析

4.1 漏洞发现方法

  1. 搜索关键字:Db.(find|findFirst|update|delete|save|batch)\s*\(
  2. 重点关注未使用预编译或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 漏洞修复建议

  1. 使用预编译参数:
    Db.update("UPDATE of_cms_link SET link_name=? WHERE link_id=?", getPara("link_name"), getPara("link_id"));
    
  2. 或使用Db.getSqlPara

五、XSS漏洞分析

5.1 漏洞发现方法

  1. 寻找"输入点"和"输出点"
  2. 搜索关键字:
    • 输入点:getParameter, getPara, getRequestParameter
    • 输出点:render, setAttr, JSP/HTML中的${}表达式

5.2 常见XSS场景

  1. 用户输入直接输出到页面
  2. 富文本编辑器未过滤危险标签
  3. 反射型XSS在错误消息、搜索结果等处

六、其他潜在漏洞

6.1 文件上传漏洞

检查文件上传功能:

  1. 是否验证文件类型
  2. 是否限制文件大小
  3. 是否使用随机文件名

6.2 CSRF漏洞

检查:

  1. 关键操作是否有CSRF token保护
  2. 是否使用jfinal.extras.interceptor.CSRFInterceptor

6.3 权限控制漏洞

检查:

  1. 管理后台URL是否可被普通用户访问
  2. 权限验证是否全面

七、审计工具推荐

  1. 静态分析工具

    • FindBugs
    • SonarQube
    • Fortify
  2. 动态测试工具

    • Burp Suite
    • OWASP ZAP
  3. 正则表达式搜索

    • 预定义的安全敏感模式搜索

八、总结

  1. JFinal框架应用需特别注意SQL注入防护
  2. 审计时应重点关注直接拼接SQL的代码段
  3. XSS漏洞需结合输入输出点分析
  4. 建议建立安全检查清单,覆盖常见漏洞类型

附录:参考文章

  1. https://www.yijinglab.com/specialized/20220526170417
  2. https://mp.weixin.qq.com/s/dZAqUVpKr6fA_Lq7nJTmbw
  3. https://mp.weixin.qq.com/s/1agUDocOUbFgbiO83Qz5-w
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 :插入记录 Db.find :查询多条记录 Db.findFirst :查询单条记录 Db.query :查询单个字段 Db.update :更新记录 Db.delete :删除记录 Db.tx :事务操作 Db.batch :批量操作 Db.getSqlPara :安全SQL执行(防注入) 3.2 数据库配置 数据库配置位于 JFWebConfig.java 中的 ADMIN_CONFIG ,指定了数据库配置文件位置。 四、SQL注入漏洞分析 4.1 漏洞发现方法 搜索关键字: Db.(find|findFirst|update|delete|save|batch)\s*\( 重点关注未使用预编译或 Db.getSqlPara 的SQL语句 4.2 漏洞实例分析 发现一处直接使用 getPara 传参的SQL执行: 漏洞利用 : 4.3 漏洞修复建议 使用预编译参数: 或使用 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