概述
悟空软件长期为企业提供企业管理软件(CRM/HRM/OA/ERP等)的研发、实施、营销、咨询、培训、服务于一体的信息化服务。悟空软件以高科技为起点,以技术为核心、以完善的售后服务为后盾,秉承稳固与发展、求实与创新的精神,已为国内外上千家企业提供服务。
听说很厉害,搜索了下存在的旧版本漏洞,看看是否还存在这样的漏洞,旧漏洞如下:

按照已有的方向先排查一波。
安装
下载完包后,解压放到环境的根目录。
访问url

点击同意,进行下一步安装。

安装完成,使用安装过程功的账号密码,登录到工作台。


sql注入
进入到管理操作区,找到项目管理,在所有请求中有一个myTask请求,

使用burpsuite抓取到改请求,发送到重放模块,接着修改构建传递的参数,第一个将url部分mytask修改成dateList,将body部分的{"search":"","sort_field":2,"completed_task":true,"owner_user_id":[],"time_type":"","label_id":[]}修改改成{"start_time":"123","stop_time":"12"}此时点击一次go,看是否有正确相应。

接着,将请求保存到一个文本中,命名为post.txt。
接着上sqlmap跑一下这个请求包。

代码分析:
publicfunctiondateList()
{
$param=$this->param;
$taskModel=model('Task');
$userInfo=$this->userInfo;
$param['user_id']=$userInfo['id'];
$data=$taskModel->getDateList($param);
returnresultArray(['data'=>$data]);
}
此方法中的getDateList读取数据库,看方法逻辑:
publicfunctiongetDateList($param)
{
$start_time=$param['start_time'];
$stop_time=$param['stop_time'];
$user_id=$param['user_id'];
//$date_list=dateList($start_time,$stop_time,1);
$where=[];
$where['ishidden']=0;
$where['is_archive']=0;
$where['status']=1;
$where['pid']=0;
$str=','.$user_id.',';
$whereStr='(create_user_id='.$user_id.'or(owner_user_idlike"%'.$str.'%")or(main_user_id='.$user_id.'))';
$whereDate='(stop_time>0andstop_timebetween'.$start_time.'and'.$stop_time.')or(update_timebetween'.$start_time.'and'.$stop_time.')';
$list=db('task')
->where($where)
->where($whereStr)
->where($whereDate)
->field('task_id,name,priority,start_time,stop_time,priority,update_time')
->select();
return$list?:[];
}
再此方法中接受的参数有start_time、stop_time、user_id三个参数,其实这三个参数都没有加过滤,直接字符串拼接。所以都存在SQL注入点,只不过sqlmap在start_time的时候,就跑出结果了,后面不验证罢了。
需要提醒的是,再最新版本中,这个url需要构造出来,而不是点解控制台中哪个url。项目方把这个功能模块去掉了,但是代码并没有删除。简单验证如下图:

所以,前台的vue打包程序中,没有这个路由了。只能通过后期的构建,才能复现出这个漏洞。
任意文件上传
在平台所有文件上传点上,选取上传用户图像的功能点。

使用burpsuite抓包,如下:

将用户名和图片内容分别替换成php后缀的文件,和PHP代码如:此时返回的数据是错误的,不过没关系,文件已经生成了。如下图所示:

尝试了很多次,生的文件比较多。此时从浏览器上访问任意一个文件路径,效果如下:

当写入一句话的时候,也是可以用蚁剑连接的。




