DVWA下的CSRF通关
字数 1176 2025-08-15 21:32:28

CSRF攻击原理与DVWA通关教学文档

1. CSRF攻击概述

CSRF(Cross-Site Request Forgery,跨站点请求伪造)是一种严重的Web安全威胁,攻击者利用受害者在已认证网站上的活动状态,诱骗受害者执行非预期的操作。

1.1 CSRF攻击原理

  1. 攻击流程

    • 用户访问受信任网站A并成功登录,获得合法Cookie
    • 用户未退出网站A时,在同一浏览器访问恶意网站B
    • 网站B返回攻击代码,向网站A发起请求
    • 浏览器自动携带网站A的Cookie,以用户权限执行操作
  2. 与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防护措施

攻击方法

  1. 构造恶意URL:
    http://目标地址/DVWA-master/vulnerabilities/csrf/?password_new=test&password_conf=test&Change=Change#
    
  2. 使用短网址服务伪装:
    http://r6d.cn/9rGy
    
  3. 创建恶意HTML页面诱骗用户点击:
    
    

2.2 Medium级别

防护措施

if( stripos( $_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME'] ) !== false )

防护原理

  • 检查HTTP Referer头是否包含服务器名
  • 使用stripos()函数进行不区分大小写的匹配

绕过方法

  1. 修改HTTP请求头,在Referer中包含服务器名:
    Referer: http://目标服务器名/任意路径
    
  2. 使用同源iframe嵌套攻击页面

2.3 High级别

防护措施

  • 使用Anti-CSRF Token机制
  • 每次请求需要携带有效的Token值

绕过思路

  1. 结合XSS漏洞获取Token
  2. 使用同源iframe嵌套获取Token
  3. 社会工程学诱骗用户提交包含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 ) ) {
    // 更新密码
}

防护措施

  1. Anti-CSRF Token验证
  2. 要求提供当前密码
  3. 使用PDO预处理语句防止SQL注入
  4. 密码多重验证(新旧密码匹配、当前密码正确)

3. CSRF防护最佳实践

  1. Anti-CSRF Token

    • 为每个表单生成唯一Token
    • Token与用户会话绑定
    • 每次提交验证Token有效性
  2. 验证HTTP Referer头

    • 检查请求来源是否为可信域名
    • 注意:Referer头可能被禁用或伪造
  3. 关键操作二次验证

    • 密码修改需验证当前密码
    • 敏感操作增加短信/邮箱验证码
    • 图形验证码防护
  4. SameSite Cookie属性

    • 设置Cookie的SameSite属性为Strict或Lax
    • 防止跨站请求携带认证Cookie
  5. 自定义HTTP头验证

    • 添加自定义头如X-Requested-With
    • 后端验证头信息存在性

4. 总结

CSRF攻击利用的是Web应用对用户身份的盲目信任。通过DVWA的四个级别演示,我们可以看到从无防护到完整防护的演进过程。在实际开发中,应结合Anti-CSRF Token、二次验证和SameSite Cookie等多重防护措施,才能有效抵御CSRF攻击。

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级别 漏洞分析 漏洞点 : 仅检查两次输入密码是否一致 无任何身份验证或CSRF防护措施 攻击方法 构造恶意URL: 使用短网址服务伪装: 创建恶意HTML页面诱骗用户点击: 2.2 Medium级别 防护措施 防护原理 : 检查HTTP Referer头是否包含服务器名 使用 stripos() 函数进行不区分大小写的匹配 绕过方法 修改HTTP请求头,在Referer中包含服务器名: 使用同源iframe嵌套攻击页面 2.3 High级别 防护措施 : 使用Anti-CSRF Token机制 每次请求需要携带有效的Token值 绕过思路 : 结合XSS漏洞获取Token 使用同源iframe嵌套获取Token 社会工程学诱骗用户提交包含Token的表单 2.4 Impossible级别 完整防护代码 防护措施 : 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攻击。