前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache shiro 1.2.4版本远程命令执行漏洞详解

Apache shiro 1.2.4版本远程命令执行漏洞详解

作者头像
FB客服
发布2018-02-09 16:33:03
1.9K0
发布2018-02-09 16:33:03
举报
文章被收录于专栏:FreeBufFreeBuf

*本文原创作者: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原创奖励计划,未经许可禁止转载

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档