shiro反序列化漏洞复现

shiro反序列化漏洞复现

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。

一、shiro550利用条件

知道aes加密的key且目标服务器含有可利用的攻击链。

原理:

  在Shiro <= 1.2.4中,反序列化过程中所用到的AES加密的key是硬编码在源码中,当用户勾选RememberMe并登录成功,Shiro会将用户的cookie值序列化,AES加密,接着base64编码后存储在cookie的rememberMe字段中.
  服务端收到登录请求后,会对cookie的rememberMe字段的值进行base64解码,接着进行AES解密,然后反序列化。由于AES加密是对称式加密(key既能加密数据也能解密数据),所以当攻击者知道了AES key后,就能够构造恶意的rememberMe cookie值从而触发反序列化漏洞。

在服务端接收cookie值时,按照如下步骤来解析处理:

获取RememberMe的值 —> Base64解密 —> ASE解密 –> 反序列化

1
2
3
4
5
1.检索RememberMe cookie 的值
2.Base64解码
3.使用AES解密(加密密钥硬编码)
4.进行反序列化操作(未作过滤处理)
5.在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。

影响版本:1.2.4以下

解决payload过长的方式:

  1. 使用urlclassloader加载远程字节码
  2. 将字节码放在post的body中,恶意类实现加载body中的字节码即可.

二、漏 洞 复 现

使用vulhub靶场进行复现,启动漏洞环境:

进入shiro漏洞目录,然后执行

1
2
cd CVE-2016-4437
sudo docker-compose up -d

然后等待一会儿就好~比如像下图这样

访问http://192.168.56.132:8080/正常登陆

使用burp进行抓包,查看返回包

  • 响应包中出现<rememberMe=deleteMe>可以用来大概判断是否使用了Shiro

可以使用工具尝试爆破一下密钥以及利用链,如果可爆破出密钥及利用链,则可以命令执行,以及注入内存马。

vps监听本地端口

利用工具可以进行反弹shell

反弹成功


shiro反序列化漏洞复现
https://nan-918.github.io/2022/04/14/shiro反序列化漏洞/
作者
Nan-911
发布于
2022年4月14日
许可协议