一个JSP Webshell
检测工具
主要是基于污点分析来做,依靠ASM
解析字节码,然后模拟栈帧在JVM
指令执行中的变化实现数据流分析
大致过程:
- 解析输入
JSP
文件到普通Java
文件 - 动态编译这个
Java
文件得到对应的class
文件 - 使用
ASM
等技术分析class
文件的字节码
具体的原理参考先知社区文章:基于污点分析的JSP Webshell检测
为什么不基于AST
做:可以避免一些编译过程产生的trick(例如注释换行逃逸// \u000d code;
)
目前支持以下两种检测,其他方式后续更新
- 反射构造
Runtime.exec
的Webshell
- 使用
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马
如果发生空指针异常或编译报错,参考以下
注意:
JSPKiller.jar
目录下必须有lib.jar
文件- 测试的三种反射JSP马已经提供(在JSP目录下)
- 确保配置了正确的环境变量
JAVA_HOME
- 确保
java
命令是JDK
下的而不是JRE
下的(例如环境变量Path
中配置C:\Program Files\Java\jdk1.8.0_131\bin
为第一个)这样做的原因是:在JRE
环境中无法获得编译器对象(JavaCompiler)来进行动态编译,只有JDK
有这样的功能