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

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

復現過程python

1、 搭建漏洞環境docker

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

1.拉取環境到本地服務器

docker pull medicean/vulapps:s_shiro_1cookie

2.啓動環境app

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

由於我已經拉下來過了dockers環境了因此直接啓動docker,在docker中將shiro環境的8080端口映射到了主機的80端口,因此直接訪問127.0.0.1就能夠了。工具

2、 漏洞分析編碼

從官方的 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了。

3、 編寫POC

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

POC代碼以下:

4、 漏洞利用

先登錄,勾選remberme

而後抓包隨便點一個頁面包含有cookie參數的,這裏抓的是登錄後的第一個包

在vps或同網段虛擬機中執行「python –m SimpleHTTPServer 8080」, 而後再使用poc生成payload,這裏執行的是「wget http://127.0.0.1:7080/」,讓其去訪問個人服務器執行命令

修復建議

一、升級shiro版本

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

相關文章
相關標籤/搜索