首页 > 系统相关 >Java-webshell 排查

Java-webshell 排查

时间:2023-02-17 14:24:32浏览次数:43  
标签:webshell Java 排查 jsp jvm arthas java 加载

参考:

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

标签:webshell,Java,排查,jsp,jvm,arthas,java,加载
From: https://www.cnblogs.com/starrys/p/17127191.html

相关文章

  • JavaScript常见问题梳理
    1、this指向1、全局函数this指向全局对象window,注意严格模式下,this为undefined//[objectWindow]alert(this);functionf(){alert(this)}f()//undefinedfu......
  • java 内存锁
    importlombok.extern.slf4j.Slf4j;importjava.util.Map;importjava.util.concurrent.ConcurrentHashMap;importjava.util.concurrent.locks.Lock;importjava.util.con......
  • Java: RocketMQ事务消息的优雅使用
    背景在项目中,技术方案需要使用事务消息来保证最终一致性达到实现业务的目的。但在一个服务中有多个业务需要使用事务消息发送不同的消息类型到不同的Topic时,RocketMQ的本......
  • java二维数组
    1.查找1)顺序查找SeqSearch.java2)二分查找【二分法,放在算法讲解】2.顺序查找有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:从键盘中任意输入一个名称,判......
  • javascript的一些基础知识
    随手记录一些javascript的一些基础知识,之前只是简单用到javascript,并没有了解其中的概念。1. JavascriptObject:InJavaScript,almost"everything"isanobject.......
  • java基础巩固-详解泛型
    java泛型(generics)为jdk5引入的新特性,泛型提供了编译时类型安全检测机制,可以在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参......
  • JAVA 学习笔记(五)
      子类通过方法的重写机制可以隐藏继承父类的方法,把父类的状态和行为改变为子类自己的状态和行为.假如父类中有一个方法myMethod(),一旦子类重写了超类的方法myMethod......
  • JAVA 抽象类
    抽象类 在java语言继承层次结构中,位于上层的类更具有通用性,甚至更加抽象,这些类封装的方法被重写的可能更大.java用关键字  abstract 格式为: [访问控制符]a......
  • 找素数(java)
    什么是素数?质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。实际案例比如我们想找出1-1000......
  • 2023-02-Java面试经历
    2022年12月中旬不幸被裁,拿N+1撤了,临近过年在家休息了一个月,元宵节之前从山西返杭的,2月7号开始投简历,谈谈最近面试的经历吧,期望能在2月底3月初左右入职吧....................