长亭百川云 - 文章详情

java内存马详解

41group

43

2024-07-13

在讲过反序列化之后,在实战中可以发现很多场景都是通过反序列化植入内存马这种操作。

那么内存马的好处肯定不用多说了,但是内存马具体是怎么植入的呢,老规矩本人java也是自学,尽可能用人话给各位简单讲一下。

filter

在讲内存马之前,需要先知道下在java中存在一种叫filter的东西。

就是这个东西的存在实现了比如登录,鉴权等等骚操作。那么filter是啥?

通俗来讲,filter就是一个过滤器,在java中你访问的每个请求都会先通过判断是否存在于filter中再决定是否要进行放行。

在代码中的体现具体为。

在web.xml中注册了所有当前的filter

filter-name:表示当前filter的名称

filter-class:表示filter详细代码的类

url-pattern:表示要拦截的路径

再看filter的处理部分代码

ok配置好后大致的filter功能有简单的理解了。那我们实际看一下filter是如何处理的。

下断点我们进入到了这里

可以看到调用了filterChain的doFilter方法。查看下可以发现filterChain中存放的就是从web.xml中读取到的配置的filter

既然filterChain已经存在了web.xml中的配置,我们就找下filterChain是怎么被创建的。

通过代码我们发现filterChain的创建使用到了createFilterChain方法,看一下这个方法具体实现

跟进之后我们发现他在其中使用了findFilterMaps来查找你web.xml中所有的配置,并保存在filtermap中。

然后根据你请求的url在这个filtermap中依次对比,如果匹配到了就添加进入filterChain。

所以说,注册内存马其实就是注册一个我们自己的filter就可以了。

根据代码可知,注册我们的内存马,需要filterConfig这个东西。而filterConfig需要使用到context中的findFilterConfig进行创建。 再看下刚刚的findFilterMaps。

可以看到一切的起源都和context有关系。

那我们就看一下context中具体的实现了什么。

直接看关键点,在context中存在直接添加进filtermap的方法,我们只需要直接调用,即可注册自己的filter

在context中,和filter有关的我们需要注册这三个参数。

那么实际操作下看下怎么添加。

还记得开头讲的web.xml中的每个字段代表的含义吗。

和这里的字段就可以对应上了

在filtermap中只需要对应上我们的name和url就可以了。

再看下def中需要对应哪些

根据结果构造代码

最后只需要把我们构造的def和map注入进去就可以了。

这样我们就成功获得了一个我们自己可控的filter

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2