原理解释

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

  shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值–>Base64解码–>AES解密–>反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。该漏洞对shiro<=1.2.4的版本有影响。

  硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发实践。

  硬编码密码是指在程序中采用硬编码方式处理密码。这种处理方式一方面不易于程序维护,在代码投入使用后,除非对软件进行修补,否则无法修改密码。另一方面会削弱系统安全性,硬编码密码意味着拥有代码权限的人都可以查看到密码,可以使用密码访问一些不具有权限的系统,更严重的是如果攻击者能够访问应用程序的字节码,利用一些反编译工具就能阅读到代码,可以轻易获得密码。

环境搭建

1.下载镜像

docker pull medicean/vulapps:s_shiro_1

2.运行在8091端口

docker run -d -p 8091:8080 medicean/vulapps:s_shiro_1

3.安装模块

pip3 install pycrypto

4.上传生成payload的脚本

命令行输入rz并回车,可打开上传页面,选择shiro_poc.py进行上传,注意需要进入/tmp/目录后再进行下载

5.安装ysoserial的jar文件

git clone https://github.com/frohoff/ysoserial.git

cd ysoserial/

mvn package -DskipTests

此处提示命令找不到,因此需要对 mvn进行安装

apt update
apt upgrade
apt install maven
mvn -version

注:安装mvn需要在jdk已经安装的前提下,kali默认有安装。

如下图所示则安装成功。

Shiro RememberMe 1.2.4 反序列化漏洞复现-LMLPHP

重新执行

mvn package -DskipTests

发现报错

Shiro RememberMe 1.2.4 反序列化漏洞复现-LMLPHP

上网查了之后发现原因如下,但是我也不是很懂他在说什么

Shiro RememberMe 1.2.4 反序列化漏洞复现-LMLPHP

所以重新开始安装java

安装java时因为kali有自带openjdk,所以安装时安装成功了,但是运行java -version的结果还是openjdk,运行javac -version显示无该命令,下载了新的kali虚拟机后安装Java还是不行,

于是就直接下载了ysoserial.jar然后上传到同一目录

复现过程

复现过程参考该篇文章

https://www.cnblogs.com/paperpen/p/11312671.html

最终复现成功。

05-11 22:55