DVWA---全级别CSRF

CSRF

全称Cross-site request forgery,翻译过来就是跨站请求伪造。

指利用受害者尚未失效的身份认证信息(cookie或者会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(转账或者改密等)。

CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。

Low:

首先查看服务器端核心代码:

服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码,并没有任何的防CSRF机制,当然服务器对请求的发送者是做了身份验证的,检查了cookie,这里的代码没有体现。

漏洞利用:

构造链接

1.最基础的

http://192.168.18.21/DVWA-master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#

当受害者点击了这个链接,他的密码就会被改成password,但链接一眼就能看出来是改密码的,而且受害者点了链接之后看到这个页面就会知道自己的密码被篡改了。

注意:

CSRF最关键的是利用受害者的cookie向服务器发送伪造请求,所以如果受害者之前用Chrome浏览器登录的这个系统,而用搜狗浏览器点击这个链接,攻击是不会触发的,因为搜狗浏览器并不能利用Chrome浏览器的cookie,所以会自动跳转到登录界面。

2.使用短链接来隐藏URL(点击短链接,会自动跳转到真实网站)

百度使用缩短网址工具将原网址就行缩短。

原网址:http://192.168.18.21/DVWA-master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#

缩短后网址:https://t.im/nsqy

因为本地搭的环境,服务器域名是ip所以无法生成相应的短链接,实际攻击场景下只要目标服务器的域名不是ip,是可以生成相应短链接的。

虽然利用了短链接隐藏url,但受害者最终还是会看到密码修改成功的页面。

3.构造攻击页面

现实攻击场景下,这种方法需要事先在公网上传一个攻击页面,诱骗受害者去访问,真正能够在受害者不知情的情况下完成CSRF攻击。这里为了方便演示,就在本地写一个test.html。

当受害者访问test.html时,会误认为是自己点击的是一个失效的url,但实际上已经遭受了CSRF攻击,密码已经被修改为了hack。

Medium:

首先查看服务器端核心代码:

Medium级别的代码检查了保留变量HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,即要访问的主机名,这里是192.168.18.21),希望通过这种机制抵御CSRF攻击。

漏洞利用:

过滤规则是http包头的Referer参数的值中必须包含主机名。

可以将攻击页面命名为192.168.18.21.html(页面被放置在攻击者的服务器里,这里是192.168.18.11)就可以绕过了。

访问页面时使用burpsuite进行抓包:

Referer参数完美绕过过滤规则

密码修改成功。

High:

首先查看服务器端核心代码:

High级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。

漏洞利用:

要绕过High级别的反CSRF机制,关键是要获取token,要利用受害者的cookie去修改密码的页面获取关键的token。

试着去构造一个攻击页面,将其放置在攻击者的服务器,引诱受害者访问,从而完成CSRF攻击。

攻击思路是当受害者点击进入这个页面,脚本会通过一个看不见框架偷偷访问修改密码的页面,获取页面中的token,并向服务器发送改密请求,以完成CSRF攻击。

但是这里涉及到了跨域问题,而现在的浏览器是不允许跨域请求的。

跨域:

我们的框架iframe访问的地址是http://192.168.18.21/DVWA-master/vulnerabilities/csrf,位于服务器192.168.18.21上,而我们的攻击页面位于黑客服务器192.168.18.11上,两者的域名不同,域名B下的所有页面都不允许主动获取域名A下的页面内容,除非域名A下的页面主动发送信息给域名B的页面,所以我们的攻击脚本是不可能取到改密界面中的user_token。

由于跨域是不能实现的,所以我们要将攻击代码注入到目标服务器192.168.18.21中,才有可能完成攻击。下面利用High级别的XSS漏洞协助获取Anti-CSRF token(因为这里的XSS注入有长度限制,不能够注入完整的攻击脚本,所以只获取Anti-CSRF token)。

这里的Name存在XSS漏洞,于是抓包,改参数。

成功弹窗:

Impossible:

首先查看服务器端核心代码:

Impossible级别的代码利用PDO技术防御SQL注入,至于防护CSRF,则要求用户输入原始密码(简单粗暴),攻击者在不知道原始密码的情况下,无论如何都无法进行CSRF攻击。

posted @ 2020-02-29 17:57  强霸卓奇霸  阅读(523)  评论(0)    收藏  举报
https://blog-static.cnblogs.com/files/xiaokang01/js.js 这是添加的文件的链接 color="240,230,140" 粒子的颜色设置 opacity="1" 粒子的透明度 count="75" 粒子的个数