没有合适的资源?快使用搜索试试~ 我知道了~
Java安全漫谈 - 01.反射篇(1)1
资源详情
资源评论
资源推荐
Java安全漫谈 - 01.反射篇(1)
这是代码审计知识星球中Java安全的第篇章。
Java安全可以从反序化开始说起,反序化可以从反射开始说起。
反射是多数语都必可少的组成部分,对象可以通过反射获取他的类,类可以通过反射拿到所有
法(包括私有),拿到的法可以调,总之通过“反射”,我们可以将Java这种静态语附加上动态
特性。
这半我提到“动态特性”,我给这四个字赋予个含义:“段代码,改变其中的变,将会导致
这段代码产功能性的变化,我称之为动态特性”。我将在今的KCON上给家分享关于PHP中的动态
特性的议题,这就展开说。
PHP本身拥有很多动态特性,所以可以通过“话”来执各种功能;Java虽像PHP那么灵活,
但其提供的“反射”功能,也是可以提供些动态特性。如,这样段代码,在你知道传的参数值
的时候,你是知道他的作是么的:
上的中,我演示个在反射极为重要的法:
获取类的法: forName
实化类对象的法: newInstance
获取函数的法: getMethod
执函数的法: invoke
基本上,这个法包揽Java安全各种和反射有关的Payload。
forName 是获取“类”的唯途径,通常来说我们有如下三种式获取个“类”,也就
是 java.lang.Class 对象:
obj.getClass() 如果上下中存在某个类的实 obj ,那么我们可以直接通过
obj.getClass() 来获取它的类
Test.class 如果你已经加载某个类,只是想获取到它的 java.lang.Class 对象,那么就直接
拿它的 class 属性即可。这个法其实属于反射。
Class.forName 如果你知道某个类的名字,想获取到这个类,就可以使 forName 来获取
在安全研究中,我们使反射的的,就是绕过某些沙盒。如,上下中如果只有Integer类型的
数字,我们如何获取到可以执命令的Runtime类呢?也许可以这样(伪代
码): 1.getClass().forName("java.lang.Runtime")
关于绕沙盒,之前Code-Breaking 2018我出道SpEL的题,分享篇第三Writeup:http://rui0.
cn/archives/1015
public void execute(String className, String methodName) throws Exception {
Class clazz = Class.forName(className);
clazz.getMethod(methodName).invoke(clazz.newInstance());
}
1
2
3
4
设计师马丁
- 粉丝: 15
- 资源: 299
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0