Vicworl 设计缺陷,重置任意用户密码

这个算得上是设计的缺陷吧,但是理由比较蛋疼

在文件fapassword.php里面看到取回密码的过程如下

取回密码仅仅是需要验证{$username}以及{$email}即可。这个恰恰是可以在info.php里面查询到。再来看它生产code的方式

然后就直接存入数据库了。

然后就是如果有效的,就发送出去
tmpBody = iconv( “utf-8”, “gb2312”, “请点击以下链接确认修改您的密码(24小时内有效)\nhttp://”.$host.”/checkpasscode.php?code={$code}&uid={$uid}” ); //code可以生产,uid可以查询到

而checkpasscode.php里面检测的是我们传过去的code还有uid

所以我们完全可以在本地构造一个取回密码的请求,同时在提交的时候,记录下当时提交的时间。

然后把生成出来的拿来对
http://”.$host.”/checkpasscode.php?code=”.$codede.”&uid=”.$uid;
里面的code进行填充,先来看看数据库里面的
code
一旦发现状态码为200并且返回的数据比较大,就可以重新爆破密码了。因为这里的密码是

所以,是可以直接爆破的

首先来收集信息以及获取提交的时间
info
然后等待获取执行的时间
time
获取到时间了,就直接利用脚本来生成我们需要的code

然后我们到/checkpasscode.php这里去提交

burp

burp2

一旦匹配到了,立马就发现了密码修改了
new

因为这里匹配到了,提示的是

直接跑到邮箱去了…所以,就算我们爆破到了这个code还是没有办法登录。但是因为这里的登录是没有验证码啥的。可以直接爆破,而密码又是随机8位。这里也是可以进行爆破的

把生成保存出来的继续拿来爆破,在登录验证的时候发现并没有验证码啥的

然后再次Burp就好了。

PS:这里的两个都是缺一不可啊。首先如果不是code的设计缺陷,就没有办法对其进行匹配。如果第二步的密码不是纯数字。也增加了难道。

原文链接:,转发请注明来源!

发表评论

要发表评论,您必须先登录