### 简要描述:
KPPW最新版SQL注入漏洞,修补不严
### 详细说明:
1.看了http://wooyun.org/bugs/wooyun-2010-086216。这篇帖子,正巧也在审计KPPW,也就去看了用一下最新版对于爆出问题的修补方式。最新版为了防止该漏洞,添加了一个验证。
```
if($gUserInfo['uid'] != $pk['uid']){
kekezu::show_msg('无权操作',NULL,NULL,NULL,'error');
return false;
}
```
2.$gUserInfo['uid']是用户id,是我们不可控的。所以这里不能再用xfkxfk大牛的方法构造uid了。那么我们再看一下save函数。
```
function save($fields, $pk = array()) {
foreach ( $fields as $k => $v ) {
$kk = ucfirst ( $k );
$set_query = "set" . $kk;
$this->_table_obj->$set_query ( $v );
}
$keys = array_keys ( $pk );
$key = $keys [0];//取$pk的第一个值
if (! empty ( $pk [$key] )) {
$this->_table_obj->setWhere ( " $key = '" . kekezu::escape($pk [$key]) . "'" );
$edit_query = "edit_" . $this->_pre . $this->_table_name;
$res = $this->_table_obj->$edit_query ();
} else {
$create_query = "create_" . $this->_pre . $this->_table_name;
$res = $this->_table_obj->$create_query ();
}
if ($res) {
return $res;
} else {
return false;
}
}
```
2.可以看出进行数据库操作的是$pk数组中的第一个键名,那么问题来了。如果在$pk['uid']之前就已经有了一个$pk[xxx],那么进入数据库查询的就应该是xxx,而不是uid了。构造我们的payload,如测试代码所示。
3.再来看MYSQL日志中的记录。
```
169 Query UPDATE keke_witkey_space SET `sex`='-1',`birthday`='2015-04-02',`truename`='lijie1',`indus_id`='131',`indus_pid`='3',`is_perfect`='1' WHERE uid=sleep(5) -- a = '1'
150425 19:20:02 169 Query UPDATE keke_witkey_space SET `email`='test1@163.com',`sex`='-1',`birthday`='2015-04-02',`truename`='lijie1',`qq`='445566798',`msn`='wer',`phone`='',`mobile`='13800000000',`indus_id`='131',`indus_pid`='3',`province`='0',`city`='0',`area`='0',`is_perfect`='1' WHERE uid=sleep(5) -- a = '1'
```
4.可以看到update处已经是注入了
### 漏洞证明:
1.注册两个用户test1和test2。在test2里面可以直接修改test1的内容。使用test2登录,到修改个人信息的页面。
[<img src="https://images.seebug.org/upload/201504/25201013aa4033fbc351f159691eba22c1169007.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201504/25201013aa4033fbc351f159691eba22c1169007.jpg)
2.抓包,修改报的内容为
[<img src="https://images.seebug.org/upload/201504/25201054afd39dc143ca90174d4d8b08d241fb4d.jpg" alt="3.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201504/25201054afd39dc143ca90174d4d8b08d241fb4d.jpg)
3.再登录test1,可以看到test1的用户名已经被越权修改为pang0lin
[<img src="https://images.seebug.org/upload/201504/25201232e2b5e3eda5df1dada514f79a00b6cf02.jpg" alt="5.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201504/25201232e2b5e3eda5df1dada514f79a00b6cf02.jpg)
暂无评论