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

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

缺陷编号:wooyun-2014-048060

漏洞标题:ThinkSAAS SQL注入漏洞

相关厂商:thinksaas.cn

漏洞作者: xfkxfk

提交时间:2014-01-06 19:06

修复时间:2014-04-06 19:07

公开时间:2014-04-06 19:07

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-01-06: 细节已通知厂商并且等待厂商处理中
2014-01-06: 厂商已经确认,细节仅向厂商公开
2014-01-09: 细节向第三方安全合作伙伴开放
2014-03-02: 细节向核心白帽子及相关领域专家公开
2014-03-12: 细节向普通白帽子公开
2014-03-22: 细节向实习白帽子公开
2014-04-06: 细节向公众公开

简要描述:

ThinkSAAS SQL注入漏洞

详细说明:

问题在上传附件处,/app/photo/action/do.php:

//上传
$arrUpload = tsUpload($_FILES['Filedata'],$photoid,'photo',array('jpg','gif','png'));

if($arrUpload){
$new['photo']->update('photo',array(
'photoid'=>$photoid,
),array(
'photoname'=>tsClean($arrUpload['name']),//没有过滤,导致SQL注入
'phototype'=>tsClean($arrUpload['type']),
'path'=>tsClean($arrUpload['path']),
'photourl'=>tsClean($arrUpload['url']),
'photosize'=>tsClean($arrUpload['size']),
));

}


然后我们我们看到photoname等都没有过滤。
跟进tsUpload函数,/thinksaas/tsFunction.php:

function tsUpload($files, $projectid, $dir, $uptypes) {
if ($files ['size'] > 0) {

$menu2 = intval ( $projectid / 1000 );

$menu1 = intval ( $menu2 / 1000 );

$path = $menu1 . '/' . $menu2;

$dest_dir = 'uploadfile/' . $dir . '/' . $path;

createFolders ( $dest_dir );

$arrType = explode ( '.', strtolower ( $files ['name'] ) ); // 转小写一下

$type = array_pop ( $arrType );

if (in_array ( $type, $uptypes )) {

$name = $projectid . '.' . $type;

$dest = $dest_dir . '/' . $name;

// 先删除
unlink ( $dest );
// 后上传
move_uploaded_file ( $files ['tmp_name'], mb_convert_encoding ( $dest, "gb2312", "UTF-8" ) );

chmod ( $dest, 0777 );

$filesize = filesize ( $dest );
if (intval ( $filesize ) > 0) {
return array (
'name' => $files ['name'],
'path' => $path,
'url' => $path . '/' . $name,
'type' => $type,
'size' => $files ['size']
);
} else {
return false;
}
} else {
return false;
}
}
}


看到传入的$files ['name']没有过滤,人后就return了。
最后看看update的处理:

public function update($table, $conditions, $row) {
$where = "";
if (empty ( $row ))
return FALSE;
if (is_array ( $conditions )) {
$join = array ();
foreach ( $conditions as $key => $condition ) {
$condition = $this->escape ( $condition );
$join [] = "{$key} = {$condition}";
}
$where = "WHERE " . join ( " AND ", $join );
} else {
if (null != $conditions)
$where = "WHERE " . $conditions;
}
foreach ( $row as $key => $value ) {
$vals [] = "`$key` = '$value'";
}
$values = join ( ", ", $vals );
$sql = "UPDATE " . dbprefix . "{$table} SET {$values} {$where}";

return $this->db->query ( $sql );
}


全程没有过滤,导致SQL注入。

漏洞证明:

我们在资料处,新建一个资料库。
然后再次资料库上传文件,抓包,修改文件名字为:

123.jpg',`attachtype`=user()#a.txt


或者新建一个以上面内容为文件名的文件,直接上传即可。
看看结果:

w5.png


attachtype参数,即类型被修改了。

修复方案:

过滤

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-01-06 21:54

厂商回复:

非常感谢反馈,问题真实存在,正在积极修复中。

最新状态:

暂无