当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-068004

漏洞标题:TinyShop V1.0.2 电子商务系统 SQL注入(gpc开启)

相关厂商:tinyrise.com

漏洞作者: xiaoL

提交时间:2014-10-08 09:32

修复时间:2014-12-30 14:44

公开时间:2014-12-30 14:44

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-10-08: 细节已通知厂商并且等待厂商处理中
2014-10-10: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-12-04: 细节向核心白帽子及相关领域专家公开
2014-12-14: 细节向普通白帽子公开
2014-12-24: 细节向实习白帽子公开
2014-12-30: 细节向公众公开

简要描述:

TinyShop最新版SQL注入一枚。
简直被审核系统搞无语了,麻烦乌云加上时钟跟分钟好吗?不然早提交几小时几分钟的同学跟自动审核的人一起提交只有遭殃的份。
重复重复,重复你妹啊!
ps:亲 时间是通过审核的时间,请看漏洞ID区分先后顺序
当前时间:2014.7.10 11.44

详细说明:

上个漏洞厂商说不要一起发SQL注入了,下个版本会一起处理。现在来看看怎么处理的。
framework\lib\util\filter_class.php:
文件定义了过滤机制:

public static function sql($str)
{
if (get_magic_quotes_gpc()){
$str = stripslashes($str);
}else{
//不使用主要是因为,先有mysql的连接
//$str = mysql_real_escape_string($str);
$str = addslashes($str);
}
return $str;
}


看着就不对劲,开启了gpc怎么还取消了转义,那开着不是更好。
接下来找个通过这个函数的。
找到一个简单登录功能的文件:
protected\controllers\simple.php:

public function login_act(){
$redirectURL = Req::args("redirectURL");
$this->assign("redirectURL",$redirectURL);
$email = Filter::sql(Req::post('email')); //这里
$passWord = Req::post('password');
$autologin = Req::args("autologin");
if($autologin==null)$autologin = 0;
$model = $this->model->table("user as us");
$obj = $model->join("left join customer as cu on us.id = cu.user_id")->fields("us.*,cu.group_id,cu.login_time")->where("us.email='$email'")->find();
if($obj){
if($obj['password'] == CHash::md5($passWord,$obj['validcode'])){
if($autologin==1) $this->safebox->set('user',$obj,$this->cookie_time);
else $this->safebox->set('user',$obj, 1800);
$this->model->table("customer")->data(array('login_time'=>date('Y-m-d H:i:s')))->where('user_id='.$obj['id'])->update();
$redirectURL = Req::args("redirectURL");
if($redirectURL!='' && stripos($redirectURL, "http://")===false && stripos($redirectURL, "reg")===false && stripos($redirectURL, "reset_password_act")===false)header('Location: '.$redirectURL, true, 302);
else $this->redirect('/ucenter/index');
exit;
}else{
$info = array('field'=>'password','msg'=>'密码错误!');
}
}else{
$info = array('field'=>'email','msg'=>'账号不存在!');
}
$this->assign("invalid",$info);
$this->redirect("login",false,Req::args());
}


其中email过了那个函数,直接就是一个盲注了。

漏洞证明:

1111.png


2222.png


都可以直接用sqlmap跑了

333.png

修复方案:

修复转义

版权声明:转载请注明来源 xiaoL@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-12-30 14:44

厂商回复:

早已经发布了1.1版本。

最新状态:

暂无