某租车系统JAVA代码审计
字数 1271 2025-08-18 11:37:02

Java代码审计实战教学:租车系统漏洞分析与挖掘

1. 系统概述

1.1 系统简介

  • 基于租车业务场景的O2O服务平台
  • 功能包括:商务租车、接送机、旅游租车、企业租车、自驾租车、婚庆用车等
  • 后台管理模块:车辆库管理、门店管理、员工管理、司机管理、订单管理、活动管理、评价管理、财务管理、统计等

1.2 技术栈

  • 未使用Struts2或Spring框架的传统JAVA WEB项目
  • 数据库:MySQL
  • 部署环境:Tomcat 8.5

2. 代码审计方法论

2.1 审计流程

  1. 功能点梳理:先浏览系统功能,不直接看代码
  2. 潜在漏洞预测:根据功能点推测可能存在的漏洞类型
  3. 代码回溯:通过功能点定位到具体代码实现
  4. 漏洞验证:通过测试验证推测的漏洞

2.2 常用审计技巧

  • 使用全局搜索功能快速定位代码(如Eclipse的Search功能)
  • 关注用户输入点和数据处理流程
  • 重点检查敏感操作(如订单处理、支付逻辑等)

3. 漏洞挖掘实战

3.1 用户注册功能审计

3.1.1 短信验证码功能

  • 功能点:获取手机动态码
  • 潜在风险:短信炸弹漏洞
  • 审计发现:缺少频率限制和验证机制

3.1.2 密码重置功能

  • 审计发现:功能被阉割,无法测试

3.2 用户资料修改功能

3.2.1 存储型XSS漏洞

  • 漏洞位置:基本资料修改、收货地址修改
  • 测试方法
    // 测试payload
    woaini"<>
    
  • 漏洞确认:输入未经任何过滤直接存储和显示
  • 攻击场景:管理员查看用户信息时触发XSS

3.2.2 SQL注入审计

  • 代码分析
    public Integer addAddress(Integer userId, String name, String tel, String address) {
        Object args[] = { name, tel, address, userId };
        String sql = "insert into user_address (user_address_name,user_address_tel,user_address_content,user_address_user) values(?,?,?,?)";
        Serializable flag = jdbc.insertBackId(sql, args); // 采用预编译
        jdbc.close();
        return Integer.valueOf(flag.hashCode());
    }
    
  • 审计结论:使用预编译语句,不存在SQL注入漏洞

3.3 订单功能审计

3.3.1 价格参数篡改漏洞

  • 漏洞位置:订单提交功能
  • 关键代码
    public void addGoodsOrder(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
        // ...
        String price=request.getParameter("price"); // 直接获取未校验
        // ...
        order_id=ss.addGoodsOrder(..., price, ...);
        // ...
    }
    
  • 漏洞利用方式
    1. 抓包直接修改price参数
    2. 修改页面表单中的hidden字段value值
  • 风险:可任意修改订单价格

3.3.2 订单越权访问审计

  • 代码分析
    // 订单取消功能
    if(输入的订单与用户自身订单匹配) {
        // 执行取消操作
    }
    
  • 审计结论:有用户归属校验,不存在越权漏洞

3.3.3 积分支付逻辑审计

  • 潜在风险:负积分导致积分反增不减
  • 审计发现:积分从session获取,未发现明显漏洞

4. 审计总结与防御建议

4.1 发现漏洞汇总

  1. 存储型XSS漏洞(用户资料修改处)
  2. 价格参数篡改漏洞(订单提交处)
  3. 短信炸弹漏洞(验证码获取处)

4.2 修复建议

4.2.1 XSS防御

// 对所有用户输入进行HTML编码
import org.apache.commons.lang3.StringEscapeUtils;
String safeInput = StringEscapeUtils.escapeHtml4(userInput);

4.2.2 价格参数校验

// 添加价格校验逻辑
try {
    double priceValue = Double.parseDouble(price);
    if(priceValue <= 0 || priceValue > MAX_ALLOWED_PRICE) {
        throw new IllegalArgumentException("Invalid price");
    }
} catch(NumberFormatException e) {
    // 处理非法输入
}

4.2.3 短信验证码防护

