/JSPKiller-1

JSP Webshell检测工具,核心原理是模拟JVM栈帧实现简单的数据流分析。目前实现了多种反射马的检测,基于字节码分析实现BCEL马检测

Primary LanguageJavaApache License 2.0Apache-2.0

JSPKiller

简介

一个JSP Webshell检测工具

主要是基于污点分析来做,依靠ASM解析字节码,然后模拟栈帧在JVM指令执行中的变化实现数据流分析

大致过程:

  1. 解析输入JSP文件到普通Java文件
  2. 动态编译这个Java文件得到对应的class文件
  3. 使用ASM等技术分析class文件的字节码

具体的原理参考先知社区文章:基于污点分析的JSP Webshell检测

为什么不基于AST做:可以避免一些编译过程产生的trick(例如注释换行逃逸// \u000d code;

Quick Start

目前支持以下两种检测,其他方式后续更新

  1. 反射构造Runtime.execWebshell
  2. 使用BCEL ClassLoader加载恶意字节码的Webshell(非反射方式)

命令:

java -jar JSPKiller.jar -f 1.jsp -m rb

  • 使用-f参数指定检测JSP文件
  • 使用-m参数指定检测模块:r表示反射型;b表示BCEL型(可多选)

提供了检测案例

  • jsp/test-1.jsp-jsp/test-4.jsp用于测试反射马
  • jsp/bcel-1.jsp-jsp/bcel-4.jsp用于测试BCEL马

如果发生空指针异常或编译报错,参考以下

注意:

  1. JSPKiller.jar目录下必须有lib.jar文件
  2. 测试的三种反射JSP马已经提供(在JSP目录下)
  3. 确保配置了正确的环境变量JAVA_HOME
  4. 确保java命令是JDK下的而不是JRE下的(例如环境变量Path中配置C:\Program Files\Java\jdk1.8.0_131\bin为第一个)这样做的原因是:在JRE环境中无法获得编译器对象(JavaCompiler)来进行动态编译,只有JDK有这样的功能

效果