Java内存码(二)–Filter

0x01 Filter内存码

Filter内存码是通过动态注册Filter实现将请求拦截,实现的目标主要就是动态注册一个filter。

0x02 实现步骤

1、动态注册filter

根据官方文档#4.4 显示addfilter等方法使用时需要再程序初始化,由此引出第二个问题,如何在状态为运行状态的时候执行addfilter

2、解决运行状态限制

两个思路:1、修改当前运行状态 2、绕过运行状态检测

1、修改当前运行状态 stateField.set
此处挖坑 Shiro注入回显内存马-先知社区结合反序列化注入tomcat内存马 – FreeBuf网络安全行业门户

2、绕过运行检测
org/apache/catalina/core/ApplicationContext.java

可以通过直接实现filter内容完成具体创建

这就是上篇文章的设置Filter实例

3、如何访问到?通过在filterMap中添加

addFilter方法最后返回了一个ApplicationFilterRegistration对象

org/apache/catalina/core/ApplicationFilterRegistration.java

filterMap中添加对应的映射。也就是上篇文章中的

同时,通过addFilterMapBefore将优先级提到最高。

这里都只是完成了Filter的注册

4、Filter启动

根据org/apache/catalina/core/StandardContext.java中启动Filer。

0x03 总结

到这里,上篇文章的核心内容,动态注册filter就完成了。

0x04 问题

1、有些内容还是不熟悉,比如最后的StandardContext。
2、通过修改状态的方法是否可行。

上一篇