HDwiki6.0 sql注入
下载连接http://kaiyuan.hoodong.com/download/
漏洞出现在\control\edition.php的docompare()函数
!defined('IN_HDWIKI') && exit('Access Denied');
class control extends base{
.....
function docompare(){
.....
if(@!is_numeric($this->post['eid'][0])||@!is_numeric($this->post['eid'][1])){
$this->message($this->view->lang['parameterError'],'index.php',0);
}
$edition=$_ENV['doc']->get_edition(array_slice($this->post['eid'], 0, 2));
if($edition[0]['did']!=$edition[1]['did']){
$this->message($this->view->lang['parameterError'],'index.php',0);
}
.....
}
.....
}
首先post['eid'][0]
和post['eid'][1]
必须是数字,不然会报错退出。array_slice()函数的作用是:从数组中移除元素,并返回所移除的元素。
再个关键因素
<?php
var_dump($_GET);
echo "\r\n<br/>";
var_dump($_POST);
POST和GET 传入的参数,键不会自动排序的,传的时候是什么顺序,接收到的就是什么顺序
把0和1的键放在第三位以后 就不会影响到array_slice拿前两位了 这样既绕过了if 又能使get_edition()参数可控
在\model\doc.class.php中
$eid=implode(",",$eid);
$query=$this->db->query(" SELECT * FROM ".DB_TABLEPRE."edition WHERE eid IN ($eid)");
直接拼接造成注入