Spring Rce 漏洞分析CVE-2022-22965

这篇具有很好参考价值的文章主要介绍了Spring Rce 漏洞分析CVE-2022-22965。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0x01 漏洞介绍

Spring Framework 是一个开源的轻量级J2EE应用程序开发框架。

3月31日,VMware发布安全公告,修复了Spring Framework中的远程代码执行漏洞(CVE-2022-22965)。在 JDK 9 及以上版本环境下,可以利用此漏洞在未授权的情况下在目标系统上写入恶意程序从而远程执行任意代码。

0x02 影响范围

影响组件:org.springframework:spring-beans

影响版本:< 5.3.18 和 < 5.2.20.RELEASE 的Spring框架均存在该漏洞

JDK版本:JDK>=9

部署方式:war包部署在TOMCAT中

0x03 漏洞原理

​ 漏洞爆发之后,在学习大佬的分析之后发现,这个Spring最新0day漏洞其实不是全新的那种新洞,而是CVE-2010-1622这个漏洞的一种绕过情况。

​ 这个CVE-2010-1622漏洞的原因是Spring参数绑定时,可以注入一个Java pojo对象,这个对象可以是恶意的去注册一些敏感tomcat的属性,最后通过修改Tomcat的配置来执行危险操作。

​ 所以最新的CVE-2022-22965漏洞就是绕过了这个限制,可以说是Java 9的环境下坑了Spring一把,JDK9中存在可以绕过黑名单禁用的类,导致了这个漏洞,最后利用方式也就和之前一样了。

​ 下面部分细讲这个问题。

0x04 Spring参数绑定

首先就是先理一下Spring中的参数绑定

简单来说,springmvc中可以自动的去给参数赋值。

例如我们常见的穿参数的方式就是下面这种

http://localhost:8080/spring4shell_war/?name=zzz&age=123

Spring Rce 漏洞分析CVE-2022-22965

参数绑定的实现方式

@Controller
public class HelloController {

    @GetMapping("/")
    public String index(Person person)
    {
        Person person1 = new Person();
        person1.setName(person.getName());
        person1.setAge(person.getAge());
        return "hello";
    }
}

这种方式就是直接传参数是一个Person对象,而不是以前的@RequestParam这种获取方式

public String HelloController( @RequestParam(required=false) String name, @RequestParam ( "age" ) int age) {

这种参数绑定的实现方式方法就是如果用户传入name=zzz,则Spring框架会自动调用person.setName(‘zzz’)进行赋值。 如果提交的参数中出现了Person类的一个public字段或方法,就自动用户提交请求给他赋值。

Spring Rce 漏洞分析CVE-2022-22965

0x05 调试过程

1)用户请求经过tomcat处理后,调用Spring总入口DispatcherServlet.java的doDispath方法来路由处理http请求:

org.springframework.web.servlet.DispatcherServlet#doDispatch

Spring Rce 漏洞分析CVE-2022-22965

方法具体实现数据绑定

org.springframework.beans.AbstractPropertyAccessor#setPropertyValues(org.springframework.beans.PropertyValues, boolean, boolean)

Spring Rce 漏洞分析CVE-2022-22965

nestedPa = getPropertyAccessorForPropertyPath(propertyName);那么看一下里面是什么

Spring Rce 漏洞分析CVE-2022-22965

调用递归函数getPropertyAccessorForPropertyPath获取参数值,循环查看参数中是否包含"[" “]‘’ ‘’.”

若存在则按分割赋值给nestedProperty,我这个是没有的所以返回-1了。

Spring Rce 漏洞分析CVE-2022-22965

然后换一个payload会怎么样class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=

这个时候pos就是5了,取出来第一个。后面class

Spring Rce 漏洞分析CVE-2022-22965

BeanWrapperImpl#getCachedIntrospectionResults().getPropertyDescriptor(propertyName)

这里就是最开始我看到文章中分析的,会在缓存cache里去找我们输入的参数propertyName

Spring Rce 漏洞分析CVE-2022-22965

最终在org.springframework.beans.CachedIntrospectionResults#getPropertyDescriptor

这里就可以看到都可以获取到什么了。 Spring Rce 漏洞分析CVE-2022-22965

补丁的绕过的问题

红色是原来的补丁,绿色是现在的修复

Spring Rce 漏洞分析CVE-2022-22965

所以原来是黑名单的判断逻辑,beanClass非Class或者属性name非(classLoader|protectionDomain),

JDK8中没有只能用去class.classLoader调用

但是最新的CVE-2022-22965 用的class.module.classLoader,这样就就是绕过了这个限制。

原因是在Java 9以后,Class对象中多了一个Module类的属性,而Module类中也存在getClassLoader()方法,可以获取到一个class.module.classLoader

这次修补的理解就是:如果其中的属性是ClassLoaderProtectionDomain,就直接continue跳过。

利用

这个漏洞的本质利用Java 9中的模块里一些内部对象的属性注入

我们现在已知道的PAYLOAD就是更改Tomcat将一些全局配置

就是修改保存在classLoader.resources.context这个context中日志的格式与文件名

就是下面的这些

class.module.classLoader.resources.context.parent.pipeline.first.pattern=xxx& 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=

最后写在webapps/ROOT这个目录的一个webshell

0x06 坑点

还有就是在调试的时候,如果是在idea里面调试部署tomcat,最终测试会找不到webshell。

这是因为idea是映射,并不在这个目录,所以你访问原版的tomcat里面并没有,其实是在idea的一个目录下。

