看了eki师傅的文章,rmi内容还是挺多的,有时间整理一下

攻击方法总结

攻击类型 适用jdk版本 需要条件
加载远程类 <7u21、6u45
加载远程类 任意 SecurityManager allow/ java.rmi.server.useCodebaseOnly=false
远程对象方法参数反序列化 <8u242 远程对象参数除int、boolean等基本类外/服务端存在反序列化链
远程对象方法参数反序列化 任意 远程对象参数除int、boolean等基本类和String类外/远程对象环境存在反序列化链
Registry方法参数反序列化 <8u121,7u13,6u141 Registry端存在反序列化链
远程对象方法结果 任意 调用端存在反序列化环境
DGC方法返回值存在反序列化 <8u121,7u13,6u141 调用端存在反序列化链
JRMI CALL 报错反序列化 任意 调用端存在反序列化链
Registry bind/rebind 触发JRMI CALL报错 <8u231 Registry存在反序列化链
Registry 方法参数反序列化触发JRMI CALL报错 <8u241 Registry存在反序列化链

Remote Method Guesser

qtc-de/remote-method-guesser: Java RMI Vulnerability Scanner (github.com)

一个很好用的rmi工具,基本包含了以上所有的攻击方法,这里改写一下serial攻击中的流程,添加一下自定义对象的传输

原先传递的恶意对象只能从yso中获取,可以添加一种b64和hex传入对象的方式,这样就可以支持自定义的序列化对象,用来绕过一些黑名单,或者达成一些特殊的攻击

src/de/qtc/rmg/plugin/DefaultProvider.java中添加自定义的参数处理,b64和hex

image-20230305143548867

src/de/qtc/rmg/utils/RMGUtils.java中添加函数,从参数中获取path,并从指定路径中加载类

image-20230305143730259

Reference

JAVA 协议安全笔记-RMI篇 - 跳跳糖 (tttang.com)

Java安全之RMI反序列化 - 先知社区 (aliyun.com)

Java反序列化RMI专题-没有人比我更懂RMI_哔哩哔哩_bilibili

qtc-de/remote-method-guesser: Java RMI Vulnerability Scanner (github.com)