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

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

缺陷编号:wooyun-2014-080424

漏洞标题:多个cms后台可被爆破绕过防护

相关厂商:多个cms厂商

漏洞作者: JJ Fly

提交时间:2014-10-23 09:35

修复时间:2015-04-02 11:05

公开时间:2015-04-02 11:05

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

危害等级:中

自评Rank:10

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-10-23: 细节已通知厂商并且等待厂商处理中
2014-10-28: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-12-22: 细节向核心白帽子及相关领域专家公开
2015-01-01: 细节向普通白帽子公开
2015-01-11: 细节向实习白帽子公开
2015-04-02: 细节向公众公开

简要描述:

之前发了 discuz和phpwind(9)的后台爆破。
随后又测试了一些其他的cms,也不刷了 一下发出来了。
Phpcms espcms cmseasy phpyun qibocms 骑士人才系统 phpwind8.7
随后,顺手把cms各种后台爆破的防护总结了一下,以及绕过方法。

详细说明:

1.Phpcms
Phpcms 中有个phpsso_server
爆破一次之后,不管帐号密码是否正确,Session中的code值不会刷新。
登录页面不能再打开,如果打开之后,会打开验证码的页面,然后code值就变化了。
而且如果用户名不对 输出 用户名没有找到
密码不对 输出 密码错误
根据上面的原理 ,我们可以在输入一次正确的验证码之后,然后导入到intruder模块中进行爆破。
So
爆破方法:输入一次正确的验证码,然后抓包
爆破目标:帐号+密码(分次)

图片1.png


2.Espcms
先说下espcms的防护措施,有验证码和token。
验证码的值是根据cookies中ecisp_seccode来进行判断的,所以我们在输入一次正确的验证码之后,直接爆破就行。
在来说下token的问题,如果正常重复发包的话,会提示。 提交数据过期,请重新提交。
这可以这样绕过,直接把token这一向删除掉不让提交,然后就绕过了。原因是代码中大概是这样写的。
if($_POST['token']){
判断token是否正确
}
所以删除掉就绕过了。
So
爆破方法:输入一次正确的验证码,抓包,去除掉token这一项
爆破目标:帐号+密码

图片2.png


3.Cmseasy
这个后台登录是这样的 第一次登录,登录失败的话,然后会出来一个
Loginfalse*****的cookies,然后再次尝试登录的时候就出现了 验证码。
我们只需要第一次尝试登录的时候就进行抓包,然后爆破就行。
So
爆破方法: 第一次尝试登录抓包
爆破目标:帐号+密码

图片3.png


4.PHPYun
这个的问题就是登录一次之后,没有重新刷新下session中验证码的值,导致可以重复以一个验证码进行发包爆破。
So
爆破方法:输入一次正确的验证码,抓包
爆破目标:帐号+密码

图片4.png


5.qibocms
没有任何限制,直接爆破。
So
爆破方法:抓包
爆破目标:帐号+密码

图片5.png


6.74人才系统
这个默认是不开启验证码的,我们去后台开启验证码。
输入一次正确的验证码之后登录,密码错误之后,只要不再运行验证码这个文件,验证码值就不会被刷新。
So
爆破方法:输入一次正确验证码,抓包
爆破目标:帐号+密码

图片6.png


7.phpwind8.7
没有验证码的话,一个ip只能爆破15次,不过是用xff来获取的。我们可以修改xff的ip地址,来进行爆破。
下面我们来说有验证码的,验证码和cookies中的*_cknum这个值有关系。
所以只要我们输入一次正确的验证码,便可以一直爆破下去。
当然一个ip地址有15次机会。我们可以生成一些ip地址。然后再进行爆破
而帐号可以在这个地址http://localhost/phpwind8/u.php?uid=1获取
So
爆破方法:输入一次正确的验证码,抓包。爆破时注意修改xff的值。
爆破目标:密码
Ip地址这要注意取消这个,要不 . 会被urlencode。

图片7.png


图片8.png

漏洞证明:

下面来说下对后台爆破的防护,以及怎么绕过、
1.没有防护
这个直接修改帐号密码进行爆破就行。
2.有验证码
验证码的话,一般都是根据session中的值来进行判断的。
大部分代码如下。
If($_SESSION[‘seccode’]==’’){print ‘验证码为空’;exit();}
if($_SESSION['seccode']!=$seccode){
print '验证码错误';
exit;
}
但是如果是上面这样的代码的话 ,每次效验完之后也不刷新下,那样的话,我们重新发包进行验证即可。
如果他的代码是这样的
If($_SESSION[‘seccode’]==’’){print ‘验证码为空’;exit();}
if($_SESSION['seccode']!=$seccode){
$_SESSION[‘seccode’]=’’;
print '验证码错误';
exit;
}
这样的话,就不能重新发包了。但是可以验证码识别。
如果是cookies中的值的话,更简单,不多说了。
3.有ip爆破次数限制
ip如果是通过 X-Forwarded-For 和 client_ip获取的话,直接修改http头中的信息便可以了。
4.其他登录口
这个就类似于之前提交的phpwind9的后台爆破。默认的登录后台有验证码,另一个登录地址却没有。或者尝试一些其他的api,ajax接口等等。
5.根据用户名取次数
这种方法是根据用户名来判断错误次数,超过次数的话就限制一定时间不让这个用户登录。还真不知道咋爆破。。。
可是如果这样设置的话,知道管理员用户名是什么,然后设置好时间发包,这样的话管理员就无法登录后台了。

修复方案:

版权声明:转载请注明来源 JJ Fly@乌云


漏洞回应

厂商回应:

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

忽略时间:2015-04-02 11:05

厂商回复:

最新状态:

暂无