JAVA安全 | 初探反射反序列化

2025-01-08 5 0

引言

致力于用最简单的话语,去方法师傅们的学习,开设 java安全的学习板块 。

本篇文章分为三个板块,反射与反序列化的学习,以及urldns链条的跟踪原理。

反射 

当我们创建一个新对象时,用idea快捷键Ctrl+p就可以直接看到我们构造对象所需要的形参,这时候我们就不禁思考,为什么能够直接看到的?

其实这里的就是调用了反射,获取方法的参数并且将其反馈到我们的屏幕上。

JAVA安全 | 初探反射反序列化插图

反射首先需要获取class文件,以下为最常见的三种获取class文件的方法。

  • Class.forName(全类名)    //源代码阶段   
  • 类名.class                        //加载阶段 
  • 对象.getClass()                //运行阶段

通过获取其字节码文件便可调用其中的方法。

getConstructor()                       获取某种构造方法

getConstructors()                      获取所有公共构造方法

getDclaredConstructors()         获取所有构造方法包括私有

getParameter()                          获取某个参数变量

getParameters()                        获取所有参数变量

getFiled()                                  获取某个成员属性

getFileds()                                获取所有成员属性

getDclaredFileds()                    获取所有包括私有成员属性

getMethod()                             获取所有公共方法包括父类

getDclaredMethod()                 获取所有方法包括私有除父类

invoke(对象 ,参数)                 执行方法

这里还有反射的newInsatnce方法,这个作用就跟new的作用一样,正如他的意思新的实例,两个本质上的区别就是newInsatnce调用需要先加载这个类的字节码文件,而new不需要。

案例

此处举一个代码示例方便理解

import java.lang.reflect.Field;

public class SerializeTest {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {

Class<?> aClass = Class.forName("com.zyf.User");

Field name = aClass.getDeclaredField("name");
name.setAccessible(true);
//这里的setAccessible相当于给了临时访问私有成员的权限

User u = new User("张三", 18);
Object o = name.get(u);
//获取u对象中的name成员值
System.out.println(o);

name.set(u,"李四");
//将u的name成员值重新设置为李四
System.out.println(u.getName());


Method s = aClass.getDeclaredMethod("sing", String.class);
s.setAccessible(true);
//同理,具有访问私有方法的临时权限

User user = new User();
s.invoke(user,"奇迹再现");
//触发sing方法
}
}

JAVA安全 | 初探反射反序列化插图1

JAVA安全 | 初探反射反序列化插图2

可以看到成功执行JAVA安全 | 初探反射反序列化插图3


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

文件包含漏洞从入门到精通
【vulhub】Fastjson1.2.24反序列化导致任意命令执行漏洞复现
2025年,这些网安“传奇产品”都凉了?
2024年软件系统安全赛攻防赛web题CachedVisitor题解
企业防线的薄弱环节:深入了解供应链网络攻击的风险
震惊!?DLP还能这样用

发布评论