一、前言
Springblade框架(又称为BladeX)是基于spring微服务二次开发的框架,主要应用于java后端的开发中。之前在公众号文章中分析过框架相关漏洞,这里就总结渗透测试遇到该框架的利用方法。
二、资产收集
如何查询使用该框架的网站呢?
bladex会使用自带的/blade-auth/oauth/token接口进行登录,因此可以根据接口这类关键字搜索资产
或者根据下面bladex未授权请求返回的信息:缺失令牌,鉴权失败 来查询
此外还能通过关键字Failed to handle request来查询可能开放在公网上面的blade-gateway服务
三、不同模块的利用方法
下面我根据Springblade的不同模块,分别分析利用的方法
框架主要是由GatewayApplication分发请求到不同模块上,因此渗透测试时直接访问前端页面抓包即可,因为前端是直接和GatewayApplication对接的
Blade-gateway
对应GateWayApplication模块
直接在网页中请求端口会显示如下语句:
Failed to handle request
GateWayApplication基本就是基于spring-cloud-gateway开发的,因此也就继承了Spring Cloud Gateway的RCE漏洞
攻击者可以通过创建路由,造成命令执行
这里post请求
/actuator/gateway/routes/hacktest1
返回包显示201 created则创建路由成功
创建恶意路由如下
请求刷新路由
/actuator/gateway/refesh
之后成功执行命令,在返回包中显示whoami执行结果
这个漏洞出现在bladex的3.1.0版本之前,往后的版本就被修复了
对应AuthApplication模块
此处涉及到JWT Token验证身份漏洞,默认的jwt加密密文默认写死,值如下:
bladexisapowerfulmicroservicearchitectureupgradedandoptimizedfromacommercialproject
对应的是jwt加密时的密钥
这里在payload中写入身份验证参数,填入user_id、name参数(参数只要有值就行),role_name指定为administrator即可,左边就生成了伪造的jwt token
添加如下验证请求头
Blade-auth
: bearer 伪造的jwt token
访问下面接口查询所有用户信息
/blade-user/user-
list
接口有对请求用户身份的验证
判断当前role_name是否为administrator,由于之前伪造jwt时候添加了administrator身份字段,此处可以直接绕过
请求获取所有用户的信息,包含用户名、手机、密码等
该接口请求的是blade_user表
Blade-log
对应LogApplication模块
此处查询出所有登录成功、失败的日志
对应查询的blade_log_api表
请求该接口,响应中的params参数中会记录接口请求的参数,因此可以直接拿到登录接口中使用
请求登录接口传参登录成功
对应ResourceApplication模块
结合JWT token伪造来请求获取oss配置信息,一般是minio
查询分页接口,获取blade_oss表中的oss配置信息
请求获取数据如下:
根据accessKey和secretKey登录minio等OSS,可以进一步获取敏感信息和权限等
对应DevelopApplication模块
此处接口查询数据库中保存的数据库信息
对应查询的表为blade_datasource
泄露数据库账号密码
在Mapper中导出用户信息excel表格时,想要根据当前页面筛选条件来导出结果,就会传参当前的SQL条件
代码中使用了如下语句接收用户的SQL
${ew.customSqlSegment}
对应接口如下
/blade-user/
export
-user
在Blade-auth伪造身份的前提下可以拼接报错查询,获取数据库字段名称
原文始发于微信公众号(HackingWiki漏洞感知):Springblade框架(又名Bladex)渗透测试漏洞利用总结
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论