网络安全 DVWA通关指南 Cross Site Request Forgery (CSRF)

news2024/10/7 17:56:00

DVWA Cross Site Request Forgery (CSRF)

文章目录

  • DVWA Cross Site Request Forgery (CSRF)
    • DVWA Low 级别 CSRF
    • DVWA Medium 级别 CSRF
    • DVWA High 级别 CSRF
    • DVWA Impossible 级别 CSRF

CSRF是跨站请求伪造攻击,由客户端发起,是由于没有在执行关键操作时,进行是否由用户自愿发起的确认攻击者通过用户的浏览器来注入额外的网络请求,来破坏一个网站会话的完整性。

比如某网站用户信息修改功能,没有验证Referer也没添加Token,攻击者可以用HTML构造恶意代码提交POST请求,诱骗已经登陆的受害者点击,可以直接修改用户信息

修复建议

  • 验证Referer
  • 添加token

DVWA Low 级别 CSRF

0、分析网页源代码(路径:“D:\phpstudy_pro\DVWA-master\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) { 
        // 密码匹配
        // 防止SQL注入,转义新密码字符串
        $pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass_new) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
        
        // 对新密码进行MD5哈希加密(注意:MD5加密在此处已经过时,不建议用于存储密码)
        $pass_new = md5($pass_new);

        // 构造SQL更新语句,更新当前登录用户(由dvwaCurrentUser()函数获取)的密码
        $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";

        // 执行SQL查询
        $result = mysqli_query($GLOBALS["___mysqli_ston"], $insert) or die('<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>');

        // 如果密码成功更改,则反馈给用户
        $html .= "<pre>Password Changed.</pre>";
    } else {
        // 如果两次输入的密码不匹配,则反馈错误信息
        $html .= "<pre>Passwords did not match.</pre>";
    }

    // 关闭数据库连接
    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

1、选择DVWA的CSRF,修改密码为111,提交后观察到网站链接发生变化

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

观察链接,认为使用get方式提交修改密码参数,只要三个参数符合就可以执行密码修改的操作

image-20240415193519864

2、打开一个新标签页,在地址栏输入http://dvwa/vulnerabilities/csrf/?password_new=111&password_conf=111&Change=Change#,回车后,进入DVWA中并提示Password Changed,修改密码成功。

image-20240415194631245

image-20240415194532633

3、可以通过将长连接转换为短链接的方法,诱使用户点击链接,通过在线工具转换

image-20240415194928196

DVWA Medium 级别 CSRF

0、分析网页源代码(路径:“D:\phpstudy_pro\DVWA-master\vulnerabilities\csrf\source\medium.php”)

<?php

