游客发表
Apache、下服Nginx、器文件IIS,曾被这三个名字基本承包了全球大半网站的发现份额。但要说谁在“文件解析漏洞”这个坑里栽过跟头,解析答案可能比你想的漏洞更具体——不是某个抽象概念,而是下服具体版本、具体配置下的器文件具体失误。
先拿IIS开刀。曾被老网民应该记得2000年前后那阵子,发现只要网站跑在IIS 5.0/6.0上,解析攻击者往URL里塞个“xxx.asp;.jpg”或者“xxx.asp.jpg”,漏洞服务器就可能把图片当ASP脚本执行。下服原因特蠢:IIS把分号后的器文件内容当参数忽略,又把“.asp”后缀优先识别。曾被后来补丁打了,但默认配置下有些虚拟主机商没跟上,导致那几年挂马图片满天飞。现在你搜“IIS解析漏洞”,还能翻出一堆老教程——这玩意儿早该进博物馆,但总有人懒得关。
Nginx这边更戏剧化。2010年爆出个“空字节解析漏洞”,影响版本0.7.x到0.8.x。攻击者上传个“shell.jpg%00.php”,Nginx看到“.php”就交给FastCGI处理,但底层C语言字符串截断在空字节,实际文件却是jpg。这漏洞纯属C语言老毛病传染给Web服务器,官方修得倒是快,可当时不少CDN节点没同步更新,被黑产扫了整整半年。现在你拿Nginx 1.24去测,早没这问题,但有些老运维的配置里如果残留了“cgi.fix_pathinfo=1”,照样能玩出花活——这算不算“借尸还魂”?
Apache的坑更隐蔽。它本身不解析多后缀,但某些模块会。比如mod_php老版本,你上传“shell.php.rar”,Apache先看后缀是“.rar”,不执行;可一旦管理员开了“AddHandler php-script .php”,再配合“mod_negotiation”的多语言协商,某些畸形请求能让Apache误判。最经典的是2008年爆的“%0a”换行解析漏洞,攻击者在URL里加个换行符,Apache把“shell.php%0a.jpg”当PHP执行。这漏洞当年害惨了虚拟主机商,因为修复要改httpd.conf,很多共享主机根本没权限动。
还得提一嘴那些“非主流”选手。比如Tomcat的JSP解析,曾经有过“/xxx.jsp/”路径解析问题,但影响面远不如前三者。又比如Lighttpd,2007年爆过“-s”参数解析漏洞,但用的人太少,连攻击者都懒得写利用工具。
我的看法是:解析漏洞本质是“协议层与文件系统层的认知错位”。IIS错在分号处理,Nginx错在空字节截断,Apache错在模块间协作混乱——它们都不是故意留后门,而是工程实现时的边界条件没考虑周全。今天你问哪个服务器绝对安全?没人敢打包票。因为只要还在用“后缀名”判断文件类型,就总有新奇的编码方式、畸形字符能钻空子。别迷信“最新版本”,关键看你怎么配置——把“cgi.fix_pathinfo”关掉,把“AllowEncodedSlashes”设成off,比天天追版本号实在多了。
友情链接