CVE springrce远程代码执行漏洞的IDEA复现

spring生态体系:

管理容器里面的对象,并且提供了面相切面编程、与各种组件集成的的特性、极大的简化了开发

受影响范围:

Spring Framework < 5.3.18

Spring Framework < 5.2.20

JDK ≥ 9

不受影响版本:

Spring Framework = 5.3.18

Spring Framework = 5.2.20

JDK < 9

*与Tomcat版本有关

spring动态参数绑定

可以减少我们各种各样的get,post,set、name的代码的写法,这种就叫参数自动绑定,给我们的编码带来便利

工程启动,我们是8083,我们映射的地址是/addUser,?后面就是我们的参数值,因为我们定义一个name的属性,那么我们就会自动找到user对象name的属性,并且赋值给它,为了验证

我们打开浏览器打开:http://localhost:8083/addUser?name=666

a71faa7d73494390b75d62d077f9c65f.png

返回:8f87cd9844eb40d88487255e82675bbb.png

通过访问,我们可以看到我们URL里面的值就会自动赋值到对象,取到打印

还支持子属性的赋值,因为有一个department的属性,通过.name,找到department的name的值,把sec的值赋值给它。

多级赋值,调用country函数:5dc1eb75b6ca4fefa40d154894e2496c.png

我们访问:http://localhost:8083/addAddr?name=cn&province.city.district.name=pudong

返回:

e5539fd400014f6d8815b425c45b0fb2.png

我们的参数自动绑定:

User.getDepartment() —Department.setName()

先调用了这个getDepartment()方法,拿到Department对象的setName()的方法,才把sec的值赋值

多级参数也是一样:

Contry.getProvince()

Province.getCity()

City.getDistrict()

District.setDistrictName()

Java Bean PropertyDescriptor

Java Bean PropertyDescriptor

作用:自动调用类对象的getXXX/setXXX方法,进

行取值和赋值

例如:ad5c4fa76114465b87bc811c12b4b817.png

结果:

925e5801408443b3838aaece51f83717.png

BeanWrapperImpl:

作用:对Spring容器中管理的对象,自动调用

get/set方法,进行取值和赋值

072b5047544d4be3817937809885cc23.png

漏洞复现:

  首先我们选择JDK11.0.11 , Tomcat 9.0.60 ,SpringBoot:2.6.3

我们开启Tomcat,因为端口是7299,我们直接用脚本跑一下

d8626c9900d640219f86ef3f7ff11055.png

返回结果:2dbbee3066654fab9d2cbee395355b91.png

得出一个利用方式(最后一个),我们将粘贴到浏览器里面,然后改一下得到计算器:

b6e5506265754216bfdb0fb7328888ab.png

利用成功。

 

漏洞排查:

1、是否启用Spring 参数绑定功能

2、JDK版本 9+

3、Tomcat部署方式及版本

4、Tomcat Access功能

5、流量分析

6、日志分析

漏洞修复:

1、升级Spring

2、升级Tomcat

3、安装安全产品,比如WAF

 

 

 

 

 

 

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值