墨者学院4类业务逻辑漏洞靶场实战:Burp Suite越权与篡改深度解析
1. 身份认证失效漏洞实战复现
在墨者学院的身份认证失效靶场中,我们面对的是一个典型的水平越权场景。钻石代理商马春生卷款潜逃,需要通过代理网站获取其手机号码等关键信息。这里使用的测试账户是test/test,但目标账户是马春生的个人资料。
关键操作步骤:
- 使用Burp Suite拦截登录请求,观察响应数据包中的
card_id参数 - 通过页面源代码分析,定位马春生的用户ID(20128880316)
- 在Repeater模块中修改
card_id值为目标用户ID - 重放请求获取加密密码,使用在线工具解密
GET /userinfo?card_id=20128880316 HTTP/1.1 Host: target.mozhe.cn Cookie: session=test_session_token漏洞原理分析:
- 服务端未校验请求中的用户ID与当前会话是否匹配
- 用户身份验证仅依赖前端传入的
card_id参数 - 敏感信息(加密密码)直接返回到客户端
防护建议:
- 实施严格的会话-用户绑定验证
- 关键操作需二次认证(如短信验证)
- 敏感信息应在前端脱敏展示
2. 密码重置逻辑漏洞实战
密码重置功能常因验证逻辑不严谨而存在漏洞。墨者学院的这个靶场展示了典型的验证码与手机号校验分离问题。
漏洞复现流程:
- 使用已注册手机号188xxxx获取验证码
- 在验证码输入界面将手机号改为目标号码171xxxx
- 提交请求完成密码重置
Burp Suite关键操作:
POST /reset_password HTTP/1.1 Host: target.mozhe.cn Content-Type: application/x-www-form-urlencoded phone=17101304128&code=368492&new_password=Admin@123漏洞本质:
| 校验环节 | 存在问题 | 正确实现 |
|---|---|---|
| 验证码校验 | 仅验证有效性,不验证所属手机号 | 应绑定验证码与请求手机号 |
| 身份确认 | 完全依赖前端传入的手机号 | 应从会话中获取目标账号 |
加固方案:
- 验证码需与请求手机号/账号绑定存储
- 重置令牌应一次性有效
- 关键步骤需多因素认证
3. 0元购商品逻辑漏洞利用
这个靶场展示了电子商务系统中常见的价格篡改漏洞。用户xiaoming仅有1元余额,却需要购买总价30元的书籍。
攻击过程分解:
- 正常登录后选择商品加入购物车
- 在Burp Suite中拦截购买请求
- 修改商品价格参数后重放
POST /checkout HTTP/1.1 Host: shop.mozhe.cn Content-Type: application/json { "items": [ {"id": "book1", "price": 0, "qty": 1}, {"id": "book2", "price": 0, "qty": 1} ] }漏洞成因分析:
- 价格验证完全依赖前端传入参数
- 服务端未与数据库存储价格进行比对
- 缺乏交易完整性校验机制
防御措施矩阵:
| 风险点 | 解决方案 | 实施难度 |
|---|---|---|
| 价格篡改 | 服务端校验商品基准价 | 低 |
| 负数攻击 | 输入值范围校验 | 低 |
| 重放攻击 | 添加交易唯一令牌 | 中 |
4. 热点评论刷分漏洞实战
这个靶场展示了如何通过伪造请求头绕过IP限制机制。目标是使"zhangyu"的评论点赞数超过500,而系统限制每个IP只能点赞一次。
技术实现细节:
- 拦截正常点赞请求
- 添加
X-Forwarded-For头部 - 使用Intruder模块批量生成不同IP
POST /comment/like HTTP/1.1 Host: bbs.mozhe.cn X-Forwarded-For: 192.168.1.1 Content-Type: application/json {"comment_id": "zhangyu_comment"}Intruder配置要点:
- 攻击类型:Sniper
- 载荷类型:Numbers
- 生成范围:192.168.1.1-192.168.1.100
- 线程数:10(避免过高导致封禁)
防护策略进阶:
- 结合User-Agent、设备指纹等多维度识别
- 实施滑动窗口限流机制
- 关键操作要求登录状态
- 异常行为实时风控
5. Burp Suite高阶实战技巧
5.1 Repeater模块深度使用
高效工作流:
- 右键请求 → Send to Repeater
- 修改参数后点击"Go"
- 使用"Previous"/"Next"对比响应差异
- 右键响应 → "Show response in browser"实时验证
实用功能清单:
- 历史记录对比(Diff功能)
- 请求注释(Add Comment)
- 编码转换(Ctrl+U自动URL编码)
- 正则匹配测试(Match/Replace)
5.2 Intruder模块精准配置
四类攻击模式对比:
| 模式 | 适用场景 | 配置要点 |
|---|---|---|
| Sniper | 单个参数枚举 | 设置单一Payload位置 |
| Battering ram | 多参数相同值 | 多个位置使用相同Payload |
| Pitchfork | 多参数独立枚举 | 需配置对应数量的Payload |
| Cluster bomb | 多参数组合爆破 | 各位置Payload独立组合 |
性能优化技巧:
# 推荐线程设置(避免被封禁) 线程数 = min(10, 目标QPS限制/2) 重试间隔 = 200-500ms 超时时间 = 5000ms6. 业务逻辑漏洞防御体系
6.1 安全开发生命周期集成
关键检查节点:
- 需求阶段:威胁建模(STRIDE方法)
- 设计阶段:架构安全评审
- 实现阶段:安全编码规范
- 测试阶段:逻辑漏洞专项测试
- 运营阶段:异常行为监控
6.2 代码审计重点检查项
# 危险模式示例(Python) def reset_password(request): phone = request.POST.get('phone') # 直接信任客户端输入 code = request.POST.get('code') if check_verify_code(code): # 未验证code与phone的绑定关系 update_password(phone) # 直接操作目标账号安全代码改进:
def reset_password(request): if not request.user.is_authenticated: raise PermissionDenied phone = request.session.get('reset_phone') # 从会话获取 code = request.POST.get('code') if not validate_code(phone, code): # 验证绑定关系 log_failed_attempt(request) return HttpResponse("验证失败") update_password(phone)7. 漏洞修复验证方法论
7.1 测试用例设计模板
身份认证类测试矩阵:
| 测试场景 | 预期结果 | 实际结果 |
|---|---|---|
| 修改他人用户ID参数 | 拒绝访问 | |
| 使用过期会话令牌 | 要求重新登录 | |
| 垂直权限越权尝试 | 返回403错误 |
7.2 自动化监控方案
推荐检测规则(基于ELK Stack):
{ "query": { "bool": { "must": [ {"match": {"path": "/userinfo"}}, {"range": {"response_time": {"lt": 100}}} ], "must_not": [ {"match": {"user_agent": "Burp Suite"}} ] } } }在实际渗透测试工作中,业务逻辑漏洞往往比技术型漏洞更具破坏性。墨者学院的这些靶场很好地模拟了真实业务场景中的典型漏洞模式,建议在掌握基础操作后,进一步尝试组合利用多种漏洞实现更复杂的攻击链