discuz 7.2&discuz x<=2 后台注入

2014-07-31T00:00:00
ID SSV:93748
Type seebug
Reporter Root
Modified 2014-07-31T00:00:00

Description

简要描述:

第二发

详细说明:

以dz7.2来说,漏洞位于task.php 57行,

$query = $db->query("SELECT t.*, mt.csc, mt.dateline FROM {$tablepre}tasks t LEFT JOIN {$tablepre}mytasks mt ON mt.taskid=t.taskid AND mt.uid='$discuz_uid' WHERE $sql AND t.available='2' $newbieadd ORDER BY displayorder, taskid DESC LIMIT $start_limit, $tpp"); while($task = $db->fetch_array($query)) { if($task['reward'] == 'magic') { $magicids[] = $task['prize']; //这里 } elseif($task['reward'] == 'medal') { $medalids[] = $task['prize']; } elseif($task['reward'] == 'group') { $groupids[] = $task['prize']; }

121行,

if($magicids) { $query = $db->query("SELECT magicid, name FROM {$tablepre}magics WHERE magicid IN (".implodeids($magicids).")"); //这里 while($magic = $db->fetch_array($query)) { $magics[$magic['magicid']] = $magic['name']; } }

$magicids 参数从数据库中tasks表,prize 取出,这里可以二次注入。 tasks->prize的修改插入权限进对后台管理员开放,所以又一次鸡肋了。 但是到了这里还没结束,仔细看一下prize 为char(15),最多只能存储15个字节,崩溃了。。 不过再仔细看一下代码,峰回路转,绝处逢生,柳暗花明。 原来,$magicids是从tasks列表中取出的数组,然后又进行implodeids拼接。 没错,快使用双截棍哼哼哈嘿!把sql语句拼接一下。。 利用已经构造好的代码: 1')and(select1 from (select count(),concat(version(),floor(rand(0)2))x from mysql.user group by x)a)# 按最大长度15分割: 1')and(select/ /1 from (/ /select/ /count()/ /,concat(/ /version(),/ /floor(/ /rand(0)/ /2))x from/ /mysql.user/ /group/ /by x)a)# 看上去挺不可思议的。测试一下。。。 登录后台,添加任务,这里需要注意三点: 1. 倒序添加 2.选择任务奖励为道具,道具种类需要把select改为input输入以上分割的sql语句(或者抓包改)。 3. 最后一个带有单引号的任务先添加不含有引号的,回到管理界面勾选可用提交后再通过详情加入单引号,否则由于页面sql错误导致无法正常编辑。 保存好以后前台打开

漏洞证明:

<img src="https://images.seebug.org/upload/201407/302335383b8d147423970542d6163f42662da954.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">