Ecology10中的CAS身份认证问题

单点登录(SSO)是一种身份验证解决方案,可让用户通过一次性用户身份验证登录多个应用程序和网站。实现SSO的方式有很多种,比如Kerberos、SAML、OAuth2、JWT、OpenID、CAS、LDAP等。

CAS

CAS (Central Authentication Service) 最初由耶鲁大学于2001年开发。是面向Web的单点登录SSO解决方案。后来CAS项目被纳入Apereo Foundation管理,更名为Apereo CAS。参考Apereo官方文档:CAS - Architecture

CAS的架构如下。CAS 客户端是任何支持 CAS 的应用程序,CAS服务器负责颁发和验证票据来校验用户身份,进而授予CAS客户端的访问权限。

​CAS流程参考:CAS - CAS Protocol。流程图片如下。

用户向目标系统发起访问,会重定向到CAS服务器,如果此时用户没有SSO Session,CAS服务器会向客户发送登录表单,输入用户名密码等。如果验证成功,CAS服务器会创建SSO Session(TGC)并给浏览器发送Cookie(Cookie中包含TGT票据这个票据就是SSO Session的seesion key)和ST票据。浏览器带着这个ST票据去访问应用程序,应用程序则向CAS服务器发送请求,校验ST票据。如果校验成功,应用程序再返回浏览器一个Session Cookie。下次再访问同一个应用,带着这个Session Cookie就可以免登录。如果访问的是不同的应用,则需要带着TGT Cookie。

CAS漏洞

从CAS的逻辑来看,如果我们拥有服务票据ST就可以成功访问应用。或者如果拥有TGT的Cookie,向CAS服务器发送要访问的应用地址,也可以成功访问。

获取票据

漏洞定位com/weaver/passport/controller/RestLoginController#appThirdLogin

 获取loginType参数值,并获取头部名为“ETEAMS_TGC”的Cookie值。上面提到TGC是CAS给用户创建的包含TGT的SSO Session。跟进appThirdLogin

1. 首先判断是否在如下枚举类型中。给出了很多CAS登录方式,例如QQ、微博、微信、二维码等。

2. 根据loginType的值获取票据中心的类型。如果“ETEAMS_TGC”的Cookie值不为空,根据这个值从相应的票据中心中获取TGT。能获取到相应的TGT,说明身份认证通过。返回服务票据serviceTicketId。

3. 如果没能获取到TGT,尝试通过用户名创建凭证(密码固定为authPasswordFlag)。然后根据这个凭证去创建TGT。进而创建ST。

创建TGT

这段逻辑是根据提供的凭证和loginType进行用户身份验证,并生成Authentication对象。然后使用这个对象创建一个新的TGT。将生成的TGT存储在票据注册表中,返回生成的TGT的ID。身份验证的authenticate实际调用如下。

根据传入的loginType值找到对应的登录处理器。从凭证中获取UserInfo对象,如果该对象为空。根据手机验证码,或密码验证,或员工ID获取UserInfo。由于凭证的生成只包含了用户名密码,所以无法走入Mobile分支,而notCheckPassword中如下的loginType都会返回true。

另外之前的代码已经执行了credential.setNoPassword(true);也就无法进入else if分支。最终进入else执行getUserByEmpId。会根据传入的username查找userInfo。

后续会根据这个UserInfo创建相应用户的TGT。并返回TGT的id。

创建服务票据

a. 检查service是否符合格式Pattern.compile("^(https?|imaps?)://.*");

b. 从票据注册表中根据ticketGrantingTicketId 获取TGT

c. getNewTicketId生成服务票据ST的ID,并且这个ID以ST开头,以service名字作为后缀。

d. grantServiceTicket根据c中的ID生成服务票据ST。

e. 在票据中心中注册票据。返回生成的票据ID。

根据CAS的流程,有了服务票据ST去访问服务,可以获得相应的Cookie。用这个Cookie可以成功登录。理论上ETEAMS_TGC可以随时向CAS服务器换取相应服务的ticket通过身份校验。但是由于访问功能时,等于上图中直接访问app的步骤,需要的是Session Cookie而ETEAMS_TGC无法直接生效。关于CAS服务器部分,可以直接看com/weaver/weaver/intunifyauth/server/base/controller/CasServerController类的代码。

EteamsId

网上给出的poc中是通过ST访问服务去获取Cookie,即获取了EteamsId。查找EteamsId相关资料:泛微eteams认证登录是用户以泛微eteams为认证源安全登录第三方应用或者网站。并且全局还存在一个EteamsIdFilter。

用户每次登录时,必须输入 eteams 为其提供的唯一用户名和密码。eteams 仅发送 “cookie” 会话,用来记录特定会话过程中的加密身份验证信息。会话 “cookie” 不包含用户的用户名和密码。eteams 不使用 “cookie” 存储其他机密的用户和会话信息,而是实施了更高级的安全方法,这些方法基于动态数据和编码会话 ID。

