### 简要描述: PHPYUN最新版(phpyun_v3.1.0604_gbk)SQL注入及多处越权操作 虽然PHPYUN在注入防御上已经做得很不错了,方的很严格,像吃掉引号,宽字节的基本上很少了,但是不需要跟引号斗争的地方还有很多,得好好检查,好好修复了!!! 越权方面做的也很不错了,有些是因为SQL注入引起,有些是你们忘了加thins->uid的限制,这里再来一处前台SQL注入及多处越权操作,还有后台大面积的注入(给出文件,厂商自行修复)!!! ### 详细说明: 第一处SQL注入漏洞及越权操作 文件/model/ajax.class.php: ``` function Refresh_job_action() { $num=count($_POST['ids']); $statis=$this->obj->DB_select_once("company_statis","`uid`='".$this->uid."'"); if($statis['vip_etime']<time()) { if($statis['breakjob_num']>=$num) { $value="`breakjob_num`=`breakjob_num`-$num"; }else{ if($this->config['com_integral_online']=="1") { $integral=$this->config['integral_jobefresh']*($num-$statis['breakjob_num']); if($statis['integral']<$integral) { echo "会员刷新职位数,和".$this->config['integral_pricename']."不足!";die; }else{ $value="`breakjob_num`='0',`integral`=`integral`-$integral"; } }else{ echo "会员刷新职位数不足!";die; } } $this->obj->DB_update_all("company_statis",$value,"`uid`='".$this->uid."'"); } echo $_POST['ids'];...
### 简要描述: PHPYUN最新版(phpyun_v3.1.0604_gbk)SQL注入及多处越权操作 虽然PHPYUN在注入防御上已经做得很不错了,方的很严格,像吃掉引号,宽字节的基本上很少了,但是不需要跟引号斗争的地方还有很多,得好好检查,好好修复了!!! 越权方面做的也很不错了,有些是因为SQL注入引起,有些是你们忘了加thins->uid的限制,这里再来一处前台SQL注入及多处越权操作,还有后台大面积的注入(给出文件,厂商自行修复)!!! ### 详细说明: 第一处SQL注入漏洞及越权操作 文件/model/ajax.class.php: ``` function Refresh_job_action() { $num=count($_POST['ids']); $statis=$this->obj->DB_select_once("company_statis","`uid`='".$this->uid."'"); if($statis['vip_etime']<time()) { if($statis['breakjob_num']>=$num) { $value="`breakjob_num`=`breakjob_num`-$num"; }else{ if($this->config['com_integral_online']=="1") { $integral=$this->config['integral_jobefresh']*($num-$statis['breakjob_num']); if($statis['integral']<$integral) { echo "会员刷新职位数,和".$this->config['integral_pricename']."不足!";die; }else{ $value="`breakjob_num`='0',`integral`=`integral`-$integral"; } }else{ echo "会员刷新职位数不足!";die; } } $this->obj->DB_update_all("company_statis",$value,"`uid`='".$this->uid."'"); } echo $_POST['ids']; $ids=@implode(",",$_POST['ids']); echo $ids; $nid=$this->obj->DB_update_all("company_job","`lastupdate`='".time()."'","`id` in (".$ids.") and `uid`='".$this->uid."'"); $this->obj->DB_update_all("company","`jobtime`='".$_POST['lastupdate']."'","`uid`='".$this->uid."'"); if($nid) { echo 1;die; }else{ echo "刷新失败!";die; } } ``` 这里$ids=@implode(",",$_POST['ids']); 然后没有经过引号的保护,直接进入了SQL语句DB_update_all中,导致注入了。 然后通过截断后面的uid,就可以update任意uid用户的职位信息了,当然这里的update的内容无足轻重! 下面的越权操作基本上都是因为在update或者insertinto时,没有控制此次操作时候的用户属性this->uid,而且使uid可控,导致update或者insertinto任意用户的内容。 第二处越权操作 文件/model/ajax.class.php: ``` function atn_company_action(){ if((int)$_POST['id']>0){ if($this->uid){ if($_COOKIE["usertype"]!='1'){ echo '4';die; } $atninfo = $this->obj->DB_select_once("atn","`uid`='".$this->uid."' AND `sc_uid`='".intval($_POST["id"])."'"); $comurl = $this->config['sy_weburl']."/company/index.php?id=".$_POST["id"]; $company=$this->obj->DB_select_once("company","`uid`='".(int)$_POST['id']."'","`name`"); $name = $company['name']; if(is_array($atninfo)&&$atninfo){ $this->obj->DB_delete_all("atn","`uid`='".$this->uid."' AND `sc_uid`='".intval($_POST['id'])."'"); $this->obj->DB_update_all('company',"`ant_num`=`ant_num`-1","`uid`='".(int)$_POST['id']."'"); echo "2";die; }else{ $this->obj->DB_insert_once("atn","`uid`='".$this->uid."',`sc_uid`='".intval($_POST['id'])."',`usertype`='".$_COOKIE["usertype"]."',`sc_usertype`='2',`time`='".time()."'"); $this->obj->DB_update_all('company',"`ant_num`=`ant_num`+1","`uid`='".(int)$_POST['id']."'"); $content="关注了<a href=\"".$comurl."\">".$name."</a>"; $this->addstate($content,2); $msg_content = "用户 ".$this->username." 关注了你!"; $this->automsg($msg_content,(int)$_POST['id']); echo "1";die; } }else{ echo "3";die; } } } ``` 这里的DB_update_all时,uid=$_POST['id'],用户可控导致越权update。 第三处越权操作 文件/model/ajax.class.php: ``` function Atn_action(){ ...... if(is_array($atninfo)&&!empty($atninfo)){ $this->obj->DB_delete_all("atn","`uid`='".$this->uid."' AND `sc_uid`='".intval($_POST['id'])."'"); $this->obj->DB_update_all($table,"`ant_num`=`ant_num`-1","`uid`='".(int)$_POST['id']."'"); echo "2";die; }else{ $this->obj->DB_insert_once("atn","`uid`='".$this->uid."',`sc_uid`='".intval($_POST['id'])."',`usertype`='".$_COOKIE['usertype']."',`sc_usertype`='".$user['usertype']."',`time`='".time()."'"); $this->obj->DB_update_all($table,"`ant_num`=`ant_num`+1","`uid`='".(int)$_POST['id']."'"); ``` 这里的DB_update_all时,uid=$_POST['id'],用户可控导致越权update。 第四处越权 文件/model/ajax.class.php: ``` function order_type_action(){ if($this->uid && $this->username && $_COOKIE['usertype']==2) { $nid=$this->obj->DB_update_all("company_order","`order_type`='".(int)$_POST['paytype']."'","`order_id`='".(int)$_POST['order']."'"); echo $nid?1:2; } } ``` 这里的DB_update_all用户订单时,没有控制uid,而是通过仅有的order_id来更新,导致越权update,而这里的order_id是可以简单得到的。 第五处越权 文件/wap/member/com.class.php ``` function job_action() { if($_GET['status']) { $this->obj->update_once('company_job',array('status'=>intval($_GET['status'])),array('id'=>intval($_GET['id']))); $this->wapheader('index.php?c=job&','设置成功!'); } $urlarr=array("c"=>"job","page"=>"{{page}}"); $pageurl=$this->url("index","index",$urlarr); $this->get_page("company_job","`uid`='".$this->uid."'",$pageurl,"10"); $this->waptpl('job'); } ``` 这里在更新企业用户职位信息时,没有控制用户uid,直接通过职位信息的id进行update,导致越权操作,更新任意职位信息。 ### 漏洞证明: [<img src="https://images.seebug.org/upload/201406/11164659bc825d1b6c232f56f13ecf212bc1a19d.png" alt="0.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/11164659bc825d1b6c232f56f13ecf212bc1a19d.png) SQL执行记录: [<img src="https://images.seebug.org/upload/201406/111647178a24302f77fcc70ab4c3263c147c6b6d.png" alt="1.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/111647178a24302f77fcc70ab4c3263c147c6b6d.png) 后台大面积注入,给出文件,厂商修复下吧: [<img src="https://images.seebug.org/upload/201406/11164747a719fac70acb9f5ba1df8e67debf772e.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/11164747a719fac70acb9f5ba1df8e67debf772e.png) [<img src="https://images.seebug.org/upload/201406/11164758e254fd146e55303f992d967a1515ed0f.png" alt="3.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/11164758e254fd146e55303f992d967a1515ed0f.png) 当然还有很多其他的。