跨站请求伪造(CSRF)攻击的进阶利用与防御绕过技术详解
字数 1618 2025-11-10 05:35:50

跨站请求伪造(CSRF)攻击的进阶利用与防御绕过技术详解

1. 知识点描述

跨站请求伪造(CSRF)是一种攻击技术,攻击者诱骗已登录用户在不知情的情况下执行非本意的操作(如修改密码、转账等)。其核心利用的是浏览器的同源策略不阻止跨域请求发送的特性(仅限制响应读取)。进阶CSRF攻击关注如何绕过常见防御措施(如Token验证、Referer检查、SameSite Cookie等),并扩展攻击场景(如结合其他漏洞或特殊请求类型)。


2. CSRF攻击的基本原理

关键条件:

  1. 用户已登录目标网站(Cookie/Session有效)。
  2. 用户访问恶意页面(如钓鱼邮件中的链接)。
  3. 恶意页面自动发送跨域请求(如通过<img>、表单、JavaScript)。
  4. 目标网站未校验请求的合法性(如缺少Token或Referer验证)。

简单示例:

<!-- 恶意页面内嵌表单,用户访问后自动提交 -->
<form action="https://bank.com/transfer" method="POST">
  <input type="hidden" name="amount" value="10000">
  <input type="hidden" name="to" value="attacker_account">
</form>
<script>document.forms[0].submit();</script>

3. 进阶利用技术

3.1 绕过Token验证

  • Token泄露

    • 若网站存在XSS漏洞,攻击者可通过XSS窃取Token,再构造CSRF请求。
    • 或通过网络嗅探(HTTP页面传输Token)、子域名漏洞(Token共享域不严格)获取Token。
  • Token绑定不严

    • 若Token仅绑定会话而非具体操作,可重复使用(如一次获取多次提交)。
    • 攻击者先通过合法请求获取Token,再嵌入恶意请求。

