当前位置:首页 > 百科

解析漏洞主要分为三类 分别是

解析漏洞主要分为三类 分别是解析

一个不起眼的URL,可能让整个网站的漏洞后台裸奔。这类问题根源不在代码逻辑,主分而在解析器对文件名的为类“过度宽容”。业界把解析漏洞大致归成三类:目录解析、分别文件解析、解析以及空字节截断。漏洞它们各有各的主分脾气,也各有各的为类破解法。

先说目录解析漏洞,分别典型代表是解析IIS 6.0的老毛病——分号截断。你上传一个`shell.asp;.jpg`,漏洞服务器看到分号就犯迷糊,主分把它当ASP脚本跑。为类更早的分别版本还有`*.asp`目录的“通吃”特性:只要文件夹名带`.asp`,里面任何文件都被当作脚本执行。这就像你给门卫说“穿蓝色衣服的都放行”,结果快递员穿了蓝T恤也被请进机房。现在Apache和Nginx也有类似坑,比如`/uploads`目录下配置了`php_flag engine on`,那所有`.txt`文件都可能被PHP引擎解析。

第二类是文件解析漏洞,核心在“双扩展名”和“畸形后缀”。Apache的老版本看到`shell.php.rar`,只认最后一个后缀`.rar`,但中间层代理或负载均衡器却可能把`.php`当有效扩展名传给后端。Windows系统里还有“点”和“空格”的陷阱——`shell.php.`或`shell.php `(末尾带空格)在Windows文件系统上会被自动去掉,但解析器可能先按`.php`处理。这类漏洞最阴险的地方在于:你明明上传了图片,服务器却把它当脚本执行。我见过某论坛把头像改成`avatar.php.gif`,结果直接拿到了服务器权限——因为图片内容里嵌了PHP代码,而Apache的`AddHandler`配置把`.gif`也绑给了PHP。

第三类空字节截断,老古董但没绝迹。`shell.php%00.jpg`在C语言编写的旧版Apache里,`%00`会被当成字符串结束符,于是文件名变成`shell.php`。这种漏洞在2008年后主流服务器基本修复了,但一些自研的Java或Python上传组件仍可能踩坑。比如某云存储系统,用户上传`evil.php%00.png`,后端校验后缀是`.png`,但存储时用原生字符串拼接,结果文件落地就成了`evil.php`。这问题在PHP 5.3之前尤其致命——因为`include`和`require`也吃这一套。现在虽然少了,但每次看到用户输入里带`%00`,我都下意识警惕。

这三类漏洞有个共性:它们都源于“格式假设”不一致。服务器以为自己在处理图片,客户端却塞进了脚本;代理以为是文本,后端却按二进制解析。修复方法也简单粗暴——别信文件名,用随机ID重命名存储;别让解析器猜类型,用MIME和内容检测双重校验;别允许特殊字符,直接白名单过滤。但现实里,总有开发者图省事,直接用原始文件名拼接路径——然后漏洞就来了。

安全圈有句糙话:“解析漏洞不是服务器蠢,是开发者懒。” 你没法控制Apache或Nginx的每个配置版本,但至少能在代码里掐死那些诡异的点。比如上传文件一律改成`uuid.扩展名`,比如对`;`、`%00`、末尾点做硬性拦截。这不需要多高深的技术,就是多写几行判断的事——但很多人就是不做。等被黑了,才想起补课,那代价可就大了。

分享到: