加入收藏 | 设为首页 | 会员中心 | 我要投稿 驾考网 (https://www.jiakaowang.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

从全局变量寻找到Tomcat回显方案

发布时间:2023-10-05 12:07:13 所属栏目:安全 来源:
导读:主要的是获得回复显现在ApplicationFilterChain​类的lastServicedRequest / lastServicedResponse​两个属性,是使用的ThreadLocal进行修饰的,并且,在执行请求的过程中,通过反射修改属性值,能够记录下

主要的是获得回复显现在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方法进行添加。我们可以看到,这个函数的作用是将数据转换为一个字符串,然后通过查询获取对应的值。

(编辑:驾考网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章