未授权访问漏洞
API未授权访问¶
漏洞描述¶
接口未授权访问,顾名思义在不进行请求授权的情况下,能够直接对相应的业务逻辑功能进行访问、操作等。通常是由于认证页面存在缺陷或者无认证、安全配置不当等导致的。
常见应用场景¶
最常见的应用场景为后台某些API接口在不登录系统的情况,直接请求对应的URI即可访问、操作该接口。
攻击者最常见的攻击途径主要有如下:
- 通过目录扫描工具加载目录字典探测
- 通过模糊测试URI中的参数进行探测
- 通过前端静态文件,比如JS、webpack等查找
漏洞危害¶
- 攻击者可在没有认证的情况下直接操作对应的API接口,可直接被非法增删改次数据。
- 因为攻击是在未认证下进行的,所以后续无法通过定位用户进行异常排查。
修复建议¶
- 对于后台接口,确保所有API接口先经过登录控制器。
- 在验证用户身份权限前不进行任何数据的交互。
授权绕过漏洞¶
什么是过滤授权绕过¶
过滤授权漏洞指的是在权限管理系统设计中,每个角色都有它的可操作的权限,通常来说,系统会根据url结合登录账号进行判断是否有权访问该页面。由于不严谨的过滤设计缺陷会导致权限绕过行为。
漏洞原理¶
一般会检测用户是否登陆,再判断路径是否授权。未授权或未登陆会重定向到/login.html页面,提示用户登陆。如图所示:

我们将要做的是,在有限的权限管理页面中绕过中间件过滤,从而实现访问未授权页面:

漏洞影响¶
该漏洞如标题所表明一致,不难理解。出现这个漏洞将会导致越权行为。造成严重的影响。例如,只有老板能发工资。越权的漏洞,打工人可以帮老板随便发工资。
漏洞识别¶
该漏洞常见有以下几种(当然还有其他的,目前说常见的,其他特征本质上也是一样的):
- 未授权301重定向到指定白名单路径-[黑盒]
- 权限管理系统-[黑盒]
- 模糊包含匹配判断路径-[审计]
利用前提¶
- 发现未授权页面
成功特征¶
- 成功访问未授权功能
Shiro授权绕过¶
什么是Shiro?¶
- Apache Shiro是一个Java 的
安全(权限)框架。 - Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。
- Shiro可以完成,
认证,授权,加密,会话管理,Web集成,缓存等. - 官网: shiro.apache.org/
- 官方文档十分钟快速入门:shiro.apache.org/10-minute-t…
- 下载地址:github.com/apache/shir…

Shiro的三大功能¶
Shiro有三大核心组件,即Subject、SecurityManager 和 Realm
- Subject: 为
认证主体。应用代码直接交互的对象是Subject,Subject代表了当前的用户。包含Principals和Credentials两个信息。 - SecurityManager:为
安全管理员。是Shiro架构的核心。与Subject的所有交互都会委托给SecurityManager, Subject相当于是一个门面,而SecurityManager才是真正的执行者。它负责与Shiro 的其他组件进行交互。 - Realm:是
一个域。充当了Shiro与应用安全数据间的“桥梁”。Shiro从Realm中获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm中获取相应的用户进行比较,来确定用户的身份是否合法;也需要从Realm得到用户相应的角色、权限,进行验证用户的操作是否能过进行,可以把Realm看成DataSource,即安全数据源。

Authentication: 身份认证、登录,验证用户是不是拥有相应的身份;Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限,即判断用户能否进行什么操作,如:验证某个用户是否拥有某个角色,或者细粒度的验证某个用户对某个资源是否具有某个权限!Session Manager: 会话管理,即用户登录后就是第-次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通的JavaSE环境,也可以是Web环境;Cryptography: 加密,保护数据的安全性,如密码加密存储到数据库中,而不是明文存储;Web Support: Web支持,可以非常容易的集成到Web环境;Caching: 缓存,比如用户登录后,其用户信息,拥有的角色、权限不必每次去查,这样可以提高效率Concurrency: Shiro支持多线程应用的并发验证,即,如在一个线程中开启另一个线程,能把权限自动的传播过去Testing:提供测试支持;RunAs:允许一个用户假装为另-一个用户(如果他们允许)的身份进行访问;Remember Me:记住我,这个是非常常见的功能,即一-次登录后, 下次再来的话不用登录了
CVE-2022-32532¶
利用条件:
Apache Shiro 中使用 RegexRequestMatcher 进行权限配置,且正则表达式中携带“.”时
CVE-2020-1957¶
payload总结¶
- **CVE-2016-6802**在访问路径前加上/任意目录名/../,即可绕过访问
- CVE-2020-1957
/demo/..;/admin/index其中demo为授权路径,admin/index为鉴权路径 /.;/hello/aaaa - CVE-2020-11989
admin/page%252fABCDEFG其中admin/page为鉴权路径,ABCDEFG为随意字符串 /hello/a%25%32%66a /;/test/hello/aaa - CVE-2020-13933
admin/%3BABCDEFG,其中admin为鉴权路径,ABCDEFG为随意字符串 - CVE-2020-17510
admin/%2e - CVE-2020-17523
admin/%20,其中admin为鉴权路径 - **CVE-2022-32532**特定条件下的漏洞利用:当shiro使用了RegExPatternMatcher进行路由匹配时,由于Java的正则Pattern.matches解析.默认是不匹配r或者n的,因此当path中带有%0a时可绕过正则匹配
/permit/a%0any
思路总结¶
难点和关键点:如何找到需要鉴权的路径名或者接口
- 利用fofa搜寻同样类型站点,利用弱口令进入同类型的站点后台,收集一波后台各种接口的URL,将这些URL拼接在目标站点。
- 在JS里找授权路径,利用bp插件寻找敏感接口。
- 使用swagger,actuator等路径尝试。
- 常见框架目录爆破。