Java审计之CMS中的那些反序列化漏洞

0x00 前言

过年这段时间比较无聊,找了一套源码审计了一下,发现几个有意思的点拿出来给分享一下。

0x01 XStream 反序列化漏洞

下载源码下来发现并不是源代码,而是一个的文件夹,里面都已经是编译过的一个个class文件。

在一个微信回调的路由位置里面找到通过搜索类名 Serialize关键字找到了一个工具类,并且参数是可控的。

这里调用xstream.fromXML(xml)进行反序列化。

而下面这个看了一下lib文件夹下面的组件其实是有着cc cb等组件,并且这个组件的反序列化漏洞是在版本范围内。

找到路由位置,发现访问页面的时候显示API 什么的错误。POC打过去没有任何响应。这个点弄了比较久没弄出来,暂且留着。

0x02 Shiro反序列化漏洞

上次的点没弄出来后,开始转换思路。再次从web.xml入手

发现这里加载了一下配置文件,从中还发现了shiro的配置文件,前面还真没注意到。

并且在lib的组件找到了这个shiro组件,但是发现这个是1.3版本的。而shiro 550漏洞的版本是在1.2.4,但是问题就来了,不在漏洞版本内就是不能打了嘛?其实不是的。

Shiro 1.2.4及之前的版本中,AES加密的密钥默认硬编码在代码里(SHIRO-550),Shiro 1.2.4以上版本官方移除了代码中的默认密钥,要求开发者自己设置,如果开发者没有设置,则默认动态生成,降低了固定密钥泄漏的风险。

回头再来看看上次分析的shiro550的细节

这里key是定义在代码里面的,定义死的。

Java安全之Shiro 550反序列化漏洞分析

但是只要能找到他配置的密钥就能伪造Shiro的加密流程发送gadget进行反序列化,从而达到命令执行。

这里找到web.xml加载的这个配置文件翻找了一下还真找到了密钥。这里密钥配置的不是随机密钥。

那么这里还需要找的一点是漏洞地址在哪里,也就是shiro作用于哪个地方,一般使用shiro都是将这些东西托管给shiro做权限控制,而在做权限控制的时候同时也需要配置到一些后台的登录地址,这里是从配置文件上方找到了这个地址。

配置对应的key值拿到工具里面跑一下

以上是xml文件的配置方式的审计方法,当然部分cms也会采用一个config类来进行配置。同理还是找到配置类然后看密钥

这里Config配置Shiro的本地没环境,找了一个网上的图。

漏洞修复

其实修复起来也很简单,只需要使用随机密钥就好了。

 <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
<property name="cipherKey" value="#{T(com.nova.framework.modules.sys.security.GenerateCipherKey).generateNewKey()}"></property>
</bean>

0x03 结尾

整体的其实还是比较简单,但是在XStream这个洞里面远程调试的环境不知道为啥一直搭不好,不知道是环境问题还是啥,断点停不下来。总的来说其实还是有源代码审起来舒服,环境只要一搭建好就能本地调试下断点。

