cas client 用于限制匿名用户对某些特定api的接见,在一些特殊的环境下可能会有权限绕过问题。下面分享两个现实生涯中遇到的案例。

bypass trick1 ignorePattern

场景

/api/admin这个url是需要cas上岸才气接见的。

package today.redteam.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AdminController {

    @RequestMapping("/api/admin")
    public String admin(){
        return "hello admin";
    }

}

/api/guest这个是公共页面,所有人都可以看。

package today.redteam.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GuestController {

    @RequestMapping("/api/guest")
    public String guest(){
        return "hello guest";
    }

}

假设此程序的手艺对照老旧,为了实现上面这种需求,那么开发可能会在web.xml中这么设置。

<filter>
        <filter-name>CAS Authentication Filter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <param-value>https://battags.ad.ess.rutgers.edu:8443/cas</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://www.acme-client.com</param-value>
        </init-param>
        <init-param>
            <param-name>ignorePattern</param-name>
            <param-value>/api/guest</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CAS Authentication Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

这样设置看起来似乎没有问题

行使

然则着实可以被花式绕过。

原理

缘故原由有两点,第一org.jasig.cas.client.authentication.AuthenticationFilter,在匹配时刻获取了原生url(未处置../),甚至包罗? 后的内容。

第二,filter的匹配模式有四种,默认是按正则匹配。

同理若是设置成CONTAINS也会有类似的问题。

同理封装了这个库的三方库也会有问题,对照盛行的是cas-client-autoconfig-support ,它常与springboot集成使用,若是有如下设置也会出问题。

,

Usdt第三方支付接口

菜宝钱包(www.caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,
cas.ignorePattern=/api/guest

修复

以是准确的设置应该改为

<init-param>
  <param-name>ignorePattern</param-name>
  <param-value>^/api/guest$</param-value>
</init-param>

小我私人以为这个可以算洞(没处置../而且contains这种选项就不应该存在),也可以甩锅给开发没仔细看文档。

bypass trick2 useSuffixPatternMatch

场景

这里假设/admin系列的路由都不允许接见。

package today.redteam.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AdminController {

    @RequestMapping(
            value = {"/admin"},
            method = {RequestMethod.GET}
    )
    public String admin(){
        return "hello admin";
    }

    @RequestMapping(
            value = {"/admin/api"},
            method = {RequestMethod.GET}
    )
    public String admin1(){
        return "hello admin1";
    }

}

这一次开发认真看了文档做了以下设置。

package today.redteam.config;

import net.unicon.cas.client.configuration.CasClientConfigurerAdapter;
import net.unicon.cas.client.configuration.EnableCasClient;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Configuration;
import today.redteam.aop.CasAspect;

@Configuration
@EnableCasClient
public class CasConfig extends CasClientConfigurerAdapter {
    public CasConfig() {
    }

    public void configureAuthenticationFilter(FilterRegistrationBean authenticationFilter) {
        super.configureAuthenticationFilter(authenticationFilter);
        authenticationFilter.addUrlPatterns(new String[]{"/admin/*"});
    }

    static {
        System.setProperty("cas.serverUrlPrefix", "https://cashost.com/cas");
        System.setProperty("cas.serverLoginUrl", "https://cashost.com/cas/login");
        System.setProperty("cas.clientHostUrl", "http://localhost:8888/");
        System.setProperty("cas.validationType", "CAS");
    }
}

/admin这个路由看起来似乎也没有什么问题。

通例的绕过方式也不起作用

行使

但在低版本的springboot上照样能绕过(内陆环境是1.5.9.RELEASE)。

原理

原理是在springboot 1.x中useSuffixPatternMatch默以为true,springboot会对路由举行正则匹配。

断点下在org.springframework.web.servlet.mvc.condition.PatternsRequestCondition,getMatchingPattern。

/admin.*自然能匹配上/admin.也就绕过了。

修复

如下关闭setUseSuffixPatternMatch或升级到2.x

package today.redteam.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

@Configuration
@ComponentScan
@EnableWebMvc
public class AppConfig {

    @Bean
    public HandlerMapping requestMappingHandlerMapping() {
        RequestMappingHandlerMapping mapping = new RequestMappingHandlerMapping();
        mapping.setUseSuffixPatternMatch(false);
        return mapping;
    }

}

逆熵科技官网

逆熵科技官网(www.ipfs8.vip)是FiLecoin致力服务于使用FiLecoin存储和检索数据的官方权威平台。鲸鱼矿池官网实时更新FiLecoin(FIL)行情、当前FiLecoin(FIL)矿池、FiLecoin(FIL)收益数据、各类FiLecoin(FIL)矿机出售信息。并开放FiLecoin(FIL)交易所、IPFS云矿机、IPFS矿机出售、租用、招商等业务。

Usdt自动充值接口声明:该文看法仅代表作者自己,与本平台无关。转载请注明:filecoin(www.ipfs8.vip):Two Tricks Of CAS-CLIENT AUTH Bypass
发布评论

分享到:

万利矿业(www.ipfs8.vip):梁朝伟万万店面遭强制法拍赔款惊人 影帝伉俪天文数字资产曝光
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。