没有合适的资源?快使用搜索试试~ 我知道了~
Java安全漫谈 - 05.RMI篇(2)1
需积分: 0 1 下载量 75 浏览量
2022-08-03
15:56:25
上传
评论
收藏 531KB PDF 举报
温馨提示
原因是,通常我们在新建一个RMI Registry的时候,都会直接绑定一个对象在上面,也就是说我们示例代码中的Server其实包含了Registry和Serve
资源推荐
资源详情
资源评论
Java安全漫谈 - 05.RMI篇(2)
这是代码审计知识星球中Java安全的第五篇文章。
上一篇我们详细描述了RMI的通信过程,总结一下,一个RMI过程有以下三个参与者:
RMI Registry
RMI Server
RMI Client
但是为什么我给的示例代码只有两个部分呢?原因是,通常我们在新建一个RMI Registry的时候,都会
直接绑定一个对象在上面,也就是说我们示例代码中的Server其实包含了Registry和Server两部分:
第一行创建并运行RMI Registry,第二行将RemoteHelloWorld对象绑定到Hello这个名字上。
Naming.bind 的第一个参数是一个URL,形如: rmi://host:port/name 。其中,host和port就是
RMI Registry的地址和端口,name是远程对象的名字。
如果RMI Registry在本地运行,那么host和port是可以省略的,此时host默认是 localhost ,port默认
是 1099 :
以上就是RMI整个的原理与流程。接下来,我们很自然地想到,RMI会给我们带来哪些安全问题?
从两个方向思考一下这个问题:
1. 如果我们能访问RMI Registry服务,如何对其攻击?
2. 如果我们控制了目标RMI客户端中 Naming.lookup 的第一个参数(也就是RMI Registry的地
址),能不能进行攻击?
如何攻击RMI Registry?
当我们可以访问目标RMI Registry的时候,会有哪些安全问题呢?
首先,RMI Registry是一个远程对象管理的地方,可以理解为一个远程对象的“后台”。我们可以尝试直
接访问“后台”功能,比如修改远程服务器上Hello对应的对象:
却爆出了这样的错误:
LocateRegistry.createRegistry(1099);
Naming.bind("rmi://127.0.0.1:1099/Hello", new RemoteHelloWorld());
1
2
Naming.bind("Hello", new RemoteHelloWorld());1
RemoteHelloWorld h = new RemoteHelloWorld();
Naming.rebind("rmi://192.168.135.142:1099/Hello", h);
1
2
资源评论
创业青年骁哥
- 粉丝: 28
- 资源: 341
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功