环境搭建
我在WINDOWS7虚拟机下搭建的Tomcat,搭建教程网上都有,点击startup.bat启动环境
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
注入内存马
这里使用了哥斯拉的内存马
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
查杀方式一:VisualVM(远程调试)
设置jstatd.all.policy 文件
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
启动jstatd
jstatd.exe -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=serverip
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
设置JVM Connection 修改 catalina.sh文件(LINUX)
JAVA_OPTS="-Djava.rmi.server.hostname=服务器的ip
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=jmx使用的端口
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false $JAVA_OPTS"
export JAVA_OPTS
修改catalina.bat文件(WINDOWS)
set JAVA_OPTS=-Djava.rmi.server.hostname=192.168.67.115 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
下载VisualVM
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
MBeans安装插件
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
连接远程Tomcat
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
检查异常攻击痕迹Filter/Servlet节点
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
在Servlet节点中我发现到了自己设置的内存马test.ico,说明已经检测到了内存马
查杀方式二:arthas
arthas是Alibaba开源的Java诊断工具
https://github.com/alibaba/arthas
下载
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
文档地址 https://arthas.aliyun.com/doc/quick-start.html
非常Nice的工具,深入用法请查看使用文档,这里只检测探测一下
启动(选择对应tocmat进程pid)
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
mbean(查看 Mbean 的信息,查看异常Filter/Servlet节点)
mbean | grep "Servlet"
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
sc (查看JVM已加载的类信息)
sc xxx.* 模糊搜索类
sc -d
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
查看payload加载的类信息
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
查看x.AES_BASE64类加载的类信息
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
jad(反编译指定已加载类的源码)
jad 类名
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
还有很多用法值得慢慢学习~
查杀方式三:Copagent
由于VisualVM在环境中可能还需要配置JVM Connection远程调试,我在长亭一篇文章中发现了LandGrey师傅所写的内存马检测工具,经过在本地Tomcat测试,可以检测到我自己设置的内存马,而无需重启Tomcat服务(重启了内存马不就没了吗?)先贴上Git地址
https://github.com/LandGrey/copagent
我本地运行Tomcat服务,使用cop.jar工具,工具首先会识别你正在运行的应用列举出来由你自己选择ID,运行后会在.copagent目录生成结果
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
在输出结果中,可以查看异常类,例如我的1.jsp
和X.AES_BASE64
,他会显示所有运行的类以及危险等级,比较高的可以进入目录查看代码进行分析
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
在java或class文件夹会保存木马以及运行的类
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
![[防守视角] tomcat内存马的多种查杀方式](https://ae01.alicdn.com/kf/Uf8bc8505674e4a058d3c52481e6fc567E.png)
参考
- https://mp.weixin.qq.com/s/DRbGeVOcJ8m9xo7Gin45kQ
- https://qiita.com/shimizukawasaki/items/5dc9fe780ffbf3a7699c
原创文章,作者:syst1m,未经授权禁止转载!如若转载,请联系作者:syst1m