0x00 前言
我们知道,当我们访问jsp文件时,Java环境会先将jsp文件转换成 .class
字节码文件,再由Java虚拟机进行加载,这导致了Java服务器上会生成对应名称的 .class
字节码文件。对于webshell,这会留下痕迹。 为了实现自删除 .class
字节码文件,我们可以通过反射获得 .class
字节码文件的路径,再进行删除。本文将以Zimbra环境为例,结合 AntSword-JSP-Template ,分析利用思路。
0x01 简介
本文将要介绍以下内容:
- 通过反射实现webshell编译文件的自删除
- 通过反射实现AntSword-JSP-Template
0x02 通过反射实现webshell编译文件的自删除
根据上篇文章《Java利用技巧——通过反射修改属性》的内容,我们按照映射 request
-> _scope
-> _servlet
-> rctxt
-> jsps
,通过多次反射最终能够获得JspServletWrapper实例
查看JspServletWrapper类中的成员, jsps
-> value
-> ctxt
-> servletJavaFileName
保存 .java
编译文件的路径, jsps
-> value
-> ctxt
-> classFileName
保存 .class
编译文件的路径,示例如下图
为了只筛选出当前jsp,可以通过request类的 getServletPath()
方法获得当前Servlet,如下图