跨站请求伪造近身对抗攻防录
字数 1158 2025-08-23 18:31:17

跨站请求伪造(CSRF)攻防全面指南

基本概念

CSRF(Cross-site request forgery)是一种挟持用户在已登录的Web应用程序上执行非本意操作的攻击方式。攻击者盗用用户身份,以用户名义发送恶意请求,服务器会认为这是合法请求。

利用条件

  1. 恶意操作:应用中存在攻击者需要诱导的操作(特权操作或用户数据操作)
  2. 会话处理:仅依赖会话Cookie识别用户,无其他会话跟踪机制
  3. 参数预测:请求参数值可被攻击者确定或猜测

CSRF攻击示例

基础案例

<html>
<body>
<form action="https://vulnerable-website.com/email/change" method="POST">
<input type="hidden" name="email" value="pwned@evil-user.net"/>
</form>
<script>document.forms[0].submit();</script>
</body>
</html>

CSRF Token绕过技术

1. 请求方法依赖

  • 缺陷:POST方法验证token,GET方法跳过验证
  • 绕过:将POST请求改为GET请求

2. Token存在性依赖

  • 缺陷:仅验证Token是否存在,忽略时跳过验证
  • 绕过:删除整个Token参数

3. 会话无关Token

  • 缺陷:Token不与用户会话绑定,使用全局Token池
  • 绕过:攻击者获取自己的Token用于受害者

4. Cookie绑定但不集成

  • 缺陷:CSRF Token绑定到非会话Cookie
  • 绕过:利用Cookie设置行为将攻击者Cookie放入受害者浏览器

5. 双重提交缺陷

  • 缺陷:仅验证请求参数和Cookie中的Token是否匹配
  • 绕过:利用Cookie设置功能注入Token

SameSite防护绕过

Strict模式绕过

  1. 客户端重定向:利用同一站点内的客户端重定向gadget
  2. 同级子域:利用易受攻击的同级子域发起请求

Lax模式绕过

  1. GET方法利用:将操作改为GET请求通过顶级导航触发
  2. 方法重写:使用框架特性重写请求方法
    <form method="POST">
    <input type="hidden" name="_method" value="GET">
    </form>
    
  3. 120秒窗口期:Chrome对前120秒的跨站点POST请求不强制执行Lax

Referer头防护绕过

1. 移除Referer头

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

2. 域名验证缺陷

  • 子域绕过http://vulnerable-website.com.attacker.com
  • 查询参数注入http://attacker.com/?vulnerable-website.com

防御措施

1. CSRF Token最佳实践

  • 绑定到用户会话
  • 高熵、不可预测
  • 严格验证所有敏感操作

2. SameSite Cookie设置

  • 明确设置每个Cookie的SameSite限制
  • 关键Cookie使用Strict模式
  • 非敏感跨站Cookie使用None模式(必须配合Secure)

3. 深度防御

  • 结合Token验证和SameSite
  • 关键操作要求二次验证
  • 定期审计防护机制有效性

实战案例

案例1:GET方法绕过

<script>
document.location = "https://target.com/change-email?email=attacker@evil.com&_method=POST";
</script>

案例2:双重提交绕过


<form action="https://target.com/change-email" method="POST">
<input type="hidden" name="csrf" value="fake"/>
</form>

通过全面理解这些技术和防御措施,安全团队可以更有效地防护CSRF漏洞,而渗透测试人员可以更全面地评估应用安全性。

跨站请求伪造(CSRF)攻防全面指南 基本概念 CSRF(Cross-site request forgery)是一种挟持用户在已登录的Web应用程序上执行非本意操作的攻击方式。攻击者盗用用户身份,以用户名义发送恶意请求,服务器会认为这是合法请求。 利用条件 恶意操作 :应用中存在攻击者需要诱导的操作(特权操作或用户数据操作) 会话处理 :仅依赖会话Cookie识别用户,无其他会话跟踪机制 参数预测 :请求参数值可被攻击者确定或猜测 CSRF攻击示例 基础案例 CSRF Token绕过技术 1. 请求方法依赖 缺陷 :POST方法验证token,GET方法跳过验证 绕过 :将POST请求改为GET请求 2. Token存在性依赖 缺陷 :仅验证Token是否存在,忽略时跳过验证 绕过 :删除整个Token参数 3. 会话无关Token 缺陷 :Token不与用户会话绑定,使用全局Token池 绕过 :攻击者获取自己的Token用于受害者 4. Cookie绑定但不集成 缺陷 :CSRF Token绑定到非会话Cookie 绕过 :利用Cookie设置行为将攻击者Cookie放入受害者浏览器 5. 双重提交缺陷 缺陷 :仅验证请求参数和Cookie中的Token是否匹配 绕过 :利用Cookie设置功能注入Token SameSite防护绕过 Strict模式绕过 客户端重定向 :利用同一站点内的客户端重定向gadget 同级子域 :利用易受攻击的同级子域发起请求 Lax模式绕过 GET方法利用 :将操作改为GET请求通过顶级导航触发 方法重写 :使用框架特性重写请求方法 120秒窗口期 :Chrome对前120秒的跨站点POST请求不强制执行Lax Referer头防护绕过 1. 移除Referer头 2. 域名验证缺陷 子域绕过 : http://vulnerable-website.com.attacker.com 查询参数注入 : http://attacker.com/?vulnerable-website.com 防御措施 1. CSRF Token最佳实践 绑定到用户会话 高熵、不可预测 严格验证所有敏感操作 2. SameSite Cookie设置 明确设置每个Cookie的SameSite限制 关键Cookie使用Strict模式 非敏感跨站Cookie使用None模式(必须配合Secure) 3. 深度防御 结合Token验证和SameSite 关键操作要求二次验证 定期审计防护机制有效性 实战案例 案例1:GET方法绕过 案例2:双重提交绕过 通过全面理解这些技术和防御措施,安全团队可以更有效地防护CSRF漏洞,而渗透测试人员可以更全面地评估应用安全性。