游客发表
去年冬天,径漏洞我帮一个做电商的径漏洞朋友查服务器日志。凌晨三点,径漏洞他发现有人用一串精心构造的径漏洞URL,绕过了他后台的径漏洞权限校验,直接读到了另一个用户的径漏洞订单数据。那个漏洞不在代码逻辑里,径漏洞而在路径解析的径漏洞缝隙中——两个斜杠、一个编码过的径漏洞点号,就让整个鉴权体系形同虚设。径漏洞
路径漏洞这东西,径漏洞说白了就是径漏洞程序在判断“你要访问什么”和“你实际访问到了什么”之间出现了偏差。Web服务器、径漏洞框架、径漏洞操作系统,径漏洞三层对路径的理解各有一套规则。攻击者要做的,就是找到那个规则打架的交叉点。
最经典的玩法是路径穿越。你写个文件下载接口,参数是 filename=report.pdf,后端拼成 /data/files/report.pdf。如果有人传 ../../../etc/passwd 呢?很多老系统直接就把系统文件吐出来了。防御手段看起来简单——过滤 .. 就行。但编码一下呢?%2e%2e%2f,URL解码之后又变回了 ../。双重编码、UTF-8超长编码、反斜杠混用,绕过方式能列一长串。
我见过一个真实案例。某CMS的文件上传功能,检查扩展名时用的是黑名单,禁止 .php。攻击者上传了 shell.php%00.jpg,后端截断空字节后,实际保存成了 shell.php。这算路径漏洞的变种——文件名解析阶段的截断。后来PHP修了空字节问题,但类似的逻辑缺陷换了个马甲继续出现。
更隐蔽的是权限校验和路径规范化之间的时序差。比如Nginx做反向代理,配置了 location /admin { deny all; },但后端Tomcat对 /admin/../admin/ 这种路径的处理和Nginx不一致。Nginx看到的是 /admin/../admin/,可能匹配不到 /admin 规则就放行了,Tomcat规范化之后又回到了 /admin/,直接进入管理后台。这种漏洞挖起来费劲,但一旦利用,杀伤力极大。
Windows和Linux的路径差异也经常被利用。Windows不区分大小写,Admin 和 admin 是同一个目录,但有些鉴权中间件只匹配小写。还有8.3短文件名格式,Progra~1 代表 Program Files,绕过基于完整路径的过滤规则轻而易举。
我自己的判断是,路径漏洞之所以反复出现,根源在于开发者习惯把路径当成普通字符串处理,而实际上它是一套有状态的解析协议。每一层——浏览器、CDN、WAF、Web服务器、应用框架、操作系统——都在按自己的规则重新解释这个字符串。你永远不知道下一层会把它变成什么。
防御思路得换。别去枚举黑名单,而是白名单加规范化后比对。拿到用户输入的路径,先做一次标准化的解码和折叠,再和预期的基础目录做前缀匹配。注意,是规范化之后再匹配,顺序反了照样出事。另外,尽量不要把用户输入直接拼进文件系统调用里,用框架提供的安全API,让专业代码去处理那些边角情况。
那次帮朋友修完漏洞之后,我把他的日志翻了个底朝天。攻击者其实试探了整整两天,从简单的 ../ 开始,一步步加编码、加斜杠、换大小写。最后成功的那条请求,路径长得像一串乱码。但服务器就是认了。路径漏洞就是这样,它不跟你正面硬刚,只是在解析的迷宫里找到了一条你没设防的小路。
友情链接