Apache Shiro 越权访问漏洞 CVE-2020-1957 漏洞复现

一、漏洞描述
Apache Shiro 是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
CVE-2020-1957,Spring Boot中使用 Apache Shiro 进行身份验证、权限控制时,可以精心构造恶意的URL,利用 Apache Shiro 和 Spring Boot 对URL的处理的差异化,可以绕过 Apache Shiro 对 Spring Boot 中的 Servlet 的权限控制,越权并实现未授权访问。

二、漏洞影响
Apache Shiro < 1.5.1

三、漏洞复现
1、环境搭建,利用docker部署环境
wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
unzip vulhub-master.zip
cd vulhub-master/shiro/CVE-2020-1957
docker-compose up -d
环境启动后,访问http://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;
}

2、漏洞复现
使用burp抓取数据包,访问/admin/目录
在这里插入图片描述

数据包回显302并跳转到登录页面
在这里插入图片描述

构造恶意请求url:http://ip:port/xxx/…;/admin/,访问到管理页面,越权成功
在这里插入图片描述

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

### 关于Apache Shiro安全漏洞及防护措施 #### Apache Shiro框架概述 Apache Shiro是一个强大且易于使用的Java安全框架,用于处理身份验证、授权、加密和会话管理等功能。该框架设计简洁直观,适用于任何应用程序规模,无论是小型独立应用还是大型分布式Web服务[^1]。 #### 已知的安全漏洞 存在一些影响Apache Shiro的安全漏洞,其中较为严重的有CVE-2020-13933,这是一个权限绕过的缺陷,允许未经认证的远程攻击者执行任意命令或读取敏感文件内容[^2]。此类型的漏洞一旦被成功利用,可能会给受影响的应用程序带来极大的风险。 #### 防护建议与实践 为了有效防范上述提到的安全威胁并增强系统的整体安全性: - **保持更新**:始终使用最新稳定版的Apache Shiro库,因为官方团队通常会在新版本中修复已发现的安全问题- **配置强化**:仔细审查默认设置,并按照最佳实践调整相关参数来提高系统抵御恶意行为的能力。例如,在可能的情况下禁用不必要的功能和服务接口;严格控制访问权限,确保只有经过适当授权的人才能获得特定资源的操作权利。 - **定期审计代码逻辑**:通过静态分析工具检查源码中的潜在弱点,特别是那些涉及输入验证不足的地方。对于动态交互部分,则可以借助模糊测试等手段寻找隐藏的风险点。 - **采用多层防御机制**:除了依赖单一的技术方案外,还应该综合运用多种策略形成纵深防线。比如在网络层面部署防火墙过滤异常流量;在业务流程里加入额外的身份确认环节防止非法越权操作。 - **教育员工重视信息安全意识**:组织内部培训课程让开发人员和技术支持人员熟悉最新的网络安全趋势以及如何应对突发情况下的应急响应计划。 ```python import requests def check_shiro_vulnerability(target_url): """ 检查目标URL是否存在已知的Shiro漏洞 参数: target_url (str): 要检查的目标网站地址 返回: bool: 如果存在漏洞返回True, 否则False """ headers = { 'User-Agent': 'Mozilla/5.0', 'Content-Type': 'application/x-www-form-urlencoded' } try: response = requests.get(url=target_url, headers=headers) if "rememberMe=deleteMe" in response.text: print("[+] 可能存在Shiro反序列化漏洞") return True elif "<title>404 Not Found</title>" not in response.text and \ "Invalid session ID." in response.text: print("[+] 存在一个未授权访问路径") return True else: print("[-] 未检测到明显的Shiro漏洞特征") return False except Exception as e: print(f"[!] 发生错误 {e}") return None if __name__ == "__main__": url_to_test = input("请输入要测试的目标网址:") result = check_shiro_vulnerability(url_to_test) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值