网站引擎(SiteEngine,全称:博卡网站引擎管理系统),软件基于PHP程序和Mysql数据库开发,采用B/S体系结构。 首先先看第一段代码.是对文件后缀进行检查的。 1. { 2. $attach['name'] = $filename = str_replace( " ", "", $attach['name'] ); //去掉文件名的空格 3. $attach['ext'] = $extension = strtolower( fileext( $attach['name'] ) ); //取得文件的后缀名并变成小写 4. 5. //转义文件后缀名的正则表达式字符,并匹配合法的文件后缀名 6. if ( $attachextensions && !preg_match( "/(^|\\s|,)".preg_quote( $attach['ext'], "/" )."(\$|\\s|,)/i", $attachextensions ) ) 7. { 8. //如果不匹配 majun1988 good 9. message( $GLOBALS['l_site']['uploadexterror'], $referer ); 10. } 这段代码我们可以看出SiteEngine对上传的文件后缀进行检查.符合$attachextensions即可上传,否则提示错误。 再看第二段代码: 1. //文件名处理 2. $filename = substr( $filename, 0, strlen( $filename ) - strlen( $extension ) - 1 ); //取出文件的后缀名之后 得出真实的文件名 3. if ( preg_match( "/([-]|\\%)+/s", $filename ) ) //如果文件名存在非法字符 司徒生辰快乐 4. { 5. $filename = str_replace( "/", "", base64_encode( substr( $filename, 0, 20 ) ) );...
网站引擎(SiteEngine,全称:博卡网站引擎管理系统),软件基于PHP程序和Mysql数据库开发,采用B/S体系结构。 首先先看第一段代码.是对文件后缀进行检查的。 1. { 2. $attach['name'] = $filename = str_replace( " ", "", $attach['name'] ); //去掉文件名的空格 3. $attach['ext'] = $extension = strtolower( fileext( $attach['name'] ) ); //取得文件的后缀名并变成小写 4. 5. //转义文件后缀名的正则表达式字符,并匹配合法的文件后缀名 6. if ( $attachextensions && !preg_match( "/(^|\\s|,)".preg_quote( $attach['ext'], "/" )."(\$|\\s|,)/i", $attachextensions ) ) 7. { 8. //如果不匹配 majun1988 good 9. message( $GLOBALS['l_site']['uploadexterror'], $referer ); 10. } 这段代码我们可以看出SiteEngine对上传的文件后缀进行检查.符合$attachextensions即可上传,否则提示错误。 再看第二段代码: 1. //文件名处理 2. $filename = substr( $filename, 0, strlen( $filename ) - strlen( $extension ) - 1 ); //取出文件的后缀名之后 得出真实的文件名 3. if ( preg_match( "/([-]|\\%)+/s", $filename ) ) //如果文件名存在非法字符 司徒生辰快乐 4. { 5. $filename = str_replace( "/", "", base64_encode( substr( $filename, 0, 20 ) ) ); //取文件名前20位数,用base64进行编码,然后把转义符去掉 6. } 7. if ( $avatar ) //如果设置了某个头像的参数 8. { 9. //隔一个标点符号就将 .(点) 转化为 _ (下划线) 10. $attach['attachment'] .= preg_replace( "/(\\.)(php|phtml|pwml|php3|php4|php|php2|inc|jsp|exe|dll|asp|aspx|cgi|fcgi|pl|reg)(\\.|\$)/i", "\\1_\\2\\3", $avatar.".gif" ); 11. } 12. else if ( $random == 1 ) //随机参数为1 13. { 14. $attach['attachment'] .= preg_replace( "/(\\.)(php|phtml|pwml|php3|php4|php|php2|inc|jsp|exe|dll|asp|aspx|cgi|fcgi|pl|reg)(\\.|\$)/i", "\\1_\\2\\3", substr( $filename, 0, 64 )."_".random( 6 ).".".$extension ); //随机生成文件名 15. } 16. else 17. { 18. $attach['attachment'] .= preg_replace( "/(\\.)(php|phtml|pwml|php3|php4|php|php2|inc|jsp|exe|dll|asp|aspx|cgi|fcgi|pl|reg)(\\.|\$)/i", "\\1_\\2\\3", substr( $filename, 0, 64 ).".".$extension ); 19. } 第二段代码我们可以看出.上传文件文件名如含有非法字符.即取文件名前20位base64编码。如上传后缀为php.php3.php4.jsp等文件.就会将文件前的第一个"."转换成"_" SiteEngine对上传文件的处理做得非常好。这种做法存在漏洞 首先第一点.第一段代码中的$attachextensions我寻遍了所有文件都找不到。那他的文件后缀检查就形同虚设. SiteEngine CMS 5.1.0 厂商补丁: SiteEngine ------- 目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本: http://www.siteengine.net/