[红日安全]Web安全Day3 - CSRF实战攻防
字数 2387 2025-08-18 11:39:19
CSRF实战攻防教学文档
1. CSRF漏洞基础
1.1 CSRF漏洞简介
CSRF(跨站请求伪造)是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向服务器发送请求,从而完成非法操作(如转账、改密等)。
与XSS的区别:CSRF并没有盗取cookie而是直接利用。
1.2 CSRF漏洞分类
1.2.1 GET型CSRF
- 只需要构造URL,诱导受害者访问即可利用
- 示例:
http://example.com/change-password?newpass=attacker
1.2.2 POST型CSRF
- 需要构造自动提交或点击提交的表单
- 诱导受害者访问或点击利用
1.3 CSRF漏洞危害
- 未验证Referer或使用Token导致用户/管理员可被CSRF攻击
- 可执行添加、修改、删除等敏感操作
- 可能导致账户接管、数据泄露等严重后果
1.4 CSRF漏洞修复方案
-
添加随机token值并验证
- 每次表单提交需携带服务器生成的随机token
- 服务器验证token有效性
-
验证Referer
- 检查请求来源是否合法
- 但可能被绕过(如存在Referer泄露或空Referer)
-
关键请求使用验证码
- 对敏感操作要求用户输入验证码
2. CSRF漏洞利用方法
2.1 利用思路
- 寻找增删改功能的接口
- 构造HTML攻击页面
- 修改HTML表单中关键参数
- 诱导受害者访问或点击
- 验证操作是否成功执行
2.2 工具使用
2.2.1 BurpSuite利用
- 拦截目标请求
- 右击选择"Engagement tools" → "Generate CSRF PoC"
- 生成攻击脚本
- 两种使用方式:
- "Test in browser":用于本地测试
- "Copy HTML":用于实际攻击
2.2.2 CSRFTester工具
- 下载地址:https://www.owasp.org/index.php/File:CSRFTester-1.0.zip
- 运行run.bat,监听8008端口
- 设置浏览器代理为8008
- 点击"Start Recording"开始记录
- 过滤无用数据包
- 点击"Generate HTML"生成攻击脚本
3. CSRF漏洞实战案例
3.1 DVWA靶场案例
3.1.1 环境搭建
- 下载地址:https://codeload.github.com/ethicalhack3r/DVWA/zip/master
- 修改config/config.inc.php.dist为config.inc.php
- 配置数据库密码
- 默认账号:admin/password
3.1.2 Low级别利用
- 漏洞代码:无任何防护措施
- 利用步骤:
- 使用BurpSuite拦截修改密码请求
- 生成CSRF PoC
- 构造HTML攻击页面
- 受害者访问即触发密码修改
3.1.3 Medium级别利用
- 防护措施:检查Referer是否包含服务器名
- 绕过方法:
- 查看phpinfo确定SERVER_NAME
- 构造攻击页面时修改Referer头
- 添加localhost等可信来源
3.1.4 High级别利用
- 防护措施:Anti-CSRF token机制
- 绕过方法:
- 使用iframe嵌入目标页面获取token
- 通过JavaScript自动提交表单
- 构造攻击代码示例:
<html>
<body>
<script type="text/javascript">
function attack() {
document.getElementsByName('user_token')[0].value=document.getElementById("hack").contentWindow.document.getElementsByName('user_token')[0].value;
document.getElementById("transfer").submit();
}
</script>
<iframe src="http://target/dvwa/vulnerabilities/csrf" id="hack" style="display:none;"></iframe>
<body onload="attack()">
<form method="GET" id="transfer" action="http://target/dvwa/vulnerabilities/csrf">
<input type="hidden" name="password_new" value="attacker">
<input type="hidden" name="password_conf" value="attacker">
<input type="hidden" name="user_token" value="">
<input type="hidden" name="Change" value="Change">
</form>
</body>
</html>
3.2 骑士CMS案例
3.2.1 环境搭建
- 下载地址:http://www.74cms.com/download/load/id/155.html
- 使用phpstudy搭建环境
3.2.2 利用过程
- 拦截添加管理员请求
- 生成CSRF PoC
- 伪装成中奖页面
- 使用短域名增强隐蔽性
- 诱导管理员访问创建攻击者账号
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'); - 生成GET型CSRF URL:
http://target/pma/sql.php?db=mysql&table=user&sql_query=SET%20password%20=%20PASSWORD(%27attacker%27)
- 使用短域名伪装
- 诱导管理员访问
4. 防御措施深入分析
4.1 Token防御机制最佳实践
- 每个会话使用唯一token
- Token绑定到特定用户和操作
- Token设置合理有效期
- 重要操作使用一次性token
4.2 Referer验证的局限性
- 可能被绕过(如HTTPS→HTTP跳转丢失Referer)
- 用户隐私浏览器设置可能禁用Referer
- 需要配合其他防护措施
4.3 多因素防御策略
- 关键操作二次确认(如密码确认)
- 敏感操作日志记录
- 操作频率限制
- 结合CSP策略
5. 高级攻击技巧
5.1 绕过Referer检查
- 利用开放重定向漏洞
- 利用XSS漏洞设置Referer
- 使用data URI scheme
5.2 结合其他漏洞
- 结合XSS实现更强大攻击
- 利用JSONP劫持获取敏感信息
- 结合点击劫持增强攻击效果
5.3 针对API的CSRF攻击
- 针对RESTful API的攻击
- 绕过CORS限制的方法
- 使用Flash进行跨域请求
6. 参考资源
- OWASP CSRF防护指南:https://owasp.org/www-community/attacks/csrf
- CSRF漏洞检测工具:https://www.owasp.org/index.php/CSRFTester
- 高级CSRF攻击技术:https://www.blackhat.com/presentations/bh-europe-08/Willis/Presentation/bh-eu-08-willis.pdf