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

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

缺陷编号:wooyun-2014-088450

漏洞标题:phpyun v3.2 (20141222) 前台二次注入(直接出管理密码 demo测试)

相关厂商:php云人才系统

漏洞作者: ′雨。

提交时间:2014-12-25 15:26

修复时间:2015-03-25 15:28

公开时间:2015-03-25 15:28

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-12-25: 细节已通知厂商并且等待厂商处理中
2014-12-25: 厂商已经确认,细节仅向厂商公开
2014-12-28: 细节向第三方安全合作伙伴开放
2015-02-18: 细节向核心白帽子及相关领域专家公开
2015-02-28: 细节向普通白帽子公开
2015-03-10: 细节向实习白帽子公开
2015-03-25: 细节向公众公开

简要描述:

非盲注。 直接出管理的各种数据。
依旧demo测试。

详细说明:

在ask/model/index.class.php中

function attention_action()
{
$this->is_login();//需要登录会员
$is_set=$this->obj->DB_select_once("attention","`uid`='".$this->uid."' and `type`='".(int)$_POST['type']."'");//这里让type为1

if($_POST['type']=='1')
{
$info=$this->obj->DB_select_once("question","`id`='".(int)$_POST['id']."'","`id`,`title`,`uid`");
$gourl= $this->aurl(array("url"=>"c:content,id:".$info['id']));
$content="关注了<a href=\"".$gourl."\" target=\"_blank\">《".$info['title']."》</a>。";
$n_contemt="取消了对<a href=\"".$gourl."\" target=\"_blank\">《".$info['title']."》</a>的关注。";
$log="关注了《".$info['title']."》";
$n_log="取消了对《".$info['title']."》";
}else{
$info=$this->obj->DB_select_once("q_class","`id`='".$_POST['id']."'","`id`,`name`");
$gourl= $this->aurl(array("url"=>"c:getclass,id:".$info['id']));
$content="关注了<a href=\"".$gourl."\" target=\"_blank\">".$info['name']."</a>。";
$n_contemt="取消了<a href=\"".$gourl."\" target=\"_blank\">".$info['name']."</a>的关注。";
$log="关注了".$info['name'];
$n_log="取消了对".$info['name']."</a>的关注。";
}

if($info['uid']==$this->uid){
echo '4';
}else if(is_array($is_set)){ //这里一开始$is_set为空
所以不会进入这里 当第二次进入的时候 就是数组了 就会进这里面了
所以这个洞 我们一个帐号用一次。
$ids=@explode(',',$is_set['ids']);
if(in_array($_POST['id'],$ids))
{
if($_POST['type']=='1')
{
echo '2';
}else{
foreach($ids as $k=>$v )
{
if($v!=$_POST['id'])
{
$i_ids[]=$v;
}
}
if($i_ids)
{
$n_id=$this->obj->update_once("attention",array("ids"=>@implode(',',$i_ids)),array("id"=>$is_set['id']));
}else{
$n_id=$this->obj->DB_delete_all("attention","`id`='".$is_set['id']."'");
}
if($n_id)
{
$data['uid']=$this->uid;
$data['content']=$n_contemt;
$data['ctime']=time();
$this->obj->insert_into("friend_state",$data);
$this->obj->member_log($n_log);
echo '3';
}
}
}else{
//当不为数组的时候 就是一开始为空的时候
$i_ids=$is_set['ids'].','.$_POST['id'];//这里拼接了$_POST['id] 所以也算部分可控了。

$n_id=$this->obj->update_once("attention",array("ids"=>$i_ids),array("id"=>$is_set['id']));//带入到update中入库
if($n_id)


function attenquestion_action()
{
if($this->uid=='')
{
$this->obj->ACT_msg($_SERVER['HTTP_REFERER'],"请先登录!");
}

$this->public_action();
$ids=$this->obj->DB_select_once("attention","`uid`='".$this->uid."' and `type`='1'","`ids`");//这里出库
$ids=rtrim($ids['ids'],',');//对刚才入库的 赋值给$ids

$pageurl=$this->aurl(array("url"=>"c:".$_GET['c'].",page:{{page}}"));
$question=$this->get_page("question","`id` in (".$ids.") order by `add_time` desc",$pageurl,"10");//没有单引号
if(!empty($question))
{
foreach($question as $k=>$v)
{
$uid[]=$v['uid'];
}
$uids=implode(',',$uid);
$friend_info=$this->obj->DB_select_all("friend_info","`uid` in (".$uids.")","`uid`,`pic`");
foreach($question as $key=>$val)
{
foreach($friend_info as $k=>$v)
{
if($val['uid']==$v['uid'])
{
if($val['uid']==$v['uid'])
{
if($v['pic'])
{
$question[$key]['pic']=$v['pic'];
}else{
$question[$key]['pic']=$this->config['sy_weburl'].'/'.$this->config['sy_friend_icon'];
}
}
}
}
}
}
$this->yunset("question",$question); //这里直接把数据显示出来


if($config['sy_istemplate']!='1' || md5(md5($config['sy_safekey']).$_GET['m'])!=$_POST['safekey'])
{
foreach($_POST as $id=>$v){

$str = html_entity_decode($v,ENT_QUOTES,"GB2312");

$v = common_htmlspecialchars($id,$v,$str,$config);

safesql($id,$v,"POST",$config);

$id = sfkeyword($id,$config);
$v = sfkeyword($v,$config);
$_POST[$id] = $v;
}
}


继续bypass这个
http://www.hr135.com/company/index.php?m=index&c=index&id=3751&style=../../template/admin&tp=/admin_web_config
拿到key 经过计算 继续bypass过滤。

p8.jpg


这里需要请求两次。
然后访问 web/web/phpyun32/ask/index.php?m=index&c=attenquestion

p9.jpg


直接出数据。 这里我再测试一下demo。
我这里惊人的发现。。 demo有安全狗 我擦 绕过了全局的注入 竟然没过安全狗
懒得去研究安全狗了 直接输出一个 hello phpyun

p10.jpg


然后继续

p11.jpg


成功出数据。

漏洞证明:

p9.jpg

修复方案:

无尽的过滤。

版权声明:转载请注明来源 ′雨。@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-12-25 15:48

厂商回复:

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

最新状态:

暂无