定位com/weaver/passport/controller/PassportLoginController#generateEteamsId

跟进generateEteamsIdBySt,校验传入的ST,根据其中的用户信息生成EteamsId。EteamsId就是会话的cookie值。

POC

POST /papi/passport/rest/appThirdLogin?username=sysadmin&service=1&ip=1&loginType=third HTTP/1.1
Host: ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0 Content-Length: 0
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept-Encoding: gzip

复现

兑换

POST /papi/passport/login/generateEteamsId?stTicket=ST-xxx HTTP/1.1
Host: ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0 Content-Length: 0
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept-Encoding: gzip

复现

JDBC RCE漏洞

漏洞定位com/weaver/dw/datamodel/controller/DataConnController

jdbc连接

跟进testConn,典型的jdbc连接

常见的jdbc连接代码

// 配置数据库连接信息
String jdbcUrl = "jdbc:mysql://localhost:3306/your_database_name";
String username = "your_username";
String password = "your_password";// 加载数据库驱动创建连接
Class.forName("com.mysql.cj.jdbc.Driver");
connection = DriverManager.getConnection(jdbcUrl, username, password);// 执行sql
statement = connection.createStatement();
String sql = "SELECT * FROM table";
resultSet = statement.executeQuery(sql);

查看驱动类型有哪些,没有jdbc攻击常见的org.h2.Driver

看一下能控制的传入参数有哪些?

dbUrl可控。也就是可以利用相关数据库驱动造成RCE,例如mysql、db2等,但是大部分需要出网。还是想利用H2怎么办?

加载H2驱动

想要利用H2,需要对H2驱动进行加载,也就要有一步类加载过程。但是由于上面jdbc连接时,驱动是固定的,所以无法控制Class.forName的实际参数。

Class.forName("org.h2.Driver");

然后就有攻击者找到了com/weaver/client/controller/IaAuthclientController类的save方法

后续逻辑会进行switch(authType)的判断,而当这个值为custom时,对IaAuthclientCustomDTO的ruleClass值进行类加载。

POC

加载H2驱动器

POST /api/bs/iaauthclient/base/save HTTP/1.1
Host: ip
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
ETEAMSID: xxx
Connection: close
Content-Length: 87{"isUse":1,"auth_type":"custom", "iaAuthclientCustomDTO":{"ruleClass":"org.h2.Driver"}}

复现

执行jdbc攻击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西中区2024年度安全知识竞赛活动方案

为有效预防安全生产事故的发生,深化西中区全体员工对安全生产的认识,切实提升全体人员的安全意识和自我保护能力,夯实安全知识基础,丰富安全文化内涵,推动安全生产工作更加规范化、系统化,根据西中区安全生…

git 回滚的三种方式

按照从旧到新的顺序 你依次提交了 1 2 3 4 5 现在你想回到1 如何操作 第一种方法 hard reset git reset --hard 执行命令后 你会发现 效果实现了 东西都回到了那次更改 但是2345的更改都没了 并且你会发现 你有更新 这是因为这个hard reset 只会改本地的 远程的不改 一更新就…

EasyCVR视频汇聚平台:巧妙解决WebRTC无法播放H.265视频的难题

随着科技的飞速发展,视频监控已经成为现代安全管理不可或缺的一部分,广泛应用于智慧工地、智慧煤矿、智慧工厂、智慧社区和智慧校园等多个领域。在这个过程中,视频编码技术和实时通信技术显得尤为重要。EasyCVR视频汇聚平台,凭借其…

Python爬虫(一文通)

Python爬虫(基本篇) 一:静态页面爬取 Requests库的使用 1)基本概念安装基本代码格式 应用领域:适合处理**静态页面数据和简单的 HTTP 请求响应**。 Requests库的讲解 含义:requests 库是 Python 中一个…

机器人外呼有哪些优势?

机器人外呼,作为一种结合了计算机技术和人工智能技术的自动化工具,具有多重显著优势。以下是其主要优势的详细阐述: ### 1. 高效性 * **大幅提升工作效率**:机器人外呼可以全天候、不间断地进行工作,不受时间、地点和…

pytest+pycharm+HTMLTestReportCN实现接口自动化

前提:已安装pycharm,已配置python环境 第一步:新建一个py类,用来执行all的测试用例 import HTMLTestReportCN import unittest, os, yagmail# -*- coding: utf-8 -*- """ Time : 2024/9/2 14:50 Auth …

/单元测试

承接上文 统一异常处理&#xff0c;封装结果-CSDN博客 ******************************************** 登录业务 Service public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {Resourceprivate JwtUtils j…

数据库透明加密的定义与原理

数据库透明加密(TDE)是一种先进的加密技术&#xff0c;主要用于保护存储在数据库中的敏感数据&#xff0c;防止未经授权的访问和数据泄露。以下是对数据库透明加密的详细解析&#xff1a; 一、定义与原理 定义&#xff1a;数据库透明加密是一种在数据库管理系统(DBMS)中集成加密…

