JavaWeb的某管理系统的一次常规审计
字数 1224 2025-08-05 08:19:04
JavaWeb管理系统安全审计教学文档
1. 审计环境配置
本地部署环境要求:
- 开发工具:IntelliJ IDEA
- 服务器:Tomcat 8.5.67
- 数据库:MySQL 5.7.26
- JDK版本:1.8
CMS技术栈分析:
- SpringBoot
- SpringCloud
- Shiro (安全框架)
- Thymeleaf (模板引擎)
- Vue + Element (前端框架)
- Bootstrap (前端UI框架)
2. 垂直越权漏洞分析
2.1 漏洞位置
admin-system模块中的SysRoleController类
2.2 漏洞代码分析
@RequiresPermissions("system:role:edit")
@Log(title = "角色管理", businessType = BusinessType.GRANT)
@PostMapping("/authUser/selectAll")
@ResponseBody
public AjaxResult selectAuthUserAll(Long roleId, String userIds) {
return toAjax(roleService.insertAuthUsers(roleId, userIds));
}
2.3 漏洞原理
- 虽然使用了
@RequiresPermissions注解进行权限校验 - 但方法内部未对
roleId和userIds进行有效性验证 - 攻击者可构造恶意请求修改任意用户的角色权限
2.4 漏洞复现
- 构造POST请求到
/authUser/selectAll - 携带有效的会话Cookie
- 修改
roleId和userIds参数为其他用户的ID - 系统返回操作成功,实现垂直越权
3. 文件上传白名单绕过分析
3.1 上传控制器位置
MVC架构中的uploadController
3.2 白名单验证机制
通过FileUploadUtils类进行文件扩展名校验
3.3 白名单定义
// 默认允许的扩展名
private static final String[] DEFAULT_ALLOWED_EXTENSION = {
// 定义了一系列允许的文件扩展名
};
3.4 绕过思路
- 分析白名单具体包含哪些扩展名
- 寻找解析差异(如大小写、特殊字符处理)
- 检查是否有多重扩展名处理漏洞
- 检查是否有文件内容校验漏洞
4. 历史任意文件下载漏洞分析
4.1 漏洞位置
/common/download/resource接口
4.2 漏洞代码
@GetMapping("/common/download/resource")
public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) {
if (!FileUtils.checkAllowDownload(resource)) {
throw new Exception("资源文件({})非法,不允许下载。", resource);
}
String localPath = XXXConfig.getProfile();
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
// 文件下载逻辑...
}
4.3 修复措施
- 增加了
FileUtils.checkAllowDownload方法进行资源文件校验 - 防止目录穿越攻击
- 限制了可下载的资源范围
5. JavaWeb代码审计方法论
5.1 审计流程
- 环境搭建:完整复现目标系统运行环境
- 架构分析:理解系统使用的技术栈和框架
- 功能映射:将功能点与代码实现对应起来
5.2 审计技术
- 正向数据流分析:从业务功能追踪代码实现
- 逆向数据流分析:从已知缺陷模式追踪业务功能
- 工具辅助审计:使用代码审计工具发现潜在问题
- 关键组件检查:重点审计安全相关组件
5.3 重点关注
- 权限校验机制(如Shiro、Spring Security实现)
- 文件上传下载功能
- 敏感数据操作接口
- 框架配置安全性
- 输入验证和输出编码
6. 学习建议
- 从已知漏洞入手:分析CNVD等平台上的历史漏洞
- 对比修复方案:研究官方补丁的修复方式
- 实战练习:选择开源CMS进行审计实践
- 记录分析笔记:详细记录审计过程和发现
7. 附录:常规审计思路检查表
- 认证与授权机制审计
- 会话管理安全性
- 输入验证与输出编码
- 敏感数据保护
- 文件操作安全性
- 第三方组件安全性
- 配置安全性
- 日志与监控机制