浅谈CSRF(Cross-site request forgery)

CSRF

在CSRF的攻击场景中,攻击者会伪造一个请求,一般这个请求是一个链接,然后欺骗目标用户点击,用户一旦点击了这个请求整个攻击就完成了。所以csrf也叫“one click”攻击。

CSRF攻击原理:

当我们打开或登录某网站时,就会产生一个会话,这个会话可能是session或者cookie控制。服务器和浏览器会处于会话之中,在这个会话没有结束时,可以利用权限对网站进行操作,如进行发表文章,发邮件,删除文章等操作,任何操作皆是以我登录的这个账号身份进行的。(当会话结束的时候,即cookie和session过期了,会提醒你重新登录)。在一个浏览器上登录过一次之后,浏览器会保存会话,不管重新打开多少次网站只要在会话没过期之前,你会发现你一直是登录的状态(得在同一个浏览器上)。然后就有可以利用的地方了,就是如果某些重要的参数写在url上,可以构造一个链接,如果某位大冤种刚好在浏览那个网站时,发给他或许有意象不到的效果。

大致流程:

1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A

2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A

3.用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B

4.网站B接受到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A

5.浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的cookie信息以及C的权限处理该请求,导致来自网站B的恶意代码被执行

简单的例子:

然后假设你在给某位叫啊獠的帅哥转账时浏览器的url为

                xxx.com/?username=你&user=aliao&转账=500rmb

再你点确定之前,某位不知名黑客的qq好友发给你了一个新的链接

                xxx.com/?username=你&user=hacker&转账=500rmb

然后你就会将钱转入到那位hacker手里

条件:

1.首先这个网站需要存在CSRF漏洞(没这个漏洞啥也不是,,,)

2.大冤种在浏览器上打开过那个网站,且会话没过期,且用的是同一个浏览器打开的网站

CSRF攻击方式分类:

站外:

CSRF站外类型的漏洞本质上就是传统意义上的外部数据提交问题。通常程序猿会考虑给一些留言或者评论的表单加上水印防止SPAM问题(SPAM可以简单理解为垃圾留言评论以及带有站外链接的恶意回复),但有时候为了提高用户的体验性,可能没有对一些操作做任何限制,所以攻击者可以事先预测并设置请求的参数,在站外的web页面里编写脚本伪造文件请求,或者和自动提交的表单一起使用来实现GET,POST请求,当用户在会话状态下点击链接访问站外web页面,客户端就被强迫发起请求

关于这个我的理解不到位,感觉就是假设请求百度这个网站,然后自己在搭建一个网站构造恶意代码,然后用户访问我这个网站的时候就会带着百度的cookie去请求百度这个网站

站内:

站内就是上面那个简单的例子,以get方式传输

CSRF的检测

最简单的一个方法就是抓取一个正常的请求包,去掉referer字段后重新提交,如果该提交还有效,那么基本上可以确定有CSRF,但是不完全一定存在。因为存在token。

修复

CSRF的漏洞防御主要从三个层面进行:

1.服务端的防御:

1.验证HTTP Referer字段

2.在请求地址中加入token并验证

3.在HTTP头中自定义属性并验证

2.同源策略

同源策略定义:如果两个URL的protocol,port和host相同的话,则这两个URL同源

当一个浏览器分别打开两个网页时,假如是淘宝和百度。当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,即是否同源只有和百度同源的脚本才会被执行。如果非同源,那么在请求数据的时候,浏览器会在控制台报异常,提示拒绝访问。

同源策略是浏览器的行为,是为了保护本地数据不被javascript代码获取回来的数据污染,因此拦截的是客户端发出的请求回来的数据接受,即请求发送了,服务器响应了,浏览器不收。

因为同源策略使得站外的CSRF无法通过脚本来获取其他网站的token,然后使得token验证能很大程度上避免CSRF

3.在服务端严格区分好POST和GET请求

如在asp中不要使用request来直接获取数据。同时建议不要用GET请求来执行持久型操作

4.使用验证码或密码确认方式进行(用户体验会很差)

小结:

首先这个漏洞其实利用起来是多少有点问题的,因为你会发现可能就算有这个漏洞,也很难整,因为漏洞点不出在转账或者修改密码这种地方我很难想到还有什么用处。

CSRF不仅仅适用于GET请求,还可以用于POST请求,如果用burp抓包后可以利用burp模块里的Engagement tools ->Generate CSRF PoC这个模块,可以将POST请求转变成form表单,就可以做一个站外的CSRF攻击。这个还是比较方便的。

CSRF还有一个绕过的姿势,即如果服务器只检验referer头中是否含有域名,咱可以在自己的站点上新建一个文件夹,然后那个文件夹重命名为正经网站的域名

据说以前搞诈骗有过这种手段,就是骗子给你发一个正常的网页,然后登录上去之后,再发给你一个有csrf漏洞的网页,然后米就会到骗子手里。

好了上面就是我对CSRF一整个的理解,肯定有不足,希望各位大佬指指点点(狗头保命)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忠厚老实的啊獠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值