首先了解一下验证码的认证流程
1.客户端request登录页面,然后后台生成验证码(后台使用算法生成图片,并将图片response给客户端,同时将算法生成的值全局赋值存到session中)
2.校验验证码(客户端将认证信息和验证码一起提交,后台将提交的验证码与session中的作比较)
3.客户端重新刷新页面,再次生成新的验证码(验证码算法中一般包含随机函数,每次刷新都会改变)
验证码一般用来登录暴力破解和防止机器恶意注册。
验证码绕过——on client
1.我们可以看到验证码绕过的关卡中在登陆时多了一个验证码的验证登录。我们首先先实验一下看看是否存在暴力破解。
我们可以看到在不输入验证码,输入争取验证码和输入错误验证码时的情况。可以看到验证码输入正确的时候,会提示用户名和密码错误。
2.我们首先查看一下网络源码,可以看到验证码的刷新和验证是通过前端的js实现的。在单机时调用验证码生成的函数。
3.我们打开Burp Suite软件,将刚刚验证码输入正确的请求提交到Repeater中去。然后我们将刚刚正确的验证码改为一串乱码。可以看到提示我们的还是用户名和密码不存在,这说明后端对验证码根本没有进行验证,只是前端的js对验证码进行了简单的验证,只能诓骗不懂技术的人员。
4.在确定验证码只是前端的一个幌子以后,我们的暴力破解步骤就跟之前一样的,我们先将POST请求发送到Intruder中,然后使用Cluster bomb选项暴力破解,选择合适的字典。(具体步骤与上一条博客相同就不多做解释了)我们将暴力破解的长度进行排序可以的到正确的账号和密码了。
验证码绕过——on server
在服务端验证码也会存在许多问题,如验证码不过期可以被无限次使用,验证码校验不合格,或者验证码生成太过简单有规律很容易被猜解。、
1.首先我们还是在pikachu上确定验证码的有效性。还是分别测试验证码为空,错误和正确的三种情况。可以看到验证码输入正确的时候,会提示我们用户名或密码错误。
2.在Burp Suite发送到Repeater中去看后台到底有没有对验证码进行验证。我们可以看到验证码为空和验证码输入错误的时候都会有相关的提示,说明后台还是对验证码做了验证的。
3.我们再来看一下验证码是否存在不过期的问题,我们现在网页上获取一个新的验证码,输入正确的验证么,在Burp Suite中提交到repeater中去。我们可以看到输入正确的用户名和密码时提示用户名或者密码不存在,当我们在repeaterl里面修改用户名或者密码的时候依然提示用户名或密码不存在,说明验证码存在不过期的问题。
4.我们可以利用验证码不过期的漏洞,一直使用一个验证码来破解用户名和密码。只需提交到Intruder中按照上述步骤暴力破解,过程不再详述,最后利用不过期的验证码得到正确的账号密码。