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

Java安全之Cas反序列化漏洞分析0x00前言某次项目中遇到Cas,以前没接触过,借此机会学习一波。0x01Cas简介CAS是Yale大学发起的一个开源项目,旨在为Web应用

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

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

0x00 前言

某次项目中遇到Cas,以前没接触过,借此机会学习一波。

0x01 Cas 简介

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目,开源的企业级单点登录解决方案。

0x02 远程调试环境搭建

下载地址,将环境war包下载,部署到tomcat即可

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

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即可完成。

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

0x03 漏洞分析

漏洞详情

4.1.7版本之前存在一处默认密钥的问题,利用这个默认密钥我们可以构造恶意信息触发目标反序列化漏洞,进而执行任意命令。

  • 影响版本 Apereo CAS <= 4.1.7
    实际上 4.2.X也能打,但是 <= 4.1.7使用的是硬编码,而后者属于随机密钥
    感觉上和Shiro的 550有点类似

解析流程分析

看web.xml得知,该项目基于Spring MVC开发。

上图请求路径是/login的这里来直接找login的处理方法进行跟踪。

从web.xml中可见,交给了DispatcherServlet去处理。

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

这时候可以查看springmvc的配置文件cas-servlet.xml

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

注意loginHandlerAdapter这个配置的bean,其中的属性有supportedFlowId的值为”login”,同时属性flowExecutor-ref的引用值为loginFlowExecutor

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

再看loginFlowExecutor这个bean中所配置的登录流程属性引用值就是我们webflow上下文配置中的loginFlowRegistry这个属性。

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

因此我们来看一下loginHandlerAdapter这个bean对应的类为org.jasig.cas.web.flow.SelectiveFlowHandlerAdapter所起的作用,是如何来处理登录动作的。先来看一下这个类的父类org.springframework.webflow.mvc.servlet.FlowHandlerAdapter,这个是Springmvc中的一个类。

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

FlowHandlerAdapter实现接口HandlerAdapter,而SelectiveFlowHandlerAdapter继承自FlowHandlerAdapter

SelectiveFlowHandlerAdapter类在cas-server-webapp-actions模块下的org.jasig.cas.web.flow包下。
因此Spring的DispatcherServlet找到要处理的handleAdapterSelectiveFlowHandlerAdapte。并且根据地址http://localhost:8080/cas/login?service=XXX,得到handler的flowId=”login”,即流程:loginFlowRegistry

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

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

然后进入下面的handle方法,开始调取流程:

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

当有登录请求时,spring则会调用该org.jasig.cas.web.flow.SelectiveFlowHandlerAdapter

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

跟进this.flowUrlHandler.getFlowExecutionKey(request)可见,该方法会获取请求中的execution参数。

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

而后会进行调用 this.executionRepository.parseFlowExecutionKey(flowExecutionKey);获取到key。

跟进查看

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

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

可见从execution参数,后分割UUID和_后面部分,而后面部分进行base64解密。对返回id和data进行赋值,然后返回ClientFlowExecutionKey对象

下面调用this.executionRepository.getFlowExecution(key);,将刚刚获取到的ClientFlowExecutionKey对象,即key变量传递。跟进。

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

这地方进行了数据的反序列化操作。先来看到构造方法,使用AES/CBC/PKCS7加密方式,并且密钥使用默认的密钥进行加密。

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

而在解密后还会对数据进行解压缩GZIPInputStream处理后进行反序列化。

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

漏洞复现与利用

根据以上数据解析分析,我们只需要将cas中加密部分扣出来,然后进行GZIPOutputStream处理,而后将他进行base64加密,将处理后的gadgets加入到execution参数里面即可,当然还需要构造一下前面UUID的值。

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

从github找到现成工具

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

发现该工具只能执行whoami,随手把回显位置做了些改动,加入GUI界面
GITHUB:
https://github.com/nice0e3/Cas_Exploit

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

Reference

https://www.anquanke.com/post/id/198842

0x04 结尾

除此外,还有一些值得探讨的地方例如,回显方式的构造

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119869.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Android 自定义 ViewPager 打造千变万化的图片切换效果

    Android 自定义 ViewPager 打造千变万化的图片切换效果转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38026503 记得第一次见到ViewPager这个控件,瞬间爱不释手,做东西的主界面通通ViewPager,以及图片切换也抛弃了ImageSwitch之类的,开始让ViewPager来做。时间长了,ViewPager的切换效果觉得枯燥,形成了审美疲劳~~我们需要改变,今天教大家如

  • DeviceIOControl实战「建议收藏」

    DeviceIOControl实战「建议收藏」实战DeviceIoControl之一:通过API访问设备驱动程序Q 在NT/2000/XP中,我想用VC编写应用程序访问硬件设备,如获取磁盘参数、读写绝对扇区数据、测试光驱实际速度等,该从哪里入手呢?A 在NT/2000/XP中,应用程序可以通过API函数DeviceIoControl来实现对设备的访问—获取信息,发送命令,交换数据等。利用该接口函数向指定的设备驱动发送正确

  • android 悬浮窗实现(Android可拖动悬浮窗实现)

    *本篇文章已授权微信公众号guolin_blog(郭霖)独家发布现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示。这个功能在很多情况下都非常有用。那么今天我们就来实现一下Android悬浮窗,以及探索一下实现悬浮窗时的易错点。

  • 大数据分析那点事

    写在前文,首先声明博主对数据分析领域也在不断学习当中,文章中难免可能会出现一些错误,欢迎大家及时指正,博主在此之前也曾对不同量级、不同领域的数据进行过分析,但是在过程中总是感觉有许多困惑,即自己也会问自己?自己分析的是否全面,是否有价值,从哪些方面出发?对于这些问题博主做了思考。归根到底还是在理论上,在阅读了相关的专业书籍和材料的基础上总结出本文,希望能给大家带来收获,同时由于内容过多,计划分三次完成全部内容,同时如果大家感觉对自己有帮助的话,记得收藏,博主会不断完善本文的缺陷和不足,希望真正能给大家带来收

  • 第一范式、第二范式及第三范式的定义与举例

    第一范式、第二范式及第三范式的定义与举例第一范式存在非主属性对码的部分依赖关系R(A,B,C)AB是码C是非主属性B–>CB决定CC部分依赖于B第一范式定义:如果关系R中所有属性的值域都是单纯域,那么关系模式R是第一范式的那么符合第一模式的特点就有1)有主关键字2)主键不能为空,3)主键不能重复,4)字段不可以再分例如: StudyNo  |  Name  |  Sex  

  • linux下载文件命令sz_linux下载整个文件夹命令

    linux下载文件命令sz_linux下载整个文件夹命令wget是linux下一个从网络上自动下载文件的常用自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。一般的使用方法是:wget+空格+参数+要下载文件的url路径,例如:1wget http://www.linuxsense.org/xxxx/xxx.tar.gz-c参数,这个也非常

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号