热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

Java安全之Cas反序列化漏洞分析网上购物https:www.cqfenfa.com0x00前言某次项目中遇到Cas,以前没接触过,借此机会学习一波。0x01Cas简介CAS是Y


Java安全之Cas反序列化漏洞分析
网上购物 https://www.cqfenfa.com/

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
    实际上 4.2.X也能打,但是 <= 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找到要处理的handleAdapterSelectiveFlowHandlerAdapte。并且根据地址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 结尾

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



推荐阅读
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • Maven Web项目创建时JSP文件常见错误及解决方案
    Maven Web项目创建时JSP文件常见错误及解决方案 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • Nginx作为前端服务器时,Tomcat与Apache作为后端,War包应部署在何处? ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • CSS3 @font-face 字体应用技术解析与实践
    在Web前端开发中,HTML教程和CSS3的结合使得网页设计更加多样化。长期以来,Web设计师受限于“web-safe”字体的选择。然而,CSS3中的`@font-face`规则允许从服务器端加载自定义字体,极大地丰富了网页的视觉效果。通过这一技术,设计师可以自由选择和使用各种字体,提升用户体验和页面美观度。本文将深入解析`@font-face`的实现原理,并提供实际应用案例,帮助开发者更好地掌握这一强大工具。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • Java测试服务器调试指南详细介绍了如何进行远程调试,并深入解析了Java Xdebug参数的使用方法。本文首先概述了Java内置的调试功能,重点介绍了JDB这一类似于GDB的强大调试工具。通过实例演示,读者可以掌握在测试环境中高效调试Java应用程序的技巧,包括配置远程调试环境和优化调试参数,以提高开发效率和代码质量。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
author-avatar
lk神密勇士
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有