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
返回:
通过访问,我们可以看到我们URL里面的值就会自动赋值到对象,取到打印
还支持子属性的赋值,因为有一个department的属性,通过.name,找到department的name的值,把sec的值赋值给它。
多级赋值,调用country函数:
我们访问:http://localhost:8083/addAddr?name=cn&province.city.district.name=pudong
返回:
我们的参数自动绑定:
User.getDepartment() —Department.setName()
先调用了这个getDepartment()方法,拿到Department对象的setName()的方法,才把sec的值赋值
多级参数也是一样:
Contry.getProvince()
Province.getCity()
City.getDistrict()
District.setDistrictName()
Java Bean PropertyDescriptor
Java Bean PropertyDescriptor
作用:自动调用类对象的getXXX/setXXX方法,进
行取值和赋值
例如:
结果:
BeanWrapperImpl:
作用:对Spring容器中管理的对象,自动调用
get/set方法,进行取值和赋值
漏洞复现:
首先我们选择JDK11.0.11 , Tomcat 9.0.60 ,SpringBoot:2.6.3
我们开启Tomcat,因为端口是7299,我们直接用脚本跑一下
返回结果:
得出一个利用方式(最后一个),我们将粘贴到浏览器里面,然后改一下得到计算器:
利用成功。
漏洞排查:
1、是否启用Spring 参数绑定功能
2、JDK版本 9+
3、Tomcat部署方式及版本
4、Tomcat Access功能
5、流量分析
6、日志分析
漏洞修复:
1、升级Spring
2、升级Tomcat
3、安装安全产品,比如WAF