3.2 绕过Referer检查

  • Referer为空或伪造

    • 某些浏览器隐私模式或插件会清除Referer。
    • 通过HTTPS→HTTP降级或<meta name="referrer" content="no-referrer">屏蔽Referer。
    • 利用开放重定向(如https://target.com/redirect?url=evil.com)使Referer看似合法。
  • 子域名绕过

    • 若检查逻辑为“Referer包含目标域名”,攻击者可控制子域名(如https://attacker.target.com)构造请求。

3.3 利用JSONP绕过SameSite Cookie

  • SameSite=Lax/Strict可阻止部分CSRF,但JSONP接口可能豁免(历史遗留API)。
  • 攻击者通过<script>标签调用目标网站的JSONP接口,利用浏览器自动携带Cookie的特性执行操作:
<script src="https://bank.com/api/transfer?callback=malicious"></script>

4. 扩展攻击场景

4.1 结合HTTP请求走私

  • 通过请求走私(HTTP Request Smuggling)将CSRF请求“隐藏”在合法请求中,绕过前端防护。

4.2 文件上传CSRF

  • 若上传功能仅校验Session而未校验Token,可构造表单自动上传恶意文件:
<form action="https://site.com/upload" method="POST" enctype="multipart/form-data">
  <input type="file" name="file" value="evil.exe">
</form>

4.3 使用Fetch API构造复杂请求

  • 通过JavaScript的fetch发送POST/JSON请求(需CORS宽松配置):
fetch("https://api.target.com/change_profile", {
  method: "POST",
  credentials: "include",  // 携带Cookie
  body: JSON.stringify({email: "attacker@evil.com"})
});

5. 防御措施与绕过应对

5.1 强化Token机制

  • Token绑定用户会话+操作参数(如目标账户金额),每次请求更新。
  • 避免通过URL传输Token(防止泄露)。

5.2 严格Referer验证

  • 检查Referer是否来源于同一域名,拒绝空Referer(需权衡兼容性)。

5.3 SameSite Cookie+额外验证

  • 关键操作(如转账)需二次认证(密码、OTP)。

5.4 自定义头验证

  • 通过前端JavaScript添加自定义头(如X-Requested-With: XMLHttpRequest),后端验证其存在性(依赖CORS策略禁止恶意页面跨域添加头)。

6. 总结

CSRF进阶利用的核心在于理解防御逻辑的薄弱点(如Token管理、Referer依赖、Cookie作用域),并结合其他漏洞(XSS、重定向)或技术(JSONP、请求走私)突破限制。防御需采用多层次校验(Token+Referer+SameSite+业务逻辑),避免单一依赖。

跨站请求伪造(CSRF)攻击的进阶利用与防御绕过技术详解 1. 知识点描述 跨站请求伪造(CSRF)是一种攻击技术,攻击者诱骗已登录用户在不知情的情况下执行非本意的操作(如修改密码、转账等)。其核心利用的是浏览器的 同源策略不阻止跨域请求发送 的特性(仅限制响应读取)。进阶CSRF攻击关注如何绕过常见防御措施(如Token验证、Referer检查、SameSite Cookie等),并扩展攻击场景(如结合其他漏洞或特殊请求类型)。 2. CSRF攻击的基本原理 关键条件: 用户已登录目标网站 (Cookie/Session有效)。 用户访问恶意页面 (如钓鱼邮件中的链接)。 恶意页面自动发送跨域请求 (如通过 <img> 、表单、JavaScript)。 目标网站未校验请求的合法性 (如缺少Token或Referer验证)。 简单示例: 3. 进阶利用技术 3.1 绕过Token验证 Token泄露 : 若网站存在XSS漏洞,攻击者可通过XSS窃取Token,再构造CSRF请求。 或通过网络嗅探(HTTP页面传输Token)、子域名漏洞(Token共享域不严格)获取Token。 Token绑定不严 : 若Token仅绑定会话而非具体操作,可重复使用(如一次获取多次提交)。 攻击者先通过合法请求获取Token,再嵌入恶意请求。 3.2 绕过Referer检查 Referer为空或伪造 : 某些浏览器隐私模式或插件会清除Referer。 通过HTTPS→HTTP降级或 <meta name="referrer" content="no-referrer"> 屏蔽Referer。 利用开放重定向(如 https://target.com/redirect?url=evil.com )使Referer看似合法。 子域名绕过 : 若检查逻辑为“Referer包含目标域名”,攻击者可控制子域名(如 https://attacker.target.com )构造请求。 3.3 利用JSONP绕过SameSite Cookie SameSite=Lax/Strict 可阻止部分CSRF,但JSONP接口可能豁免(历史遗留API)。 攻击者通过 <script> 标签调用目标网站的JSONP接口,利用浏览器自动携带Cookie的特性执行操作: 4. 扩展攻击场景 4.1 结合HTTP请求走私 通过请求走私(HTTP Request Smuggling)将CSRF请求“隐藏”在合法请求中,绕过前端防护。 4.2 文件上传CSRF 若上传功能仅校验Session而未校验Token,可构造表单自动上传恶意文件: 4.3 使用Fetch API构造复杂请求 通过JavaScript的 fetch 发送POST/JSON请求(需CORS宽松配置): 5. 防御措施与绕过应对 5.1 强化Token机制 Token绑定用户会话+操作参数 (如目标账户金额),每次请求更新。 避免通过URL传输Token(防止泄露)。 5.2 严格Referer验证 检查Referer是否来源于同一域名,拒绝空Referer(需权衡兼容性)。 5.3 SameSite Cookie+额外验证 关键操作(如转账)需二次认证(密码、OTP)。 5.4 自定义头验证 通过前端JavaScript添加自定义头(如 X-Requested-With: XMLHttpRequest ),后端验证其存在性(依赖CORS策略禁止恶意页面跨域添加头)。 6. 总结 CSRF进阶利用的核心在于 理解防御逻辑的薄弱点 (如Token管理、Referer依赖、Cookie作用域),并结合其他漏洞(XSS、重定向)或技术(JSONP、请求走私)突破限制。防御需采用 多层次校验 (Token+Referer+SameSite+业务逻辑),避免单一依赖。