从全局变量寻找到Tomcat回显方案
|
主要的是获得回复显现在ApplicationFilterChain类的lastServicedRequest / lastServicedResponse两个属性,是使用的ThreadLocal进行修饰的,并且,在执行请求的过程中,通过反射修改属性值,能够记录下当前线程的request对象的值。 之后在反序列化利用过程中方便利用ThreadLocal取出对应的request进行内存马的注入关键步骤。 师傅通过这种方式关注到了org.apache.coyote.AbstractProcessor类中,存在有两个属性值名为request / response分别是使用final修饰的org.apache.coyote.Request /org.apache.coyote.Response类型的变量。 我们的目标是注入一个内存马,这里以上篇一样的简单的Servlet内存马机械硬盘举例说明。 对于Servlet内存马,我们需要获取到对应ServletContext,但是在org.apache.coyote.Request类中,并没有直接可以获取的方法存在,我们可以关注到该类的setNote方法的实现。 在一个Controller调用过程中,其中的Http11Processor类是继承了AbstractProcessor这个类的。 我们进而关注到了AbstractProtocol$ConnectionHandler类中,在调用process方法的过程中调用了register方法对processor对象进行了存储。 传入的是processor,他到底是什么,我们可以追溯到该方法的开头,存在有来源。 我们可以知道,这个processor对象是获取的是当前的Http11Processor对象, 对于register方法,我们可以跟进一下。 首先从processor中获取了RequestInfo对象的信息之后调用了setGlobalProcessor方法。 调用了addRequestProcessor方法进行添加。我们可以看到,这个函数的作用是将数据转换为一个字符串,然后通过查询获取对应的值。 (编辑:驾考网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
