当前位置:网站首页 > Java教程 > 正文

java拦截马教程



前言:spring interceptor 内存马的笔记

springboot的拦截器实现原理参考文章:https://blog.csdn.net/_/article/details/

参考文章:https://landgrey.me/blog/19/

在对于存在相关的拦截器的时候,controller内存马就无法进行利用,原因就在于拦截器的调用顺序在controller之前,所以controller不能作为通用的内存马来进行使用。

https://landgrey.me/blog/19/ 中的截图如下

如下情况,比如我这里写个拦截器,除了login以外的都作为未授权处理,都自动重定向回,万一后台账号自己没了的话,或者等等情况,导致失去了访问权限,那么该内存马也就相当于不存在了。

容器配置类Appconfig.java

 

拦截器代码:

 

所以可以看到,这样的话对于某些一定需要权限的接口,就无法做到完美的权限维持,而Interceptor内存马能够弥补这样的缺陷。

可以看到通过相关的header头传输命令,如下图所示,弹出一个对应的计算器

首先还是先学习springboot本身是如何将拦截器应用的,因为拦截器本身是在请求的时候进行应用,而springboot核心处理请求都是在org/springframework/web/servlet/DispatcherServlet.java类中进行处理的,在相关的doDispatch方法上打上断点,如下图所示

接着随便一个请求, http://localhost:8080/asdasdasd ,跟随断点走,来到getHandler,跟进去

这个getHandler方法会遍历当前handlerMapping数组中的handler对象,来判断哪个handler来处理当前的request对象,这里用的是其中的SimpleUrlHandlerMapping对象

这继续跟到其中的中,其中获取指定的拦截器处理过程也是在这里进行的,首先是获取对应的handler

然后接着getHandlerExecutionChain方法则是获取调用链,其中会就会将当前的拦截器加到当前的调用链中,类似于过滤链一样,然后在之后的处理中进行遍历调用

这里跟到其中可以看到,预先将要处理的拦截器都加入到调用链中

最后将handler和调用链一起进行封装,也就成为了HandlerExecutionChain,最后将这个对象返回,如下图所示

后面遍历拦截器的地方在如下这个地方,这里就不跟了

到这里就已经了解了相关的拦截器封装过程,这里主要的地方就是如下这个地方。

当前的对象是org/springframework/web/servlet/handler/AbstractHandlerMapping.java中的getHandlerExecutionChain方法

其中的this.adaptedInterceptors存储着所有的拦截器对象,该对象还是一个私有对象,所以想拿到的话还需要通过反射

这里整理思路:

1、先获取SpringBoot中的ApplicationContext对象

 

2、通过IOC容器中的AbstractHandlerMapping,接着通过反射来获取adaptedInterceptors字段(因为该字段为私有)

 

3、将要注入的过滤器放入到adaptedInterceptors中

 

还是跟上篇的一样,具体的环境就不再写上去了,参考https://www.cnblogs.com/zpchcbd/p/15544419.html

 

执行命令测试如下:whoami

版权声明


相关文章:

  • java编程实用教程2025-03-25 15:34:02
  • java651教程2025-03-25 15:34:02
  • java项目开发教程2025-03-25 15:34:02
  • 猪灵塔java教程2025-03-25 15:34:02
  • JAVA实现系统教程2025-03-25 15:34:02
  • java编写教程全集2025-03-25 15:34:02
  • java学习体系教程2025-03-25 15:34:02
  • java编译新手教程2025-03-25 15:34:02
  • java ajax菜鸟教程2025-03-25 15:34:02
  • java教程 流2025-03-25 15:34:02