概述
悟空軟件長期為企業提供企業管理軟件(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文章
775瀏覽量
44254 -
CRM
+關注
關注
1文章
145瀏覽量
21150 -
數據庫
+關注
關注
7文章
3848瀏覽量
64690 -
HRM
+關注
關注
0文章
10瀏覽量
9002
原文標題:悟空crm漏洞新用
文章出處:【微信號:Tide安全團隊,微信公眾號:Tide安全團隊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
《黑神話:悟空》狂吃硬件性能,存儲同步升級
![《黑神話:<b class='flag-5'>悟空</b>》狂吃硬件性能,存儲同步升級](https://file1.elecfans.com/web2/M00/04/1B/wKgZombJyTiAX4BAAAeKg0V9pZI085.png)
華為云服務器 Flexus X 搭建悟空 crm 管理系統——助力企業云上管理(解決 APP Referer 校驗失敗問題)
![華為云服務器 Flexus X 搭建<b class='flag-5'>悟空</b> <b class='flag-5'>crm</b> 管理系統——助力企業云上管理(解決 APP Referer 校驗失敗問題)](https://file1.elecfans.com//web3/M00/04/37/wKgZO2dwGomAUF-1AAQMm_QEWyA758.png)
迅為RK3588開發板!黑神話悟空,啟動?
臺媒報道:華為云攜手贊奇科技?推出《黑神話:悟空》專屬云游戲服務
![臺媒報道:華為云攜手贊奇科技?推出《黑神話:<b class='flag-5'>悟空</b>》專屬云游戲服務](https://file1.elecfans.com//web2/M00/05/89/wKgZombauHCAXY-aAAnErrTYnRE175.png)
破界而生,智領未來——瑞芯微RK3588J_K7的“悟空之力”
![破界而生,智領未來——瑞芯微RK3588J_K7的“<b class='flag-5'>悟空</b>之力”](https://file1.elecfans.com/web2/M00/FC/CD/wKgZomaWI5uASgBaAABuQHdMO4I302.png)
黑神話悟空對服務器有什么要求
《黑神話:悟空》騰云駕霧來,技嘉RTX 4070 SUPER 悟空聯名顯卡 助力共繪西游神話新篇
聯想拯救者攜手《黑神話:悟空》玩轉東方神話世界
![聯想拯救者攜手《黑神話:<b class='flag-5'>悟空</b>》玩轉東方神話世界](https://file1.elecfans.com//web2/M00/03/65/wKgZombDNCmAOYmSAAQLhCdKqbY367.png)
“態猴了”cp合體送福利,001號致態x《黑神話:悟空》聯名版SSD花落誰家?
《中新社》關注“本源悟空”境外訪問量美國排第一
![《中新社》關注“本源<b class='flag-5'>悟空</b>”境外訪問量美國排第一](https://file.elecfans.com/web2/M00/3F/9D/poYBAGJo-maAOH8MAAIB_hk2Mno583.png)
用悟空派全志H3開發板做一個基于ROS系統的全向輪小車
“本源悟空”全球訪問量突破100萬,已完成14萬個運算任務
![“本源<b class='flag-5'>悟空</b>”全球訪問量突破100萬,已完成14萬個運算任務](https://file.elecfans.com/web2/M00/3F/9D/poYBAGJo-maAOH8MAAIB_hk2Mno583.png)
評論