Java Web常见框架寻找路由技巧

在Java Web代码审计中,寻找和识别路由是很关键的部分。通过注册的路由可以找到当前应用对应的Controller,其作为MVC架构中的一个组件,可以说是每个用户交互的入口点。简单介绍下Java Web中常见框架(Spring Web、Jersey)寻找路由技巧。

0x00 前言

在Java Web代码审计中,寻找和识别路由是很关键的部分。通过注册的路由可以找到当前应用对应的Controller,其作为MVC架构中的一个组件,可以说是每个用户交互的入口点。主要负责以下几个方面的任务:

  1. 请求分发:控制器接收来自用户的HTTP请求,并根据请求的URL和HTTP方法(如GET、POST等)将请求分发到相应的处理方法。
  2. 参数绑定:控制器将请求中的参数(如查询参数、表单数据、JSON对象等)绑定到处理方法的参数上。
  3. 业务逻辑调用:控制器调用服务层(Service Layer)的组件来执行业务逻辑,如数据处理、计算等。
  4. 异常处理:控制器负责处理业务逻辑中可能抛出的异常,并返回适当的错误响应或重定向。
  5. 响应生成:控制器根据业务逻辑的结果生成响应,这可能包括渲染视图、返回JSON数据、重定向到其他页面等。

一般在代码审计时都会逐个分析对应的实现,通过梳理对应的路由接口并检查对应的业务实现,能帮助我们快速的检索代码中存在的漏洞缺陷,发现潜在的业务风险。下面简单介绍下Java Web中常见框架(Spring Web、Jersey)寻找路由技巧。

0x01 获取路由的技巧

大多数Java Web框架遵循MVC(Model-View-Controller)架构。了解框架的架构和约定可以快速定位。下面简单介绍下一些技巧:

1.1 关键字匹配

可以直接通过Controller的定义来寻找路由。

大多数框架都有约定俗成的项目结构,控制器通常位于特定的包或目录中。例如,在Spring MVC项目中,控制器类可能位于controller包下。

并且很多Java Web框架都会使用注解来标识控制器和映射请求。例如,在Spring MVC中,@Controller注解用于标记控制器类,@RequestMapping用于定义请求映射。在其他框架中,如Jersey(JAX-RS),就是@Path和@POST、@GET等注解。

当然还有一些特定的配置类,例如在Spring中,在Jersey中,ResourceConfig类常用于配置路由。

可以通过关键字匹配的方式获取到对应的资源目录,然后逐个进行审计。下面是一些关键字的总结:

1.1.1 Spring MVC

常见的注解如下:

  • @Controller
  • @RestController
  • @RequestMapping
  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

除了使用注解的方式,还可以在对应的xml配置文件中通过配置Controller相关的bean来实现。例如下面的例子:

在spring的配置文件中做如下配置:

<!-- HandlerMapping -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- HandlerAdapter -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<!-- 处理器 -->
<bean name="/userInfo" class="com.springmvc.test.UserController" />

相关的作用如下:

  • BeanNameUrlHandlerMapping:表示将请求的URL与Bean名字进行映射。
  • SimpleControllerHandlerAdapter:表示所有实现了org.springframework.web.servlet.mvc.Controller接口的Bean可以作为Spring Web MVC中的Controller。

1.1.2 Spring WebFlux

上面提到的注解在 WebFlux 中依然还可以继续使用,不过 WebFlux 也提供了自己的方案Router。

其定义Controller与传统的Spring MVC有所不同,因为WebFlux是基于响应式编程模型的。在WebFlux中,需要使用RouterFunction来路由请求到对应的处理方法。例如下面的例子:

@Configuration
public class RouterConfig {
    @Autowired
    private ShowAction showAction;

    @Bean
    public RouterFunction timerRouter() {
        return RouterFunctions.route(RequestPredicates.GET("/hello"), showAction::hello)
                .andRoute(RequestPredicates.GET("/time"), showAction::showTime)
                .andRoute(RequestPredicates.GET("/date"), showAction::showDate)
                .andRoute(RequestPredicates.GET("/times"), showAction::sendTimePerSec);
    }
}

