Java安全之Cas反序列化漏洞分析
Java安全之Cas反序列化漏洞分析
0x00 前言
某次项目中遇到Cas,以前没接触过,借此机会学习一波。
0x01 Cas 简介
CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目,开源的企业级单点登录解决方案。
0x02 远程调试环境搭建
下载地址,将环境war包下载,部署到tomcat即可
tomcat目录bin文件下,startup_debug.bat
call %EXECUTABLE%" start %CMD_LINE_ARGS%
改为
set JPDA_TRANSPORT=dt_socket
set JPDA_ADDRESS=5005
set JPDA_SUSPEND=n
call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%
IDEA中设置Remote远程调试5005即可完成。
0x03 漏洞分析
漏洞详情
4.1.7版本之前存在一处默认密钥的问题,利用这个默认密钥我们可以构造恶意信息触发目标反序列化漏洞,进而执行任意命令。
- 影响版本 Apereo CAS <= 4.1.7
感觉上和Shiro的 550有点类似
解析流程分析
看web.xml得知,该项目基于Spring MVC开发。
上图请求路径是/login
的这里来直接找login的处理方法进行跟踪。
从web.xml中可见,交给了DispatcherServlet
去处理。
这时候可以查看springmvc的配置文件cas-servlet.xml
注意loginHandlerAdapter
这个配置的bean,其中的属性有supportedFlowId
的值为"login",同时属性flowExecutor-ref的引用值为loginFlowExecutor
。
再看loginFlowExecutor
这个bean中所配置的登录流程属性引用值就是我们webflow上下文配置中的loginFlowRegistry
这个属性。
因此我们来看一下loginHandlerAdapter
这个bean对应的类为org.jasig.cas.web.flow.SelectiveFlowHandlerAdapter
所起的作用,是如何来处理登录动作的。先来看一下这个类的父类org.springframework.webflow.mvc.servlet.FlowHandlerAdapter
,这个是Springmvc中的一个类。
FlowHandlerAdapter
实现接口HandlerAdapter
,而SelectiveFlowHandlerAdapter
继承自FlowHandlerAdapter
。
SelectiveFlowHandlerAdapter
类在cas-server-webapp-actions
模块下的org.jasig.cas.web.flow
包下。
因此Spring的DispatcherServlet找到要处理的handleAdapter
是SelectiveFlowHandlerAdapte
。并且根据地址http://localhost:8080/cas/login?service=XXX,得到handler的flowId="login",即流程:loginFlowRegistry
。
然后进入下面的handle方法,开始调取流程:
当有登录请求时,spring则会调用该org.jasig.cas.web.flow.SelectiveFlowHandlerAdapter
跟进this.flowUrlHandler.getFlowExecutionKey(request)
可见,该方法会获取请求中的execution
参数。
而后会进行调用 this.executionRepository.parseFlowExecutionKey(flowExecutionKey);
获取到key。
跟进查看
可见从execution
参数,后分割UUID和_
后面部分,而后面部分进行base64解密。对返回id和data进行赋值,然后返回ClientFlowExecutionKey
对象
下面调用this.executionRepository.getFlowExecution(key);
,将刚刚获取到的ClientFlowExecutionKey
对象,即key变量传递。跟进。
这地方进行了数据的反序列化操作。先来看到构造方法,使用AES/CBC/PKCS7
加密方式,并且密钥使用默认的密钥进行加密。
而在解密后还会对数据进行解压缩GZIPInputStream
处理后进行反序列化。
漏洞复现与利用
根据以上数据解析分析,我们只需要将cas中加密部分扣出来,然后进行GZIPOutputStream
处理,而后将他进行base64加密,将处理后的gadgets加入到execution
参数里面即可,当然还需要构造一下前面UUID的值。
从github找到现成工具。
Reference
https://www.anquanke.com/post/id/198842
0x04 结尾
除此外,还有一些值得探讨的地方例如,回显方式的构造
Java安全之Cas反序列化漏洞分析的更多相关文章
- Java安全之Fastjson反序列化漏洞分析
Java安全之Fastjson反序列化漏洞分析 首发:先知论坛 0x00 前言 在前面的RMI和JNDI注入学习里面为本次的Fastjson打了一个比较好的基础.利于后面的漏洞分析. 0x01 Fas ...
- Java反序列化漏洞分析
相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...
- ref:Java安全之反序列化漏洞分析(简单-朴实)
ref:https://mp.weixin.qq.com/s?__biz=MzIzMzgxOTQ5NA==&mid=2247484200&idx=1&sn=8f3201f44e ...
- Java安全之Shiro 550反序列化漏洞分析
Java安全之Shiro 550反序列化漏洞分析 首发自安全客:Java安全之Shiro 550反序列化漏洞分析 0x00 前言 在近些时间基本都能在一些渗透或者是攻防演练中看到Shiro的身影,也是 ...
- Fastjson 1.2.22-24 反序列化漏洞分析
目录 0x00 废话 0x01 简单介绍 FastJson的简单使用 0x02 原理分析 分析POC 调试分析 0x03 复现过程 0x04 参考文章 0x00 废话 balabala 开始 0x01 ...
- Fastjson 1.2.22-24 反序列化漏洞分析(2)
Fastjson 1.2.22-24 反序列化漏洞分析(2) 1.环境搭建 我们以ubuntu作为被攻击的服务器,本机电脑作为攻击者 本机地址:192.168.202.1 ubuntu地址:192.1 ...
- Fastjson 1.2.22-24 反序列化漏洞分析(1)
Fastjson 1.2.22-24 反序列化漏洞分析(1) 前言 FastJson是alibaba的一款开源JSON解析库,可用于将Java对象转换为其JSON表示形式,也可以用于将JSON字符串转 ...
- 【JavaWeb】CVE-2016-4437 Shiro反序列化漏洞分析及代码审计
Shiro反序列化漏洞分析及代码审计 漏洞简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. Apache Shiro默认使用了CookieRe ...
- Fastjson反序列化漏洞分析 1.2.22-1.2.24
Fastjson反序列化漏洞分析 1.2.22-1.2.24 Fastjson是Alibaba开发的Java语言编写的高性能JSON库,用于将数据在JSON和Java Object之间互相转换,提供两 ...
随机推荐
- Java 在Excel中添加水印(单一水印、平铺水印)
在Excel中没有直接添加水印的功能,但依旧可以通过一定方式来实现类似水印效果.本文通过Java程序代码介绍具体实现方法.可添加单一水印效果,即水印是以单个文本字样来呈现:也可添加多个平铺水印效果,即 ...
- 关于搭建FTP服务器
首先我们创建一个用户账户用于登录FTP进行操作.右键点击桌面的我的点击选择管理选项,进入管理界面打开本地用户和组选项,我们可以看到列表中的用户选项 2 然后右键用户选项,在下拉菜单中选择新用户,开始建 ...
- 《疯狂Kotlin讲义》读书笔记6——函数和Lambda表达式
函数和Lambda表达式 Kotlin融合了面向过程语言和面向对象语言的特征,相比于Java,它增加了对函数式编程的支持,支持定义函数.调用函数.相比于C语言,Kotlin支持局部函数(Lambda表 ...
- kubespray续签k8s证书
查看证书过期时期 [root@node1 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not ...
- KMP算法:next和nextval值计算
KMP算法的next和nextval值计算 先看看next数据值的求解方法 例:下标从1开始(若题中给定下标为0开始,把所有值-1即可) next数组的求解方法:根据前一个字符next,一直循环找到第 ...
- tp5 composer phpexcel使用方法
1.compser 安装phpexcel.在windows命令行下输入:进入网站根目录,compser phpoffice/phpexcel 2.页面引入两个类: use PHPExcel_IOFac ...
- 如何以最简单的方式安装 KALI 渗透测试框架系统
0x01 第一步下载 KALI 百度搜索 KALI 官网,找到下载区,我选的是 64 位标准版,但是推荐下载 32 位(功能貌似更全) 这个为下载后的 iso 镜像文件 0x02 第二步打开虚拟机,配 ...
- OGG-Oracle同步Sequence
一.需求,使用OGG同步软件,将Oracle 11g Sequence实时同步到19c新库中 参考文档 Implementing replication of cyclic sequences in ...
- Andrew Ng机器学习算法入门((六):多变量线性回归方程求解
多变量线性回归 之前讨论的都是单变量的情况.例如房价与房屋面积之前的关系,但是实际上,房价除了房屋面积之外,还要房间数,楼层等因素相关.那么此时就变成了一个多变量线性回归的问题.在实际问题中,多变量的 ...
- 每天一道面试题LeetCode 26--删除排序数组中的重复项(python实现)
题目1:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. ...