实现了一种比较顽固的内存马:
- 随机给一个合理的filter名称
- 动态生成合理filter类名的字节码
- 将字节码写入classpath中合理的路径
- 自动给web.xml中加入合理的filter配置
理论上可以做到这样的效果:
如果防御人员对后端业务逻辑和代码没有比较深入的掌握,大概率无法查出内存马的,哪怕借助工具也很难查杀
功能:
- JSP的触发方式:使用
mem.jsp
HelloServlet
模拟了反序列化的触发方式- 添加了
c0ny1
师傅的scan.jsp
做检测
如何使用:
- 配置该项目为Tomcat项目并启动
- 访问
/mem.jsp
或/hello-servlet
即可注册免杀内存马 - 访问
/scan.jsp
查看检测结果
如何自定义合理的Filter名:
修改这里的数组
String[] nameArray = new String[]{"testFilter", "loginFilter", "coreFilter",
"userFilter", "manageFilter", "shiroFilter", "indexFilter"};
会自动打乱遍历数组,判断Filter名是否重复,然后构造对应的类名和对应的字节码写入目标classpath
看起来和真实的Filter
没有区别,存在真正的class文件
一点思考:这种方式是否会导致内存马的持久化?因为字节码真实存在且web.xml
也有配置
未经授权许可使用本项目攻击目标是非法的
本程序应仅用于授权的安全测试与研究目的