原标题:java反射
反射是大多数语言里都必不不可少的组成部分,对象可以通过反射获取他的类,类可以通过反射拿到所有方法(包括私有),拿到的方法可以调用,总之通过反射,我们可以将Java这种静态语言附加上动态特性。
什么是反射
java的反射是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法,并且对于任意一个对象。
基本形式
上面的例子中,我演示了几个在反射里极为重要的方法:获取类的方法:forName实例例化类对象的方法:newInstance获取函数的方法:getMethod执行函数的方法:invoke
反射的作用:
让Java具有动态性,修改已有对象的属性,动态生成对象,动态调用方法,操作内部类和私有方法
在反序列化漏洞中的应用
定制需要的对象,通过invoke调用除了同名函数以外的函数,通过class类创建对象,引入不能序列化的类
java反射举例
此处引用白日梦组长的例子,具体讲解一下反射。
先写一个Person作为我们下面演示的原型类
public void act{System.out.println(“test”);}@Overridepublic String toString {return “Persion{” +“name=” + name + \ +“, age=” + age +};}
public String getName {return name;}
public void setName(String name) {this.name = name;}
public int getAge {return age;}
public void setAge(int age) {this.age = age;}
public Person {}
public Person(String name, int age) {this.name = name;this.age = age;}}
获取原型类
使用forName方法
在此也写一种基于ClassLoader的动态类加载方式
从原型class里面实例化对象
利用构造函数实例化
我们来逐行写一下分析
这一行是为了获取原型类中重载的构造方法
对构造方法进行传参实例化一个对象
我们可以打印一下p1看一下返回结果
获取类里面的属性
public
private
获取类方法
Method actmethod = c.getMethod(“act”,String.class);
actmethod.invoke(p1,”SKyMirror”);
getMethod 与上面的获取构造函数类似,第一个参数是函数名,第二个是传参的类型
invoke方法第一个传入对象,第二个是传入参数值
利用URLDNS(反射)
这条链子算是反射的一个简单应用。
利用点
URL这个类重写了hashCode方法,导致在执行hashCode的时候,此利用点不能命令执行,但是会请求DNS,所以被用来验证是否存在反序列化漏洞。
源码如下:
可以看到当我们调用一次hashCode方法,他会对传进去的URL对象发起请求,即我们如果去DNSLOG申请一个地址,根据访问来判断是否成功执行了hashCode方法进而判断是否执行了反序列化的操作。
URL这个类实现了java.io.Serializable,可以进行序列化的操作。
因此,在这里我们可以验证一下我们上面的想法。
链子
这个链子也比较短,比较简单,主要是利用HashMap来执行hashCode方法
HashMap实现了Serializable可以序列化,此处注意反序列化时HashMap的readObject方法
我们跟进一下hash方法
key参数可控,key又是由反序列化的时候生成的。在HashMap中用put传入一个URL的对象,即可在反序列化的时候调用到此方法,从而触发整个链子。
有一点需要注意,我们在序列化的时候,进行的put传参会修改掉传入的URL对象的hashCode的值,因为hashCode值不等于-1,从而导致无法正常触发下面的方法,即无法触发DNS请求。
同时在正常put传参的时候会执行一次DNS请求,所以我们在put传参之前修改hashCode的值(不为-1就行),传参之后修改hashCode为-1,在反序列化的时候就可以正常执行了。
payload如下
hashMap.put(u,123);//修改URL对象的hashCode值为-1hashcodeField.set(u,-1);serialize(hashMap);}
原创稿件征集
征集原创技术文章中,欢迎投递
投稿邮箱:edu@antvsion.com
文章类型:黑客极客技术、信息安全热点安全研究分析等安全相关
通过审核并发布能收获200-800元不等的稿酬。
更多详情,点我查看!
限时免费靶场实操,戳阅读原文返回搜狐,查看更多
责任编辑:
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容