Easytalk sql注入一枚

2014-02-13T00:00:00
ID SSV:96015
Type seebug
Reporter Root
Modified 2014-02-13T00:00:00

Description

简要描述:

过滤不严。

详细说明:

在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);">

<img src="https://images.seebug.org/upload/201402/1315562062ad5d17c768244c9895294187a074c9.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">

<img src="https://images.seebug.org/upload/201402/1315563211d28b0ee3bd9e92c7f94e00b1234283.jpg" alt="3.jpg" width="600" onerror="javascript:errimg(this);">