Loading

Java-webshell 排查

参考:

https://javasec.org/javaweb/MemoryShell/

https://goodapple.top/archives/1355

简介

本次分享为 java webshell 排查初级。抛砖引玉

java 获取 web 权限的 shell,包括:

落地webshell:

  1. 普通一句话木马
  2. 冰蟹、蚁剑、哥斯拉等 webshell 管理工具自带 webshell

无文件 webshell:

  1. 动态注册 servlet/filter/listener(使用 servlet-api 的具体实现)
  2. 动态注册 interceptor/controller(使用框架如 spring/struts2)
  3. 动态注册使用职责链设计模式的中间件、框架的实现(例如 Tomcat 的 Pipeline & Valve,Grizzly 的 FilterChain & Filter 等等)
  4. 使用 java agent 技术写入字节码。wsmemshell

排查方法:调试 jvm,因为所有的 java 代码都得加载到 jvm 中运行

用到的工具:

arthas Java诊断利器Arthas

copagent java 内存马提取工具

java-memshell-scanner jsp 脚本,识别 filter 、servlet 型内存马

D盾、河马webshell 查杀、在线文件分析平台、火眼金睛。

behinder godzillaantswordwsmemshell

常见排查技巧

使用 arthas

直接使用 arthas 找所有的类即可,因为 jsp 编译过后的类名末尾都会带上 jsp 后缀。

sc *_jsp*

image-20220907154630778

sc *_jsp$*

常见的连接工具的 webshell ,都会使用 在 webshell 落地文件内创建内部类,而内部类都是通过 $ 标识的 。

image-20221129163239251

classloader -l

通过 classloader 去看 org.apache.jasper.servlet.JasperLoader 加载的类,落地的 webshell jsp 文件都是通过该类去加载

image-20221130005737494

使用 copagent,其输出的 allLoadedClasses.txt 按照加载顺序展示出jvm 加载的所有类。此处可以从下往上依次去找

image-20221130072032237

工具使用技巧

arthas

image-20221130074320862

在jvm中导出可疑类,导出路径默认为 pwd 路径。

jad --source-only org.apache.jsp.webshells.behinder_002d4_0_4_jsp > z.java

image-20220907160932897

若排查到了内存马,通常的处置方式是进行重启业务服务器,而 arthas 提供了redefine 、retransform 机制,可以直接对 jvm 中的类进行替换。

image-20221130074026890

copagent

copagent 可以扫描jvm,导出可疑的字节码,并进行反编译。输出物中通常需要关注的有三个:

image-20221130072656677
  1. result.txt 存放可疑类的扫描结果。

    可以查看其扫描结果。

    image-20221130072138901
  2. allLoadedClasses.txt 按照加载顺序 展示出 jvm 加载的所有类。

    可以根据加载时间,定位一段时间后加载的所有类。

    image-20221130073543188
  3. java 目录,输出所有可疑类的源码。

    使用多种webshell查杀工具,对 java 目录下的webshell 进行查杀。

    image-20221130073724717
posted @ 2023-02-17 14:09  沉云  阅读(653)  评论(0编辑  收藏  举报