Java审计之CMS中的那些反序列化漏洞的更多相关文章

  1. Java反序列化漏洞从入门到深入(转载)

    前言 学习本系列文章需要的Java基础: 了解Java基础语法及结构(菜鸟教程) 了解Java面向对象编程思想(快速理解请上知乎读故事,深入钻研建议买本<疯狂Java讲义>另外有一个刘意老 ...

  2. 原来不只是fastjson,这个你每天都在用的类库也被爆过反序列化漏洞!

    GitHub 15.8k Star 的Java工程师成神之路,不来了解一下吗! GitHub 15.8k Star 的Java工程师成神之路,真的不来了解一下吗! GitHub 15.8k Star ...

  3. 漏洞复现|Dubbo反序列化漏洞CVE-2019-17564

    01漏洞描述 - Apache Dubbo支持多种协议,官方推荐使用Dubbo协议.Apache Dubbo HTTP协议中的一个反序列化漏洞(CVE-2019-17564),该漏洞的主要原因在于当A ...

  4. Java 中序列化与反序列化引发的思考?

    java 中序列化指从对象转变为 二进制流的过程中需要进行序列化,而反序列化指二进制流转换为java 对象.那么有的时候java 存储到数据库不需要序列化, 而计算机系统本质存储的就是二进制文件,数据 ...

  5. Java反序列化漏洞通用利用分析

    原文:http://blog.chaitin.com/2015-11-11_java_unserialize_rce/ 博主也是JAVA的,也研究安全,所以认为这个漏洞非常严重.长亭科技分析的非常细致 ...

  6. Lib之过?Java反序列化漏洞通用利用分析

    转http://blog.chaitin.com/ 1 背景 2 Java反序列化漏洞简介 3 利用Apache Commons Collections实现远程代码执行 4 漏洞利用实例 4.1 利用 ...

  7. Java反序列化漏洞分析

    相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...

  8. 小白审计JACKSON反序列化漏洞

    1. JACKSON漏洞解析 poc代码:main.java import com.fasterxml.jackson.databind.ObjectMapper; import com.sun.or ...

  9. 漏洞经验分享丨Java审计之XXE(上)

    最近在审计公司的某个项目时(Java方面),发现了几个有意思的Blind XXE漏洞,我觉得有必要分享给大家,尤其是Java审计新手,了解这些内容可以让你少走一些弯路. Java总体常出现的审计漏洞如 ...

随机推荐

  1. (六)整合 QuartJob ,实现定时器实时管理

    整合 QuartJob ,实现定时器实时管理 1.QuartJob简介 1.1 核心API 2.SpringBoot整合QuartJob 2.1 项目结构 2.2 定时器配置 2.3 定时器管理工具 ...

  2. mapreduce编程练习(一)简单的练习 WordCount

    入门训练:WordCount 问题描述:对一个或多个输入文件中的单词进行计数统计,比如一个文件的输入文件如下 输出格式: 运行代码实例: package hadoopLearn; import jav ...

  3. linux c驴杂记

    C语言标准库中包含了各种用于处理错误的函数和宏.1.assert( ) 宏 #include<assert.h>void assert( int expression );可用于诊断程序b ...

  4. C/C++ ===复习==函数返回值问题(集合体==网络)

    按值传递 地址传递: 应该明白只有这2种传递,下面讨论函数的按值传递 #include <stdio.h> #include <stdlib.h> int add_rtVal( ...

  5. RabbitMQ (简单集群部署操作)

    RabbitMQ 集群部署 前期准备 第一步:三台linux系统(centos7.3) 主机名(hostname) 网卡ip node1 192.168.137.138 node2 192.168.1 ...

  6. 深复制VS浅复制(MemberwiseClone方法介绍)

    MemberwiseClone方法,属于命名空间System,存在于程序集 mscorlib.dll中.返回值是System.Object.其含义是:创建一个当前object对象的浅表副本. MSDN ...

  7. java中== equal hashcode 比较的区别

    == 基本数据类型是进行数值的比较 引用数据类型比较的是两对象的地址值 实际上都是进行直接值的比较 equal(Object) Object型参数,任何类型的实参都可以传入,只有实参是一个字符串且内容 ...

  8. 【bzoj 4455】小星星(树型DP+容斥原理+dfs建树和计算的2种方式)

    题意:给一个n个点的图和一个n个点的树,求图和树上的点一一对应的方案数.(N<=17) 解法:1.在树的结构上进行tree DP,f[i][j]表示树上点 i 对应图上点 j 时,这个点所在子树 ...

  9. 神奇C语言的字串处理库函数

    头文件:#incldue<string.h> 定义:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中首次出现的地 ...

  10. hdu4217 Data Structure?

    Problem Description Data structure is one of the basic skills for Computer Science students, which i ...