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、通过修改状态的方法是否可行。