PHPYUN最新版任意密码暴力重置(需爆破6位数)

漏洞概要

缺陷编号:WooYun-2015-0127151

漏洞标题:PHPYUN最新版任意密码暴力重置(需爆破6位数)

相关厂商:php云人才系统

漏洞作者:menmen519

提交时间:2015-07-20 14:06

公开时间:2015-10-18 14:18

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

Tags标签:

漏洞详情

披露状态:

2015-07-20: 细节已通知厂商并且等待厂商处理中
2015-07-20: 厂商已经确认,细节仅向厂商公开
2015-07-23: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2015-09-13: 细节向核心白帽子及相关领域专家公开
2015-09-23: 细节向普通白帽子公开
2015-10-03: 细节向实习白帽子公开
2015-10-18: 细节向公众公开

简要描述:

PHPYUN最新版任意密码暴力重置
条件为:后台需开启邮件密码找回功能,默认不开启

详细说明:

这个逻辑其实是一个传统的逻辑,首先我们分析一下代码:条件一:如果允许用户找回密码操作,phpyun就必须后台配置email或者短信,为了分析方便我们注释掉这一块:可以确定官网demo是开启了这个配置,因为它允许用户找回密码wap/forgetpw.class.php:

从以上代码可以看出来,只要知道用户名即可,这个太方便了,我在系统里面注册了一个用户名为test的用户url:http://localhost/phpyun40/upload/index.php?c=forgetpw&m=wap&a=sendpostdata:username=test&sendtype=email这样就会在cert表里面存储一个东西,看看抓到的sql是什么:如果之前这个人找回过密码也就是数据库里面存在记录,那么就执行UPDATE phpyun_company_cert SET check2=486196,ctime=1437024758 WHERE 1 and id='1'如果没有记录就会进行insert操作INSERT INTO phpyun_company_cert SET type='5',status='0',uid='1',check2='674584',check='test@**.**.**.**',ctime='1437024891'这个check2 居然是个六位的纯数字,我们在看看check2是怎么产生的$sendcode=rand(100000,999999);我们继续在看这一段代码:

要想更改这个用户的密码,由以下几个条件第一个email 这个其实等于不是条件,因为这个email是内部传输的,这样一来就为我们减轻了一个参数,其实就是里面的check第二个,check2 这个就是我们刚才的六位纯数字url:http://localhost/phpyun40/upload/index.php?c=forgetpw&m=wap&a=editpwpostdata:username=test&password=111111&sendtype=email&code=674584看看后台抓取的sql:2015/7/16 13:38 UPDATE phpyun_member SET password='b14a85b5b44b9a523d20ec497fa82f0c',salt='01ad17' WHERE 1 and uid='1'跟我们分析的一模一样那么下来的问题就落在了 这个六位纯数字了我们brute跑跑看看:

看到这个这个长度了就是了破解成功六位纯数字的爆破解释 可以参考http://**.**.**.**/bugs/wooyun-2010-043314

漏洞证明:

修复方案:

漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2015-07-2014:16

厂商回复:

感谢提供!我们会尽快修复!

最新状态:

暂无

评价