渗透测试技术----常见web漏洞--跨站请求伪造攻击原理及防御

一、跨站请求伪造攻击介绍

1.跨站请求伪造攻击简介
跨站请求伪造(Cross-site request forgery)简称为CSRF,这是一种对网站的恶意利用。CSRF实际上就是攻击者通过各种方法伪装成目标用户的身份,欺骗服务器,进行一些非法操作,但是这在服务器看来却是合法的操作。

2.CSRF与XSS的区别
尽管CSRF听起来很像XSS,但是却又与XSS有本质的区别。最本质的区别就是XSS利用的是用户信任服务器,CSRF利用的是服务器信任用户。 XSS是由于用户信任服务器,因此攻击者可以将恶意的JS代码上传到服务器,用户由于信任服务器就会去访问服务器,这样,用户就容易收到XSS攻击;CSRF是由于服务器信任用户,因此攻击者会伪装成用户的身份去进行一些非法操作,但是服务器会认为这是合法的操作,这样用户就受到了CSRF攻击。

二、跨站请求伪造原理

1.跨站请求伪造原理解释
其实CSRF就是攻击者利用目标用户的身份,以目标用户的名义去执行某些非法操作。CSRF能做的事情包括:以目标用户的名义发邮件、发消息、盗取目标用户的的账号,甚至购买商品、虚拟货币转账,这些会泄露个人隐私并涉及目标用户的财产安全。

2.进行CSRF攻击的前提条件

  • 目标用户已经登录了网站,并且能够执行网站的功能
  • 目标用户访问了攻击者构造的URL
  • 服务器端不会有二次认证
  • 被害者是不知情的

3.CSRF原理(引用大佬的一幅图)
(1):用户浏览并登录正常网站A
(2):用户通过认证,服务器向用户发送一个cookie值
(3):用户在没有登出A网站的情况下,访问攻击者所伪造的危险网站B(cookie值存在的时候访问网站B)
(4):网站B要求访问第三方站点网站A,发出一个请求
(5):由于此时用户仍登录着网站A(也就是说浏览器中还存放着网站A给用户的cookie),因此浏览器会携带着之前网站A发送给自己的cookie值去访问网站A
(6):由于浏览器携带者用户正确的cookie值访问网站A,网站A会通过用户的访问请求,此时服务器仍旧认为是用户在访问网站A,实际上是攻击者B伪造用户A的身份在访问网站A,因此攻击者就可以执行用户所可以执行的相关操作了
在这里插入图片描述

三、XSS和CSRF结合使用

1.XSS和CSRF结合使用的原因
单纯的一个XSS的攻击效果是很小的,以至于很多厂商对于单独的XSS漏洞都是不认领的,单纯的一个CSRF的攻击要求又相对比较高,需要用户去点击攻击者构造的URL,因此CSRF的攻击也是相对来说比较难成功。但是,如果将XSS和CSRF结合使用,那么攻击效果就会呈几何倍的上升。

2.XSS结合CSRF攻击方法
存储型XSS和CSRF结合使用(原理与上图相差不大)
以下加粗的内容与CSRF有差异
(1):首先,攻击者向网站A(存储型服务器)上传一个具有重定向到网站B功能的JS脚本
(2):用户用户浏览并登录正常网站A
(3):用户通过认证,服务器向用户发送一个cookie值
(4):与此同时触发了存储型XSS,用户跳转到攻击者所伪造的危险网站B
(5):网站B要求访问第三方站点网站A,发出一个请求
(6):由于此时用户仍登录着网站A(也就是说浏览器中还存放着网站A给用户的cookie),因此浏览器会携带着之前网站A发送给自己的cookie值去访问网站A
(7):由于浏览器携带者用户正确的cookie值访问网站A,网站A会通过用户的访问请求,此时服务器仍旧认为是用户在访问网站A,实际上是攻击者B伪造用户A的身份在访问网站A,因此攻击者就可以执行用户所可以执行的相关操作了

XSS结合CSRF与单独的CSRF最大的区别就是当用户从网站A到网站B的时候方式有所不同,XSS结合CSRF是利用XSS主动重定向到网站B,而单独的CSRF只能是通过用户有意或无意的点击来访问网站B

四、防御跨站请求伪造攻击方法

1.验证请求的Referer值,如果Referer是以自己的网络开头的域名,则说明该请求来自网站自己,是合法的。如果Referer是其他网站域名或空白,就有可能是CSRF攻击,那么服务器就应该拒绝请求,但是此方法存在被绕过的可能。攻击者可以使用Burp抓包来修改Referer值来欺骗服务器。

2.CSRF之所以能够成功,是因为攻击者可以伪造用户的请求,由此可知,抵御CSRF攻击的关键在于:在请求中加入攻击者不能伪造的信息。例如可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端验证token,如果请求中没有token或者token值不正确,则认为该请求可能是CSRF攻击从而拒绝该请求。

使用token值来防御CSRF的安全性明显高于使用Referer值

五、token与Referer介绍

1,对Referer的验证,从什么角度去做,如果做,怎么杜绝问题?
对header中的referer的验证,一个是空referer,一个是referer过滤或者检测不完善。为了杜绝这种问题,在验证的白名单里,正则表达式应该写的完善。

2.针对token的测试应该注意哪些方面,会对token的哪方面做测试?
(1):针对token的攻击,一是对他本身的攻击,重放测试一次性、分析加密规则、校验方式是否准确等,二是结合信息泄露漏洞对它的获取,结合着发起组合攻击。
(2):信息泄露有可能是缓存、日志、get,也有可能是利用跨站
(3):很多跳转登录都依赖token,有一个跳转漏洞加反射型跨站就可以组合成登录劫持了
(4):另外也可以结合着其他业务来描述token的安全性及设计不好怎么被绕过

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值