JAVA审计初探
字数 1112 2025-08-24 23:51:23

Java审计初探 - OFCMS漏洞分析

环境搭建

  1. 项目地址:https://github.com/yuzhaoyang001/ofcms
  2. 使用IDEA导入war包
  3. 配置Tomcat服务器
  4. 创建数据库并运行SQL文件
  5. 配置数据库连接文件
  6. 根据MySQL版本调整pom.xml配置
  7. 后台地址:http://localhost:8081/ofcms_admin_war/admin/login.html
  8. 默认账号密码:admin/123456

漏洞分析

1. SQL注入漏洞

漏洞位置:Controller层接收SQL参数并直接执行update操作

漏洞分析

  • 系统接收SQL参数后直接执行update操作
  • 虽然使用了预编译,但预编译的是整个SQL语句而非参数
  • 存在回显功能

测试方法

update of_cms_ad set ad_id=updatexml(1,concat(1,user()),1)

利用限制

  • 只能执行增删改SQL语句(executeUpdate)

2. 任意文件读取漏洞

漏洞位置:Controller中文件读取功能

漏洞分析

  • dir参数可控,未做限制
  • 只能读取html、js、css、xml文件
  • 默认读取default目录下的文件
  • 通过比较文件名和files列表中的绝对路径来读取文件

测试方法

http://example.com/ofcms_admin_war/admin/template/getTemplteContent.html?dir=../../WEB-INF&fileName=web.xml

3. 任意文件写入漏洞

漏洞位置:与文件读取相同的Controller

漏洞分析

  • 只对content参数进行了尖括号替换
  • 无其他过滤措施
  • 可写入任意内容

4. 任意文件上传漏洞

第一处漏洞

  • 通过MultipartRequest进行文件上传
  • 检查jspjspx后缀
  • 可利用Windows特性绕过:上传.jsp.文件

第二处漏洞

  • 与第一处类似,同样存在任意文件上传风险

5. 越权修改密码漏洞

漏洞分析

  • 修改密码功能未绑定用户ID
  • 通过修改请求中的user_id参数可修改任意用户密码

测试步骤

  1. 创建普通用户
  2. 登录普通用户修改密码
  3. 修改请求中的user_id为1(admin用户)
  4. 成功修改admin密码

6. 模板注入漏洞

漏洞分析

  • 系统使用Freemarker模板引擎
  • 后台存在模板修改功能
  • 可注入恶意模板代码

Payload

<#assign value="freemarker.template.utility.Execute"?new()>${value("calc.exe")}

审计技巧总结

  1. 功能点审计:先过一遍系统功能点,重点关注数据交互处
  2. 抓包定位:通过抓包寻找对应的Controller层代码
  3. 调试分析:使用断点调试跟踪参数传递和处理过程
  4. 框架特性:注意框架特性(如Freemarker)可能带来的安全问题
  5. 参数追踪:追踪用户可控参数的完整处理流程
  6. 黑盒结合:结合黑盒测试发现可疑点后再进行代码审计

参考资源

  1. Freemarker模板注入
  2. Java安全审计基础
Java审计初探 - OFCMS漏洞分析 环境搭建 项目地址:https://github.com/yuzhaoyang001/ofcms 使用IDEA导入war包 配置Tomcat服务器 创建数据库并运行SQL文件 配置数据库连接文件 根据MySQL版本调整pom.xml配置 后台地址:http://localhost:8081/ofcms_ admin_ war/admin/login.html 默认账号密码:admin/123456 漏洞分析 1. SQL注入漏洞 漏洞位置 :Controller层接收SQL参数并直接执行update操作 漏洞分析 : 系统接收SQL参数后直接执行update操作 虽然使用了预编译,但预编译的是整个SQL语句而非参数 存在回显功能 测试方法 : 利用限制 : 只能执行增删改SQL语句(executeUpdate) 2. 任意文件读取漏洞 漏洞位置 :Controller中文件读取功能 漏洞分析 : dir 参数可控,未做限制 只能读取html、js、css、xml文件 默认读取 default 目录下的文件 通过比较文件名和 files 列表中的绝对路径来读取文件 测试方法 : 3. 任意文件写入漏洞 漏洞位置 :与文件读取相同的Controller 漏洞分析 : 只对 content 参数进行了尖括号替换 无其他过滤措施 可写入任意内容 4. 任意文件上传漏洞 第一处漏洞 : 通过 MultipartRequest 进行文件上传 检查 jsp 和 jspx 后缀 可利用Windows特性绕过:上传 .jsp. 文件 第二处漏洞 : 与第一处类似,同样存在任意文件上传风险 5. 越权修改密码漏洞 漏洞分析 : 修改密码功能未绑定用户ID 通过修改请求中的 user_id 参数可修改任意用户密码 测试步骤 : 创建普通用户 登录普通用户修改密码 修改请求中的 user_id 为1(admin用户) 成功修改admin密码 6. 模板注入漏洞 漏洞分析 : 系统使用Freemarker模板引擎 后台存在模板修改功能 可注入恶意模板代码 Payload : 审计技巧总结 功能点审计 :先过一遍系统功能点,重点关注数据交互处 抓包定位 :通过抓包寻找对应的Controller层代码 调试分析 :使用断点调试跟踪参数传递和处理过程 框架特性 :注意框架特性(如Freemarker)可能带来的安全问题 参数追踪 :追踪用户可控参数的完整处理流程 黑盒结合 :结合黑盒测试发现可疑点后再进行代码审计 参考资源 Freemarker模板注入 Java安全审计基础