CSRF漏洞测试
程序员文章站
2022-06-14 12:01:21
csrf 测试
csrf中文名:跨站请求伪造,英文译为:cross-site request forgery,csrf攻击就是attacker(攻击者)利用victim(受害者)尚未失效的身份认证信...
csrf 测试
csrf中文名:跨站请求伪造,英文译为:cross-site request forgery,csrf攻击就是attacker(攻击者)利用victim(受害者)尚未失效的身份认证信息(cookie、session等),以某种方式诱骗victim点击attacker精心制作的恶意链接或者访问包含恶意攻击代码的页面,当victim触发成功之后,恶意代码会被执行,默默的向目标service发出请求加载着victim尚未失效的身份认证信息,导致victim替attacker完成了非法操作比如:在某些上发布大量的恶意言论、网站用户密码被恶意篡改、账户金额被盗取、删除网站个人信息~~~~~
漏洞测试:
通过dvwa平台,对csrf漏洞进行测试,让大家走进csrf的世界
环境:dvwa服务ip :192.168.43.146
attacker服务ip :192.168.43.150
low level查看:
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 echo "
password changed."; } else { // issue with passwords matching echo "
passwords did not match or current password incorrect."; } } // generate anti-csrf token generatesessiontoken(); >
代码审计发现:用户修改网站密码不仅需要user_token的验证还需要用户输入当前密码进行验证,因此,attacker不能对用户进行csrf攻击
总结:
学过csrf和xss之后,你可能会有疑惑,它们两个一样吗,不用多说,相信大家看名字就知道不一样
csrf攻击是直接利用用户尚未失效的cookie,并伪造特殊的请求对用户造成危害的一种攻击手段
xss攻击是直接盗取用户的cookie,所造成的一种攻击手段
两者看似相似,当又有一些不一样的地方
上一篇: AngularJS封装指令方法详解