DVWA下的CSRF通关
字数 1176 2025-08-15 21:32:28
CSRF攻击原理与DVWA通关教学文档
1. CSRF攻击概述
CSRF(Cross-Site Request Forgery,跨站点请求伪造)是一种严重的Web安全威胁,攻击者利用受害者在已认证网站上的活动状态,诱骗受害者执行非预期的操作。
1.1 CSRF攻击原理
-
攻击流程:
- 用户访问受信任网站A并成功登录,获得合法Cookie
- 用户未退出网站A时,在同一浏览器访问恶意网站B
- 网站B返回攻击代码,向网站A发起请求
- 浏览器自动携带网站A的Cookie,以用户权限执行操作
-
与XSS的区别:
- XSS:攻击者盗取Cookie后冒充用户
- CSRF:直接利用用户的Cookie和身份执行操作
2. DVWA CSRF漏洞实战
2.1 Low级别
漏洞分析
if( $pass_new == $pass_conf ) {
$pass_new = md5( $pass_new );
$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "'";
mysqli_query($GLOBALS["___mysqli_ston"], $insert);
}
漏洞点:
- 仅检查两次输入密码是否一致
- 无任何身份验证或CSRF防护措施
攻击方法
- 构造恶意URL:
http://目标地址/DVWA-master/vulnerabilities/csrf/?password_new=test&password_conf=test&Change=Change# - 使用短网址服务伪装:
http://r6d.cn/9rGy - 创建恶意HTML页面诱骗用户点击:
2.2 Medium级别
防护措施
if( stripos( $_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME'] ) !== false )
防护原理:
- 检查HTTP Referer头是否包含服务器名
- 使用
stripos()函数进行不区分大小写的匹配
绕过方法
- 修改HTTP请求头,在Referer中包含服务器名:
Referer: http://目标服务器名/任意路径 - 使用同源iframe嵌套攻击页面
2.3 High级别
防护措施:
- 使用Anti-CSRF Token机制
- 每次请求需要携带有效的Token值
绕过思路:
- 结合XSS漏洞获取Token
- 使用同源iframe嵌套获取Token
- 社会工程学诱骗用户提交包含Token的表单
2.4 Impossible级别
完整防护代码
// 检查Anti-CSRF Token
checkToken( $_REQUEST['user_token'], $_SESSION['session_token'], 'index.php' );
// 验证当前密码
$data = $db->prepare('SELECT password FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;');
$data->bindParam(':user', dvwaCurrentUser(), PDO::PARAM_STR);
$data->bindParam(':password', $pass_curr, PDO::PARAM_STR);
$data->execute();
if( ( $pass_new == $pass_conf ) && ( $data->rowCount() == 1 ) ) {
// 更新密码
}
防护措施:
- Anti-CSRF Token验证
- 要求提供当前密码
- 使用PDO预处理语句防止SQL注入
- 密码多重验证(新旧密码匹配、当前密码正确)
3. CSRF防护最佳实践
-
Anti-CSRF Token:
- 为每个表单生成唯一Token
- Token与用户会话绑定
- 每次提交验证Token有效性
-
验证HTTP Referer头:
- 检查请求来源是否为可信域名
- 注意:Referer头可能被禁用或伪造
-
关键操作二次验证:
- 密码修改需验证当前密码
- 敏感操作增加短信/邮箱验证码
- 图形验证码防护
-
SameSite Cookie属性:
- 设置Cookie的SameSite属性为Strict或Lax
- 防止跨站请求携带认证Cookie
-
自定义HTTP头验证:
- 添加自定义头如X-Requested-With
- 后端验证头信息存在性
4. 总结
CSRF攻击利用的是Web应用对用户身份的盲目信任。通过DVWA的四个级别演示,我们可以看到从无防护到完整防护的演进过程。在实际开发中,应结合Anti-CSRF Token、二次验证和SameSite Cookie等多重防护措施,才能有效抵御CSRF攻击。