一.利用Runtime进行反射
java.lang.Runtime.getRuntime().exec("")
若使用该paylaod,比如若依利用点如下:
Object bean = Class.forName(beanName).newInstance();
invokeMethod(bean, methodName, methodParams)
想要通过Class.forName(beanName).newInstance()成功实例化,必须满足类至少有一个无参的构造函数(这就是它的使用局限性)
也就代表有如下两个条件
1.public
2.无参
而Runtime类的构造函数是private的,不满足public条件,因此使用payload java.lang.Runtime.getRuntime().exec(“”),会报错。

二.利用ProcessBuilder进行反射
ProcessBuilder满足public,但是不满足无参构造方法

那么问题来了,我们平时写都是上面这样子,没有报错,也没有传进去参数,为什么说它没有无参构造函数,我们跟进去看看

进来后可以看到不是无参构造函数,只不过可以不加参数而已
文章讨论了在Java中利用反射进行实例化时,Runtime类由于其私有的构造函数无法被正常实例化,而ProcessBuilder虽然没有公开的无参构造器,但实际上可以不传参数使用。这揭示了Java类构造器的特性和反射使用的条件。
416

被折叠的 条评论
为什么被折叠?



