DVWA v1.10 靶场记录 -CSRF(Low)
Posted 三正黑白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DVWA v1.10 靶场记录 -CSRF(Low)相关的知识,希望对你有一定的参考价值。
漏洞概述
CSRF跨站请求伪造是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等);CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。
Low
操作
Step01:关闭burpsuite拦截功能;
Step02:使用浏览器发起修改密码请求,查看捕获到的数据包;
Step03: 使用burpsuite构建csrf poc,并测试;
源码
if( isset( $_GET[ 'Change' ] ) ) {
// 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
echo "<pre>Password Changed.</pre>";
}
else {
// Issue with passwords matching
echo "<pre>Passwords did not match.</pre>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
解析
可以看到,服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码,并没有任何的防CSRF机制(当然服务器对请求的发送者是做了身份验证的,是检查的cookie,只是这里的代码没有体现)。修改密码过程针对第三方站点自动化请求无任何防御机制,可以在用户登录状态下由第三方站点自动发起修改密码操作;
以上是关于DVWA v1.10 靶场记录 -CSRF(Low)的主要内容,如果未能解决你的问题,请参考以下文章