没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
S-shiro权限绕过
环境搭建
源码地址
使用github下载器即可下载
CVE-2020-1957
代码配置
认证设置
package org.javaboy.shirobasic;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @Author 江南一点雨
* @Site www.javaboy.org 2019-06-05 11:16
*
* 在这里进行 Shiro 的配置
* Shiro 的配置主要配置 3 个 Bean 。
*
* 1. 首先需要提供一个 Realm 的实例
* 2. 需要配置一个 SecurityManager,在 SecurityManager 中配置 Realm
* 3. 配置一个 ShiroFilterFactoryBean ,在 ShiroFilterFactoryBean 中指定路径拦截规则
等
*/
@Configuration
public class ShiroConfig {
@Bean
MyRealm myRealm() {
return new MyRealm();
}
@Bean
SecurityManager securityManager() {
DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
manager.setRealm(myRealm());
return manager;
}
@Bean
ShiroFilterFactoryBean shiroFilterFactoryBean() {
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
//指定 SecurityManager
controller代码
bean.setSecurityManager(securityManager());
//登录页面
bean.setLoginUrl("/login");
//登录成功页面
bean.setSuccessUrl("/index");
//访问未获授权路径时跳转的页面
bean.setUnauthorizedUrl("/unauthorizedurl");
//配置路径拦截规则,注意,要有序
Map<String, String> map = new LinkedHashMap<>();
map.put("/doLogin", "anon");
map.put("/hello/*","authc");
//map.put("/**", "authc");
bean.setFilterChainDefinitionMap(map);
return bean;
}
}
package org.javaboy.shirobasic;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author 江南一点雨
* @Site www.javaboy.org 2019-06-05 11:24
*/
@RestController
public class LoginController {
@PostMapping("/doLogin")
public void doLogin(String username, String password) {
Subject subject = SecurityUtils.getSubject();
try {
subject.login(new UsernamePasswordToken(username, password));
System.out.println("登录成功!");
} catch (AuthenticationException e) {
e.printStackTrace();
System.out.println("登录失败!");
}
}
@GetMapping("/hello")
public String hello() {
return "hello";
}
@GetMapping("/login")
public String login() {
return "please login!";
}
漏洞复现
1. 访问 /hello/1 接口需要进行认证,直接跳转
2. 权限绕过: /hello/1/
漏洞分析
漏洞成因
PathMatchingFilterChainResolver#getChain() ,该函数作用根据 URL 路径匹配中配置的
url 路径表达式来匹配输入的 URL ,判断是否匹配拦截器,匹配成功将会返回响应的拦截器执行
链,让 ShiroFither 执行权限操作的。
其对于 URL 路径表达式和输入 URL 的匹配主要通过 pathMathches 函数进行匹配。全局搜索该方
法(idea双击shift可以全局搜索,包括jar包)
@GetMapping("/hello/{currentPage}")
public String hello(@PathVariable Integer currentPage) {
return "hello" + currentPage.toString();
}
}
剩余12页未读,继续阅读
陈后主
- 粉丝: 32
- 资源: 340
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0