码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Shiro安全(五):Shiro权限绕过之Shiro-682&CVE-2020-13933


    Shiro安全(五):Shiro权限绕过之Shiro-682&CVE-2020-13933

      • 0x00 前言
      • 0x01 Shiro-682
        • 利用条件
        • 漏洞环境
        • 漏洞分析
        • 漏洞修复
      • 0x02 CVE-2020-13933
        • 利用条件
        • 漏洞环境
        • 漏洞分析
        • 漏洞修复
      • 0x03 总结
      • 0x04 参考文章

    0x00 前言

    上一篇文章大概讲述了一下shiro以及spring获取uri的流程,总的来说shiro权限绕过是因为shiro与spring在对同一个请求获取uri时的处理步骤不同导致的,下面讲的两个权限绕过漏洞也是基于该原因

    0x01 Shiro-682

    利用条件

    shiro < 1.5.2

    漏洞环境

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Day60o6-1659880688266)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807213249296.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rH291E41-1659880688267)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807213317969.png)]

    漏洞分析

    利用的是 shiro 和 spring 对 url 中的 “;” 处理差别来绕过校验。

    uri获取逻辑

    shiro:具体方法WebUtils#getRequestUri,方法先调用 decodeAndCleanUriString 方法处理请求路径,再调用 normalize 方法标准化路径。当uri中存在封号时,删除掉封号后面所有内容

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2td21GEz-1659880688267)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807212211677.png)]

    spring:方法是 UrlPathHelper#decodeAndCleanUriString ,方法名也叫 decodeAndCleanUriString,但是呢操作完全不同。对于spring来说,对于封号的处理规则是其会删除掉两个反斜线中封号后面的内容,然后解码然后将//转换为/

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XTgucxEI-1659880688267)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807212414665.png)]

    所以说当payload为/admin/;/nice来说

    在shiro眼里就是:/admin

    PS:shiro在geturi后会将最后一个斜线删去,而/admin不匹配/admin/*

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EsAvpwfh-1659880688268)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807212944306.png)]

    在spring眼里就是:/admin/nice

    所以绕过了shiro认证

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8itYpi9G-1659880688268)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807213059969.png)]

    还有其他payload比如,但是无法在高版本使用,因为在高版本上不处理跨目录

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2U3I51ZG-1659880688268)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807213439936.png)]

    就只能借助 shiro 一些配置问题尝试绕过:比如应用程序配置了访问路径 “/admin/**” 为 anon,但是指定了其中的一个 “/admin/nice” 为 authc。这时在不跳目录的情况下,可以使用如下请求绕过:

    http://127.0.0.1:8080/admin/;/nice
    
    • 1

    漏洞修复

    shiro 不再使用 request.getRequestURI() 来获取用户随意输入的请求路径,而是使用 request.getContextPath()、request.getServletPath()、request.getPathInfo() 进行拼接,直接获取中间件处理后的内容。

    这种获取方式会对uri进行解码,shiro-782就是利用该特性绕过的

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jBsKXwKx-1659880688269)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807213733390.png)]

    0x02 CVE-2020-13933

    利用条件

    shiro < 1.6.0

    漏洞环境

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OUUplCfJ-1659880688269)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807214133634.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mU3VWEMf-1659880688269)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807214140233.png)]

    漏洞分析

    在shiro 1.5.3中利用servletPath + pathInfo 的加法思路获取uri

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A1Cs2j81-1659880688270)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807214327819.png)]

    方法逻辑如下,里面均用request.getxxx,而request.getXX 方法,会进行 URL 解码操作。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nXRoxJ3m-1659880688270)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807214345866.png)]

    uri获取逻辑

    Shiro:先 URL 解码,再处理分号,然后标准化路径

    Spring:先处理分号,再 URL 解码,然后标准化路径。下面图就是spring获取uri逻辑

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-82cccSMR-1659880688270)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807212414665.png)]

    当payload为/admin/%3baaa时

    在shiro眼里uri就是:/admin

    在spring眼里uri就是:/admin/;aaa

    所以绕过了shiro认证

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AqmNDWO9-1659880688270)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807214856977.png)]

    漏洞修复

    shiro 没有改动现有的处理逻辑,而是选择了使用全局过滤和处理的方式

    Shiro 创建了一个 global 的 filter:InvalidRequestFilter,用来过滤和阻断有危害的请求,会返回 400 状态码,其中包括:

    • 带有分号的请求;
    • 带有反斜线的请求;
    • 非 ASCII 字符。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2mEQVhc8-1659880688271)(C:\Users\91136\AppData\Roaming\Typora\typora-user-images\image-20220807215230709.png)]

    0x03 总结

    总的来说就是shiro与spring在对同一个请求获取uri时的处理步骤不同,导致攻击者构造特殊的uri既可以绕过shiro认证且能够访问controller

    0x04 参考文章

    https://su18.org/post/shiro-3

    https://www.yuque.com/tianxiadamutou/zcfd4v/emcdeq

    https://blog.csdn.net/weixin_43263451/article/details/126212097

  • 相关阅读:
    4年工作经验,多线程间的5种通信方式都说不出来,你信吗?
    五二不休息,今天也学习,从JS执行栈角度图解递归以及二叉树的前、中、后遍历的底层差异
    力扣:365. 水壶问题
    软件评测师之存储器分类
    半导体制冷片-热电效应简介
    网络安全等级保护基本要求解读- 安全计算环境-应用系统和数据安全
    开源代码分享(3)—微电网鲁棒定价策略(附matlab代码)
    【HMS】地图服务我的位置定位问题
    中文编程开发语言工具编程实际案例:美发店会员管理系统软件编程实例
    [Win11]解决PS/2标准键盘带感叹号,笔记本键盘无法使用。代码19:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个
  • 原文地址:https://blog.csdn.net/weixin_43263451/article/details/126218008
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号