*本文原创作者:zhujunboabc,本文属FreeBuf原创奖励计划,未经许可禁止转载
搜了一下,发现网上关于apache shiro 1.2.4版本的漏洞整理报告写的过于的简单,或许是大佬们讲的比较专业,我这个小白看不懂的缘故,特地在本地做一次完整的展现。
先从shiro官方获取shiro 1.2.4的源码包,地址:https://github.com/apache/shiro/releases/tag/shiro-root-1.2.4,在里面选择1.2.4版本的shiro源码进行下载。
下载完成之后,解压文件:
由于是开源项目,需要先配置maven环境,具体环境配置可以百度查看。
解压完成之后,进入目录shiro-shiro-root-1.2.4\samples\web ,由于是maven构建的开源工程,我们需要先将工程转换成war包来部署。
这里我们需要安装maven,去maven官方网站下载maven,配置maven环境变量,执行mvn -v,如下显示,表明你装好了maven并配置好了环境。
接下来,对shiro的例子进行转换成一个eclipse项目,cmd进入到shiro-shiro-root-1.2.4\samples\web目录下,执行:mvn eclipse:eclipse
接下来是漫长的等待(网速较慢),等待到所有的jar包都完成了下载之后,成功的编译成一个eclipse项目。
工程路径下已经生成了eclipse的工程,如图:
导入工程到eclipse中,报错提示:
这种情况,通过百度查到解决方法:
1,Right-click on your project, select Maven -> Disable Maven Nature. 2,Open you terminal, go to your project folder and do “mvn eclipse:clean” 3,Right click on your Project and select “Configure -> Convert into Maven Project”
经过如上步骤之后,工程正常编译,无报错
接下来,我们需要导出一个war包来放到我们tomcat目录下,来启动这个demo。
1,确定pom.xml中配置为war。
2,右键pom.xml,run as maven install
运行之后,成功编译
在工程目录下,可以发现war包已经成功编译:
修改war包的名称为shiro.war,为了方便工程访问,部署到tomcat(放置到tomcat的webapps目录下,启动tomcat即可)
启动成功,并访问http://localhost:8080/shiro/
web访问:
到这里,我们的demo才成功的部署完成。
接下来需要生成payload,通过查看apache官方的说明:
(1)rememberMe cookie (2)CookieRememberMeManager.java (3)Base64 (4)AES (5)加密密钥硬编码 (6)Java serialization
生成payload的方式,就是需要这几个部分,点击阅读原文,查看我的代码供大家参考。
运行之后,可以生成payload,如下是跳出计算器的paylaod
截图:
说说自己碰到几个问题:
(1)AES加密
/** * 使用AES 算法 加密,默认模式 AES/CBC/PKCS5Padding */ public static byte[] aesEncrypt(byte[] str) throws Exception { Key keySpec = new SecretKeySpec(keyBytes, "AES"); IvParameterSpec ivSpec = new IvParameterSpec(getIV()); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); /** * 初始化,此方法可以采用三种方式,按服务器要求来添加。 * (1)无第三个参数 * (2)第三个参数为SecureRandom random = new SecureRandom();中random对象,随机数。(AES不可采用这种方法) * (3)采用此代码中的IVParameterSpec */ byte[] b = cipher.doFinal(str); return b; }
java加密AES方式,默认使用AES/CBC/PKCS5Padding,但是初始化有三种方式,之前一直使用了前两种方式,导致加密成功之后,tomcat一直报解密失败,通过查看shiro源码,发现采用了第三种方式,如下图:
(2)tomcat需要添加相应的common-collection包
文章主要目的是为了说明如何复现漏洞,包括环境搭建和利用java写poc,如果不合大家胃口,欢迎拍砖。
参考文章:
https://www.seebug.org/vuldb/ssvid-92180
https://issues.apache.org/jira/browse/SHIRO-550
*本文原创作者:zhujunboabc,本文属FreeBuf原创奖励计划,未经许可禁止转载