一.利用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,但是不满足无参构造方法
那么问题来了,我们平时写都是上面这样子,没有报错,也没有传进去参数,为什么说它没有无参构造函数,我们跟进去看看
进来后可以看到不是无参构造函数,只不过可以不加参数而已