springblade框架(又称为BladeX)是基于spring微服务二次开发的框架,广泛应用于java后端的开发中,比如哈尔滨新中新公司的慧新e校系统就是基于springblade开发的。
1.JWT身份伪造解析
springblade有个jwt加密signkey默认值的漏洞,就是项目如果不指定signkey值,就会使用代码中默认值来加解密jwt。下面根据代码来分析下:
springblade的Gateway服务用于接受和分发请求
当请求到达gateway,会进入AuthFilter方法中
此处headerToken为读取请求头中的jwt值
跟踪进入AUTH_KEY
再跟踪进入HEADER
所以headerToken值为读取请求体中的Blade-Auth请求头
此处headerToken非空,paramToken为空,因此不满足“缺失令牌,鉴权失败”的条件
追踪到getToken方法
此处需要满足auth长度大于7,headstr为截取前6位字符串,即bearer,判断前6位满足bearer,则截取剩下的字符串作为token值
再追踪parseJWT方法
跟踪进入方法,此处parseJWT解析token值
设置signkey值为getBase64Security()方法返回值的base64解码
如下图追踪到getSignKey()方法,可以发现此处使用了默认的signkey值
bladexisapowerfulmicroservicearchitectureupgradedandoptimizedfromacommercialproject
所以此处是为了验证JWT的完整性和真实性,需要使用签名密钥对签名部分进行验证,如果签名密钥signKey不一致,则claims为空,返回请求未授权(JWT身份伪造漏洞就出在这一步,JWT的密钥为默认的值,可以让攻击者伪造身份)
2.export-user接口SQL注入解析
这个SQL注入本质上是个后台注入漏洞
因为外部输入未经过滤直接拼接到SQL语句中,危险传参了如下SQL语句:
${ew.customSqlSegment}
允许用户自定义sql语句拼接到查询语句中
查看漏洞所在的blade-user模块,可以发现export-user接口中就带了这个危险语句
之后就造成任意登录用户使用该接口都能造成SQL注入
如下图所示
END
关注HackingWiki漏洞感知
了解更多安全相关内容
原文始发于微信公众号(HackingWiki漏洞感知):Springblade JWT身份伪造漏洞与SQL注入解析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论