灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2215回复:0

ThinkSNS修改帐号验证不安全,可伪造

楼主#
更多 发布于:2012-12-07 19:06

ThinkSNS开启邮箱验证后修改帐号邮箱发送的连接不安全,可伪造

版本最新的2.8

代码位置:

thinksns\addons\services\ValidationService.class.php

$validation_code = $this->__generateCode($vid);

$target_url  = $target_url . ";validationid=$vid;validationcode=$validation_code";

$res = model('Validation')->where("`validation_id`=$vid")->setField(array('code','target_url'), array($validation_code, $target_url));

if ($res) {

 return $target_url;

}else {

 return false;

}

private function __generateCode($id) {

return md5($id.'thinksns#^!@*#%^!@#');

}

明显这个validationid和validationcode可以很容易伪造。作为开源程序这个应该做为常量安装的时候配置,但是他们没有

说说利用把

加入 a(用户id假设为1) 用户修改了安全邮箱就会收到一个验证连接

如下

http://test.thinksns.com/index.php?app=home;mod=Public;act=doModifyEmail;validationid=1;validationcode=304dbee8afac9f91bc211009ce9de3e8

而validationcode就等于 md5("1thinksns#^!@*#%^!@#")

所以可以通过这个方式绕过所有的验证。

好在数据不是通过参数接收的 安全级别给个低把。

修复方案:

用自定义的常量代替thinksns#^!@*#%^!@#

或者自由发挥!


喜欢0 评分0
游客

返回顶部