[红日安全]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 重放修改密码

两种形式

  1. 免验证修改:系统未强制校验验证流程
  2. 携带验证字段:需要配合验证码爆破

3.5 条件竞争

原理:多线程未对共享数据加锁,导致数据不一致

经典案例:一份钱购买多份商品

4. 漏洞靶场示例

环境:Django2.2 + Python3

漏洞代码特征

if user.password == password:
    request.session['is_login'] = True
    # 登录成功逻辑
else:
    message = '密码不正确!'

测试方法

  1. 抓取登录数据包
  2. 使用Burp Intruder爆破密码
  3. 观察302跳转判断成功

5. 测试工具

  1. Burp Suite:处理payload灵活,适合复杂场景
    • 下载:https://portswigger.net/burp
  2. Charles:简单重放操作方便
    • 下载:https://www.charlesproxy.com/

6. 防御措施

  1. 添加验证码

    • 推荐使用请求式验证码
    • 确保验证码一次使用后立即失效
  2. 限制请求次数

    • 同一账户连续错误达到阈值后暂时锁定
    • 例如:5次错误后禁止登录10分钟
  3. 校验验证码与用户身份

    • 建立验证码与用户手机号的对应关系
    • 修改密码等敏感操作需双重验证
  4. 其他措施

    • 使用时间戳+随机数(Nonce)防止重放
    • 关键操作使用一次性令牌
    • 对共享资源加线程锁防止条件竞争

7. 最佳实践建议

  1. 敏感操作必须使用验证码
  2. 所有验证码应有时效性(通常2-5分钟)
  3. 重要业务操作需记录操作日志
  4. 支付类接口必须校验订单状态
  5. 密码修改等操作需二次确认
  6. 实施请求频率限制(rate limiting)

通过以上措施,可有效防范各类重放攻击,提升系统安全性。

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 漏洞代码特征 : 测试方法 : 抓取登录数据包 使用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) 通过以上措施,可有效防范各类重放攻击,提升系统安全性。