Discuz7.2版的faq.php SQL注入漏洞分析


当前第2页 返回上一页

        $query = $db->query("SELECT * FROM {$tablepre}usergroups u LEFT JOIN {$tablepre}admingroups a ON u.groupid=a.admingid WHERE u.groupid IN (".implodeids($groupids).")");
...
}
function implodeids($array) {
        if(!empty($array)) {
                return "'".implode("','", is_array($array) ? $array : array($array))."'";
        } else {
                return '';
        }
}

首先定义一个数组groupids,然后遍历$gids(这也是个数组,就是$_GET[gids]),将数组中的所有值的第一位取出来放在groupids中。

为什么这个操作就造成了注入?

discuz在全局会对GET数组进行addslashes转义,也就是说会将'转义成\',所以,如果我们的传入的参数是:gids[1]='的话,会被转义成$gids[1]=\',而这个赋值语句$groupids[] = $row[0]就相当于取了字符串的第一个字符,也就是\,把转义符号取出来了。

再看后面,在将数据放入sql语句前,他用implodeids处理了一遍。我们看到implodeids函数

很简单一个函数,就是将刚才的$groupids数组用','分割开,组成一个类似于'1','2','3','4'的字符串返回。

但是我们的数组刚取出来一个转义符,它会将这里一个正常的'转义掉,比如这样:
'1','\','3','4'
有没有看出有点不同,第4个单引号被转义了,也就是说第5个单引号和第3个单引号闭合。

更多关于Discuz论坛内容来自木庄网络博客


标签:Discuz论坛

返回前面的内容

相关阅读 >>

可兼容ie的获取及设置cookie的jquery.cookie函数方法

discuz7.2 ie9兼容性写法 杜工完全修补方案

站长最喜欢的一些建站程序、cms介绍

discuz 查询语句安全威胁[query] select !40001 sql_cache 的解决方法

经验贴:discuz 做站的一些小提示,尤其是门户模块

communityserver又称cs论坛的相关学习资料

phpmyadmin下载、安装和使用入门教程

destoon各类调用汇总

discuz二次开发基本知识总结

discuz x1.5 ip不在被允许的范围内,或你的账号被禁用,无法访问本站点的解决方法

更多相关阅读请进入《Discuz论坛》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...