目录
失效的图形验证码
手机验证码是否可被爆破
手机验证码批量重放(短信炸弹)
注册页面批量注册
注册页面覆盖注册
网站登录页面绕过
任意用户密码重置
在很多的注册、登录、密码修改等页面都需要用户输入图形验证码,目的是为了防止恶意攻击者进行爆破攻击。
但是,在很多网站,存在图形验证码功能失效的问题,也就是说当第一次输入正确的图形验证码提交后,我不刷新该页面,之后该验证码还有用。
那么,我们如何判断该页面的图形验证码功能是否失效呢?
我们先输入正确的图形验证码和信息后,点击提交。用burpsuite抓包,查看返回的数据。然后我们重放,查看服务器返回的数据。如果第二次重放,服务器返回的是验证码错误的话,那么说明就不存在绕过图形验证码的可能性了。如果返回的数据和第一次登陆成功时相同的数据,那么该验证码就存在绕过了。
修复措施:服务器后端应该对图形验证码设置仅用一次,无论输入正确还是错误,该验证码都失效并且返回新的图形验证码。
对于大多数网站的注册、登录页面,修改密码页面,往往会有用手机号验证码登录的情况。这时,我们就可以考虑是否可以爆破手机验证码?
网站注册、登录、修改密码页面的逻辑是这样子的。我们用手机号码进行操作,输入手机号,然后点击获取验证码,后端服务器将验证码发给我们的手机号,我们将手机收到的验证码填入,点击注册、登录或者修改密码,后端校验验证码是否正确,正确即可成功。那么,我们会想,这种情况下的验证码是否可被爆破呢?
对于手机验证码被爆破的前提是:该页面处没有图形验证码或者图形验证码失效!如下,该页面注册处没有图形验证码。
倘若后端没有对验证码输入错误次数进行限制的话,也就是说无论你验证码输错几次,后端都不会有任何动作,这种情况下理论是可以爆破的。 一般的手机验证码为6位,当然也有4位的。如果是6位的话,理论情况下就需要爆破100万次,如果是4位就是1万次了。还需要考虑一点的就是后端验证码的时效性,我们进行爆破这么多次,是需要一定时间的。如果该验证码的时效性是一分钟或者低于我们爆破时间的话,也是不能进行爆破的。
如下的截图,就是手机验证码可被爆破!
修复措施:注册登录页面设置图片验证码,并且图片验证码不可被绕过,后端对验证码的时效性和错误次数做限制,超过一定时间或者输入错误次数过多即该验证码失效。
对于网站发送短信验证码这个功能处,我们会想,是否可以利用这个功能进行短信验证码批量重放,来制造短信炸弹呢?
如下截图就是手机验证码发送的接口,我们可以批量重放该数据包,看后端返回的数据
如下,就是网站后台对同一手机号60秒钟内只能发送一条短信,这样就不存在手机验证码批量重放漏洞了!
有些时候,虽然后端会对其进行验证,但是还是可以想办法进行绕过:
对于手机验证码批量重放的前提是:后端对同一手机号在短时间内的发送短信条数无限制。
相关文章:短信轰炸之空格或\n绕过
对于如下这种网站注册页面,没有手机短信验证码,那么,我们可以考虑,是否可以批量注册呢?
对于批量注册的前提是:该页面处没有图形验证码或者图形验证码失效!如下,该页面注册处没有图形验证码。
如下注册页面虽然需要输入姓名和身份证号,但是并未对姓名和身份证号去做核对,输入任意的姓名和身份证号即可。
我们抓包,先用正确的信息注册,记住注册成功时服务器返回的数据
{"content":"/User","type":1,"data":null}
然后对手机号进行批量遍历,可以发现,可以批量注册成功,存在批量注册漏洞。
对于注册页面覆盖注册是指原来用一个手机号已经注册了账号,但是由于漏洞,导致可以再利用该手机号进行注册,并且会将之前注册的记录覆盖!
当我们用已经注册了的账号准备再注册时,发现会提示该手机号码已经存在!
我们抓包,发现后端检测该手机号已经注册了的话,会返回 true。如果检测该手机号没注册的话,会返回false。
我们修改服务器返回的数据包,改为false
可以看到,这个手机号现在可以注册了!
不同网站判断用户登录成功返回的数据都不一样!
如果网站判断登录成功,网站后端返回设置Cookie的数据这种是没办法绕过的!跳转页面通过Cookie对权限进行了检查,因为Cookie都是后端随机生成的,我们没办法伪造,所以也就绕过不了。
如果网站判断登录成功,网站后端返回的是JSON格式的数据,并且没有设置Cookie 的话,这种是有可能可以绕过的。
不可靠的前端校验
还是会有许多的网站他们没有严格进行身份校验,他们往往是通过依靠帐号密码登陆后发送后回传的JSON数据来判断用户身份是否正确,这就暴露出了很大的漏洞,这种漏洞利用起来就相当的容易,往往只需要一个安全界的神器 BURP 就可以完成身份验证的绕过,在登录的时候输入正确的账户以及随意的密码,将报文拦截下来,然后选择 burp 里面的拦截返回包的功能,捕捉返回的状态码。
如下,网站后端通过返回JSON格式的数据给前端,前端以此来判断用户是否登录成功!
我们查看前端判断登录处的JavaScript代码,发现如下。
于是我们可以伪造服务器返回的数据包进行绕过
最后成功以admin身份登录系统!
几乎所有需要登录的网站都有一个忘记密码然后重置密码的功能,如果网站在密码重置功能处的代码不够严谨,将可能造成任意密码重置的逻辑漏洞。
相关文章:基于Web页面验证码机制漏洞的检测
逻辑漏洞挖掘初步总结篇