JAVA常见命令执行代码(超简单)
2023-5-6 13:31:56 Author: HACK安全(查看原文) 阅读量:13 收藏


1.最为常见的一种Runtime

所以在审计时,其实可以关注一下这个函数,而exec("")中其实都会放接收到的参数。

Runtime.getRuntime().exec("calc");

2.ProcessBuilder执行命令

这里本人简化了,只是想告诉大家这种执行命令的方法。在审计过程中,本人会先关注到有没有使用ProcessBuilder这个类,如果有使用的话,其次会关注有没有调用到start这个方法。以上条件都存在我会寻找command()函数中的传参是否可控。如果可控的情况,则会进一步挖掘。

ProcessBuilder processBuilder = new ProcessBuilder();processBuilder.command("calc");processBuilder.start();

3.反射执行命令

其实反射来玩的话,操作性就非常大了。根据自己思路可自由发挥

首先str存放的是Runtime这个类

而后通过forName获取到的Class进一步使用getMethod。最终通过invoke调用来执行命令

String str = new String(new byte[]{106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101});Class<?> c = Class.forName(str);Method m1 = c.getMethod("getRuntime");Method m2 = c.getMethod("exec",String.class);try {   m2.invoke(m1.invoke(null,new Object[]{}),new Object[]{"calc"});} catch (IllegalAccessException e) {    e.printStackTrace();} catch (InvocationTargetException e) {    e.printStackTrace();}

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NjU0MjA0Ng==&mid=2247487392&idx=1&sn=9cd11222e41a6359d0212b49ef07860d&chksm=ce480711f93f8e0739970c88cf6ff499d8d3a6c357b9e199dd8e32db6e6c860ea6f73fd35f23#rd
如有侵权请联系:admin#unsafe.sh