记一次对某系统的审计(Java审计)
字数 1687 2025-08-05 08:19:01

Java Web应用安全审计实战教学文档

1. 审计概述

本次审计对象是一个基于Spring框架开发的建站系统,通过分析发现了多个安全漏洞,包括XSS、任意文件上传、逻辑漏洞(越权)和未授权访问等问题。

2. 审计发现的安全漏洞及分析

2.1 XSS漏洞

漏洞位置XxxxxController.Class

漏洞代码

String callback = request.getParameter("callback");
jsonStr = ";" + callback + "(" + result.toString() + ")";
out.write(jsonStr);

漏洞分析

  1. 直接从request.getParameter获取callback参数
  2. 未进行任何过滤或编码处理
  3. 直接通过out.write输出到前端
  4. 攻击者可构造恶意callback参数执行任意JavaScript代码

修复建议

  1. 对输出内容进行HTML编码
  2. 使用ESAPI等安全库进行XSS防护
  3. 设置Content-Type头为application/json

2.2 任意文件上传漏洞

漏洞位置XxxxxController.Classmodule.tipOffService.saveTipOff

漏洞代码

String path2 = Utils.uploadFile(video, String.valueOf(hdjlPath) + "/tipOff/video");
if (Utils.isNotNullOrEmpty(tipOff.getVideo())) {
    File file2 = new File(String.valueOf(SystemParamConfigUtil.getParamValueByParam("zdzyUploadPath")) + tipOff.getVideo());
    if (file2.exists()) {
        file2.delete();
    }
}
tipOff.setVideo(path2);

漏洞分析

  1. 上传功能未对文件后缀名进行校验
  2. 未限制上传文件类型
  3. 攻击者可上传恶意文件(如.jsp、.php等)
  4. 可能导致服务器被植入webshell

修复建议

  1. 白名单方式限制可上传文件类型
  2. 对上传文件重命名
  3. 文件存储在非web目录
  4. 设置文件权限为不可执行

2.3 逻辑漏洞(越权删除纠错信息)

漏洞位置XxxxxController.ClassrecoveryService.deleteRecovery

漏洞分析

  1. 控制器未进行权限校验
  2. 任意用户可调用删除功能
  3. 虽然使用${id}防止了SQL注入,但存在越权问题
  4. 攻击者可删除任意纠错信息

