CSRF
同源策略
协议、域名、端口这些是相同的
漏洞简介
这个就可以为攻击者使用受害者的已经认证了的页面去访问,也就是这样就可以做到登录受害者的账号
这个根源是使用相同的cookie也就是,用户的cookie,这个cookie用于保存用户信息的。在XSS那里提到过,有时候我们不能直接获得cookie的具体的值,那我们就可以不得到他的值,我们直接只用这个访问
跨站:从一个网站到另一个网站
请求:HTTP请求
伪造:伪造,伪装
总结一下的说:攻击者盗用了你的身份,以你的名义发送恶意请求。
漏洞成因
CSRF漏洞一般是由于没有检查Referer以及未在头部设置token造成的。
通过这个我们也可以联想到漏洞的检查方式。当我们把referer修改了之后发现还能正常的访问就说明存在这些问题
执行操作的时候没有只检查了cookie 并没有具体验证身份;请求的参数可以猜测到,也就是说请求参数是确定的
漏洞危害
CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全等等等等。可以说CSRF能够做什么,取决于你在网站里能做什么操作
根据src 经验来说,可能对一个场景中,只有增删改利用的危害要大一些
一般查的csrf 是不收的
与XSS的区别
前面也提到了,我们可以使用这个cookile而不是直接获取这个值
下面是更加完整的说法
CSRF与XSS不同,主要在于XSS是获取用户的凭证信息等,而CSRF是利用用户凭证信息,并不获取
漏洞类型
GET型
接下来示范一下
攻击者:
正常的修改密码
密码已经修改了,我们使用攻击者使用url看看
然后诱导受害者点击这个url那他的密码也会被修改
如果这个联合存储型XSS的话,只要用户触发了这个XSS那么他的密码就会被无意的被修改了
POST
这个的危险程度没有GET那么大,同常的形式是一个表单,访问该页面表单位自动提交
1 |
|
相当于模拟了用户提交表单的这个过程
漏洞利用
前提:
- 对方登录了系统,并且没有退出
- 攻击者拥有对方的cookie (可以使用xss 的方式进行获取)
主要是和XSS打组合拳,当网站设置了http-only的话,那我们就不能只用XSS获取cookie了,那么我们可以换一个思路不获取它,而是直接利用这个值
例如,在存在xss漏洞的A网站上注入一条链接点击这里领取黑客秘籍<a href=”xxx.xxxx.xxx/test.php?money=1111”/>,当用户点击之后,进入攻击者提前写好的网站B,触发网站B中,例如<img src=”http://网站A/test.php?Id=1&money=100000”/>这样的恶意代码。这时候由于用户带有A网站的认证信息,B网站利用用户此时的请求,篡改GET或POST表单内的参数,在用户不知情的情况下请求A网站,完成转账,修改密码等恶意操作
绕过漏洞
- 如果对方使用了检测referer,可以通过固定数据包里面的来源
- 如果发现网站寻找上传地方,上传的数据包文件,取到当前同域名可以访问的地址
漏洞修复
- Referer检查。攻击者虽然是利用用户的请求进行访问,但是Referer的内容显示的是B网站,也就是攻击者自己构造的网站。如果对Referer进行白名单检查,看是否来自合法的网站。如果不是,就极有可能是CSRF攻击
- 添加Token验证。CSRF攻击成功的原因就是利用用户已经认证过的cookie信息。cookie中的身份信息在请求时会自动添加,所以我们要在cookie外再加入一种验证身份的信息。具体的做法是在HTTP请求中,以参数的形式加入一个随机产生的Token,并在服务器端建立一个拦截器来验证这个 Token,如果请求中没有 Token 或者 Token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求
- 对敏感信息的提交使用post ,不适用get ,进一步的放置被伪造get 请求
面试
CSRF跨站请求伪造原理
- 攻击者利用服务器对用户的信任,从而欺骗服务器(伪造的恶意url)
- 服务端没有对请求中的referer 做检查,没有添加对应的token ,在进行关键操作的时候没有再次验证
和xss 区别
xss: 利用的是用户对服务端的信任;具体的利用是脚本在用户浏览器上执行,并不会对服务器造成什么影响
csrf:利用的是服务器对用户的信任;具体的利用是已经认证的用户(登录的用户)身份信息,对服务器请求,服务器会认为是用户的正常请求
攻击要点
- 用户处于登录状态
- 服务端没有对请求进一步验证,referer,token等
- 攻击者能有一个可以利用的请求也很重要
如何防御CSRF
- 避免url 中的参数被直接获取,或者是猜测到
- 使用同步令牌及其有效性
- 检测Referer Header
- 不在客户端存放敏感信息(身份认证信息)
- 会话最长的时间,如果之间没有请求就断开
- 有关重要操作需要进行进一步操作(比如修改密码)
- 敏感信息的修改使用post而不是get
- 避免交叉漏洞, 如XSS等
- 禁止跨域访问
- 在响应中设置CSP(Content-Security-Policy)内容安全策略