影响版本
仅限于7.7.14
版本
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-server</artifactId>
<version>7.7.14</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-shared</artifactId>
<version>7.7.14</version>
</dependency>
</dependencies>
流程分析
sink点
这里选择逆向进行分析,通常使用静态扫描工具被标注的也就是sink点的位置,判断可控点和我们的sink点是否形成一条完整的通路,若存在有完整的通路,则表明存在漏洞
在vaadin
相关依赖已知的sink点在NestedMethodProperty#getValue
方法中,其中存在有m.invoke(object)
反射调用函数
其中该反射调用中的object
来自属性instance
全局搜索该属性的写入位置,其在NestedMethodProperty
类的构造函数和setInstance
均能对其进行写入,说明其可控
而在反射调用方法时,是遍历getMethods
的每一个方法进行调用,通过查找该属性的写入,发现其在initialize
方法中存在写入
initialize方法
如果你还记得的话,在NestedMethodProperty
的构造方法对instance
进行赋值后,同样会调用initialize
方法进行初始化
下面简单分析一下该方法的流程
-
initialize
方法接受两个参数,分别为beanClass
和propertyName
这里传入的属性名参数允许有多个属性,不同的属性名之间通过.
进行连接,在initialize方法对其进行处理时,首先处理propertyName
,将其通过.
分割成一个字符串数组simplePropertyNames
,代表一个一个的“属性名” -
紧接着,将会遍历这个字符串数组
simplePropertyNames
,并将获取的beanClass和propertyName复制到lastSimplePropertyName
和lastClass
中 -
之后使用上面提取的两个参数,通过调用
MethodProperty.initGetterMethod
方法获取对应属性的getter
方法
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)