360SDN.COM

首页/Java/列表

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

来源:FreeBuf  2017-09-11 12:16:27    评论:0点击:

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


阅读原文

为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权