DVWA环境实战演示“CSRF”漏洞原理及漏洞修复

概念

CSRF全称(Cross-site request forgery)跨站请求伪造,CSRF通过伪装成受信任用户的请求来利用受信任的网站,从而执行受害者非本意的操作,相对于XSS漏洞来说CSRF漏洞更具有危险性。

准备实战环境

DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第1张图片我们先将安全等级调成low,进入CSRF界面,它是一个常见的密码修改功能:
DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第2张图片先进行正常操作,输入新密码 hacker 确认后密码修改成功。
DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第3张图片返回到登录页面验证下,输入用户名admin,密码hacker,点击提交
DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第4张图片成功登录,我们知道在提交新密码时,浏览器向服务端会提交一个表单,发送一个数据包,我们用burpsuite抓包分析下DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第5张图片我们向浏览器提交的表单分别是password_ new 跟 password_conf,change,由此可见攻击者的原始思路是修改这几个参数的值构造url链接http://192.168.0.135/DVWA-master/vulnerabilities/csrf/?password_new=hacker&password_conf=hacker&change=change# 发给受害者,受害者点击之后密码就会被修改。但是一般受害者看到这样的链接是不会点的,攻击者往往会伪造,将这个链接包装一下。包装的过程其实就是重新构造HTML。方法如下,将url放到hackbar中分割url:DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第6张图片然后构造HTML表单,代码如下:





csrf漏洞



将生成的HTML文件放到phpstudy的根目录下;
DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第7张图片为了区分跟dvwa的区别我们把链接写成http://127.0.0.1/csrf.html,访问下;

DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第8张图片当受害者点击后相当于向dvwa发送数据包:
DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第9张图片直接将密码修改成hacker了,这个时候就算受害者发现了也已经晚了,攻击者已经可以用以hacker为密码的账号登陆了。
我们把等级调成medium,我们尝试low等级的方法点击图片,跳转到dvwa界面出现了一行提示:DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第10张图片我们继续抓包分析:首先试下手工输入是成功的查看下数据包:
DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第11张图片接着试下low等级失败的提交方式,查看数据包:

DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第12张图片通过对比发现两个数据包最大的不同在于referer这一行,我们在失败的数据包中添加referer,将正确数据包的referer加上,提交下,发现密码修改成功,经过不断缩减referer中url参数并不断尝试,发现referer参数只要包含host即可提交成功。我们验证下:DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第13张图片我们知道referer这个参数总是跟链接一模一样的。解决方法如下:在文件夹后面构造一个与host相同的文件夹将csrf.html放进去:DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第14张图片
这样链接中就包含host字段了,验证访问刚才的链接并点击图片:
DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第15张图片
DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第16张图片成功了
进入high等级的CSRF攻击:对比medium等级的url跟high等级的url,在hackbar中清楚地看到high等级的数据包中多了如图所示的参数:

DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第17张图片而且每次修改密码它都是在变化的。它是来源于上一个响应包的内容,使用low等级跟medium等级的方法都失效了:DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第18张图片它提示usertoken不正确,如果页面存在xss漏洞的话,我们就可以读取其中的usertoken的值,很显然受害者是当前用户,但攻击者不是当前用户,攻击者无法知道上一个请求的usertoken的值,因此这个地方是无解的。
进入impossible等级:
DVWA环境实战演示“CSRF”漏洞原理及漏洞修复_第19张图片它提示了要输入原始密码,这就保证了当前用户一定是本人,有效的确保了CSRF攻击,现在市场上大部分都是用的这个模块。

漏洞修复:

根据medium等级方法是可以校验referer,但校验不完全,只校验了是否包含域名,可以存在绕过。
high等级:是随机token值,这个是有效方法,如果不存在xss漏洞的话是相当安全的
最后一个是验证码,比较暴力但是确实有效。

你可能感兴趣的:(DVWA环境实战演示“CSRF”漏洞原理及漏洞修复)