第一问别笑,面试真被问过,人麻了
Csrf中英文全称分别是什么?
跨站请求伪造 CSRF(Cross-site request forgery)
造成csrf攻击的条件什么?
登录受信任站点 A,并在本地生成cookie;
在不登出站点A(清除站点A的cookie)的情况下,访问恶意站点B。
csrf攻击原理是什么?
笼统的说就是,攻击者盗用了我的身份,以我的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作。
就比如说:
1. 我成功登录网站A并且产生了cookie信息
2. 在没退出A之前,我又使用同一浏览器访问恶意网站B
3.这个时候网站B可能就劫持了我的cookie,向网站A发起请求,并且请求中携带攻击代码
4.浏览器接受了网站B的请求,并通过了劫持的cookie信息,所以会以我的权限处理请求,导致攻击代码执行
Csrf有哪些危害?
比如:更新账号细节,完成购物,注销甚至登录等操作
获取用户的隐私数据
配合其他漏洞攻击
csrf蠕虫:
某社区私信好友的接口和获取好友列表的接口都存在CSRF漏洞,攻击者就可以将其组合成一个CSRF蠕虫——当一个用户访问恶意页面后通过CSRF获取其好友列表信息,然后再利用私信好友的CSRF漏洞给其每个好友发送一条指向恶意页面的信息,只要有人查看这个信息里的链接,CSRF蠕虫就会不断传播下去
怎样防范csrf?
1、当用户发送重要的请求时需要输入原始密码
2、设置随机 Token
token随机字符串用来验证数据包的唯一性,由于数据包的唯一性也就导致csrf漏洞几乎不能被利用
3、检验 referer 来源,请求时判断请求链接是否为当前管理员正在使用的页面(管理员在编辑文章,
黑客发来恶意的修改密码链接,因为修改密码页面管理员并没有在操作,所以攻击失败)
4、设置验证码
5、限制请求方式只能为 POST
6、将cookie设置为HttpOnly
Csrf怎样绕过?
校验referer一般是通过正则表达式来进行匹配
空referer
就是给数据包中的referer置空即可,有些网站可能没有考虑到referer为空的情况或者业务需要referer为空的情况从而导致了
绕过
关键词绕过
查看是否必须存在指定的关键词,如必须存在abc.com,那么我们只需要使用xxx.com/poc.html?abc.com即可绕过(?也可以换成其他的一些符号,只要不影响html解析就行,比如#)
指定域绕过
相比上一个更难,比如referer必须在域abc.com下,这种情况也有一些方法:
使用@,比如abc.com@xxx.com/poc.html
看看子域名有不有发布文章的功能的地方,比如存在一个子域名forum.abc.com可以发布文章,那么把poc发布到这个域名下诱导其他人访问也是可以的
如果是GET型CSRF,思路和第二条也差不多,只是要简单很多,找个能从网站内访问POC的点即可,比如网站头像处设置成CSRF的POC
找一个任意URL跳转的漏洞来结合
结合XSS