Jini和RMI开发中的codebase 软件开发JiniRMIcodebase摘要:郑志无VIP开放系统世界
利用codebase执行任意代码 codebase是一个地址告诉虚拟机在哪里搜索类,如:codebase=http://example.com/,就会加载org.vulhub.example.Example类,在RMI流程中,客户端和服务端传递的是序列化后的对象,在这些对象反序列时就会去寻找类,寻找时会先在ClassPath下寻找,然后在codebase中寻找。如果可以控制codebase就能加载恶...
同样,当服务器端访问客户端的远程对象时,如果服务器端不存在相关的类文件,腐务器就会从 java.rmi.server.codebase 属性指定的位置动态加载它们 此外,当服务器向 RMI 注册器注册远程对象时,注册器也会从 java.rmi.server.codebase 属性指定的位置动态加载相关的远程接口的类文件 前面的例子都是在同一个 classpath...
codebase是一个地址,告诉Java虚拟机我们应该从哪个地方去搜索类,有点像我们日常用的CLASSPATH,但CLASSPATH是本地路径,而codebase通常是远程URL,比如http、ftp等。 如果我们指定 codebase=http://example.com/ ,然后加载 org.vulhub.example.Example 类,则Java虚拟机会下载这个文件http://example.com/org/vulhub/ex...
可见,我们的codebase是通过[Ljava.rmi.server.ObjID;的classAnnotations传递的。 所以,即使我们没有RMI的客户端,只需要修改classAnnotations的值,就能控制codebase,使其指向攻击者的恶意网站。 classAnnotations是什么? 虽然我们还没讲到Java反序列化,但这里还是补充一下这个知识,否则可能会有的同学一头雾水。
public class RMIClient { public static void main(String[] args) throws Exception { // JDK 6u45、7u21之后,需要设置useCodebaseOnly System.setProperty("java.rmi.server.useCodebaseOnly", "false"); // 配置policy文件以允许从远程加载类库 System.setProperty("java.security.policy","D://java.policy...
动态类加载:如果client端传递的方法参数是server端绑定对象的方法参数类型的子类,那么server端需要从client端提供的java.rmi.server.codebaseURL去加载对应的类(恶意类)。 1. 恶意服务参数 在Client 端获取到 Server 端创建的 Stub 后,会在本地调用这个 Stub 并传递参数,Stub 会序列化这个参数,并传递给 Server 端...
JDK6u132、JDK7u122、JDK8u113开始com.sun.jndi.rmi.object.trustURLCodebase默认值改为了false。 本地测试远程对象引用可以使用如下方式允许加载远程的引用对象 System.setProperty("java.rmi.server.useCodebaseOnly", "false"); System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true"); ...
根据java官方说明:《Dynamic code downloading using Java™ RMI(Using the java.rmi.server.codebase Property)》 https://docs.oracle.com/javase/7/docs/technotes/guides/rmi/codebase.html java.rmi.server.codebase指定的类加载位置URL可以是jar包,也可以是‘/’结尾的类路径,但不可以是嵌套式的fat-jar...