[红日安全]Web安全Day10 - 重放攻击实战攻防
字数 1179 2025-08-18 11:39:19
Web安全实战:重放攻击原理与防御
1. 重放攻击概述
定义:重放攻击(Replay Attacks)是指攻击者发送一个目的主机已接收过的包来欺骗系统,主要用于破坏身份认证过程的正确性。
攻击方式:
- 由原始发起者重发
- 由拦截并重发数据的第三方进行
基本原理:将窃听到的数据原封不动地重新发送给接收方,即使数据加密也能实施攻击。
2. 重放攻击的危害
- 可能导致系统多次执行相同操作
- 可能造成系统资源消耗
- 核心危害在于重放可造成目的效果的数据包
3. 常见重放攻击类型
3.1 短信轰炸
攻击场景:
- 系统未校验请求时间间隔
- 仅在前端限制请求
示例:APP注册时无限制地请求短信验证码
3.2 暴力破解
a) 暴力破解密码
条件:
- 缺少验证码或验证码不失效
- 无错误次数限制
检测方法:观察返回结果是否随密码正确性变化
b) 暴力破解验证码
条件:
- 验证码可多次使用
- 后台不会使错误验证码失效
c) 暴力破解参数
场景:尝试越权或修改可预测参数
d) 暴力破解hash密码
工具:
- mimikatz/pwdump7(获取hash)
- Ophrack/John the Ripper/hashcat(破解)
3.3 重放支付
场景:支付最后一步请求被重放,系统未校验支付状态
3.4 重放修改密码
两种形式:
- 免验证修改:系统未强制校验验证流程
- 携带验证字段:需要配合验证码爆破
3.5 条件竞争
原理:多线程未对共享数据加锁,导致数据不一致
经典案例:一份钱购买多份商品
4. 漏洞靶场示例
环境:Django2.2 + Python3
漏洞代码特征:
if user.password == password:
request.session['is_login'] = True
# 登录成功逻辑
else:
message = '密码不正确!'
测试方法:
- 抓取登录数据包
- 使用Burp Intruder爆破密码
- 观察302跳转判断成功
5. 测试工具
- Burp Suite:处理payload灵活,适合复杂场景
- 下载:https://portswigger.net/burp
- Charles:简单重放操作方便
- 下载:https://www.charlesproxy.com/
6. 防御措施
-
添加验证码:
- 推荐使用请求式验证码
- 确保验证码一次使用后立即失效
-
限制请求次数:
- 同一账户连续错误达到阈值后暂时锁定
- 例如:5次错误后禁止登录10分钟
-
校验验证码与用户身份:
- 建立验证码与用户手机号的对应关系
- 修改密码等敏感操作需双重验证
-
其他措施:
- 使用时间戳+随机数(Nonce)防止重放
- 关键操作使用一次性令牌
- 对共享资源加线程锁防止条件竞争
7. 最佳实践建议
- 敏感操作必须使用验证码
- 所有验证码应有时效性(通常2-5分钟)
- 重要业务操作需记录操作日志
- 支付类接口必须校验订单状态
- 密码修改等操作需二次确认
- 实施请求频率限制(rate limiting)
通过以上措施,可有效防范各类重放攻击,提升系统安全性。