修复建议

  1. 添加权限校验注解(如@PreAuthorize
  2. 实现业务层权限检查
  3. 记录操作日志

2.4 未授权访问漏洞

漏洞位置XxxxxController.Class

漏洞分析

  1. 未对管理员信息查询接口进行权限控制
  2. 以XML形式将管理员信息输出到HTML页面
  3. 导致敏感信息泄露

修复建议

  1. 添加权限控制
  2. 敏感信息脱敏处理
  3. 限制接口访问权限

3. 审计方法论

3.1 审计流程

  1. 入口分析

    • 检查web.xml中的Servlet配置
    • 分析全局安全过滤器
    • 确定路由规则(本例为Controller/方法名.do)
  2. 代码审计

    • 定位关键Controller类
    • 跟踪敏感操作调用链
    • 检查参数处理和输出编码
  3. 漏洞验证

    • 构造测试用例
    • 验证漏洞可利用性
    • 评估漏洞影响范围

3.2 重点关注点

  1. 输入输出处理

    • request.getParameter()直接使用
    • 输出未编码(out.write
    • JSONP回调处理
  2. 文件操作

    • 文件上传逻辑
    • 文件路径拼接
    • 文件删除操作
  3. 权限控制

    • 缺失的权限校验
    • 越权操作
    • 敏感信息暴露

4. 安全开发建议

4.1 通用防护措施

  1. 输入验证

    • 所有输入视为不可信
    • 实施白名单验证
    • 使用OWASP ESAPI等安全库
  2. 输出编码

    • 根据输出上下文进行编码(HTML/JS/URL等)
    • 设置正确的Content-Type
  3. 权限控制

    • 最小权限原则
    • 方法级权限注解
    • 业务逻辑权限校验

4.2 Spring安全配置

  1. 启用CSRF防护:
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable(); // 错误示例,应该启用
}
  1. 配置安全头:
http.headers()
    .contentSecurityPolicy("script-src 'self'")
    .and()
    .xssProtection()
    .and()
    .frameOptions().sameOrigin();
  1. 方法安全:
@PreAuthorize("hasRole('ADMIN')")
public void deleteRecovery(String id) {
    // ...
}

5. 工具推荐

  1. 静态分析工具

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

    • OWASP ZAP
    • Burp Suite
    • Postman
  3. 开发辅助工具

    • OWASP Dependency Check(依赖检查)
    • Git Secrets(防止密钥泄露)
    • Checkstyle(代码规范检查)

6. 总结

本次审计揭示了Java Web应用中常见的安全问题,包括:

  1. 缺乏输入输出安全处理导致的XSS
  2. 文件上传功能缺失安全控制
  3. 权限校验不完善导致的越权
  4. 敏感接口未授权访问

开发人员应建立安全开发意识,遵循安全编码规范,实施纵深防御策略,定期进行安全审计和渗透测试,确保应用安全性。

Java Web应用安全审计实战教学文档 1. 审计概述 本次审计对象是一个基于Spring框架开发的建站系统,通过分析发现了多个安全漏洞,包括XSS、任意文件上传、逻辑漏洞(越权)和未授权访问等问题。 2. 审计发现的安全漏洞及分析 2.1 XSS漏洞 漏洞位置 : XxxxxController.Class 漏洞代码 : 漏洞分析 : 直接从 request.getParameter 获取 callback 参数 未进行任何过滤或编码处理 直接通过 out.write 输出到前端 攻击者可构造恶意callback参数执行任意JavaScript代码 修复建议 : 对输出内容进行HTML编码 使用ESAPI等安全库进行XSS防护 设置Content-Type头为 application/json 2.2 任意文件上传漏洞 漏洞位置 : XxxxxController.Class → module.tipOffService.saveTipOff 漏洞代码 : 漏洞分析 : 上传功能未对文件后缀名进行校验 未限制上传文件类型 攻击者可上传恶意文件(如.jsp、.php等) 可能导致服务器被植入webshell 修复建议 : 白名单方式限制可上传文件类型 对上传文件重命名 文件存储在非web目录 设置文件权限为不可执行 2.3 逻辑漏洞(越权删除纠错信息) 漏洞位置 : XxxxxController.Class → recoveryService.deleteRecovery 漏洞分析 : 控制器未进行权限校验 任意用户可调用删除功能 虽然使用 ${id} 防止了SQL注入,但存在越权问题 攻击者可删除任意纠错信息 修复建议 : 添加权限校验注解(如 @PreAuthorize ) 实现业务层权限检查 记录操作日志 2.4 未授权访问漏洞 漏洞位置 : XxxxxController.Class 漏洞分析 : 未对管理员信息查询接口进行权限控制 以XML形式将管理员信息输出到HTML页面 导致敏感信息泄露 修复建议 : 添加权限控制 敏感信息脱敏处理 限制接口访问权限 3. 审计方法论 3.1 审计流程 入口分析 : 检查web.xml中的Servlet配置 分析全局安全过滤器 确定路由规则(本例为Controller/方法名.do) 代码审计 : 定位关键Controller类 跟踪敏感操作调用链 检查参数处理和输出编码 漏洞验证 : 构造测试用例 验证漏洞可利用性 评估漏洞影响范围 3.2 重点关注点 输入输出处理 : request.getParameter() 直接使用 输出未编码( out.write ) JSONP回调处理 文件操作 : 文件上传逻辑 文件路径拼接 文件删除操作 权限控制 : 缺失的权限校验 越权操作 敏感信息暴露 4. 安全开发建议 4.1 通用防护措施 输入验证 : 所有输入视为不可信 实施白名单验证 使用OWASP ESAPI等安全库 输出编码 : 根据输出上下文进行编码(HTML/JS/URL等) 设置正确的Content-Type 权限控制 : 最小权限原则 方法级权限注解 业务逻辑权限校验 4.2 Spring安全配置 启用CSRF防护: 配置安全头: 方法安全: 5. 工具推荐 静态分析工具 : FindSecBugs SonarQube Fortify 动态测试工具 : OWASP ZAP Burp Suite Postman 开发辅助工具 : OWASP Dependency Check(依赖检查) Git Secrets(防止密钥泄露) Checkstyle(代码规范检查) 6. 总结 本次审计揭示了Java Web应用中常见的安全问题,包括: 缺乏输入输出安全处理导致的XSS 文件上传功能缺失安全控制 权限校验不完善导致的越权 敏感接口未授权访问 开发人员应建立安全开发意识,遵循安全编码规范,实施纵深防御策略,定期进行安全审计和渗透测试,确保应用安全性。