ofcms V1.2 代码审计(二)
字数 1193 2025-08-20 18:18:11
OFCMS V1.2 代码审计报告与安全教学文档
1. 系统概述
OFCMS V1.2 是一个可能存在未完成开发的内容管理系统,审计发现其存在多处安全漏洞,主要包括越权、未授权访问和XSS漏洞。系统使用了Shiro框架进行权限控制,但实现不完善。
2. 漏洞详情与复现
2.1 越权漏洞
漏洞描述
系统存在垂直越权漏洞,普通用户可通过修改请求参数提升自身权限至管理员。
复现步骤
- 准备测试数据(可直接在数据库执行):
INSERT INTO `of_sys_role` (role_name, role_desc, role_type, create_time, update_time, status, remark)
VALUES ('财务', '财务', '1', NOW(), NOW(), '1', '11');
- 使用任意账户登录系统
- 访问"基本资料"功能
- 抓包修改请求中的
role_id参数为1(管理员角色) - 提交请求完成权限提升
代码分析
漏洞位于SysUserController.java的update()方法:
String roleId = (String) params.get("role_id");
if (!StringUtils.isBlank(roleId)) {
SqlPara sql = Db.getSqlPara("system.user.role_update", params);
Db.update(sql);
}
问题点:缺少对当前用户权限的校验,直接接受客户端提交的role_id参数。
2.2 未授权访问漏洞
漏洞描述
系统集成了Druid监控但配置不当,导致已登录用户可访问敏感监控信息。
复现步骤
- 使用任意有效账户登录系统
- 直接访问Druid监控页面:
http://[目标IP]:8080/ofcms_admin/admin/druid/header.html
安全配置分析
Shiro配置文件中(shiro.ini)相关配置:
[urls]
/admin/logout.html = anon
/admin/login2.html = anon
/admin/login.html = anon
/admin/dologin.json = anon
/api/** = anon
/static/** = anon
/admin/** = authc
/** = anon
问题点:虽然/admin/**路径需要认证,但未对Druid监控接口做额外权限控制。
2.3 XSS漏洞
漏洞描述
系统未配置XSS过滤器,所有用户输入点均可能存在XSS漏洞。
复现方法
- 寻找任意用户输入点(如表单、URL参数等)
- 输入典型XSS payload,例如:
<script>alert(1)</script>
- 提交后观察是否执行
代码分析
系统特点:
- 使用Freemarker模板引擎
- 未实现XSS过滤器
- 仅配置了字体和Restful风格的拦截器
3. 审计技巧
3.1 SQL注入检测
使用IDEA正则搜索潜在SQL注入点:
(?<!SqlPara sql = Db\.getSqlPara$.*$;\s*)Db\.update$sql$;
3.2 权限校验检测
重点关注Controller中涉及权限修改、敏感操作的方法,检查是否包含:
- 当前用户权限验证
- 操作目标权限验证
- 会话有效性验证
3.3 XSS防护检测
检查是否存在以下内容:
- XSS过滤器实现
- 输出编码处理
- CSP策略配置
4. 修复建议
-
越权漏洞修复:
- 在权限修改操作前验证当前用户权限
- 实现基于角色的访问控制(RBAC)
- 服务端校验目标角色是否允许被当前用户分配
-
未授权访问修复:
- 为Druid监控配置独立强密码
- 限制访问IP范围
- 或完全移除生产环境的监控界面
-
XSS漏洞修复:
- 实现全局XSS过滤器
- 对所有用户输入进行过滤和输出编码
- 设置Content-Security-Policy头
-
其他建议:
- 完善Shiro配置,细化权限控制
- 对敏感操作增加日志记录
- 实现CSRF防护机制
5. 总结
OFCMS V1.2存在典型的三类安全漏洞,主要原因是:
- 权限校验不完善
- 敏感功能暴露
- 输入输出缺乏过滤
审计此类系统时应重点关注权限控制实现和用户输入处理,使用正则表达式等工具辅助快速定位潜在风险点。