【CTF-WEB-路径】路径穿越:/login.html/../flag.html和/flag.html;jsessionid=test

📅 2026/7/26 11:34:37
【CTF-WEB-路径】路径穿越:/login.html/../flag.html和/flag.html;jsessionid=test
题目https://118.195.192.138:9443/games/3/challenges#37-%E5%AE%89%E5%85%A8%E7%89%9B%E7%9A%84ERP安全牛的ERP系统但似乎隐藏着一些秘密。管理员声称系统绝对安全你知道 flag 就藏在 flag.html 中。不过直接访问它会被拒绝。你能找到绕过限制的路径吗解题思路这是一个典型的Web安全靶场题目涉及路径穿越Path Traversal或认证/会话绕过。1. 题目描述分析目标访问flag.html直接访问被拒绝需要身份验证需要绕过限制获取flag.html两个可能的绕过方式GET /login.html/../flag.htmlhttp://175.27.169.122:49872/flag.html;jsessionidtest2. 第一个绕过/login.html/../flag.html这是一个路径标准化绕过的例子。原理Web 服务器在处理 URL 路径时通常会进行路径标准化normalization将..解析为上一级目录/./解析为当前目录。如果开发者在访问控制规则里写的是“禁止直接访问/flag.html”但在规则匹配时没有考虑到路径穿越就可能绕过。例子规则禁止访问路径等于/flag.html请求/login.html/../flag.html服务器收到后先进行路径标准化/login.html/../flag.html→/flag.html但访问控制判断可能在标准化之前进行或者使用了错误的正则匹配例如检查是否包含/flag.html字符串而不允许路径穿越这里却是先经过路由匹配发现是/login.html前缀的资源然后交由静态文件处理时解析..最终访问到/flag.html绕过了直接路径限制。在Apache / Nginx等静态文件服务中如果配置不当/login.html/../flag.html确实能访问到上级目录的flag.html因为login.html在这里被当作一个目录路径的一部分即使它不是目录标准化后还是能指向flag.html。靶场可能是故意设计成这种逻辑访问控制中间件检查请求的原始 URL 是否包含flag.html如果包含就拒绝但是login.html/../flag.html这种写法可能匹配失败而后续的静态文件处理却能正确解析。3. 第二个绕过/flag.html;jsessionidtest这个技巧跟Tomcat / Java Web 容器的 URL 解析特性有关。原理在 Java Servlet 规范中;分号后面的内容被视为“路径参数”path parameters不属于路径的一部分用于携带会话 ID 等。例如/flag.html;jsessionidABC123实际上请求的资源是/flag.htmljsessionidABC123是附加参数用于会话跟踪。某些安全过滤器或访问控制代码在做路径匹配时可能会错误地把整个字符串/flag.html;jsessionidtest和规则中的/flag.html比较结果不匹配字符串不同导致绕过检查。但是容器在处理时会忽略;后面的部分去寻找真正的资源/flag.html于是能够正常返回该页面。为什么能绕过假设访问控制代码如下伪代码if(request.getRequestURI().equals(/flag.html)){deny();}request.getRequestURI()在/flag.html;jsessionidtest情况下不同容器可能返回不同结果。有些返回包含分号后面的部分那么不匹配/flag.html放行。而最终 Servlet 容器定位资源时却按/flag.html来找于是文件被读取并返回。4. 总结这两个绕过方式反映了两种常见的 Web 安全漏洞路径标准化绕过Path Traversal via Mis-normalization因为 URL 的路径解析和访问控制逻辑不一致导致..可以绕过某些路径检查。路径参数混淆绕过Path Parameter Confusion利用;在 URL 中的特殊含义欺骗访问控制逻辑但依然访问到目标资源。在靶场中出题人可能设置了这样的规则直接请求/flag.html→ 被拦截利用/login.html/../flag.html→ 绕过路径检查利用/flag.html;jsessionidxxx→ 绕过字符串匹配检查这种题目能帮助学习者理解 Web 服务器/框架处理 URL 的细节以及安全过滤器的潜在漏洞。