如果攻击者操控了 redirect_uri,会怎样?
读者在看这篇文章之前,请先了解 Oauth2.0 的 Authorization Code 授权流程,可以看 Authorization Code 授权原理和实现方法
在 Token Enpoint 中,按照 Oauth2.0 的标准,需要传递一个 redirect_uri 参数。然而,代码却只对这个参数做检查,没有其他处理逻辑,这背后的原因是什么呢?这里,涉及到一种针对 redirect_uri 的攻击方法。
我们还是用 A 来代表合作方,用 B 来代表鉴权方。我们知道,在合作开始之前,A 需要向 B 注册 redirect_uri 。假如 A 注册的是 a.com/*,也就是说,a.com 域名下的所有 path 都可以作为合法的 redirect_uri。而实际使用的时候,A 传递的是 a.com/recieve_code 这个 path。
但是,攻击者通过某种方式,控制了 a.com 域名下的一个 path,比如 a.com/attacker,此时会发生什么呢?
攻击者可以做以下事情:
1,攻击者访问 a.com,登录,然后通过点击,触发授权流程
2,此时 A 会打开授权页面,攻击者通过浏览器的地址栏,获取到了整个 url
3,攻击者将 url 中的 redirect_uri 替换成 a.com/attacker,构建出一个新的 url
4,攻击者通过某种方式,诱骗真正的用户点击新的 url
5,用户打开授权页面,看到的都是正常的信息(B 即将授权给 A,以便 A 访问你在 B 的资源),因此点击授权
6,code 被发送到 a.com/attacker,攻击者拿到 code
7,攻击者手动通过浏览器访问 a.com/recieve_code?code=xxxx ,此时 A 会去兑换 access token,然后将这个 access token 跟攻击者的账号绑定在一起(A 可能把 access token 存在 session 里,也可能放在 db 里,不管怎么样,肯定是和当前登录的账号关联起来的)
8,到这里,攻击者就可以访问真正的用户在 B 的资源
下面用图来解释。
首先,在授权之前,用户在 a.com 和 b.com 都是有账号的:
正常的授权流程完成后,应该是这个样子:
但是,经过攻击者这一波操作后,变成了这个样子:
那么,怎么防御这种攻击呢?
方法就是,B 在生成 code 的时候,记录下来,这个 code 是发送给 a.com/attacker 的:
code -> a.com/attacker
然后,当 A 用 code 来兑换 access token 的时候,告诉 B,我这个 code,是从 a.com/recieve_code 收到的:
code <- a.com/recieve_code
B 一比较,就发现这个 code 被人为搬动过,于是拒绝兑换,就可以了。
以上,就是 redirect_uri 这个参数背后的考量。有问题可以直接评论。
如果攻击者操控了 redirect_uri,会怎样?的更多相关文章
- the security of smart contract- 1
https://blog.zeppelin.solutions/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05 这个 ...
- Sandworm Attack小结
这个漏洞刚出来时就分析过,当时大致弄明白了原理,但对很多细节和原理还是一知半解.后来开始找工作……今天终于有时间来把欠的这部分功课补上. 这个漏洞网上的各种中英文分析已经很多了,因此这里我只根据自己的 ...
- WebApp 安全风险与防护课堂(第二讲)开课了!
本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在昨天的公开课中,由于参与的小伙伴们积极性和热情非常高,我们的讲师Carl ...
- 通过BGP实现流量劫持
BGP BGP全称是Border Gateway Protocol,翻译成中文是边界网关协议,用于全球各个AS之间的路由.它的地位是毋庸置疑的,如果没有它就没有全球的因特网.因为全球各个AS都等价的维 ...
- 【漏洞学习】HOST 头攻击漏洞
日期:2018-03-06 14:32:51 作者:Bay0net 0x01. 前言 在一般情况下,几个网站可能会放在同一个服务器上,或者几个 web 系统共享一个服务器,host 头来指定应该由哪个 ...
- [转]Ethereum-智能合约最佳实践
主要章节如下: Solidity安全贴士 已知的攻击手段 竞态 可重入 交易顺序依赖 针对Gas的攻击 上溢/下溢 工程技术 参考文献 这篇文档旨在为Solidity开发人员提供一些智能合约的secu ...
- Android App加固原理与技术历程
App为什么会被破解入侵 随着黑客技术的普及化平民化,App,这个承载我们移动数字工作和生活的重要工具,不仅是黑客眼中的肥肉,也获得更多网友的关注.百度一下"App破解"就有529 ...
- ASP.NET Aries 入门开发教程3:开发一个列表页面及操控查询区
前言: Aries框架毕竟是开发框架,所以重点还是要写代码的,这样开发人员才不会失业,哈. 步骤1:新建html 建一个Html,主要有三步: 1:引入Aries.Loader.js 2:弄一个tab ...
- 【微信开发】公众号后台设置错误导致的微信redirect_uri参数错误【图】
在微信开发中,如微信网页授权登录,分享到朋友圈自定义内容,微信h5支付时 可能会遇到微信redirect_uri参数错误的情况. 此时除了检查自己代码正确性外,还要检查一下是否正确地设置了公众号后台的 ...
随机推荐
- SPOJ 2713 线段树(sqrt)
题意: 给你n个数(n <= 100000),然后两种操作,0 x y :把x-y的数全都sqrt ,1 x y:输出 x-y的和. 思路: 直接线段树更新就行了,对于当 ...
- Tomcat漏洞集合
目录 Tomcat的几大高危漏洞 Tomcat安全措施 Tomcat的几大高危漏洞 1.Tomcat后台弱口令上传war包(Tomcat管理弱口令页面Getshell) 2.Tomcat的PUT的上传 ...
- ppt技巧--字体变化
常见字体搭配 Nordri Tools
- mysql 的查询操作语句---自动生成各种不同的序号
1.通过查询语句添加自动生成序号 SELECT m.id,(@a :=@a + 1) AS a FROM 表名 m, (SELECT @a := 0) t1 2.MySQL字符串前后补0 前补0(LP ...
- Spring Cloud Alibaba(8)---Feign服务调用
Feign服务调用 有关Spring Cloud Alibaba之前写过五篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring Clo ...
- 没有发生GC也进入了安全点?这段关于安全点的JVM源码有点意思!
文末 JVM 思维导图,有需要的可以自取 熟知并发编程的你认为下面这段代码的执行结果是怎么样的? 我如果说,执行流程是: t1 线程和 t2 线程一直执行 num 的累加操作 主线程睡眠 1 秒,1 ...
- Java_接口
接口 接口中的方法全都是抽象方法,用来指定一些规则,让子类去重写.接口的作用主要体现在一下两点 1.指定规则2.利用这些规则给类做功能扩展 接口的定义和使用 接口使用interface关键字来定义,使 ...
- readdir_r()读取目录内容
readdir()在多线程操作中不安全,Linux提供了readdir_r()实现多线程读取目录内容操作. #include <stdio.h> #include <stdlib.h ...
- Scrum Meeting 4
Basic Info where:共享空间 when:2021/4/29 target: 简要汇报一下已完成任务,下一步计划与遇到的问题 Progress Team Member Position A ...
- Java7中Switch为什么只支持byte、short、char、int、String
Java 7中,switch的参数可以是String类型了,这对我们来说是一个很方便的改进.到目前为止switch支持这样几种数据类型:byte short int char String .但是,作 ...