苹果笔记本电脑能不能玩游戏?苹果电脑玩游戏咋样?

过去Mac玩不了游戏最大的问题&#xff0c;就是图形API自成一体&#xff0c;苹果既不支持微软的DirectX&#xff0c;同时为了推广自家的Metal图形API&#xff0c;又对OpenGL和Vulkan两大主流的通用API敬而远之。游戏生态、硬件瓶颈让苹果电脑不适合玩游戏。 不过说到底&#xf…

点餐收银小程序

一、项目概述 Hi&#xff0c;大家好&#xff0c;今天分享的项目是《点餐收银小程序》。 系统含管理员/商家/用户三种角色&#xff0c;商家能维护菜式类别、维护菜品信息&#xff0c;用户在小程序能够选择门店&#xff0c;查看门店下各个分类的菜式信息&#xff0c;并进行加购…

ai免费生成ppt软件有哪些?我推荐秒出PPT

现在市面上的ai生成PPT软件非常的多。有收费的&#xff0c;也有不收费的&#xff0c;生成的效果也各不相同。要选择一个性价比高的确实难度不小。 我在使用了不少的产品之后&#xff0c;说一说我的心得。 首先就是&#xff0c;大部分免费的ai生成ppt产品并不好用。我怕不排除…

Cortex-A7的运行模式和寄存器组详解

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版2 Cortex-A7运行模式 2.1 运行模式 Cortex-A7共有9种运行模式&#xff0c;如下图所示&#xff1a; 除了用户模式之外其它模式均属于特权模式&#xff0c;在特权模式下处理器可以访问所有系统资源&am…

Golang | Leetcode Golang题解之第384题打乱数组

题目&#xff1a; 题解&#xff1a; type Solution struct {nums, original []int }func Constructor(nums []int) Solution {return Solution{nums, append([]int(nil), nums...)} }func (s *Solution) Reset() []int {copy(s.nums, s.original)return s.nums }func (s *Solu…

使用docker容器部署考试系统

8.30 回顾 1、使用harbor仓库 python --version yum -y update yum -y install python2-pip 部署考试系统 使用docker部署project-exam-system 1、在一台主机内&#xff0c;实现容器的编排看&#xff0c;发布考试系统 2、环境准备 docker docker-compose docker脚本 …

【Next】2. 项目构建

打开 Next.js 的官方文档&#xff1a;https://nextjs.org/docs/getting-started/installation&#xff08;国内文档不够新&#xff09; Next.js 版本 14.2 &#xff0c; Node.js 的版本要求必须 > 18.18。 Next 有两种开发模式&#xff0c;下面讲新的 APP Router。 创建项…

【R语言】基于Biomod2集成平台探究物种分布区的构建流程(SDMs)(持续更新中。。。。。。)

Species Distribution Models 1.写在前面2.物种分布模型介绍3.输入数据准备及预处理3.1.如何从GBIF网站上获取分布点数据&#xff08;基于rgbif包&#xff09;3.2.分布点稀疏处理&#xff08;基于spThin函数&#xff09;3.3.如何获取环境变量数据&#xff08;基于getData函数&a…

创建一个Spring MVC项目(配置,导入依赖,以及前端控制器)

Tomcat&#xff08;10.1.28&#xff09;配置 详细讲解&#xff01; 链接https://blog.csdn.net/or77iu_N/article/details/141266535?spm1001.2014.3001.5502 1、创建 Java Web 项目 File -> New -> Project 2、导入 Spring MVC 相关依赖 <dependency> <gro…

汽车乘客热舒适度大挑战,如何利用仿真技术提高汽车环境舒适度

舒适性在人们选择汽车的决定性方面占比越来越重&#xff0c;而汽车乘员舱环境的舒适性是指为乘员提供舒适愉快便利的乘坐环境与条件&#xff0c;包括良好的平顺性、车内的低噪声、适宜的空气环境以及良好的驾驶操作性能。 舒适性 经济性 安全性、动力性 典型的乘员舱热舒适性模…

测试 UDP 端口可达性的方法

前言&#xff1a; UDP (User Datagram Protocol) 是一种无连接的传输层协议&#xff0c;它不像 TCP 那样提供确认机制来保证数据包的可靠传输。因此&#xff0c;测试 UDP 端口的可达性通常需要一些特殊的方法&#xff0c;因为传统的端口扫描工具&#xff08;如 nmap&#xff0…

AGI系列(9)手把手带你玩转 Coze 画板节点

本文以智能体“日签卡片生成器”的制作来阐述 Coze 画板节点的使用方法。 效果演示 核心流程 日签卡片生成器工作流整体分为两部分&#xff1a; 工作流&#xff1a;其核心流程为通过用户输入的主题词生成卡片的标题、内容 图像流&#xff1a;通过LLM输出的内容在图像流完成卡…