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

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

缺陷编号:wooyun-2014-061996

漏洞标题:百度云ROM Discuz x3.1 任务漏洞造成的刷积分

相关厂商:百度

漏洞作者: 路人甲

提交时间:2014-05-23 16:23

修复时间:2014-07-07 16:24

公开时间:2014-07-07 16:24

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

危害等级:高

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-05-23: 细节已通知厂商并且等待厂商处理中
2014-05-23: 厂商已经确认,细节仅向厂商公开
2014-06-02: 细节向核心白帽子及相关领域专家公开
2014-06-12: 细节向普通白帽子公开
2014-06-22: 细节向实习白帽子公开
2014-07-07: 细节向公众公开

简要描述:

Discuz!X最新版本(及部分旧版本所存在的刷分漏洞)
利用DZ X 任务漏洞刷论坛积分兑换奖品

详细说明:

详情请见http://wooyun.org/bugs/wooyun-2010-049502
在完成任务时(home.php?mod=draw&do=view&id=xx),任务先前的状态缺少判断
完成任务的链接形如:
home.php?mod=draw&do=view&id=xx
这个地址最终在 source\class\class_task.php 中被处理
约第370行:
function draw($id) {
global $_G;
if(!($this->task = C::t('common_task')->fetch_by_uid($_G['uid'], $id))) {
showmessage('task_nonexistence');
} elseif($this->task['status'] != 0) {
showmessage('task_not_underway');
} elseif($this->task['tasklimits'] && $this->task['achievers'] >= $this->task['tasklimits']) {
return -1;
}
......
之后就是获得任务奖励了
总觉得上面这一段少了些什么判断?我们对比下其他代码
约第473行:
function giveup($id) {
global $_G;
if($_GET['formhash'] != FORMHASH) {
showmessage('undefined_action');
} elseif(!($this->task = C::t('common_task')->fetch_by_uid($_G['uid'], $id))) {
showmessage('task_nonexistence');
} elseif($this->task['status'] != '0') {
showmessage('task_not_underway');
}
这一段是放弃任务的判断,我们看到如果 $this->task['status'] != '0',就是说任务没有开始的时候,是不能放弃任务的。
但是,在上面那段获取任务奖励的代码中,并没有判断任务是否开始,造成了无需领取任务,就可以无限次数获取奖励。
此漏洞还可以用于强行获取由于用户组不符,没有权限领取的任务的奖励。
漏洞详细利用,请见漏洞证明。

漏洞证明:

登陆后 完善资料,不断提交下面的地址
http://bbs.rom.baidu.com/home.php?mod=task&do=draw&id=3

修复方案:

在 source\class\class_task.php 中的 draw 函数部分,加入任务是否领取的判断

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2014-05-23 19:17

厂商回复:

感谢对百度安全的支持。

最新状态:

暂无