1. 程式人生 > >Java審計之CMS中的那些反序列化漏洞

Java審計之CMS中的那些反序列化漏洞

# Java審計之CMS中的那些反序列化漏洞 ## 0x00 前言 過年這段時間比較無聊,找了一套原始碼審計了一下,發現幾個有意思的點拿出來給分享一下。 ## 0x01 XStream 反序列化漏洞 下載原始碼下來發現並不是原始碼,而是一個的資料夾,裡面都已經是編譯過的一個個class檔案。 在一個微信回撥的路由位置裡面找到通過搜尋類名` Serialize`關鍵字找到了一個工具類,並且引數是可控的。 ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200405751-50412603.png) ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200421288-1290369242.png) ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200429416-445944108.png) ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200445944-2011610925.png) 這裡呼叫xstream.fromXML(xml)進行反序列化。 而下面這個看了一下lib資料夾下面的元件其實是有著cc cb等元件,並且這個元件的反序列化漏洞是在版本範圍內。 ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200455083-2117147287.png) 找到路由位置,發現訪問頁面的時候顯示API 什麼的錯誤。POC打過去沒有任何響應。這個點弄了比較久沒弄出來,暫且留著。 ## 0x02 Shiro反序列化漏洞 上次的點沒弄出來後,開始轉換思路。再次從web.xml入手 ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200511727-904483895.png) 發現這裡載入了一下配置檔案,從中還發現了shiro的配置檔案,前面還真沒注意到。 ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200522029-601656862.png) 並且在lib的元件找到了這個shiro元件,但是發現這個是1.3版本的。而shiro 550漏洞的版本是在1.2.4,但是問題就來了,不在漏洞版本內就是不能打了嘛?其實不是的。 Shiro 1.2.4及之前的版本中,AES加密的金鑰預設硬編碼在程式碼裡(SHIRO-550),Shiro 1.2.4以上版本官方移除了程式碼中的預設金鑰,要求開發者自己設定,如果開發者沒有設定,則預設動態生成,降低了固定金鑰洩漏的風險。 回頭再來看看上次分析的shiro550的細節 ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200539696-35135513.png) 這裡key是定義在程式碼裡面的,定義死的。 [Java安全之Shiro 550反序列化漏洞分析](https://www.cnblogs.com/nice0e3/p/14183173.html) 但是隻要能找到他配置的金鑰就能偽造Shiro的加密流程傳送gadget進行反序列化,從而達到命令執行。 這裡找到web.xml載入的這個配置檔案翻找了一下還真找到了金鑰。這裡金鑰配置的不是隨機金鑰。 ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200558878-1242386537.png) 那麼這裡還需要找的一點是漏洞地址在哪裡,也就是shiro作用於哪個地方,一般使用shiro都是將這些東西託管給shiro做許可權控制,而在做許可權控制的時候同時也需要配置到一些後臺的登入地址,這裡是從配置檔案上方找到了這個地址。 ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200605073-583915223.png) 配置對應的key值拿到工具裡面跑一下 ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200612857-113317803.png) 以上是xml檔案的配置方式的審計方法,當然部分cms也會採用一個config類來進行配置。同理還是找到配置類然後看金鑰 ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210218200620389-1132653450.png) 這裡Config配置Shiro的本地沒環境,找了一個網上的圖。 ### 漏洞修復 其實修復起來也很簡單,只需要使用隨機金鑰就好了。 ```xml ``` ## 0x03 結尾 整體的其實還是比較簡單,但是在XStream這個洞裡面遠端除錯的環境不知道為啥一直搭不好,不知道是環境問題還是啥,斷點停不下來。總的來說其實還是有原始碼審起來舒服,環境只要一搭建好就能本地除錯下