JAVA反序列化学习——危险类
嗯,用户让我帮忙总结一下这篇文章的内容,控制在一百个字以内,而且不需要用“文章内容总结”或者“这篇文章”这样的开头。直接写描述就行。好的,首先我得仔细阅读一下这篇文章,了解它的主要内容。 看起来这篇文章主要讲的是Java中的Runtime类如何被用来执行命令,存在安全风险。文章详细介绍了Runtime类的使用方法,包括exec方法的参数和反射调用的示例。还提到了如何通过反射来调用Runtime类的方法,以及如何读取命令执行后的输出流。 另外,文章还提到了免责声明,说明文中提供的技术信息仅供参考,不构成专业建议,并提醒读者遵守相关法律法规。最后还有关于独立观点和禁止转载的声明。 所以,总结一下,这篇文章主要讨论了Java中Runtime类的命令执行漏洞及其利用方式,并附有免责声明。需要控制在一百个字以内,所以得简洁明了地表达出来。 可能的总结是:“文章探讨了Java中Runtime类的命令执行漏洞及其利用方式,并提供了代码示例和免责声明。” 这样既涵盖了主要内容,又符合字数限制。 </think> 文章探讨了Java中Runtime类的命令执行漏洞及其利用方式,并提供了代码示例和免责声明。 2025-12-13 09:46:32 Author: www.freebuf.com(查看原文) 阅读量:0 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

java中常见危险类

一、Runtime命令执行

1.Runtime类

  • RuntimeJDK 自带、位于 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(输入流)里的。于是,实现下面步骤即可

    1. 执行exec,得到Process对象。

    2. 反射调用ProcessgetInputStream() 方法。

    3. 读取流中的数据。

    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)


文章来源: https://www.freebuf.com/articles/web/461879.html
如有侵权请联系:admin#unsafe.sh