当前位置: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

厂商回复:

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

最新状态:

暂无