Skip to content

Latest commit

 

History

History
53 lines (44 loc) · 3.23 KB

File metadata and controls

53 lines (44 loc) · 3.23 KB

发起RMI请求(RMIConnectWrappedWithProxy)

  • 类别:javanative 别名:— 优先级:—
  • 作者:Wh1t3p1g
  • 依赖:无(纯 JDK)

作用

把内层 UnicastRef动态代理包装成一个 Remote 对象。反序列化该代理时,其 RemoteObjectInvocationHandler 会驱动 UnicastRef 向攻击者 JRMP 地址发起 RMI 连接,触发二次反序列化。是 RMIConnectWrapped 的动态代理变体,同样用于绕过 jdk >= 8u121 的 RMI 限制。

链接标签

  • 入口 tags:无——不作为标签自动串联的入口。
  • 衔接 nextTagsRMIConnect —— 之后需接一个产出 UnicastRef/RemoteRef(指向恶意 JRMP 地址)的 gadget。
  • excludes:无。

源码剖析

public class RMIConnectWrappedWithProxy extends RMIConnectWrapped {
    @Override
    public Remote getObject(Object obj) throws Exception {
        return (Remote)Proxy.newProxyInstance(
            RemoteRef.class.getClassLoader(),
            new Class[]{Remote.class},
            new RemoteObjectInvocationHandler((UnicastRef)obj));
    }

    @Override
    public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
        Object object = chain.doCreate(context);
        return this.getObject(object);
    }
}
  • 本类 extends RMIConnectWrapped,仅覆写 getObject:不再用 RMIServerImpl_Stub,而是用 Proxy.newProxyInstance 生成一个实现 Remote 接口的动态代理,其 InvocationHandlerRemoteObjectInvocationHandler,后者持有内层 UnicastRef
  • 反序列化时,RemoteObjectInvocationHandler 随代理一并恢复,内部 UnicastRef 携带攻击者的 endpoint;当 RMI 框架对该 Remote 代理触发方法调用时,handler 转发到 UnicastRef.invoke,即向 JRMP 地址发起连接,远端返回对象被本地反序列化。
  • invoke 逻辑与基类一致:chain.doCreate 取内层 UnicastRef,交 getObject 包装。链由内向外构建。
  • 与基类的差别在载体形态:基类走 RMIServerImpl_Stub(具体 stub 类),本类走通用动态代理,二者应对不同的过滤/白名单环境,可择优绕过。

参数(@Param)

本类无 @Param。JRMP 目标地址由下游产出 UnicastRef 的 gadget 决定。

适用版本与原理要点

  • 纯 JDK;适用 jdk >= 8u121——用动态代理 + RemoteObjectInvocationHandler 包装 UnicastRef 发起 RMI 连接。
  • 本身不 RCE,需配合攻击者 JRMP Listener 返回二次 payload。
  • 与基类 RMIConnectWrapped 语义相同、包装手法不同;实测中若目标对 stub 类有限制可切换到代理版,反之亦然。

所属预设链

自由构件,未直接出现在预设链(usedInChains 为空)。

关联

  • 基类:RMIConnectWrappedRMIServerImpl_Stub 包装)。
  • 同族(不同 bypass):RMIConnectWithUnicastRemoteObject(UnicastRemoteObject + ssf 反射,jdk 8u232~8u242)。
  • 下游(nextTags=RMIConnect):产出恶意 UnicastRef/RemoteRef 的 gadget(amf 类别 UnicastRefGadgetUnicastRef2Gadget)。
  • 相关:JRMPClient/JRMPListenerRMIConnector