来源:自学PHP网 时间:2015-04-17 13:02 作者: 阅读:次
[导读] 近日在做一些日志分析的时候,发现了数千次的来自 bom.php 的误报,一般来说也就直接忽略掉了(相对于数十亿的基数来说),但本着严谨的态度,我还是查了查这个文件,然后确实发...
近日在做一些日志分析的时候,发现了数千次的来自 bom.php 的误报,一般来说也就直接忽略掉了(相对于数十亿的基数来说),但本着严谨的态度,我还是查了查这个文件,然后确实发现了一点有意思的事情,这是一起自动化的扫描。 bom.php 这个文件会泄露本地文件目录,并被用于扫描:
(部分扫描日志) bom.php是什么? 提到BOM,大家可能很快会想到UTF-7 BOM XSS,但今天讲的和XSS无关。 以下文字摘自网络: Unicode规范中有一个BOM的概念。BOMByte Order Mark,就是字节序标记。在这里找到一段关于BOM的说明: 在UCS 编码中有一个叫做ZERO WIDTH NO-BREAK SPACE的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们....
现在很多文本编辑器保存文件时,会默认带上BOM: 类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于 PHP来说,BOM是个大麻烦。
BOM对于开发者来说是个小麻烦,因此产生了bom.php bom.php是一个批量的清除文件里bom字符的东西,现在网上流传的一般是这个版本: 、 但是这个流行的bom.php默认会把所有扫描信息给输出,这就造成了敏感信息泄露。 同时还存在目录遍历,导致问题更严重。 仔细读完代码后,发现文件写入的地方无法控制,因此这个文件的问题只停留在敏感信息泄露了。 代码如下: <?php /*检测并清除BOM*/ if(isset($_GET['dir'])){ $basedir=$_GET['dir']; }else{ $basedir = '.'; } $auto = 1; checkdir($basedir); function checkdir($basedir){ if($dh = opendir($basedir)){ while(($file = readdir($dh)) !== false){ if($file != '.' && $file != '..'){ if(!is_dir($basedir."/".$file)){ echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>"; }else{ $dirname = $basedir."/".$file; checkdir($dirname); } } }//end while closedir($dh); }//end if($dh }//end function function checkBOM($filename){ global $auto; $contents = file_get_contents($filename); $charset[1] = substr($contents, 0, 1); $charset[2] = substr($contents, 1, 1); $charset[3] = substr($contents, 2, 1); if(ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191){ if($auto == 1){ $rest = substr($contents, 3); rewrite ($filename, $rest); return "<font color=red>BOM found, automatically removed.</font>"; }else{ return ("<font color=red>BOM found.</font>"); } } else return ("BOM Not Found."); }//end function function rewrite($filename, $data){ $filenum = fopen($filename, "w"); flock($filenum, LOCK_EX); fwrite($filenum, $data); fclose($filenum); }//end function ?>
执行结果:
确实会带来一些安全隐患,比如用来扫数据库文件、备份打包文件、以及一些可能要隐藏的文件,需要跟具体场景相结合。 结论: 1. 任何一个小应用,流行起来后,都可能被黑客关注。 2. 安全隐患往往来自于不起眼的地方,以你意想不到的方式,攻击成功。 3. 冷僻的漏洞,放在大量扫描的基础上,也可能产出结果。
BTW:第三个结论无法直接证明,但我们最近的一项统计表明,最近挺火的那个PHP CGI的漏洞,虽然这样配置的主机很少了,但我们仍然从数十万个网站中,发现了数百个站点存在漏洞,比例大约为 0.03%,并不算低了 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com