安全矩阵

 找回密码
 立即注册
搜索
查看: 1056|回复: 0

记录一次JWT的越权渗透测试

[复制链接]

77

主题

77

帖子

257

积分

中级会员

Rank: 3Rank: 3

积分
257
发表于 2022-9-3 23:16:00 | 显示全部楼层 |阅读模式
[color=rgba(0, 0, 0, 0.65)][color=rgb(153, 153, 153) !important][color=rgba(0, 0, 0, 0.45)]


简单介绍:
在一次某行动暂停之后,某单位重新对自身的业务进行了评估,系统业务使用SSO进行登录,而这个SSO登录后的子系统访问采用JWT进行认证,因此有了这一个漏洞的发生,漏洞利用较为简单,各位师傅请见谅。


Oracle WebCenter
 在这个业务中,登陆口的校验是采用Oracle WebCenter进行认证的,也就是说在系统最初的登录,流量是走到Oracle WebCenter中进行认证的。
  Oracle WebCenter是面向社交业务的用户参与平台。其上下文相关的协作工具可优化人员、信息和管理软件间连接,帮助员工更高效地协作,并可确保用户在其所处的业务流程环境下访问适当的信息。简单的来说它有点像一个简单的OA系统。


JWT
 JTW全程是Json Web Token,是目前最流行的跨域认证解决方案。之前遇到的JWT漏洞情况,可能大多数都是在一开始的登录验证下,通过修改token字段以三个点分割的BASE64字符串。
第一个字符串为JWT头,一般base64解码后长这样
{kid:keys/3c3c2ea1c3f213f649dc9389dd71b851",”typ”:”JWT”,”alg”:”RS256"}
第二个字符串为账户
{"sub":"admin"}
第三个字符串为签名
签名一般不能直接用base64解出来,因为它可能常带有下划线,签名获取的过程稍微比较复杂,不过我们可以知道签名是为了防止数据被篡改,而签名使用的算法就是我们的哥字符串JWT头的Json字段alg。

大部分JWT常用的三种关于利用Token的攻击方式:未校验签名,禁用hash,爆破弱秘钥
此部分内容可以参考https://xz.aliyun.com/t/2338
其中,未校验签名的情况,我们可以直接修改的那个账户字符串,既
{"sub":"xxxx11111这里修改,然后重新生成Token,如果没有校验签名则可以进行越权"}
禁用Hash,既第一个JWTheader头的alg值为None,我们可以将HS256篡改为None,然后使用Python pyjwt进行Token的生成。
最后爆破弱秘钥是最常见的,也是比较现实的一种情况
利用脚本来进行爆破 https://github.com/ticarpi/jwt_tool
本次的场景
首先打开网页,需要通过SSO的oracle webcenter认证,在进入系统中,存在许多业务,而对于子业务系统的认证,则采用的是JWT的认证。接下来将从流程来讲解此次漏洞的挖掘。
1、因为这里没有截图了,所以只能用文字描述。首先,在进入系统后,很多业务选项按钮,比如物流系统,金融系统。我们点击金融系统的时候,会发出第一个包,通过Oracle Webcenter来校验当前账户是不是有效,如果有效,则返回一个Json格式的S。
2、在验证了当前的账户有效的时候,会发出第二个包,请求一个OAM接口想获取一个JWT token,这个OAM接口会带上Cookie字段的Sessionid值,证明自己账户现在的状态真的是有效的,当这个OAM接口后接受SessionId的值后,就会返回一个JWT authorizationToken值。
3、当获取了JWT authorizationToken值后,证明JWT认可了你这个账户了,那么此时系统在第三个包发生的时候自动带上JWT authorizationToken字段放到header头去请求资源,此时系统返回UID等敏感信息
4、没错!越权来了。第三个包返回的信息其中的UID和JWT authorizationToken作为凭证来对这个子业务系统进行访问。但是这里的UID和JWT authorizationToken并没有做严格校验,导致可以通过遍历UID来实现越权访问
看到这个是不是就是我们非常熟悉的JWT认证Token值,以点分割三个成三个的base64编码字符串,这个User Token作为这个子系统访问认证的最后一关
5、其实到第4步的时候,漏洞利用就结束了,其实就是一个简单的越权而已,但是我想把后面的几个过程也简单一下。既然成功越权了,那么这一步系统就开始逐渐返回属于这个系统原本的东西了。这里利用UID和Token获取系统的分组权限信息。
6、获取此账户在这个系统中未读取得信息
7、在get请求处获取了UID值,为了获取菜单信息。而我们也可以通过此处的越权,更方便的爆破ID。
8、获取baseinfo,账户的基本信息,内容
9、最后一个包,获取剩余信息,例如按钮,选项之类。
因此整个利用的漏洞非常简单,通过第7步的API来进行爆破,然后再逐步放入第4步的UID修改包中,那么就可以实现对此子业务系统的任意用户登录了。
越权前后的两个截图比较,多了两个功能,并且两张图的账户名都为AAA,原因是因为auth Token记录的第二个base64字符串记录的就是账号信息,而这个账号信息从始至终都未改变,因此账户名不变,而权限管控在UID部分。也是比较不应该了。


作者:Icepaper


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-29 01:19 , Processed in 0.014235 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表