Java审计之CMS中的那些反序列化漏洞
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是定义在代码里面的,定义死的。
但是只要能找到他配置的密钥就能伪造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中的那些反序列化漏洞的更多相关文章
- Java反序列化漏洞从入门到深入(转载)
前言 学习本系列文章需要的Java基础: 了解Java基础语法及结构(菜鸟教程) 了解Java面向对象编程思想(快速理解请上知乎读故事,深入钻研建议买本<疯狂Java讲义>另外有一个刘意老 ...
- 原来不只是fastjson,这个你每天都在用的类库也被爆过反序列化漏洞!
GitHub 15.8k Star 的Java工程师成神之路,不来了解一下吗! GitHub 15.8k Star 的Java工程师成神之路,真的不来了解一下吗! GitHub 15.8k Star ...
- 漏洞复现|Dubbo反序列化漏洞CVE-2019-17564
01漏洞描述 - Apache Dubbo支持多种协议,官方推荐使用Dubbo协议.Apache Dubbo HTTP协议中的一个反序列化漏洞(CVE-2019-17564),该漏洞的主要原因在于当A ...
- Java 中序列化与反序列化引发的思考?
java 中序列化指从对象转变为 二进制流的过程中需要进行序列化,而反序列化指二进制流转换为java 对象.那么有的时候java 存储到数据库不需要序列化, 而计算机系统本质存储的就是二进制文件,数据 ...
- Java反序列化漏洞通用利用分析
原文:http://blog.chaitin.com/2015-11-11_java_unserialize_rce/ 博主也是JAVA的,也研究安全,所以认为这个漏洞非常严重.长亭科技分析的非常细致 ...
- Lib之过?Java反序列化漏洞通用利用分析
转http://blog.chaitin.com/ 1 背景 2 Java反序列化漏洞简介 3 利用Apache Commons Collections实现远程代码执行 4 漏洞利用实例 4.1 利用 ...
- Java反序列化漏洞分析
相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...
- 小白审计JACKSON反序列化漏洞
1. JACKSON漏洞解析 poc代码:main.java import com.fasterxml.jackson.databind.ObjectMapper; import com.sun.or ...
- 漏洞经验分享丨Java审计之XXE(上)
最近在审计公司的某个项目时(Java方面),发现了几个有意思的Blind XXE漏洞,我觉得有必要分享给大家,尤其是Java审计新手,了解这些内容可以让你少走一些弯路. Java总体常出现的审计漏洞如 ...
随机推荐
- Docker Desktop启动Kubernetes
Docker_Desktop启动Kubernetes 参考仓库:https://github.com/AliyunContainerService/k8s-for-docker-desktop 视频参 ...
- cookie机制、session机制
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- AQS简单理解入门---1
这篇文章,我们来聊聊面试时一个比较有杀伤力的问题:聊聊你对AQS的理解? 之前有同学反馈,去互联网公司面试,面试官聊到并发时就问到了这个问题.当时那位同学内心估计受到了一万点伤害... 因为首先,很多 ...
- Flink-v1.12官方网站翻译-P010-Fault Tolerance via State Snapshots
通过状态快照进行容错 状态后台 Flink管理的键控状态是一种碎片化的.键/值存储,每项键控状态的工作副本都被保存在负责该键的任务管理员的本地某处.操作员的状态也被保存在需要它的机器的本地.Flink ...
- Flink-v1.12官方网站翻译-P007-Data Pipelines & ETL
数据管道和ETL 对于Apache Flink来说,一个非常常见的用例是实现ETL(提取.转换.加载)管道,从一个或多个源中获取数据,进行一些转换和/或丰富,然后将结果存储在某个地方.在这一节中,我们 ...
- 嵌入式设备上卷积神经网络推理时memory的优化
以前的神经网络几乎都是部署在云端(服务器上),设备端采集到数据通过网络发送给服务器做inference(推理),结果再通过网络返回给设备端.如今越来越多的神经网络部署在嵌入式设备端上,即inferen ...
- CF 666E Forensic Examination 【SAM 倍增 线段树合并】
CF 666E Forensic Examination 题意: 给出一个串\(s\)和\(n\)个串\(t_i\),\(q\)次询问,每次询问串\(s\)的子串\(s[p_l:p_r]\)在串\(t ...
- 2019牛客多校 Round4
Solved:3 Rank:331 B xor 题意:5e4个集合 每个集合最多32个数 5e4个询问 询问l到r个集合是不是都有一个子集的xor和等于x 题解:在牛客多校第一场学了线性基 然后这个题 ...
- 【uva 11093】Just Finish it up(算法效率--贪心)
题意:环形跑道上有N个加油站,编号为1~N.第 i 个加油站可以加油Ai加仑,从加油站 i 开到下一站需要Bi加仑汽油.问可作为起点走完一圈后回到起点的最小加油站编号. 解法:我们把每个加油站的Ai, ...
- 1561: (More) Multiplication
Description Educators are always coming up with new ways to teach math to students. In 2011, an educ ...