漏洞原理
Spring Security OAuth2處理認證請求的時候如果使用了whitelabel視圖,response_type參數值會被當做Spring SpEL來執行,惡意攻擊者通過構造response_type值可以觸發遠程代碼執行漏洞
復現環境
在ubuntu 16.04虛擬機中用vulhub靶場提供的docker容器來復現
jdk版本1.7
python版本3.5
影響版本
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
復現過程
1. 進入vulhub目錄:spring/CVE-2016-4977,啟動docker容器
2. 對反彈shell的POC進行base64編碼(java反彈shell都需要先編碼,不然不會成功,原因貌似是runtime不支持管道符)
3. 用vulhub提供的poc.py生成反彈shell的POC:
4. 監聽反彈端口,並訪問下面的url:
http://your-ip:8080/oauth/authorize?response_type=上面的那一長串POC&client_id=acme&scope=openid&redirect_uri=http://test
反彈成功,從返回頁面來看,這里實際上是利用拋出的錯誤消息來執行惡意代碼的,漏洞代碼的位置應該在內部錯誤處理的代碼中。
本文僅用於技術學習和交流,嚴禁用於非法用途,否則產生的一切后果自行承擔。