好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

韩国某web编辑器0day分析 - 网站安全 - 自学php

该编辑器在韩国使用比较广泛,HdhCmsTesthani.co.kr、HdhCmsTestkbs.co.kr、HdhCmsTestjoinsmsn测试数据中都有使用。由于涉及大大站,具体程序名称就不便直接发布了。以下只对问题代码做简要分析。   主要问题在于上传类在对文件扩展名做验证的时候不严谨导致攻击者可上传PHP。By Ca3tie1   先看上传函数: if ($file->getFileSize("Filedata") > 0) { $save_name = $req->get("save_name"); if ($save_name == null || $save_name == "") $save_name = $file -> nameUnique('ph_'); $file_name = $file->getFileName("Filedata"); if ($file -> isUploadable($file_name))   //扩展名的验证,如果验证不过则扩展名定死为tmp。 $file_ext = $file->name2Ext($file_name);  //取出扩展名 else $file_ext = 'tmp'; $save_name = uniqid(date('ymd_')); $file_server = $file->file_Copy("Filedata", $savearea.$save_name.'.'.$file_ext); }   跟进isUploadable函数:   function isUploadable($fileName) { return !(rainUtil::find($this->forbidden_extension_patten, $fileName)); } //这里涉及到forbidden_extension_patten,定义为:var $forbidden_extension_patten = '(html|htm|php|php3|cgi|phtml|shtml| jsp | asp |exe|com|dll)$';   再继续跟进find函数:HdhCmsTest2cto测试数据   function find($patternStr, $str, $reg = Array()) { return (ereg($patternStr,$str, $reg)) ? true:false;    //问题就在这里了,ereg函数是区分大小写的!只要我们提交的文件名的扩展名为pHp即可绕过此处验证。 }   绕过扩展名验证后继续看上传函数中的取出扩展名的代码:   $file_ext = $file->name2Ext($file_name);   我们继续跟进name2Ext函数:   function name2Ext($fileName) { $tar_file_extension = ""; if ($fileName != "") { if (ereg("\.([^\.]+)$", $fileName, $tmp_reg)) $tar_file_extension = substr(strtolower($tmp_reg[1]), 0, 4); //最终会将文件名中的扩展名转换成小写!! else $tar_file_extension = "tmp"; } else $tar_file_extension = ""; return $tar_file_extension; } 完美绕过,这是韩国棒子写的程序,当然和国内的没法比。若分析有误望指出!拜谢! 摘自 Ca3tie1的空间

查看更多关于韩国某web编辑器0day分析 - 网站安全 - 自学php的详细内容...

  阅读:40次