Filter中写内存马的误解
目前大家认为在shiro等Filter的漏洞利用中,无法从ApplicationFilterChain中获取request,本文纠正这一认知。
Spring RequestContextHolder获取context、ApplicationFilterChain获取request ,都为多线程ThreadLocal线程安全,Controller/Servlet访问结束后这些对象也被回收。
但即便在不同线程或不在其生命周期内,我们还是能获取这些对象。
该函数遍历所有线程的threadLocals字段,并查找其中的table,返回符合预期的实例对象
1 | public static List<Object> getThreadLocalValue(Class targetClass,boolean isBreak){ |
spring mcv中,我们也能在任意地方获取到spring context
1 | Thread t = new Thread(new Runnable() { |
当代码执行在Filter中时,我们也能从ApplicationFilterChain获取request
1 |
|