【重磅!】你可能不知道的挖洞小技巧系列之OAuth 2.0

最近被一个同学问起OAuth2.0,才发现有不少人对OAuth2.0一知半解,没有去真正了解过,更不用提如何从OAuth2.0授权认证中去挖掘漏洞了。老洞新谈,OAuth2.0协议本身是没有问题的,而关于OAuth2.0的漏洞大多是一些配置不当所造成的,严重时甚至可以达到无交互登录任意授权账户。所以此文重点在于讲解OAuth 2.0是什么、运行原理流程(即OAuth 2.0的授权模式)以及测试漏洞点的思路。
定义-是什么
简单来说,OAuth简单说就是一种授权的协议,只要授权方和被授权方遵守这个协议去写代码提供服务,那双方就是实现了OAuth模式。OAuth2.0 使用已久,相信大家即使不清楚OAuth2.0是什么,但在渗透测试或者挖洞的过程中,也经常接触到,比如我们在WEB端总会碰到这样的支持第三方授权登录的登录界面。
或者在移动端同样支持第三方授权登录的APP。
这些应用都是通过用户授权后再去调用第三方登录,由第三方认证服务器返回认证数据,OAuth2.0就是客户端(知乎、饿了么等平台)和认证服务器(QQ/微信/支付宝/微博等)之间由于相互不信任而产生的一个授权协议。
原理-运行流程
在明确了OAuth2.0后,我们来看OAuth2.0客户端定义了用户授权的几种方式:授权码模式、简化模式、密码模式、客户端模式。
1.授权码模式授权码模式是功能最完整、流程最严密的授权模式,也是最安全以及目前使用最广泛的一种模式。以知乎采用第三方微信登录为例。
认证流程:
(A)用户访问客户端,后者将前者导向认证服务器。
(B)用户选择是否给予客户端授权。
(C)假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。
(D)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌和更新令牌。
认证流程:
(A)客户端将用户导向认证服务器。
(B)用户决定是否给予客户端授权。
(C)假设用户给予授权,认证服务器将用户导向客户端指定的"重定向URI",并在URI的Hash部分包含了访问令牌。
(D)浏览器向资源服务器发出请求,其中不包括上一步收到的Hash值。
(E)资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌。
(F)浏览器执行上一步获得的脚本,提取出令牌。
(G)浏览器将令牌发给客户端。
3.密码模式认证流程:
(A)用户向客户端提供用户名和密码。
(B)客户端将用户名和密码发给认证服务器,向后者请求令牌。
(C)认证服务器确认无误后,向客户端提供访问令牌。
4.客户端模式认证流程:
(A)客户端向认证服务器进行身份认证,并要求一个访问令牌。
(B)认证服务器确认无误后,向客户端提供访问令牌。