绕过CSRF防御
字数 1156 2025-08-25 22:58:20

CSRF防御绕过技术详解

1. CSRF防御概述

CSRF(跨站请求伪造)是一种常见的Web安全威胁,许多站点会实施各种防御措施,包括:

  • 请求主体中的CSRF token
  • Referer字段检测
  • 特殊HTTP头字段或cookie字段

然而,这些防御措施并非无懈可击,下面将详细介绍各种绕过技术。

2. 通用绕过技术

2.1 点击劫持(Clickjacking)

原理:通过iframe将目标页面嵌入攻击者页面,诱导用户点击看似无害的元素实际触发敏感操作。

特点

  • 绕过所有CSRF防御措施
  • 请求确实来自合法站点
  • 需要目标页面存在点击劫持漏洞

2.2 更改请求方法

技术要点

  • POST转GET:将POST请求改为GET请求
  • GET转POST:将GET请求改为POST请求

示例
原始POST请求:

POST /change_password
POST body: new_password=qwerty

改为GET请求:

GET /change_password?new_password=qwerty

3. CSRF Token防御绕过

3.1 删除token或发送空token

原理:应用程序可能只在token存在或非空时验证

攻击方式

  1. 完全删除token参数
  2. 发送空token值

示例
原始请求:

POST /change_password
POST body: new_password=qwerty &csrf_tok=871caef0757a4ac9691aceb9aad8b65b

攻击请求:

POST /change_password
POST body: new_password=qwerty

POST /change_password
POST body: new_password=qwerty&csrf_tok=

3.2 使用另一个session的CSRF token

原理:应用只验证token合法性而不验证token与用户的对应关系

攻击方式

  • 攻击者使用自己的合法token构造请求

示例
原始请求(使用受害者token):

POST /change_password
POST body: new_password=qwerty &csrf_tok=871caef0757a4ac9691aceb9aad8b65b

攻击请求(使用攻击者token):

POST /change_password
POST body: new_password=qwerty &csrf_tok=YOUR_TOKEN

3.3 Session固定攻击

适用场景:双提交cookie防御(服务器不存储token,仅比较cookie和参数中的token)

攻击步骤

  1. 通过session固定控制受害者cookie
  2. 在参数中使用相同token执行CSRF攻击

示例

POST /change_password
Cookie: CSRF_TOK=FAKE_TOKEN;
POST body: new_password=qwerty &csrf_tok=FAKE_TOKEN

4. Referer防御绕过

4.1 移除Referer字段

技术实现
在页面中添加:

<meta name="referrer" content="no-referrer">

原理:应用可能只在Referer存在时验证

4.2 绕过正则表达式检查

技术要点

  1. 将目标域名置于二级域名位置:
    • bank.com.attacker.com
  2. 将目标域名置于URL路径中:
    • attacker.com/bank.com

适用场景:当应用仅简单检查Referer中是否包含特定字符串时

5. 防御建议

针对上述绕过技术,建议实施以下防御措施:

  1. 对于CSRF token:
    • 确保每个会话使用唯一token
    • 验证token与用户的对应关系
    • 无论token是否存在都进行验证
  2. 对于Referer检查:
    • 实施严格的白名单验证
    • 检查完整的域名匹配
  3. 通用防御:
    • 防止点击劫持(X-Frame-Options头)
    • 严格区分GET和POST方法的用途
    • 避免仅依赖单一防御机制

通过了解这些绕过技术,安全人员可以更好地评估和加固Web应用的CSRF防御体系。

CSRF防御绕过技术详解 1. CSRF防御概述 CSRF(跨站请求伪造)是一种常见的Web安全威胁,许多站点会实施各种防御措施,包括: 请求主体中的CSRF token Referer字段检测 特殊HTTP头字段或cookie字段 然而,这些防御措施并非无懈可击,下面将详细介绍各种绕过技术。 2. 通用绕过技术 2.1 点击劫持(Clickjacking) 原理 :通过iframe将目标页面嵌入攻击者页面,诱导用户点击看似无害的元素实际触发敏感操作。 特点 : 绕过所有CSRF防御措施 请求确实来自合法站点 需要目标页面存在点击劫持漏洞 2.2 更改请求方法 技术要点 : POST转GET:将POST请求改为GET请求 GET转POST:将GET请求改为POST请求 示例 : 原始POST请求: 改为GET请求: 3. CSRF Token防御绕过 3.1 删除token或发送空token 原理 :应用程序可能只在token存在或非空时验证 攻击方式 : 完全删除token参数 发送空token值 示例 : 原始请求: 攻击请求: 或 3.2 使用另一个session的CSRF token 原理 :应用只验证token合法性而不验证token与用户的对应关系 攻击方式 : 攻击者使用自己的合法token构造请求 示例 : 原始请求(使用受害者token): 攻击请求(使用攻击者token): 3.3 Session固定攻击 适用场景 :双提交cookie防御(服务器不存储token,仅比较cookie和参数中的token) 攻击步骤 : 通过session固定控制受害者cookie 在参数中使用相同token执行CSRF攻击 示例 : 4. Referer防御绕过 4.1 移除Referer字段 技术实现 : 在页面中添加: 原理 :应用可能只在Referer存在时验证 4.2 绕过正则表达式检查 技术要点 : 将目标域名置于二级域名位置: bank.com.attacker.com 将目标域名置于URL路径中: attacker.com/bank.com 适用场景 :当应用仅简单检查Referer中是否包含特定字符串时 5. 防御建议 针对上述绕过技术,建议实施以下防御措施: 对于CSRF token: 确保每个会话使用唯一token 验证token与用户的对应关系 无论token是否存在都进行验证 对于Referer检查: 实施严格的白名单验证 检查完整的域名匹配 通用防御: 防止点击劫持(X-Frame-Options头) 严格区分GET和POST方法的用途 避免仅依赖单一防御机制 通过了解这些绕过技术,安全人员可以更好地评估和加固Web应用的CSRF防御体系。