原理
• 利⽤ Java Agent 技术遍历所有已经加载到内存中的 class 先判断是否是内存⻢,是则进⼊内存查杀
• 访问时抛异常 (或跳过调⽤),中断此次调⽤
• 从系统中移除该对象
排查方式
• 如果是 jsp 注⼊ ⽇志中排查可疑 jsp 的访问请求
• 如果是代码执⾏漏洞,排查中间件的 error.log,查看是否有可疑的报错,判断注⼊时间和⽅法
• 根据业务使⽤的组件排查是否可能存在 java 代码执⾏漏洞以及是否存在过 webshell,排查框架漏洞,反序列化漏
洞。
• 如果是 servlet 或者 spring 的 controller 类型,根据上报的 webshell 的 url 查找⽇志(⽇志可能被关闭,不⼀定
有),根据 url 最早访问时间确定被注⼊时间。
• 如果是 filter 或者 listener 类型,可能会有较多的 404 但是带有参数的请求,或者⼤量请求不同 url 但带有相同的参
数,或者⻚⾯并不存在但返回 200
查杀方式
可以使⽤哥斯拉,冰蝎,或者上⽂提到的内存⻢进⾏⼀个⽣成,然后再进⾏查杀。
1. VisualVM(远程调试)
VisualVM 是⼀个集成多个 JDK 命令⾏⼯具的可视化⼯具。可以作为 Java 应⽤程序性能分析和运⾏监控的⼯具。开发人员可以利⽤它来监控、分析线程信息,浏览内存堆数据。系统管理员可以利⽤它来监测、控制 Java 应⽤程序横跨整个网络的情况。
通过图形化进⾏界⾯审计
2. arthas
arthas 是 Alibaba 开源的 Java 诊断⼯具 https://github.com/alibaba/arthas
是⼀个⽐较好⽤的 java 应⽤检测⼯具,了解⽂档可以从这⾥ https://arthas.aliyun.com/zh-cn/
mbean(查看 Mbean 的信息,查看异常 Filter/Servlet 节点)
mbean | grep "Servlet"
dashboard(显示当前⾯板的实时状态)
jad(反编译指定已加载类的源码)
sc 对 jvm 已经加载的类进⾏搜索
3. Copagent
这个项⽬是上⾯的改进版本,直接可以确定⻛险等级,并且将内存中的信息全部输出。项目地址:https://github.com/LandGrey/copagent 试了⼀下,只有 jdk1.8 能够运行,之后会⽣成⼀个. copagent,⾥⾯有扫描结果。
在 result ⾥⾯可以查看结果,展示详细信息
根据⻛险等级判断
在相关 class ⽂件⾥查找这个包
代码可以在相关 java 文件里找到
4. java-memshell-scanner
https://github.com/c0ny1/java-memshell-scanner
通过 jsp 脚本扫描并查杀各类中间件内存⻢比 Java agent 要温和⼀些
标签:java,Tomcat,查杀,Filter,内存,https,Java,com From: https://blog.51cto.com/u_14156098/7492006