phpmps 2.0 GBK Help.php $keywords SQL注入漏洞

来源:岁月联盟 编辑:老鹰 时间:2010-06-06

影响版本:
phpmps 2.0 GBK

漏洞描述:
Phpcms 是国内领先的网站内容管理系统,同时也是一个开源的PHP开发框架。Phpcms由内容模型、会员、问吧、专题、财务、订单、广告、邮件订阅、 短消息、自定义表单、全站搜索等20多个功能模块组成,内置新闻、图片、下载、信息、产品5大内容模型。Phpcms 采用模块化开发,支持自定义内容模型和会员模型,并且可以自定义字段。 

Help.php 文件,取得keywords的值,只用trim函数,去除了首位空,直接带入sql查询

//取得文章列表

        $keyword = !empty($_REQUEST['keywords']) ? trim($_REQUEST['keywords']) : '';
        $typeid  = !empty($_REQUEST['typeid']) ? intval($_REQUEST['typeid']) : 0;

        if(!empty($keyword))
        {
                $arr = array();
                $keywords = 'AND (';
                $keywords .= "(title LIKE '%$keyword%' OR keywords LIKE '%$keyword%' )";
                $keywords .= ')';
        }
        $typeid = $typeid ? " AND typeid = '$typeid' " : '';
        $page = !empty($_REQUEST['page'])  && intval($_REQUEST['page'])  > 0 ? intval($_REQUEST['page'])  : 1;
        $size = !empty($_CFG['pagesize']) && intval($_CFG['pagesize']) > 0 ? intval($_CFG['page_size']) : 20;
        $sql = "SELECT COUNT(*) FROM {$table}help WHERE 1 ". $keywords . $typeid;
        $count = $db->getOne($sql);

看一下,include下的common.php 文件,在第28行

//转义处理客户端提交的数据

if(!get_magic_quotes_gpc())
{
        $_POST   = stripslashes_deep($_POST);
        $_GET    = stripslashes_deep($_GET);
        $_COOKIE = stripslashes_deep($_COOKIE);
}

如果GPC 被关闭了,则使用自定义函数,stripslashes_deep 对提交的字符,进行处理,stripslashes_deep 在include目录下的global.fun.php文件。

function stripslashes_deep($value)
{
        return is_array($value) ? array_map('stripslashes_deep', $value) : (isset($value) ? stripslashes($value) : null);
}

默认GPC是ON,也就是打开的,stripslashes_deep函数也不会被执行


安全建议:
厂商补丁:
PHPCMS
-------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.phpcms.cn/