关于CSRF和SSRF知识详解

关于CSRF和SSRF知识详解

大家好,这是博主第一次写博客,可能写的有点不太好,如果有错误的话,希望大家多多指正,大家一起共同进步!!!

好了,言归正传,开始咱们的学习吧!!!



在这里插入图片描述

CSRF

1.CSRF漏洞介绍

CSRF(Cross-Site Request Forgey,跨站请求伪造)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。具体来讲,可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买物品、虚拟货币转账等。

XSS(跨站脚本攻击)

攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击

CSRF

攻击者发现CSRF漏洞——构造代码——发送给受害——受害人打开——受害人执行代码——完成攻击

2.CSRF攻击原理

CSRF的攻击原理图

当打开网站或者登录某个网站后,就会产生一个会话(这里指用户登录后),浏览器与服务器之间是在会话之中,在这个会话没有结束的时候,你可以利用你的权限对网站进行操作,如进行发表文章,发邮件,删除文章等操作。当这个会话结束后,你在进行某些操作时Web应用程序通常会来提醒你,您的会话已过期,或者是请重新登录等提示。

3.CSRF案例

A想给用户B转账1000元,那么点击提交按钮之后,可能会发送以下请求:http://www.taobao.com/pay.jsp?user=B&money=1000
攻击者C构造了一个恶意链接,把user参数改为C,money参数改为10000,然后诱惑A在不退出银行系统的前提下,去点击这个链接。http://www.taobao.com/pay.jsp?user=C&money=10000
当A访问了这条URL后,就会自动向C这个账户里面转入10000元。而这期间A可能还没发现自己的钱转错人了。

4.CSRF漏洞检测

检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。

随着对CSRF漏洞研究的不断深入,不断涌现出一些专门针对CSRF漏洞进行检测的工具,如CSRFTester,CSRF Request Builder等。

5.CSRF防御

(1)验证HTTP Referer字段

这种方法的显而易见的好处就是简单易行,网站的普通开发人员不需要操心CSRF的漏洞,只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查Referer的值就可以。特别是对于当前现有的系统,不需要改变当前系统的任何已有代码和逻辑,没有风险,非常便捷。然而,这种方法并非万无一失。Referer的值是由浏览器提供的,虽然HTTP协议上有明确的要求,但是每个浏览器对于Referer值的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。使用验证Referer值的方法,就是把安全性都依赖于第三方(即浏览器)来保障,从理论上来讲,这样并不安全。事实上,对于某些浏览器,比如IE6或FF2,目前已经有一些方法可以篡改Referer值。如果bank.example网站支持IE6浏览器,黑客完全可以把用户浏览器的Referer值设为以bank.example域名开头的地址,这样就可以通过验证,从而进行CSRF攻击。

(2)在请求地址中添加token并验证

要抵御CSRF,关键在于请求中放入黑客所不能伪造的信息,并且该信息不存在于cookie之中。可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。

这种方法要比检查Referer要安全一些,token可以在用户登录后产生并放于session之中,然后在每次请求时把token从session中拿出,与请求中的token进行比对。但是,在一个网站中,可以接受请求的地方非常多,要对于每一个请求都加上token是很麻烦的,并且很容易漏掉,该方法还有一个缺点是难以保证token本身的安全。特别是在一些论坛之类支持用户自己发表内容的网站,黑客可以在上面发布个人网站的地址。由于系统也会在这个地址后面加上token,黑客可以在自己的网站上得到这个token,并马上就可以发动CSRF攻击。为了避免这一点,系统可以在添加token的时候增加一个判断,如果这个链接是链到自己本站的,就在后面添加token,如果是通向外网则不加。不过,即使这个csrftoken不以参数的形式附加在请求之中,黑客的网站也同样可以通过Referer来得到这个token值以发动CSRF攻击。这也是一些用户喜欢手动关闭浏览器Referer功能的原因。

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

这种方法也是使用token并进行验证,和上一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了上种方法在请求中加入token的不便,同时,通过XMLHttpRequest请求的地址不会被记录到浏览器的地址栏,也不用担心token会透过Referer泄露到其他网站中去。然而这种方法的局限性非常大。XMLHttpRequest请求通常用于Ajax方法中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起,而且通过该类得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便。另外,对于没有进行CSRF防护的遗留系统来说,要采用这种方法来进行防护,要把所有请求都改为XMLHttpRequest请求,这样几乎是要重写整个网站,这代价无疑是不能接受的。






SSRF

1.SSRF的概念

SSRF(Server-Side Request Forgery)服务端请求为伪造,SSRF是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。 一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。

2.SSRF的攻击原理

SSRF攻击原理图

3.SSRF的危害

  1. 内外网的端口和服务扫描
  2. 攻击运行在内网或本地的应用程序
  3. 对内网web应用进行指纹识别,识别企业内部的资产信息
  4. 利用file协议读取本地敏感数据文件等

4.SSRF的防御

  1. 过滤返回的信息如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
  2. 统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
  3. 限制请求的端口,比如80,443,8080,8090。
  4. 禁止不常用的协议,仅仅允许http和https请求。可以防止类似于file:///,gopher:"ftp: 等引起的问题
  5. 使用DNS缓存或者Host白名单的方式。

5.CSRF和SSRF的区别

  • CSRF是跨站请求伪造,伪造的是客户端,即黑客盗用用户身份
  • SSRF是服务器端请求伪造,黑客盗用服务器,一般用于从外网访问内网。





好了,以上就是博主总结的CSRF和SSRF的知识点,后续我还会继续出其他相关的漏洞(主要是基于OWASP TOP10的),感谢大家的支持,我会继续努力为大家服务的!!!

在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值