一个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
JSP
文件提供了检测案例
jsp/test-1.jsp
-jsp/test-4.jsp
用于测试反射马jsp/bcel-1.jsp
-jsp/bcel-4.jsp
用于测试BCEL马如果发生空指针异常或编译报错,参考以下
注意:
JSPKiller.jar
目录下必须有lib.jar
文件JAVA_HOME
java
命令是JDK
下的而不是JRE
下的(例如环境变量Path
中配置C:\Program Files\Java\jdk1.8.0_131\bin
为第一个)这样做的原因是:在JRE
环境中无法获得编译器对象(JavaCompiler)来进行动态编译,只有JDK
有这样的功能