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

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

缺陷编号:wooyun-2015-0110497

漏洞标题:ThinkPHP 默认配置导致验证码暴力破解

相关厂商:ThinkPHP

漏洞作者: 路人甲

提交时间:2015-04-26 18:29

修复时间:2015-07-25 23:06

公开时间:2015-07-25 23:06

漏洞类型:设计缺陷/逻辑错误

危害等级:低

自评Rank:5

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-26: 细节已通知厂商并且等待厂商处理中
2015-04-26: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-06-20: 细节向核心白帽子及相关领域专家公开
2015-06-30: 细节向普通白帽子公开
2015-07-10: 细节向实习白帽子公开
2015-07-25: 细节向公众公开

简要描述:

ThinkPHP 默认配置导致验证码暴力破解

详细说明:

最近用Thinkphp时发现,验证码类默认的check函数在检查完验证码是否正确后,并未重置session,导致可被暴力破解。

QQ截图20150426153925.png


写这样的代码,再看看Verify类的check函数,

public function check($code, $id = '') {
$key = $this->authcode($this->seKey).$id;
// 验证码不能为空
$secode = session($key);
if(empty($code) || empty($secode)) {
return false;
}
// session 过期
if(NOW_TIME - $secode['verify_time'] > $this->expire) {
session($key, null);
return false;
}
if($this->authcode(strtoupper($code)) == $secode['verify_code']) {
$this->reset && session($key, null);
return true;
}
return false;
}


配置里的reset是在验证码正确的情况下才重置session,验证码错了并不会重置session。这样只要用burp intruder就可以暴力破解验证码。
相信很多开发者都忽略了这一点,
从TP官网的案例随便找几个TP开发的列子试试吧
http://oa.0796z.com/index.php/Oa/Login/index

QQ截图20150426154918.png


http://www.jz07.cn/Home/Index/index.html

QQ截图20150426155712.png


可以看到验证码都成了鸡肋。

漏洞证明:

从TP官网的案例随便找几个TP开发的列子试试吧
http://oa.0796z.com/index.php/Oa/Login/index

QQ截图20150426154918.png


http://www.jz07.cn/Home/Index/index.html

QQ截图20150426155712.png

修复方案:

check函数里面强制重置session

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


漏洞回应

厂商回应:

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

忽略时间:2015-07-25 23:06

厂商回复:

这是开发的问题 验证码错误后的处理机制是留给应用自己设计,框架强制做了处理是不合适的开发体验。合理的方式就是 验证码错误后重新生成验证码。不要把什么问题都归结为框架的漏洞。

最新状态:

暂无


漏洞评价:

评论

  1. 2015-04-26 23:09 | DeadSea ( 实习白帽子 | Rank:86 漏洞数:28 | 静心)

    说好的公开。、@疯狗

  2. 2015-04-27 01:06 | MeirLin ( 实习白帽子 | Rank:96 漏洞数:30 | 号借人)

    我感觉这也不该把错误都推到框架上,举个不恰当的例子,PHP提供了大量的函数,其中exec()、system() 可以用来执行命令,开发人员使用不当就可能出现任意代码执行的漏洞 .. 也不能就说PHP本身有问题吧?

  3. 2015-04-27 09:35 | myhalo ( 普通白帽子 | Rank:281 漏洞数:55 | 所属团队:TSafe)

    mongodb未授权访问不也是默认配置问题么。

  4. 2015-04-28 16:32 | MeirLin ( 实习白帽子 | Rank:96 漏洞数:30 | 号借人)

    @myhalo 那也没有人去提交mongodb本身的漏洞吧?

  5. 2015-04-28 17:25 | myhalo ( 普通白帽子 | Rank:281 漏洞数:55 | 所属团队:TSafe)

    @MeirLin SO?

  6. 2015-04-28 19:30 | MeirLin ( 实习白帽子 | Rank:96 漏洞数:30 | 号借人)

    @myhalo 所以程序本身没有问题

  7. 2015-04-28 19:46 | myhalo ( 普通白帽子 | Rank:281 漏洞数:55 | 所属团队:TSafe)

    @MeirLin 我本来就是这个意思啊...

  8. 2015-04-29 11:22 | 疯狂的dabing ( 实习白帽子 | Rank:33 漏洞数:9 | Hehe is golden.)

    哈哈哈,厂商说得对,不过还是建议在手册或者什么地方给开发者提一下安全建议。不过像yii框架自身就处理了这个问题,封装完整还带验证次数的配置。