[技术分享]一次实战中的权限绕过

admin 2025年1月11日13:24:04评论7 views字数 968阅读3分13秒阅读模式

免责声明

本公众号所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全性自测。如因此产生的一切不良后果与文章作者和本公众号无关。如有涉及公司与个人敏感信息,侵权烦请告知,我们会立即删除并致歉。

前置知识

alwaysUseFullPath属性

当 Spring Boot 版本在小于等于 2.3.0.RELEASE 的情况下,alwaysUseFullPath 为默认值 false。

[技术分享]一次实战中的权限绕过
其会经过 getPathWithinServletMapping 方法进行处理。
[技术分享]一次实战中的权限绕过
而 getPathWithinServletMapping 会获取 ServletPath 并进行对应的处理,主要是调用 request.getServletPath( 对 uri 标准化处理,例如解码然后处理跨目录等一系列操作)方法,这就导致了可能的身份验证绕过。

SuffixPatternMatch属性

当设置了 SuffixPatternMatch 属性为 true 时,就是开启了后缀匹配模式,用于能以 .* 的方式进行匹配。

根据代码可以知道,当启用后缀匹配模式时,当传入的路径包括 46 (就是 . 号),会以 .* 结尾的方式进行匹配,pattern 是我们注册的路由,lookupPath 是我们访问的路由。

例如存在注册路由 /auth,会以 /auth.* 的形式进行匹配,即 /auth.css 和 /auth 的匹配结果是一样的。

[技术分享]一次实战中的权限绕过

实战绕过

目标环境大概有个拦截器如下,获取请求的 uri,如果其中不包含 login,就会校验是否登录,未登录状态下进行拦截。

[技术分享]一次实战中的权限绕过
登录接口 /login 是不需要校验的。
[技术分享]一次实战中的权限绕过

查询接口 /query 会校验是否登录。

[技术分享]一次实战中的权限绕过
查看 UrlPathHelper 类中的 alwaysUseFullPath,其为 true,所以很容易想到的就是通过 ../ 的方式来进行绕过,/login/../query,但因为当时目标环境是有 waf 的,. 号被过滤了,直接返回 403。
[技术分享]一次实战中的权限绕过
[技术分享]一次实战中的权限绕过
查看 RequestMappingHandlerMapping 类中的 SuffixPatternMatch 属性,其为 true,启用了后缀匹配模式 .*。
[技术分享]一次实战中的权限绕过
此时构造 /query.login 就成功绕过了,因为 uri.contains("login") 检测的就是只要 uri 中包含 login 即可。
[技术分享]一次实战中的权限绕过

原文始发于微信公众号(良月安全):[技术分享]一次实战中的权限绕过

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月11日13:24:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [技术分享]一次实战中的权限绕过https://cn-sec.com/archives/3600666.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息