2018CSAW-SSO

Posted by CoCo1er on 2019-09-03
Words 773 and Reading Time 2 Minutes
Viewed Times

SSO

writeup

题目描述:
Don’t you love undocumented APIs
Be the admin you were always meant to be

进入题目发现提示:

Welcome to our SINGLE SIGN ON PAGE WITH FULL OAUTH2.0!

考点在于oauth2.0

这里放上一篇博客详解OAuth 2.0 http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

通过查看源代码可以知道题目大概的意思:

  • 考点在于OAuth 2.0的 客户端”授权码”授权模式
  • 先在/oauth2/authorize处 用户给予授权,认证服务器将用户导向客户端事先指定的”重定向URI”(redirection URI),同时附上一个授权码。
  • 客户端接收到授权码,在/oauth2/token处 向认证服务器申请令牌
  • 认证服务器核对了授权码和重定向URI,确认无误后向用户发送令牌-token
  • 用户拿着令牌去访问/protected 下的flag

授权模式大致流程(来源网络)

获取Authorization Code,通常访问/authorize

请求的参数:

  • response_type:表示授权类型,必选项,此处的值固定为”code”
  • client_id:表示客户端的ID,必选项
  • redirect_uri:表示重定向URI,可选项
  • scope:表示申请的权限范围,可选项
  • state:表示客户端的当前状态,可以指定任意值,认证 服务器 会原封不动地返回这个值。

获取Access Token,通常访问/token

请求的参数:

  • grant_type:表示使用的授权模式,必选项,此处的值固定为”authorization_code”。
  • code:表示上一步获得的授权码,必选项。
  • redirect_uri:表示重定向URI,必选项,且必须与A步骤中的该参数值保持一致。
  • client_id:表示客户端ID,必选项。

访问限制资源,比如这里的/protected

根据流程我们来构造相应数据包:

首先拿到code,这里重定向到我们自己vps

jwt——json web token 我们解码可以看到关于code的信息

我们收到了重定向的包,拿到了code,接下来去申请令牌

post的参数有如下:

1
2
3
4
grant_type:表示使用的授权模式,必选项,此处的值固定为"authorization_code"。
code:表示上一步获得的授权码,必选项。
redirect_uri:表示重定向URI,必选项,且必须与A步骤中的该参数值保持一致。
client_id:表示客户端ID,必选项。

拿到令牌后需要以该token去访问限制目录

可以发现直接去访问会提示必须以admin去访问,我们在token中的解密得到的jwt的信息如下:(另外一个jwt在线加解密网站 https://jwt.io/)

可以猜测type这里需要我们修改成admin,同时secret为敏感信息,猜测这是需要hash验证的密码。

在这里进行hash验证后得到的jwt作为token值去访问/protected

得到flag。

总结

  1. 熟悉OAuth 2.0的流程
  2. vps监听重定向包
  3. post包的构造(新接触了postman…emmm还不是很会用)
  4. 之前一直回显错误

以为是token的type类型改admin导致的错误,其实是没有hash256去验证。hash的payload猜测来自token中的敏感信息。