1.1.3 Jersey

在Jersey中在资源类上使用@Path注解来定义基础路径,然后在资源方法上使用额外的@Path注解来指定具体的子路径。例如下面的例子

@Component
@Path("/hello")
public class HelloWorldResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHello() {
        return "hello world.";
    }
}

然后通过ResourceConfig类来配置资源和路由即可:

@Component
public class AppConfig extends ResourceConfig {

    AppConfig() {
        register(HelloWorldResource.class);
    }
}

常见的注解如下:

  • @Path
  • @GET
  • @POST
  • @PUT
  • @PATCH
  • @Delete
  • @HttpMethod

1.2 相关IDE插件

RestfulToolkit是一个RESTful 服务开发辅助工具集。可以根据 URI 直接跳转到对应的方法定义:

image.png

通过这个插件可以快速查找到对应的接口位置,很多时候我们知道一个api接口,想知道这个接口对应的类和位置时,查找起来很麻烦,这个插件可以很方便解决这个问题:

image.png

通过该插件可以很方便的对应用注册的路由逐个进行分析。强迫症提出一个问题,通过上述方法获取到的路由就一定全吗,会不会有遗漏的地方,如果路由信息在jar依赖里引入的能保证获取全吗?

image.png

1.3 结合Debug断点获取

结合上面的疑惑,很多时候应用会在框架的基础上进行魔改,然后对Controller进行拓展。例如下面的例子,自定义了一个注解@BuyerController:

image.png

然后定义了具体的Controller以及业务逻辑:

image.png

但是通过RestfulToolkit并不能获取到对应路由的定义:

image.png

而该路由对应的资源实际上是可以正常访问的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么此时如果仅仅依赖关键字或者IDE插件的方式进行匹配的话,很可能会有遗漏。

实际上我们可以通过分析代码,跟踪HTTP请求是如何被框架处理的,对识别负责处理特定请求的控制器也会有一定的帮助。如果可以对应用进行调试的话,通过在对应的位置下断点,即可获取对应框架所注册的全部路由:

1.2.1 Spring MVC

当一个HTTP请求到达Spring Web应用程序时,AbstractHandlerMethodMapping 类(或其子类,如 RequestMappingHandlerMapping)会使用 lookupHandlerMethod 方法来确定哪个控制器(controller)中的方法应该被调用来处理该请求。通过org.springframework.web.servlet.handler.AbstractHandlerMethodMapping#lookupHandlerMethod的mappingRegistry可以快速的获取应用注册的路由信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同样是上面对Controller进行拓展的例子,除了常规的路由以外,可以看到对应的拓展Controller的路由信息同样也获取到了:

image.png

1.2.2 Spring WebFlux

同样的,在Spring WebFlux中,则可以通过org.springframework.web.reactive.result.method.AbstractHandlerMethodMapping#lookupHandlerMethod进行注册路由的获取:

image.png

可以看到通过mappingRegistry可以获取到当前应用注册的路由信息:

image.png

1.2.3 Jersey

在Jersey中,则可以通过org.glassfish.jersey.server.ApplicationHandler#initialize获取jersey注册的router,其的作用是初始化应用程序的请求处理,通过该方法可以查找并注册应用程序中的资源类(Resources)和提供者(Providers),如异常处理器、拦截器、实体过滤器等。例如根据资源类上的注解(如 @Path)和其他配置信息,配置请求到资源方法的路由:

在这里插入图片描述

可以看到通过routingStage可以获取到当前jersey注册的router:

image.png

0x02 其他

通过上面的几种方式,可以快速的定位并梳理对应的路由接口,快速的开展后续的审计工作。

除了上面提到的框架以外,类似JFinal、Struts在Java生态中也有一定的占有量。对应的方法是类似的,例如JFinal会使用Routes.add()方法,向Routes添加Controller的router定义,这里就不再展开讨论了。

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

【点击免费领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】

在这里插入图片描述

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

在这里插入图片描述

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

在这里插入图片描述

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

👋全套《黑客&网络安全入门&进阶学习资源包》👇👇👇

这份完整版的学习资料已经上传CSDN,也可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

img

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值