###0x01漏洞简介
kppw 在/control/user/account_report.php等2处 SQL注入漏洞。
```
(1) control\user\account_report.php
(2) control\user\account_rights.php
```
###0x02漏洞详情
在 control\user\account_report.php 和 control\user\account_rights.php中,也就是举报管理处,我们拿第一个来说明一下。
```
<?php
$page and $intPage = intval($page);
$type=strval($type) ? $type : 1;
$op = strval($op);
$strUrl ="index.php?do=user&view=account&op=report";
$type and $strUrl .="&type=".intval($type);
$intPagesize and $strUrl .="&intPagesize=".intval($intPagesize);
$strReportObj and $strUrl .="&reportObj=".strval($strReportObj);
$strReportStatus and $strReportStatus .="&reportStatus=".strval($strReportStatus);
$arrReportObj = array(
'task' => '任务',
'work' => '稿件',
'product' =>'商品'
);
$arrReportStatus = array(
'1' =>'待处理',
'2' =>'处理中',
'3' =>'未成立',
'4' =>'已处理'
);
$objReportT = keke_table_class::get_instance('witkey_report');
if (isset ( $action )) {
switch ($action) {
case 'mulitDel' :
if ($ckb) {
$objTaskT->del ( 'task_id', $ckb );
kekezu::show_msg ( '删除成功', $strUrl, NULL, NULL, 'ok' );
} else {
kekezu::show_msg ( '删除失败', NULL, NULL, NULL, 'error' );
}
break;
case 'delSingle' :
if ($objId) {
$objTaskT->del ( 'task_id', intval($objId) );
kekezu::show_msg ( '删除成功', $strUrl, NULL, NULL, 'ok' );
} else {
kekezu::show_msg ( '删除失败', NULL, NULL, NULL, 'error' );
}
break;
}
} else {
$strWhere = " 1=1 ";
$strWhere .= " and report_type = 2 ";
if($type == 2){
$strWhere .= " and to_uid = ".$gUid;
}else{
$strWhere .= " and uid = ".$gUid;
}
$intPage = intval ( $intPage ) ? $intPage : 1;
$intPagesize = intval ( $intPagesize ) ? $intPagesize : 10;
if(isset($strReportStatus)&&$strReportStatus!=''&&$strReportStatus > -1){
$strWhere .= " and report_status=".intval($strReportStatus);
}else{
$strReportStatus = -1;
}
if(isset($strReportObj)&&$strReportObj!=''){
$strWhere .= " and obj= '$strReportObj'";
}else{
$strReportObj = ' ';
}
$strOrder&&in_array($strOrder, array_keys($arrListOrder)) and $strWhere .= " order by ".$strOrder.', report_id desc ' or $strWhere .= " order by report_id desc";
$arrDatas = $objReportT->get_grid($strWhere, $strUrl, $intPage, $intPagesize, null,null,null);
$arrReportLists = $arrDatas ['data'];
$intCount = $arrDatas ['count'];
$strPages = $arrDatas ['pages'];
}
unset($objReportT);
```
可以看见这个地方 $strOrder&&in_array($strOrder, array_keys($arrListOrder)) and $strWhere .= " order by ".$strOrder.', report_id desc ' or $strWhere .= " order by report_id desc";
这个cms采用伪全局,所以我们可以构造$strOrder=1,sleep(20)%23 和 arrListOrder[1,sleep(20)%23] (即$strOder的值与$arrListOrder的键值相等就可以)
接下来证明吧
###0x03漏洞证明
我们需要先随便创建一个新号,这个没有什么限制,然后举报一个商品,让查询语句不为空,就可以利用盲注了。
![](https://images.seebug.org/contribute/40a6c8af-8efd-4717-9a6f-481347f5bb30)
![](https://images.seebug.org/contribute/fb8e273e-3421-4c54-8ab5-157b369bae8d)
我们看结果
![](https://images.seebug.org/contribute/c455fbec-64e7-49e5-8732-739a63bbb1ef)
###0x04修复方案
变量初始值定义!
暂无评论