java中常见危险类
一、Runtime命令执行
1.Runtime类
Runtime是 JDK 自带、位于 java.lang 包中的类,每个 JVM 进程内部只有一个 Runtime 实例。
正常调用计算机方式:
Runtime rt = Runtime.getRuntime();
rt.exec("calc.exe");
2.类详解
类中方法
exec方法
public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException { return new ProcessBuilder(cmdarray) .environment(envp) .directory(dir) .start(); } rt.exec("calc.exe");getRuntime方法
因为他是单例类,所以在创建类时需要使用其内部提供的构造方法
Method getRuntimeMethod = clazz.getMethod("getRuntime"); Runtime runtime = (Runtime) getRuntimeMethod.invoke(null); Method execMethod = clazz.getMethod("exec", String.class); execMethod.invoke(runtime, "calc.exe"); Class.forName("java.lang.Runtime").getMethod("exec",String.class).invoke(Class.forName("java.lang.Runtime").getMethod("getRuntime").invoke(null),"calc");//最短代码
实现命令回显
当你调用 exec 时,它返回的是一个 java.lang.Process 对象。命令的执行结果(比如 whoami 输出的用户名)是在这个 Process 对象的 InputStream(输入流)里的。于是,实现下面步骤即可
执行
exec,得到Process对象。反射调用
Process的getInputStream()方法。读取流中的数据。
Class<?> clazz = Class.forName("java.lang.Runtime"); Method getRuntimeMethod = clazz.getMethod("getRuntime"); Runtime runtime = (Runtime) getRuntimeMethod.invoke(null); Method execMethod = clazz.getMethod("exec", String.class); // 执行命令 Object process = execMethod.invoke(runtime, "ipconfig"); Class<?> processClass = Class.forName("java.lang.Process"); Method getInputStreamMethod = processClass.getMethod("getInputStream"); java.io.InputStream is = (java.io.InputStream) getInputStreamMethod.invoke(process); Scanner scanner = new Scann
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)



