Java内存马的检测与发现

发布于:2025-05-15 ⋅ 阅读:(21) ⋅ 点赞:(0)

一、Java内存马的现象

webshell可以正常访问,并且从log日志中可以看到webshell的访问状态码为200,但是在对应的目录中却找不到文件,如果存在此类情况,可以判断服务器中了内存马
在这里插入图片描述

二、检测思路

根据Java内存马的特点,检测思路如下:

  • 注入jar包
  • dump已加载的class字节码
  • 反编译为java代码
  • 源码webshell检测

这样检测比较消耗性能,可以考虑缩小源码检测

三、重点关注类

在检测过程中需要重点关注的几个类和方法:

javax/servlet/http/HttpServlet#service
org/apache/catalina/core/ApplicationFilterChain#doFilter
org/springframework/web/servlet/DispatcherServlet#doService
org/apache/tomcat/websocket/server/WsFilter#doFilter

四、检测方法

1. 检查方法(FindShell)

排查工具:FindShell:https://github.com/geekmc/FindShell

安装&打包方法:

  1. 进入到FindShell目录,打包项目,执行mvn package
    • 如果没有mvn命令需要先install apache-maven
    • 如果报错提示sd-jdi.jar的问题,就需要修改pom⽂件中的sd-jdi.jar⽂件的路径,然后重新打包
  2. 打包成功后会在target⽬录下⽣成FindShell-1.0.jar⽂件

通过官方文档可以得知检测命令为java -jar FindShell.jar --pid [目标JVM的PID]

  1. 找到jvm进程,并记住pidjps -l
  2. 查找内存⻢并dumpclass⽂件(保存在当前路径下):java -jar FindShell-1.0.jar --pid xxx —debug

发现内存马提示如下图所示
c9.p
未发现内存马提示如下图所示:
在这里插入图片描述

针对dump出来的⽂件使⽤jd-gui进⾏class反编译,可以发现是冰蝎3.0

在这里插入图片描述
在这里插入图片描述

2. 检查方法(sa-jdi)

排查工具:sa-jdi.jar: 在jdk中的/lib/目录下、dumpclass.jar:https://github.com/hengyunabc/dumpclass

使用方法:
使用GUI的方法可以执行命令如下:

  1. 找到sa-jdi.jar⽂件位置:echo $JAVA_HOME/lib
  2. 出现图形化界面:sudo java -cp sa-jdi.jar sun.jvm.hotspot.HSDB
    • or 不找位置直接执行:sudo java -classpath "$JAVA_HOME/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB
    • or jhsdb hsdb

注:如果在attach进程的时候提示error,多半是权限问题,程序权限和木马权限保持⼀致即可
在这里插入图片描述
在这里插入图片描述
注入以后可以在菜单栏的tools中查看是否有关键类
在这里插入图片描述
如果发现存在关键class的话,可以使用dumpclass.jar或者sa-jdi文件进行dump(sa-jdi.jar可以点击下图的create进行创建)
在这里插入图片描述
如下图所示
左半部分图片上面为存在类,成功导出;
左半部分下面为不存在无法导出的结果
在这里插入图片描述
使用jd-gui进行反编译
在这里插入图片描述
在这里插入图片描述

3. 检查方法(arthas-boot)

检查工具:arthas-boot.jar:https://github.com/alibaba/arthas/releases

使用方法:

  1. java -jar arthas-boot.jar
    • 查看相关类名:sc xxxxx类名
    • 反编译类名:jad xxxxx类名
    • 下载指定类到本地:dump xxxxx类名

在这里插入图片描述
直接反编译选中的类

在这里插入图片描述

4. 检查方法(cop.jar)

检查工具:cop.jar:https://github.com/LandGrey/copagent/

使用方法:java -jar cop.jar -p xxx
在这里插入图片描述
执行后在本地存放扫描结果,并标注高、中、低危

在这里插入图片描述
同时也把可能有问题的代码转成java⼀并存放在本地

在这里插入图片描述
在这里插入图片描述

5. 检查方法(memshell_scanner)

检查工具:memshell_scanner.jsp:https://github.com/c0ny1/java-memshell-scanner

使用方法:把jsp文件放在存在内存马的web目录中,然后访问该文件即可

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b01a53f05dda4436b6c2258b39c9defb.png

参考链接:

其他内存马查杀工具:


网站公告

今日签到

点亮在社区的每一天
去签到