分享一些利用JSP特性来对抗语法树类引擎的技巧。
一、“非主流”JSP语法
上面提到JSP在第一次运行的时候会先被Web容器,如Tomcat翻译成Java文件,然后才会被Jdk编译成为Class加载到jvm虚拟机中运行。JDK在编译的时候只看java文件的格式是否正确。而Tomcat在翻译JSP的不会检查其是否合乎语法。
所以我们就可以利用这一点,故意构造出不符合语法规范的JSP样本,来对抗检测引擎的AST分析。
可以看到编译后的文件刚好把上下文的try catch闭合,形成了合法的Java源文件,所以能够通过JDK的编译正常运行。
二、“特殊”内置对象
继续来看翻译后的Java文件,可以看的Servlet继承了org.apache.jasper.runtime.HttpJspBase类。