切换风格

Wizard Sky California Sunset glow Black Cloud Beige Dragon Lavender NewYear City Snow Flowers London
收藏本站XSS平台字符串转换jsfuck
PHPEMS在线模拟考试系统 v1.21 注入漏洞02 [ CodeSec-2014-0002 ][复制链接]
发表于 2014-1-20 22:33:37 | 显示全部楼层 |!read_mode!

开发者漏洞预警 —— PHPEMS在线模拟考试系统 v1.21 注入漏洞02 [ CodeSec-2014-0002 ]

漏洞编号: CodeSec-2014-0002

漏洞标题: PHPEMS在线模拟考试系统 v1.21 注入漏洞02

漏洞类型: 注入

漏洞危害等级: 高危

漏洞状态: 漏洞发布,联系作者中...

漏洞细节:
见帖子内容

修补方案:
表单name值白名单或添加formhash

源码地址:
http://down.chinaz.com/soft/34597.htm?qq-pf-to=pcqq.discussion

论坛备份源码地址:
/data/download/phpems_zxmnks_v1.21.rar

开发者回复: 暂无

user.cls.php

public function modifyUserInfo($args,$userid)
        {
                if(!$args)return false;
                $data = array('user',$args,"userid = '{$userid}'");
                $sql = $this->sql->makeUpdate($data);
                $this->db->exec($sql);
                return $this->db->affectedRows();
        }


sql.cls.php
//生成update sql
        public function makeUpdate($updaters)
        {
                if(!is_array($updaters))return false;
                $sql = "UPDATE ";
                if(is_array($updaters[0]))
                {
                        $tmp = NULL;
                        foreach($updaters[0] as $p)
                        $tmp .= $this->tablepre.$p." AS ".$p.",";
                        $sql .= rtrim($tmp,',');
                }
                else $sql .= $this->tablepre.$updaters[0]." AS ".$updaters[0];
                if(is_array($updaters[1]))
                {
                        $sql .= " SET ";
                        $tmp = NULL;
                        foreach($updaters[1] as $id => $p)
                        if(is_array($p))
                        //$tmp .= '`'.$id."` = '".implode(',',$p)."',";
                        $tmp .= '`'.$id."` = '".$this->ev->addSlashes(serialize($p))."',";//直接获取未经过滤的表单name值生成sql语句
                        else
                        $tmp .= '`'.$id."` = '".$p."',";//构造非数组POST参数,这里也会有问题
                        $sql .= rtrim($tmp,',');
                }
                else return false;

                $sql .= " WHERE ";
                if(!$updaters[2])$updaters[2] = 1;
                if(is_array($updaters[2]))
                {
                        $sql .= rtrim(implode(' AND ',$updaters[2]),'AND ');
                }
                else $sql .= $updaters[2];

                if($updaters[3])
                {
                        $sql .= " LIMIT ";
                        if(is_array($updaters[3]))
                        {
                                $sql .= rtrim(implode(',',$updaters[3]),',');
                        }
                        else $sql .= $updaters[3];
                }
                return $sql;
        }


操千曲而后晓声,观千剑而后识器。
发表于 2014-11-21 15:07:56 | 显示全部楼层
亲爱的 取走了
发表于 2015-3-5 09:07:10 | 显示全部楼层
看看支持下   学习
发表于 2015-4-6 01:49:53 | 显示全部楼层
不错学习了。
关闭本帖子回复于iphone客户端!
发表于 2015-6-5 17:07:11 | 显示全部楼层
我咋看不懂这个洞呢

代码区

GMT+8, 2019-11-13 21:09

Powered by Discuz! X2

© 2001-2018 Comsenz Inc.

回顶部