if( isset( $_GET[ 'Change' ] ) ) {
	// Checks to see where the request came from
    //检查$_SERVER['HTTP_REFERER'],看看请求是否来自包含当前服务器名称$_SERVER['SERVER_NAME']的地址。stripos函数用于查找HTTP_REFERER是否包含服务器名
	if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {
		// Get input
		$pass_new  = $_GET[ 'password_new' ];
		$pass_conf = $_GET[ 'password_conf' ];

		// Do the passwords match?
		if( $pass_new == $pass_conf ) {
			// They do!
			$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
			$pass_new = md5( $pass_new );

			// Update the database
			$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
			$result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

			// Feedback for the user
			$html .= "<pre>Password Changed.</pre>";
		}
		else {
			// Issue with passwords matching
			$html .= "<pre>Passwords did not match.</pre>";
		}
	}
	else {
		// Didn't come from a trusted source
		$html .= "<pre>That request didn't look correct.</pre>";
	}

	((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

1、尝试修改密码为222,修改成功,得到链接

http://dvwa/vulnerabilities/csrf/?password_new=222&password_conf=222&Change=Change#

2、打开新的标签页,使用上面的地址,出现错误提示,密码修改错误

image-20240417080206278

3、打开计算机代理,修改电脑代理服务器IP设置为127.0.0.1,端口设置为8888,BurpSuite调整代理参数与电脑代理一致

image-20240412094734133

image-20240412095237028

image-20240412094536046

4、正常修改密码的网页,使用BurpSuitePro捕获流量包,发现多出Referer属性信息

image-20240418165344132

5、而直接粘贴链接修改密码失败的报文缺少Referer属性信息,右键选择Send to Repeater

image-20240418170054026

image-20240418170418876

5、打开Repeater选项卡,给Request请求中添加Referer信息,Referer需要包括"dvwa"字段(需要符合同源策略),点击Send发送,修改密码成功

image-20240418172052977

image-20240418172120333

DVWA High 级别 CSRF

0、分析网页源代码(路径:“D:\phpstudy_pro\DVWA-master\vulnerabilities\csrf\source\high.php”)

<?php

if( isset( $_GET[ 'Change' ] ) ) {
	// Check Anti-CSRF token
	checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

	// Get input
	$pass_new  = $_GET[ 'password_new' ];
	$pass_conf = $_GET[ 'password_conf' ];

	// Do the passwords match?
	if( $pass_new == $pass_conf ) {
		// They do!
		$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
		$pass_new = md5( $pass_new );

		// Update the database
		$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
		$result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

		// Feedback for the user
		$html .= "<pre>Password Changed.</pre>";
	}
	else {
		// Issue with passwords matching
		$html .= "<pre>Passwords did not match.</pre>";
	}

	((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

// Generate Anti-CSRF token
generateSessionToken();

?>

1、正常修改密码并成功,使用BurpSuitePro捕获流量包,发现仍使用get提交方式,但多了验证参数token

image-20240418174557916

2、直接将链接复制粘贴修改密码肯定失败,提示token不正确

image-20240418180900000

有两种方法可以获得token值

方法一:利用DVWA中储存型XSS漏洞获得网页token

1、修改储存型XSS的网页脚本"D:\phpstudy_pro\DVWA-master\vulnerabilities\xss_s\index.php",加入下面两行代码(修改文件之前做好备份)

<div>Name:test<br/>Message:this is a test comment.<br/></div>
<div>Name:<iframe src='../csrf' οnlοad=alert(frames[0].document.getElementsByName('user_token')[0].value)><br/>Message:1<br/></div>

屏幕截图 2024-04-18 190045

2、保存文件,打开DVWA High级别下的储存型XSS页面,得到token值

image-20240418190907301

3、将得到的token替换,BurpSuitePro捕获流量包中原有的token

image-20240418190836711

4、发送构造好的数据包,得到响应,密码修改成功

image-20240418191317461

方法二:在BurpSuite安装插件,获取token

1、安装CSRF Token Tracker插件

image-20240418184201655

2、添加一条CSRF Token Tracker规则并勾选,再勾选"根据规则同步requests"

image-20240615214659621

3、截获修改密码请求包

屏幕截图 2024-06-15 215508

4、将抓到的包Send to Repeater,在Repeater页面修改"password_new"和"password_conf"参数,Send后发现token值发生变化,修改密码成功

image-20240615215423256

DVWA Impossible 级别 CSRF

0、分析网页源代码

<?php

if( isset( $_GET[ 'Change' ] ) ) {
	// Check Anti-CSRF token
	checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

	// Get input
	$pass_curr = $_GET[ 'password_current' ];
	$pass_new  = $_GET[ 'password_new' ];
	$pass_conf = $_GET[ 'password_conf' ];

	// Sanitise current password input
	$pass_curr = stripslashes( $pass_curr );
	$pass_curr = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_curr ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
	$pass_curr = md5( $pass_curr );

	// Check that the current password is correct
	$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();

	// Do both new passwords match and does the current password match the user?
	if( ( $pass_new == $pass_conf ) && ( $data->rowCount() == 1 ) ) {
		// It does!
		$pass_new = stripslashes( $pass_new );
		$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
		$pass_new = md5( $pass_new );

		// Update database with new password
		$data = $db->prepare( 'UPDATE users SET password = (:password) WHERE user = (:user);' );
		$data->bindParam( ':password', $pass_new, PDO::PARAM_STR );
		$data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR );
		$data->execute();

		// Feedback for the user
		$html .= "<pre>Password Changed.</pre>";
	}
	else {
		// Issue with passwords matching
		$html .= "<pre>Passwords did not match or current password incorrect.</pre>";
	}
}

// Generate Anti-CSRF token
generateSessionToken();

?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1868143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐一个shp修复工具

我们在《如何解决ArcGIS中数据显示乱码问题》一文中&#xff0c;为你分享过打开shp文件的乱码问题。 现在再为你分享一个shp文件的修复工具&#xff0c;你可以在文末查看该工具的领取方式。 shp文件修复工具 Shapefile&#xff08;简称SHP&#xff09;是Esri推出的一种广泛使…

新能源行业知识体系-------蒙西电网需求侧响应

新能源行业知识体系-------主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/139946830 目录 一、背景介绍二、需求响应电能量收益介绍三、超额回收需求响应减免收益介绍四、参与需求侧响应五、蒙西电力现货特点六、交易中…

好消息!终于解决了!Coze工作流错误中断问题终于得到解决!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 解决方案 📒📝 常见的工作流中断问题📝 好消息来了!⚓️ 相关链接 ⚓️📖 介绍 📖 大家是否曾经遇到过这样的问题:在Coze平台辛辛苦苦设计的一个工作流,尤其是流程非常复杂和长的情况下,只要中间一个环节出错,整…

红海云签约联东集团,引领产业园区领军企业人力资源数字化新范式

北京联东投资&#xff08;集团&#xff09;有限公司&#xff08;以下简称“联东集团”&#xff09;是集产业园区运营、模板钢结构和投资业务为一体的集团化公司。联东集团独创了产业聚合U模式&#xff0c;致力于打造产业集聚平台&#xff0c;服务于实体企业成长和地区经济发展。…

[SD必备知识18]修图扩图AI神器:ComfyUI+Krita加速修手抽卡,告别低效抽卡还原光滑细腻双手,写真无需隐藏手势

&#x1f339;大家好&#xff01;我是安琪&#xff01;感谢大家的支持与鼓励。 krita-ai-diffusion简介 在AIGC图像生成领域的迅猛发展下&#xff0c;当前的AI绘图工具如Midjourney、Stable Diffusion都能够近乎完美的生成逼真富有艺术视觉效果的图像质量。然而&#xff0c;针…

基于大语言模型的多意图增强搜索

随着人工智能技术的蓬勃发展&#xff0c;大语言模型&#xff08;LLM&#xff09;如Claude等在多个领域展现出了卓越的能力。如何利用这些模型的语义分析能力&#xff0c;优化传统业务系统中的搜索性能是个很好的研究方向。 在传统业务系统中&#xff0c;数据匹配和检索常常面临…

SpringMVC 请求参数接收

目录 请求 传递单个参数 基本类型参数传递 未传递参数 传递参数类型不匹配 传递多个参数 传递对象 后端参数重命名 传递数组 传递集合 传递JSON数据 JSON是什么 JSON的优点 传递JSON对象 获取URL中的参数 文件上传 在浏览器与程序进行交互时&#xff0c;主要分为…

互联网信息服务算法备案流程与要求

一、备案申请的办理流程 企业通过网信办的互联网信息服务算法备案系统&#xff08;https://beian.cac.gov.cn/#/index&#xff09;提交算法备案申请。填报信息包括三部分&#xff0c;分别是算法主体信息、产品及功能信息、算法信息。备案中比较重要的文件包括主体信息中的《落…

anaconda卸载过程中出现fail to run pre-unistall报错

问题&#xff1a; 在使用Uninstall-Anaconda3.exe卸载程序时&#xff0c;出现报错&#xff1a; 解决方案&#xff1a; 把文件夹移动到C盘用户文件夹后再运行卸载程序。即可正常运行程序。

精彩回顾 | 2024高通边缘智能创新应用大赛系列公开课

5月29日-6月6日&#xff0c;我们陆续开展了四场精彩绝伦的2024高通边缘智能创新应用大赛直播公开课。高通、阿加犀、广翼智联以及美格智能的业务领袖和行业大咖齐聚一堂&#xff0c;聚焦边缘智能&#xff0c;分享前沿技术、探讨创新应用&#xff0c;抢先揭秘比赛设备的核心特性…

<sa8650>QCX Usecase 使用详解— Spectra Studio-新建usecase

<sa8650>QCX Usecase 使用详解— Spectra Studio-新建usecase 一 前言二 创建usecaseTEST2.1 打开工程2.2 新建sa8650的usecaseTEST2.2.1 步骤1 添加Usecase2.2.2 步骤2 输入参数(参考UsecaseFFC)2.2.3 步骤3 创建 Pipeline2.2.4 步骤4 转换到本地2.2.5 添加usecaseID号三 使…

Web应用和Tomcat的集成鉴权2-Form Authentication

作者:私语茶馆 1.相关章节 1) Web应用和Tomcat的集成鉴权1-BasicAuthentication-CSDN博客 2) Web应用和Tomcat的集成鉴权2-Form Authentication-CSDN博客 集成鉴权+定制化登录 2.前言 上章讲述了Tomcat的Basic Authentication鉴权模式,可以让Web应用和Tomcat的鉴权集成起来…

成都欣丰洪泰文化传媒有限公司开网店正规吗?

在如今电商风起云涌的时代&#xff0c;成都欣丰洪泰文化传媒有限公司如同一颗璀璨的明星&#xff0c;在电商服务的领域中熠熠生辉。这家公司凭借其专业的团队、丰富的经验和创新的思维&#xff0c;成为电商行业中的一股不可忽视的力量。 电商服务的领航者 成都欣丰洪泰文化传媒…

8.12 矢量图层面要素单一符号使用八(形状炸裂填充)

文章目录 前言形状炸裂填充&#xff08;Shapeburst fill&#xff09;QGis设置面符号为形状炸裂填充&#xff08;Shapeburst fill&#xff09;二次开发代码实现形状炸裂填充&#xff08;Shapeburst fill&#xff09; 总结 前言 本章介绍矢量图层线要素单一符号中使用形状炸裂填…

四川赤橙宏海商务信息咨询有限公司好不好?

在当今数字化浪潮下&#xff0c;电商行业正以前所未有的速度发展&#xff0c;而抖音作为短视频领域的佼佼者&#xff0c;其电商服务更是成为了众多品牌争相布局的热门领域。四川赤橙宏海商务信息咨询有限公司&#xff0c;正是这样一家专注于抖音电商服务的领军企业&#xff0c;…

跨境电商新趋势:海外盲盒小程序的市场机遇

随着全球经济的深度融合和消费者需求的日益多元化&#xff0c;跨境电商作为一种新型的国际贸易模式&#xff0c;正在以前所未有的速度发展。而在这一浪潮中&#xff0c;海外盲盒小程序凭借其独特的商业模式和强大的市场潜力&#xff0c;正逐渐成为跨境电商领域的新宠。本文将探…

家用洗地机有什么推荐的吗?洗地机性价比高的是哪一款?

洗地机因其强大的性能&#xff0c;给人们带来了舒适的清洁体验&#xff0c;提高了人们日常生活的质量&#xff0c;但市场上的洗地机质量参差不齐&#xff0c;所以洗地机品牌的选择就非常重要。因此&#xff0c;我作为一名专业的测评博主&#xff0c;今天就来向大家推荐几款值得…

以算筑基,以智赋能 | Gooxi受邀出席2024中国智算中心全栈技术大会

6月25日&#xff0c;2024中国智算中心全栈技术大会暨展览会、第5届中国数据中心绿色能源大会暨第10届中国&#xff08;上海&#xff09;国际数据中心产业展览会在上海新国际博览中心隆重召开。Gooxi受邀参与并携最新服务器产品以及解决方案亮相展会&#xff0c;吸引众多行业领袖…

微信小程序毕业设计-校园报修系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

unity VR Interaction Framework 创建新手势

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、新建物体&#xff0c;并添加必要组件二、添加抓取点三、查看手势的可视化样式四、制作新的手势1.点击编辑2.根据需求调节手指关节3.保存手势4. 使用创建的手势5.运行 总结 前言…