朋友让挖这个漏洞,因为挖到了getshell故把此具备坑爹性质的sql注入发出来,也算是对自己的学习负责 |
public function tgbz_tx_cl() { if (I('get.id') <> '') { $uname = $_SESSION['uname']; $starttime = date('Y-m-d 00:00:01', time()); $endtime = date('Y-m-d 23:59:59', time()); $count1 = M("userget")->where("UG_getTime>='$starttime' and UG_getTime<='$endtime' and UG_account='$uname' and UG_dataType='tgbz'")->count();
这里我只截取了一部分的代码,首先这里是把SESSION获取到的值赋于了$uname这个变量。首先要说明的是SESSION不受GPC影响,然后直接进入了where中
public function where($where,$parse=null){ if(!is_null($parse) && is_string($where)) { if(!is_array($parse)) { $parse = func_get_args(); array_shift($parse); } $parse = array_map(array($this->db,'escapeString'),$parse); $where = vsprintf($where,$parse); }elseif(is_object($where)){ $where = get_object_vars($where); } if(is_string($where) && '' != $where){ $map = array(); $map['_string'] = $where; $where = $map; } if(isset($this->options['where'])){ $this->options['where'] = array_merge($this->options['where'],$where); }else{ $this->options['where'] = $where; } return $this; }
从这里倒是看到有出调用了一个自定义的过滤函数,但是我通过if反正没看见具备true条件能够进到那个位置。后面过滤的也不是针对sql的。