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

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

缺陷编号: WooYun-2014-88450

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

相关厂商: php云人才系统

漏洞作者: ′雨。认证白帽子

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

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

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

6人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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中



code 区域
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)







code 区域
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); //这里直接把数据显示出来





code 区域
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://**.**.**.**/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

厂商回复:

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

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2014-12-25 15:29 | 玉林嘎 认证白帽子 ( 普通白帽子 | Rank:941 漏洞数:108 )
    3

    雨牛 厉害!

  2. 2014-12-25 15:52 | ′雨。 认证白帽子 ( 普通白帽子 | Rank:1332 漏洞数:198 | Only Code Never Lie To Me.)
    2

    @玉林嘎 么么哒 响应好快啊。

  3. 2014-12-25 15:54 | backtrack丶yao ( 普通白帽子 | Rank:298 漏洞数:110 )
    2

    三个!

  4. 2014-12-25 16:44 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    2

    其他两个比较鸡肋啊 奏小厂商了 刚才看了看

  5. 2014-12-25 16:58 | ′雨。 认证白帽子 ( 普通白帽子 | Rank:1332 漏洞数:198 | Only Code Never Lie To Me.)
    1

    @menmen519 都不算鸡肋吧 没啥限制条件 只是发太多了 就小厂商拉, 还有几个没审核

  6. 2014-12-25 17:16 | xfkxfk 认证白帽子 ( 核心白帽子 | Rank:2313 漏洞数:351 | 呵呵!)
    2

    @′雨。 @menmen519 挖洞专业户,挖一堆是来刷屏的吧o(╯□╰)o

  7. 2015-03-25 17:11 | 明月影 ( 路人 | Rank:12 漏洞数:8 )
    0

    @′雨。 应该快到核心白帽子了吧。

登录后才能发表评论,请先 登录