1. CSRF漏洞
CSRF(Cross-site request forgery)跨站请求伪造,也被称为One Click Attack 或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常 不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击性往往不大流行(因此对其进行防范的资源也相对少)和难以防范,所以被认为比XSS更具危险性。
我本身有一个网站 我自己能操作修改密码 你有一个同样的网站 我搞了一个其他的点击按钮 那你点了一下 ,你在当前的浏览器上有这个网站的登录状态 ,(并且你是在当前浏览器中)这个时候可能触发csrf漏洞
测试方法:
安全扫描;使用burpsuite进行抓包,将参数中的token删除,或者设置为空,重放请求,若正常访问则说明有漏洞;
同个浏览器打开两个页面,一个页面权限失效后,另一个页面是否可操作成功,如果仍然能操作成功即存在风险。
使用工具发送请求,在http请求头中不加入referer字段,检验返回消息的应答,应该重新定位到错误界面或者登录界面。
检测csrf漏洞一般是看每一个操作是否有验证码验证,是否有token或者referer,可以注册多个账户然后利用A用户生成的poc去检测B用户
csrf 客户端请求伪造 ,该漏洞通常由攻击者构造的请求传递给服务端,服务器端对传回的请求未作特殊处理直接执行而造成的。
攻击者通过跨站请求,以合法的用户的身份进行非法操作
CSRF的攻击过程两个条件:
1。目标用户已经登录了网站,能够执行网站的功能
2、目标用户访问了攻击者构造的URL.
3、熟悉网站数据包构造(CSRFTester)
CSRF安全问题黑盒怎么判断(防御)
1、看验证来源不-修复(同源策略referer,两个相同的链接,一个是网站直接点过去的,一个是连接访问效果不一样,就是有同源策略,一样就没有)
2、看凭据有无token--修复
3、看关健摄作有无验证-修复(密码验证、验证码)
CSRF安全问题白盒怎么审计:
同黑盒思路一样,代码中分析上述三看
流程
1、获取目标的触发数据包
2、利用CSRFTester构造导出
3、诱使受害者访问特定地址触发
2. 漏洞简介
跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件、发消息、甚至财产操作:转账、购买商品等)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份认证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
3. CSRF的成因
CSRF攻击利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web应用程序,去执行并非用户本意的操作。CSRF漏洞能够做的事情包括:以目标用户的名义发送邮件、发消息、盗取目标用户的账号,甚至购买商品、虚拟货币转账,这会泄露个人隐私并威胁到了目标用户的财产安全
Csrf漏洞的攻击过程有两个重点:
1.目标用户已经登录了网站,能够执行网站的功能
2.目标用户访问了攻击者构造的URL
4. CSRF攻击实例
1、角色
正常浏览网页的用户:User
正规的但是具有漏洞的网站:WebA
利用CSRF进行攻击的网站:WebB。
2、流程
(1)步骤一
用户登录、浏览并信任正规网站WebA,同时,WebA通过用户的验证并在用户的浏览器中产生Cookie。
(2)步骤二
攻击者WebB通过在WebA中添加图片链接等方式诱导用户User访问网站WebB。
(3)步骤三
在用户User被诱导访问WebB后,WebB会利用用户User的浏览器访问第三方网站WebA,并发出操作请求。
(4)步骤四
用户User的浏览器根据WebB的要求,带着步骤一中产生的Cookie访问WebA。
(5)步骤五
网站WebA接收到用户浏览器的请求,WebA无法分辨请求由何处发出,由于浏览器访问时带上用户的Cookie,因此WebA会响应浏览器的请求,如此一来,攻击网站WebB就达到了模拟用户操作的目的。
二、CSRF原理
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的恶意代码被执行。
5. CSRF与XSS漏洞区别
**CSRF:**利用网站对用户网页浏览器的信任(没有盗用用户的cookie,直接利用浏览器存储的cookie让用户去执行某个操作。)
**XSS:**利用用户对指定网站的信任
6. CSRF漏洞检测
1.检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
2.随着对CSRF漏洞研究的不断深入,不断涌现出一些专门针对CSRF漏洞检测的工具,若CSRFTester,CSRF Request Builder等
7. CSRF的高危触发点
- 论坛交流
- 用户中心
- 反馈留言
- 交易管理
- 后台管理
8. CSRF漏洞的危害
- 伪造HTTP请求进行未授权操作
- 篡改、盗取目标网站上的重要用户数据
- 未经允许执行对用户名誉或者资产有害的操作,比如:散播不良信息、进行消费等
- 如果通过使用社工等方式攻击网站管理员,会危害网站本身的安全性
- 作为其他攻击向量的辅助攻击手法,比如配合XSS
- 传播CSRF蠕虫
9. CSRF挖掘技巧
9.1漏洞产生的条件
- 被害用户已经完成身份认证
- 新请求的提交不需要重新身份认证或确认机制
- 攻击者必须了解Web APP请求的参数构造
- 诱使用户触发攻击的指令(社工)
9.2 漏洞产生的位置
密码修改处、点赞、转账、注销、删除等,有交互个数据传输的地方就可能有存在CSRF,但是注意,挖掘时最好通过判断有无二次验证(修改密码需要旧密码验证)或着通过有无token等来快速判断。
10. CSRF防御措施
(1)验证用户
当用户发送重要的请求时需要输入原始密码或验证码
(2)限制请求方式
限制请求方式只能为POST
(3)只使用JSON API
使用JavaScript发起AJAX请求是限制跨域的,并不能通过简单的表单来发送JSON,所以,通过只接收JSON可以很大可能避免CSRF攻击。
- Referer验证
根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。比如某银行的转账是通过用户访问http://bank.test/test?page=10&userID=101&money=10000页面完成,用户必须先登录bank.test,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求
- Token验证
CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于Cookie中,因此攻击者可以在不知道这些验证信息的情况下直接利用用户自己的Cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在于Cookie之中。鉴于此,系统开发者可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
- 增加验证码验证
Spring security的表单验证是通过过滤器链中的 UsernamePasswordAuthenticationFilter 来完成的,我们增加的验证码过滤器应该插在 UsernamePasswordAuthenticationFilter 之前,如果验证码校验不通过,直接返回,无需进行账户密码的校验。