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();
}
原文始发于微信公众号(HACK安全):JAVA常见命令执行代码(超简单)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论