代码分析:通过抓包,访问的url/index.php/admin/users/updateImg可以看到该方法如下:
publicfunctionupdateImg()
{
$fileModel=model('File');
$param=$this->param;
$userInfo=$this->userInfo;
//处理图片
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST');
header("Access-Control-Allow-Headers:Origin,X-Requested-With,Content-Type,Accept");
$param['file']=request()->file('file');
$resImg=$fileModel->updateByField($param['file'],'User',$param['id'],'img','thumb_img',150,150);
if(!$resImg){
returnresultArray(['error'=>$fileModel->getError()]);
}
returnresultArray(['data'=>'上传成功']);
}
在方法里,有个updateByField的方法,这个是上传文件的调用,方法体如下:
publicfunctionupdateByField($file,$module,$module_id,$field,$thumb_field='',$x='150',$y='150')
{
if(empty($module)||empty($module_id)||empty($field)){
$this->error='参数错误';
returnfalse;
}
$info=$file->move(FILE_PATH.'public'.DS.'uploads');//验证规则
$fileInfo=$info->getInfo();//附件数据
在这个方法中,有个文件管理类file,其中的move方法做了文件的上传操作,如下:
publicfunctionmove($path,$savename=true,$replace=true)
{
//文件上传失败,捕获错误代码
if(!empty($this->info['error'])){
$this->error($this->info['error']);
returnfalse;
}
//检测合法性
if(!$this->isValid()){
$this->error='uploadillegalfiles';
returnfalse;
}
//验证上传
if(!$this->check()){
returnfalse;
}
$path=rtrim($path,DS).DS;
//文件保存命名规则
$saveName=$this->buildSaveName($savename);
$filename=$path.$saveName;
//检测目录
if(false===$this->checkPath(dirname($filename))){
returnfalse;
}
//不覆盖同名文件
if(!$replace&&is_file($filename)){
$this->error=['hasthesamefilename:{:filename}',['filename'=>$filename]];
returnfalse;
}
/*移动文件*/
if($this->isTest){
rename($this->filename,$filename);
}elseif(!move_uploaded_file($this->filename,$filename)){
$this->error='uploadwriteerror';
returnfalse;
}
//返回File对象实例
$file=newself($filename);
$file->setSaveName($saveName)->setUploadInfo($this->info);
return$file;
}
到此,方法体中的move_uploaded_file算是保存完了构建的PHP文件,需要注意的是,这里的命名规则,代码里用了时间的随机数,
switch($this->rule){
case'date':
$savename=date('Ymd').DS.md5(microtime(true));
break;
也就是说,前端可以猜到具体的文件夹,但是具体的文件名,需要后期做个碰撞的脚本,才可以获取到。因为是白盒审计,这一步就暂时省略掉了。
总结
老版本种存在的问题,最新版本也是存在的,只不过需要后期数据的加工,没有之前版本来的那么容易。所以做程序要用心,做安全更是如此。
审核编辑:刘清
-
SQL
+关注
关注
1文章
789浏览量
46371 -
CRM
+关注
关注
1文章
151浏览量
21800 -
数据库
+关注
关注
7文章
3993浏览量
67738 -
HRM
+关注
关注
0文章
10浏览量
9222
原文标题:悟空crm漏洞新用
文章出处:【微信号:Tide安全团队,微信公众号:Tide安全团队】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
行业观察 | 微软发布高危漏洞更新,涉及 Windows、Office、SQL Server 等多款产品
行业观察 | Azure、RDP、NTLM 均现高危漏洞,微软发布2025年8月安全更新
科技云报到:热链路革命:阿卡 CRM 的 GTM 定位突围
新一代神经拟态类脑计算机“悟空”发布,神经元数量超20亿
有屏幕就能玩《黑神话:悟空》:“无影”的黑科技
提升客户满意度30%:APS计划排产软件如何赋能CRM需求管理?
销售易在腾讯云城市峰会上发布中国首款AI CRM
如何利用iptables修复安全漏洞
微软Outlook曝高危安全漏洞
AMD与谷歌披露关键微码漏洞
华为云服务器 Flexus X 搭建悟空 crm 管理系统——助力企业云上管理(解决 APP Referer 校验失败问题)
华为荣获BSI全球首批漏洞管理体系认证
华为通过BSI全球首批漏洞管理体系认证
LP6656芯茂微CRM 模式的功率因数校正控制器
黑神话:悟空热度飙升,英特尔Arc 撼与B580显卡强势“镇场”

悟空crm漏洞新用概述
评论