【web安全】csrf复习

目录

一、csrf漏洞原理

二、csrf必要的两个步骤

三、DVWA靶场

1、security=low

2、security=medium

1)更改referer测试

2)实际攻击中绕过referer

3、security=high

1)先来看看这个token值

2)获取这个token

四、csrf防御


一、csrf漏洞原理

简单理解就是:攻击者盗用了你的身份,以你的名义去进行某种非法操作或者获取你的信息等等

CSRF(即跨站请求伪造)是指利用受害者尚未失效的身份认证信息、(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害人的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(转账,改密码等)

二、csrf必要的两个步骤

1、受害者登录新信任网站A,并在本地生成cookie

2、在未登出网站A的情况下,去访问恶意站点B                                                                                 (必须是同一个浏览器)         

 思考:感觉不一定要存在一个恶意网站B,因为例如在qq发送一个恶意链接(包含恶意参数的)发给受害者就可以,当然必须得不登出网站A且有cookie信息 ,感觉其实是参数可预测所以攻击成功,后面防御有一条token就是在做到参数不可预测原则               

三、DVWA靶场

1、security=low

构造一个恶意链接,改密码为

pass

http://192.168.10.129:8080/vulnerabilities/csrf/?password_new=pass&password_conf=pass&Change=Change#

通过在线短链接生成器生成,包装一下:短链接,短网址在线生成 - 站长工具 (chinaz.com)

http://c.nxw.so/a5238

然后去访问该网址

就成功l,我们可以去登出验证一下密码是pass

总结一下就是参数可预测,如果这个改密码加一个输入原密码,且够复杂,攻击者猜测不到原密码,那么就不会攻击成功了,所以是违背了参数可预测的原则和利用了受害者未失效身份信息

2、security=medium

1)更改referer测试

先改回password,此时再去使用上一个短链接就不可以了

猜测应该是referer,看看抓包信息

先看看正常网站的包

是有referer字段的

而我们短链接生成的包中没有这个字段,加一个(复制过去,再访问)

但是实际中怎么处理呢,我们不可能去,一个恶意链接咋改referer呢,嗯

2)实际攻击中绕过referer

我们查看源码

看看该函数嘛,如果查找不到就返回false

可以看到服务端检查referer字段的逻辑是:referer字段包含server_name字段(域名吧,我们这里用的是ip)吗?所以绕过就是只要包含就可以绕过,不管是域名包含还是文件包含都可以

我们这里用phpstudy建一个站点,里面包含恶意链接

打开这个“恶意站”,发现是乱码--->乱码一般就是因为编码和解码使用的编码方式不同

我们去改一下就可以

再刷新

访问

这样就绕过了referer字段

3、security=high

(先改回密码password)

同样先试试短链接看看结果,可以看到加入了token值

这个应该要结合其他漏洞例如xss

1)先来看看这个token值

先更改密码一次

然后在当前页面右键查看源代码,可以看到有一个token值框,是隐藏的(hidden)

对比这个值和刚刚请求的token不是一个值

我们再改一次

这时可以看到这个token就是和我们刚才查看源码的token值一模一样了,说明每个token是只用一次的,且每次服务端返回的token就是下一次请求的验证的token值

2)获取这个token

思路:dom xss high级别通过多参数传入一个script标签,src指向恶意站点下存在的js文件

,该文件就是通过异步请求(原生ajax或者jQuery都可以,jQuery需要引入源)

四、csrf防御

1、验证referer字段:验证请求是不是以域名开头的(不是包含,是开头,不然就像之前那个dvwa实验还是可以攻击成功),但是不是绝对的安全也不是全部适用,例如一些用户是不愿意让浏览器获取到自己的referer值,担心泄露敏感信息

2、token值:在 HTTP 请求中以参数的形式加入一个随机产生的 token,黑客无法伪造和预测;但是通过dvwa也可以看到黑客也可以用其他漏洞去获取;似乎验证码就获取不到了,例如手机银行涉及到一些转账时,就会让我们输入验证码而不是银行卡密码,应该就是为了保证安全,但是一直让用户去手动输入验证码,使得用户体验感不好吧,所以就采取hidden框的token值的方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值