[红日安全]Web安全Day3 - CSRF实战攻防
字数 2293 2025-08-25 22:58:20
CSRF实战攻防教学文档
1. CSRF漏洞基础
1.1 CSRF漏洞简介
CSRF(跨站请求伪造)是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向服务器发送请求,从而完成非法操作(如转账、改密等)。
与XSS的区别:CSRF没有盗取cookie而是直接利用。
1.2 CSRF漏洞分类
1.2.1 GET型CSRF
- 只需要构造URL,诱导受害者访问利用
- 示例:
http://example.com/transfer?amount=1000&to=attacker
1.2.2 POST型CSRF
- 需要构造自动提交或点击提交的表单
- 诱导受害者访问或点击利用
1.3 CSRF漏洞危害
- 未验证Referer或使用Token导致用户/管理员可被CSRF执行添加、修改、删除等操作
- 可能导致账户接管、数据泄露、资金损失等严重后果
1.4 CSRF漏洞修复方案
- 添加随机token值并验证
- 验证Referer
- 关键请求使用验证码功能
- SameSite Cookie属性
2. CSRF漏洞利用方法
2.1 利用思路
- 寻找增删改的操作点
- 构造HTML表单
- 修改表单参数
- 诱导受害者访问/点击
- 验证操作是否成功执行
2.2 工具使用
2.2.1 BurpSuite
- 抓取目标请求
- 右击选择"Engagement tools" → "Generate CSRF PoC"
- 生成攻击脚本
- "Test in browser"用于本地测试
- "Copy HTML"用于攻击他人
- 可伪装为中奖页面等诱骗点击
2.2.2 CSRFTester
- 下载并运行(监听8008端口)
- 设置浏览器代理为8008
- 点击"Start Recording"开始检测
- 过滤无用数据包
- 点击"Generate HTML"生成攻击脚本
3. CSRF实战案例
3.1 DVWA靶场
3.1.1 环境搭建
- 下载DVWA:
https://codeload.github.com/ethicalhack3r/DVWA/zip/master - 修改
config/config.inc.php.dist为config.inc.php - 配置数据库密码
- 默认账号:admin/password
3.1.2 Low级别
- 漏洞分析:无任何防御措施
- 利用步骤:
- 抓取修改密码请求
- 使用Burp生成CSRF PoC
- 构造HTML文件
- 受害者访问即修改密码
3.1.3 Medium级别
- 漏洞分析:检查Referer是否包含主机名
- 绕过方法:
- 构造恶意页面
- 抓包修改Referer添加
localhost - 示例:
Referer: http://localhost/attacker.html
3.1.4 High级别
- 防御机制:Anti-CSRF token
- 绕过方法:
- 使用iframe嵌入目标页面获取token
- 通过JavaScript自动提交表单
- 关键代码:
<iframe src="目标URL" id="hack" style="display:none;"></iframe> <script> function attack() { document.getElementsByName('user_token')[0].value = document.getElementById("hack").contentWindow.document.getElementsByName('user_token')[0].value; document.getElementById("transfer").submit(); } </script>
3.2 骑士CMS
3.2.1 环境搭建
- 下载地址:
http://www.74cms.com/download/load/id/155.html - 使用phpstudy搭建
3.2.2 利用过程
- 抓取添加管理员请求
- 生成CSRF PoC
- 伪装为中奖页面
- 可使用短域名进一步伪装
- 诱导管理员访问创建攻击者账户
3.2.3 关联漏洞
- 代码执行漏洞:
index.php?m=Admin&c=Tpl&a=set&tpl_dir=a'.${phpinfo()}.'
3.3 phpMyAdmin
3.3.1 环境搭建
- 使用VulnSpy在线靶机:
https://www.vulnspy.com/?u=pmasa-2017-9 - 默认账号:root/toor
3.3.2 利用过程
- 构造修改密码的SQL:
SET password=PASSWORD('attacker_pass'); - 生成GET型CSRF URL:
http://target/pma/sql.php?db=mysql&table=user&sql_query=SET%20password%20=%20PASSWORD(%27attacker_pass%27) - 使用短域名伪装
- 诱导管理员访问
4. 防御措施详解
4.1 Token防御机制
- 每次会话生成唯一token
- 表单提交必须携带有效token
- 服务器端验证token有效性
4.2 Referer验证
- 检查请求来源是否为可信域名
- 注意:可被绕过(如存在开放重定向)
4.3 验证码
- 关键操作要求输入验证码
- 增加自动化攻击难度
4.4 SameSite Cookie
- 设置Cookie的SameSite属性为Strict或Lax
- 防止跨站请求携带认证Cookie
5. 高级绕过技术
5.1 绕过Referer检查
- 利用子域名或相似域名
- 利用浏览器漏洞或特性
5.2 窃取Token
- 结合XSS漏洞获取token
- 使用iframe嵌套窃取
5.3 点击劫持
- 透明iframe覆盖诱骗点击
- 结合社会工程学
6. 参考资源
- FreeBuf文章:
https://www.freebuf.com/articles/web/118352.html - OWASP CSRFTester:
https://www.owasp.org/index.php/File:CSRFTester-1.0.zip - 骑士CMS漏洞分析:
http://www.yqxiaojunjie.com/index.php/archives/341/
本教学文档涵盖了CSRF漏洞的基础知识、利用方法、实战案例和防御措施,重点突出了不同场景下的攻击技术和防御方案,可作为Web安全学习和渗透测试的实用参考。