// 添加频率限制
String ip = request.getRemoteAddr();
if(rateLimiter.exceedsLimit(ip)) {
    return "请求过于频繁";
}

4.3 通用安全建议

  1. 所有用户输入必须进行验证和过滤
  2. 敏感操作(如支付)必须在服务端进行严格校验
  3. 使用预编译SQL语句防止SQL注入
  4. 实施CSRF防护机制
  5. 关键业务操作添加日志记录

5. 审计经验分享

  1. 功能导向审计:先梳理功能再分析代码,效率更高
  2. 敏感点关注:重点关注用户输入、支付逻辑、权限控制等关键环节
  3. 漏洞关联思考:一个功能点可能关联多种漏洞类型
  4. 测试验证:审计发现必须通过实际测试验证
  5. 框架特性了解:了解不同框架的安全机制和常见漏洞

通过本案例可以掌握基本的Java代码审计方法和常见漏洞挖掘技巧,适用于中小型Java Web项目的安全审计工作。

Java代码审计实战教学:租车系统漏洞分析与挖掘 1. 系统概述 1.1 系统简介 基于租车业务场景的O2O服务平台 功能包括:商务租车、接送机、旅游租车、企业租车、自驾租车、婚庆用车等 后台管理模块:车辆库管理、门店管理、员工管理、司机管理、订单管理、活动管理、评价管理、财务管理、统计等 1.2 技术栈 未使用Struts2或Spring框架的传统JAVA WEB项目 数据库:MySQL 部署环境:Tomcat 8.5 2. 代码审计方法论 2.1 审计流程 功能点梳理 :先浏览系统功能,不直接看代码 潜在漏洞预测 :根据功能点推测可能存在的漏洞类型 代码回溯 :通过功能点定位到具体代码实现 漏洞验证 :通过测试验证推测的漏洞 2.2 常用审计技巧 使用全局搜索功能快速定位代码(如Eclipse的Search功能) 关注用户输入点和数据处理流程 重点检查敏感操作(如订单处理、支付逻辑等) 3. 漏洞挖掘实战 3.1 用户注册功能审计 3.1.1 短信验证码功能 功能点 :获取手机动态码 潜在风险 :短信炸弹漏洞 审计发现 :缺少频率限制和验证机制 3.1.2 密码重置功能 审计发现 :功能被阉割,无法测试 3.2 用户资料修改功能 3.2.1 存储型XSS漏洞 漏洞位置 :基本资料修改、收货地址修改 测试方法 : 漏洞确认 :输入未经任何过滤直接存储和显示 攻击场景 :管理员查看用户信息时触发XSS 3.2.2 SQL注入审计 代码分析 : 审计结论 :使用预编译语句,不存在SQL注入漏洞 3.3 订单功能审计 3.3.1 价格参数篡改漏洞 漏洞位置 :订单提交功能 关键代码 : 漏洞利用方式 : 抓包直接修改price参数 修改页面表单中的hidden字段value值 风险 :可任意修改订单价格 3.3.2 订单越权访问审计 代码分析 : 审计结论 :有用户归属校验,不存在越权漏洞 3.3.3 积分支付逻辑审计 潜在风险 :负积分导致积分反增不减 审计发现 :积分从session获取,未发现明显漏洞 4. 审计总结与防御建议 4.1 发现漏洞汇总 存储型XSS漏洞(用户资料修改处) 价格参数篡改漏洞(订单提交处) 短信炸弹漏洞(验证码获取处) 4.2 修复建议 4.2.1 XSS防御 4.2.2 价格参数校验 4.2.3 短信验证码防护 4.3 通用安全建议 所有用户输入必须进行验证和过滤 敏感操作(如支付)必须在服务端进行严格校验 使用预编译SQL语句防止SQL注入 实施CSRF防护机制 关键业务操作添加日志记录 5. 审计经验分享 功能导向审计 :先梳理功能再分析代码,效率更高 敏感点关注 :重点关注用户输入、支付逻辑、权限控制等关键环节 漏洞关联思考 :一个功能点可能关联多种漏洞类型 测试验证 :审计发现必须通过实际测试验证 框架特性了解 :了解不同框架的安全机制和常见漏洞 通过本案例可以掌握基本的Java代码审计方法和常见漏洞挖掘技巧,适用于中小型Java Web项目的安全审计工作。