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

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

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-01-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

Android开发中的安全

根据Android四大框架来解说安全机制 代码安全 java不同于C/C++,java是解释性语言,存在代码被反编译的隐患; 默认混淆器为progua...

20790
来自专栏码神联盟

http和https是什么?有什么区别?

HTTPS是什么意思? HTTPS全称为Hypertext Transfer Protocol over Secure Socket Layer,中文含义为“超...

35550
来自专栏云计算教程系列

如何在Debian 9上为Nginx创建自签名SSL证书

TLS或传输层安全性及其前身SSL(代表安全套接字层)是用于将正常流量包装在受保护的加密包装中的Web协议。

40030
来自专栏信安之路

逻辑漏洞之密码重置

案例介绍: 问题出现在忘记密码处,可以通过手机找回和邮箱找回密码两种方式获得指定帐户的新密码设置权限

18400
来自专栏张戈的专栏

Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程

上上篇文章《nginx 平滑升级&新增模块》提到了公司的 https 访问需求。当我新增了 SSL 模块之后,却发现以前还真没部署过 https 访问。 下面整...

1.1K70
来自专栏友弟技术工作室

openSSH服务及其应用

17650
来自专栏云原生架构实践

Docker Data Center系列(五)- 使用自定义的TLS安全认证

commonName(CN)设置为UCP(DTR)所在主机名或FQDN。也可以设置为一个泛域名(*.yourcompany.com),其它都使用默认值。

23870
来自专栏琦小虾的Binary

Ubuntu 14.04 LTS 下安装Adobe Flash Player

Ubuntu 14.04 LTS 下安装Adobe Flash Player 一、安装FireFox浏览器的Adobe Flash Player插件 直接在Ub...

23060
来自专栏腾讯云TStack专栏

k8s如何加入TLS安全访问,技术发烧友为你探路

作者简介 ? ? 以前外部访问k8s里的服务,都是直接以http方式进行的,缺少TLS安全,今天给大家详细分析一下怎么为k8s加TLS安全访问。 生成并信任自...

61660
来自专栏PHP在线

JWT实现token-based会话管理

上文《3种web会话管理的方式》介绍了3种会话管理的方式,其中token-based的方式有必要从实现层面了解一下。本文主要介绍这方面的内容。上文提到token...

12920

扫码关注云+社区

领取腾讯云代金券