反射来命令执行存在的一些问题

Posted 番茄酱料

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射来命令执行存在的一些问题相关的知识,希望对你有一定的参考价值。

一.利用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反射的应用

为当前线程禁用 Java 反射

JAVA 反射

9.反射的基本原理

python中的反射

GoLanggolang 如何像Java 一样通过类名反射对象?