Shiro反序列化漏洞综合

原因:Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。攻击者只要找到AES加密的密钥,就可以构造一个恶意对象,对其进行序列化–>AES加密–>Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。
Shiro反序列化漏洞综合_第1张图片

影响范围:Shiro框架
验证手法:
验证是否存在shiro框架
1.返回包中存在 rememberMe=deleteMe
2.请求中cookie中加入 rememberMe=deleteMe 返回rememberMe=deleteMe
Shiro反序列化漏洞综合_第2张图片
Shiro反序列化漏洞综合_第3张图片

在反序列化时,不会对其进行过滤,所以如果传入恶意代码将会造成安全问题
在 1.2.4 版本前,是默认ASE秘钥,Key: kPH+bIxk5D2deZiIxcaaaA==,可以直接反序列化执行恶意代码
而在1.2.4之后,ASE秘钥就不为默认了,需要获取到Key才可以进行渗透

key获取方法:shiro高版本要求开发者自己设置,如果开发者没有设置,则默认动态生成,降低了固定密钥泄漏的风险。
但有可能存在代码复用的可能,可以在github上搜索"securityManager.setRememberMeManager(rememberMeManager); Base64.decode(“或"setCipherKey(Base64.decode(”)
Shiro反序列化漏洞综合_第4张图片
Guns框架内部集成了shiro并进行二次开发,作者自定义密钥并固定,此时用户若不对密钥进行再次修改,即使升级shiro版本,也依旧存在固定密钥的风险。

脚本跑(shiro-exploit )
旧版本(1.2.4之前)使用AES-CBC加密模式,新版是使用AES-GCM加密模式。
shiro-exploit
-v CBC加密版本 Version 为1 ,GCM加密版本 Version 为2
-u 参数可将payload发送至指定url,如不指定url将输出base64编码后的payload用于手工利用
-k 参数可指定shiro加密所用的key,如不指定将使用默认key kPH+bIxk5D2deZiIxcaaaA== 可修改文件头部的key来更换默认key
python shiro-exploit.py check -u http://10.xxx.xxx.72 脚本爆破key
在这里插入图片描述
shiro-exploit
内置6条tomcat回显链,
[CommonsCollectionsK1/CommonsCollectionsK2/CommonsBeanutils1/CommonsBeanutils2/Jdk7u21/Jdk8u20]

python3 shiro-exploit.py echo -g CommonsCollectionsK1 ##不指定,默认为whoami
python3 shiro-exploit.py echo -g CommonsCollectionsK1 -c ipconfig
Shiro反序列化漏洞综合_第5张图片
Shiro反序列化注入内存马
通过TemplatesImpl去加载恶意类,然后把动态注册Filter的代码写在反序列化的类的static方法中。
不同利用链有不同的内存马,不同点利用不同方式获取到standardContext
详情请看p牛的项目(https://github.com/phith0n/JavaThings。) CommonsBeanutils1Shiro内存马
Shiro反序列化漏洞综合_第6张图片

你可能感兴趣的:(web攻防,安全,web安全,前端)