前几天90SEC群里有人说读读这套系统的代码
这几天正好在做这方面的视频,就顺手读了读
本地文件包含:
/install.php
@error_reporting(E_ALL ^ E_NOTICE); @ini_set("display_errors",On); @ini_set('memory_limit', '128M'); ini_set("register_globals", 0); ini_set("magic_quotes_gpc" , 0); set_magic_quotes_runtime(0); define("ROOT",dirname(__FILE__).DIRECTORY_SEPARATOR); set_include_path(ROOT.PATH_SEPARATOR.ROOT.'library'.PATH_SEPARATOR. ROOT.'application/controllers'.PATH_SEPARATOR. ROOT.'application/Models/'.PATH_SEPARATOR.get_include_path()); header("Content-Type:text/html;charset=gb2312"); $mod = trim($_GET['mod']) ? trim($_GET['mod']) : "setup_1"; // 首先这里接受了$mod变量 $GLOBALS['succeed'] = true;
switch($mod) { case "setup_4": $error = false; $array = null; $array['dbhost'] = trim($_POST['dbhost']); $array['dbname'] = trim($_POST['dbname']); $array['dbuser'] = trim($_POST['dbuser']); $array['dbpass'] = trim($_POST['dbpass']); $array['tblpre'] = trim($_POST['tblpre']); if (! ($conn = @mysql_connect($array['dbhost'],$array['dbuser'], $array['dbpass']))) { $error = mysql_error(); }else{ if (!mysql_query("CREATE DATABASE IF NOT EXISTS `".$array['dbname']."`")) { $error = "创建数据库失败!您可能没有权限!".mysql_error(); } if ( !@mysql_select_db($array['dbname'], $conn)) { $error.= mysql_error(); }else{ $filepath = ROOT.'config/database.inc.php'; $text =file_get_contents($filepath); foreach ($array as $key=>$value){ $text = preg_replace("/[$]database['$key'](s+)=(.+?);/$is", "$database['$key']$1= '".$value."';",$text); } $fp = fopen($filepath, "w"); if (fwrite($fp, $text)===false) { $error = "写入配置文件".$filepath."失败"; } unset($text); } } if ($error) { $mod = "setup_3"; } $result = @mysql_query("SHOW TABLES FROM ".$array['dbname']); while($rs = @mysql_fetch_array($result)) { $tablearray[] = $rs[0]; } if (is_array($tablearray)){ if (array_search($array['tblpre']."admin", $tablearray)!==false) { $error = "<li><font color=red>系统已经被安装过秀影vodcms系统!继续安装会清空已有数据!</font></li>"; $errorjs = "onclick="return confirm('系统已经安装过vodcms系统!继续会清空已有数据!确认继续吗?')""; } } break; case "setup_5": $error = null; $username = trim($_POST['username']); $password1 = md5(strtolower(trim($_POST['password1']))); $password2= md5(strtolower(trim($_POST['password2']))); if ($password1 != $password2) { $error = "两次密码输入不一致!"; } if ($error) { $mod = "setup_4"; } break; // 在这个地方,直接给包含进来了 使用 %00可以说是你懂我懂大家懂了 case 'succeed': require_once("install/$mod.php"); exit; break;
数据库覆盖安装:
case 'succeed': require_once("install/$mod.php"); exit;
引起了我的注意
if (@file_exists(ROOT."cache/install.lock")==false){ require (ROOT.'library/loader.php'); require ROOT.'application/global.func.php'; include ROOT."config/database.inc.php"; include ROOT."config/license.php"; Easy_Db::Connect($database); $DB = Easy_Db::getInstance(); $array['username'] = trim(strtolower($_GET['username'])); $array['password'] = trim(strtolower($_GET['password'])); $array['group'] = '超级管理员'; $IO = new Easy_Filesystem(); $path = str_replace(strrchr($_SERVER['PHP_SELF'],"/"),"",$_SERVER['PHP_SELF'])."/"; $text = $IO->getContent(ROOT."config/config.inc.php"); $text = preg_replace("/$config['basedir'](s+)=(.+?);/is","$config['basedir']$1= "$path";",$text); $text = preg_replace("/$config['createuser'](s+)=(.+?);/is","$config['basedir']$1= "".$array['username']."";",$text); $IO->wfile(ROOT."config/config.inc.php", $text); unset($text); if ($array['username']){ $sqlline = $IO->getContent(ROOT."install/vodcms.sql"); if (empty($sqlline)) { $sqlline = $IO->getContent("http://www.vodcms.com/install/vodcms.txt"); } runquery($sqlline); $fp = @fopen(ROOT.'config/install.lock', 'w'); @fwrite($fp, 'vodcms_install_6.0.3'); @fclose($fp); @unlink(ROOT.'install.php'); $DB->insert($database['tblpre'].'admin', $array); echo '建立管理员成功'; }else{ exit('请填写用户名以及登陆密码'); } }else{?>
有人觉得,这代码写的没错啊。很好很强大啊
好吧。其实我也觉得。
但是仔细看看他写的代码,if里。 ROOT 这个常量压根就没定义啊!
没定义就相当于直接报错了,但是他屏蔽了。好吧。这个if 的逻辑永远都等于“真”
所以说才会执行“真”的代码段。也就是
require (ROOT.'library/loader.php'); require ROOT.'application/global.func.php'; include ROOT."config/database.inc.php"; include ROOT."config/license.php"; Easy_Db::Connect($database); $DB = Easy_Db::getInstance(); $array['username'] = trim(strtolower($_GET['username'])); $array['password'] = trim(strtolower($_GET['password'])); $array['group'] = '超级管理员'; $IO = new Easy_Filesystem(); $path = str_replace(strrchr($_SERVER['PHP_SELF'],"/"),"",$_SERVER['PHP_SELF'])."/"; $text = $IO->getContent(ROOT."config/config.inc.php"); $text = preg_replace("/$config['basedir'](s+)=(.+?);/is","$config['basedir']$1= "$path";",$text); $text = preg_replace("/$config['createuser'](s+)=(.+?);/is","$config['basedir']$1= "".$array['username']."";",$text); $IO->wfile(ROOT."config/config.inc.php", $text); unset($text); if ($array['username']){ $sqlline = $IO->getContent(ROOT."install/vodcms.sql"); if (empty($sqlline)) { $sqlline = $IO->getContent("http://www.vodcms.com/install/vodcms.txt"); } runquery($sqlline); $fp = @fopen(ROOT.'config/install.lock', 'w'); @fwrite($fp, 'vodcms_install_6.0.3'); @fclose($fp); @unlink(ROOT.'install.php'); $DB->insert($database['tblpre'].'admin', $array); echo '建立管理员成功'; }else{ exit('请填写用户名以及登陆密码'); }
然后succeed.php?username=08sec&password=08sec的MD5加密
然后就添加了一个管理员了。。
作者:y0umer
aaaa