Spring Rce 漏洞分析CVE-2022-22965
Spring Rce 漏洞分析CVE-2022-22965

还有就是每次写完shell会有缓存,如果发现没重复打payload没写成,就重启一下tomcat服务就好了。

0x06 参考链接

https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement

SpringMVC框架任意代码执行漏洞(CVE-2010-1622)分析 - Ruilin (rui0.cn)文章来源地址https://www.toymoban.com/news/detail-448644.html

到了这里,关于Spring Rce 漏洞分析CVE-2022-22965的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络靶场实战-RouterOS漏洞分析(CVE-2022-45315)

    本环境是蛇矛实验室基于\\\"火天网演攻防演训靶场\\\"进行搭建,通过火天网演中的环境构建模块,可以灵活的对目标网络进行设计和配置,并且可以快速进行场景搭建和复现验证工作。火天网演中,内置大量固件设备,包含大型网络设备及物联网设备,可以灵活选取进行测试验

    2024年02月11日
    浏览(33)
  • Django SQL注入漏洞分析(CVE-2022-28346)

    Django 在2022年发布的安全更新,修复了在 QuerySet 的 annotate(), aggregate(), extra() 等函数中存在的 SQL 注入漏洞。 2.2= Django Django 2.2.28 3.2= Django Django 3.2.13 4.0= Django Django 4.0.4 需要使用了 annotate 或者 aggregate 或 extra 方法 利用 pycharm 创建一个 python 项目 ​ 创建完成项目后在 Setti

    2024年02月03日
    浏览(38)
  • [JAVA安全]CVE-2022-33980命令执行漏洞分析

    在 i春秋的漏洞靶标上看见了此漏洞,所以前来分析一下漏洞原理,比较也是去年 7月的漏洞。 漏洞描述:Apache官方发布安全公告,修复了一个存在于Apache Commons Configuration 组件的远程代码执行漏洞,漏洞编号:CVE-2022-33980,漏洞威胁等级:高危。恶意攻击者通过该漏洞,可在

    2024年02月15日
    浏览(29)
  • Docker Dirtypipe(CVE-2022-0847)漏洞复现与分析容器逃逸

    同脏牛,通过写只读内存,对映射的内存做篡改 GitHub - greenhandatsjtu/CVE-2022-0847-Container-Escape: CVE-2022-0847 used to achieve container escape 利用CVE-2022-0847 (Dirty Pipe) 实现容器逃逸 云原生之容器安全实践-安全客 - 安全资讯平台 (anquanke.com) 从脏管道(CVE-2022-0847)到docker逃逸 - 先知社区 (aliy

    2024年02月13日
    浏览(35)
  • CVE漏洞复现-CVE-2022-22947-Spring Cloud Gateway RCE

    微服务架构与Spring Cloud 最开始时,我们开发java项目时,所有的代码都在一个工程里,我们把它称为单体架构。当我们的项目的代码量越来越大时,开发的成员越来越多时,这时我们项目的性能以及我们开发的效率都会存在非常大的问题,所以对于这样的项目,我们需要把它

    2023年04月14日
    浏览(38)
  • CVE-2022-30190分析以及复现和POC利用 //Microsoft Office MSDT 远程代码执行漏洞

    在微软官方的介绍里,是从 Word 等调用应用程序使用 URL 协议调用 MSDT 时存在远程执行代码漏洞。成功利用此漏洞的攻击者可以使用调用应用程序的权限运行任意代码。 意思是恶意 Word 文档可以使用远程模板功能从远程服务器获取 HTML 文件,并且 HTML 代码可以使用 Microsoft 的

    2024年02月04日
    浏览(48)
  • RCE 远程代码执行漏洞分析

    Remote Command/Code Execute 远程命令执行/远程代码执行漏洞 这种漏洞通常出现在应用程序或操作系统中,攻击者可以通过利用漏洞注入恶意代码,并在受攻击的系统上执行任意命令。 PHP 代码执行 PHP 代码注入 OS 命令执行 OS 命令注入 Java、Python…… Web 应用程序 远程服务 操作系统

    2024年02月08日
    浏览(27)
  • CVE -2022-26134漏洞复现(Confluence OGNL 注入rce漏洞)

    0x01 Atlassian Confluence Atlassian Confluence是一个专业的企业知识管理与协同软件,主要用于公司内员工创建知识库并建立知识管理流程,也可以用于构建企业wiki。其使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。因此

    2024年02月16日
    浏览(31)
  • Fortinet FortiNAC RCE漏洞复现(CVE-2022-39952)

          FortiNAC(Network Access Control) 是Fortinet的一种零信任网络访问控制解决方案,可增强用户对企业网络上的物联网 (IoT) 设备的监控。NAC 是零信任网络访问安全模型的重要组成部分,在该模型中,IT 团队可以轻松了解正在访问网络的人员和设备,以及如何保护网络内外的公司资

    2024年02月06日
    浏览(30)
  • ThinkPHP5.0.0~5.0.23RCE 漏洞分析及挖掘思路

    前言 本节我将分析thinkphp5.0.x 版本的RCE漏洞,根据漏洞的研究模拟挖掘此漏洞的思路 本次分析框架下载,由于官方已经下架了相关的下载接口,这里我们用三方下载 一份v5.0.22版本的 升级中... https://www.codejie.net/5828.html 附赠 thinkphp5.0官方开发手册 架构总览 · ThinkPHP5.0完全开

    2024年01月18日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包